diff --git a/ChangeLog b/ChangeLog
index 743ea9e533a2e6b7c57bbc8df4bef21506c7997b..62c8ef7606d6d72561ca2c2b0fd2a288191b357e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
-2022-08-11  Uwe Schulzweida
+2022-08-12  Uwe Schulzweida
 
-	* added vlistDefVarChunkSize() and vlistInqVarChunkSize()
+	* added CDI_KEY_CHUNKTYPE and CDI_KEY_CHUNKSIZE
 
 2022-08-11  Uwe Schulzweida
 
diff --git a/src/cdf_write.c b/src/cdf_write.c
index 73fb5c045329437559cc2a3d2330baa216516c0c..195b498f19042d2898f0de25fad0900109098124 100644
--- a/src/cdf_write.c
+++ b/src/cdf_write.c
@@ -669,8 +669,10 @@ cdfDefineDimsAndChunks(const stream_t *streamptr, int varID, int xid, int yid, i
 
   const size_t chunkSizeMax = 65536;
   const size_t chunkSizeLim = 16777216;
-  int chunkSize = vlistInqVarChunkSize(vlistID, varID);
-  int chunkType = vlistInqVarChunkType(vlistID, varID);
+  int chunkSize = 0;
+  int chunkType = CDI_CHUNK_AUTO;
+  cdiInqKeyInt(vlistID, varID, CDI_KEY_CHUNKTYPE, &chunkType);
+  cdiInqKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE, &chunkSize);
   if (chunkSize > 0 && yid == CDI_UNDEFID) chunkType = CDI_CHUNK_AUTO;
 
   if (chunkType == CDI_CHUNK_GRID && gridsize > chunkSizeLim)
diff --git a/src/cdi.h b/src/cdi.h
index fa63524bab81101391d12015c93f80c3980b94f1..01089bd40fa4c725dd900ef8b23ed1f60b32a63b 100644
--- a/src/cdi.h
+++ b/src/cdi.h
@@ -158,7 +158,7 @@ extern "C" {
 #define  CDI_DATATYPE_LONG        256
 #define  CDI_DATATYPE_UINT        257
 
-// Chunks
+// Chunk types
 
 #define  CDI_CHUNK_AUTO             1  // use default chunk size
 #define  CDI_CHUNK_GRID             2
@@ -623,12 +623,6 @@ void    vlistDefVarDatatype(int vlistID, int varID, int datatype);
 //      vlistInqVarDatatype: Get the data type of a Variable
 int     vlistInqVarDatatype(int vlistID, int varID);
 
-void    vlistDefVarChunkType(int vlistID, int varID, int chunkType);
-int     vlistInqVarChunkType(int vlistID, int varID);
-
-void    vlistDefVarChunkSize(int vlistID, int varID, int chunkSize);
-int     vlistInqVarChunkSize(int vlistID, int varID);
-
 void    vlistDefVarXYZ(int vlistID, int varID, int xyz);
 int     vlistInqVarXYZ(int vlistID, int varID);
 
@@ -834,13 +828,15 @@ SizeType gridInqYCvals(int gridID, char *ycvals[]);
 #define  CDI_KEY_STDNAME                       944  // CF Standard name of the variable
 #define  CDI_KEY_UNITS                         945  // Units of the variable
 #define  CDI_KEY_DATATYPE                      946  // Data type
-#define  CDI_KEY_REFERENCEURI                  965  // Reference URI to grid file
+#define  CDI_KEY_REFERENCEURI                  947  // Reference URI to grid file
 
 // Integer keys
-#define  CDI_KEY_NUMBEROFGRIDUSED              963  // GRIB2 numberOfGridUsed
-#define  CDI_KEY_NUMBEROFGRIDINREFERENCE       964  // GRIB2 numberOfGridInReference
-#define  CDI_KEY_NUMBEROFVGRIDUSED             961  // GRIB2 numberOfVGridUsed
-#define  CDI_KEY_NLEV                          962  // GRIB2 nlev
+#define  CDI_KEY_NUMBEROFGRIDUSED              961  // GRIB2 numberOfGridUsed
+#define  CDI_KEY_NUMBEROFGRIDINREFERENCE       962  // GRIB2 numberOfGridInReference
+#define  CDI_KEY_NUMBEROFVGRIDUSED             963  // GRIB2 numberOfVGridUsed
+#define  CDI_KEY_NLEV                          964  // GRIB2 nlev
+#define  CDI_KEY_CHUNKTYPE                     965  // ChunkType: CDI_CHUNK_AUTO/CDI_CHUNK_GRID/CDI_CHUNK_LINES
+#define  CDI_KEY_CHUNKSIZE                     966  // ChunkSize
 
 // Floating point keys
 #define  CDI_KEY_MISSVAL                       701  // Missing value
diff --git a/src/cdi.inc b/src/cdi.inc
index bb34ac652eb70e4d38005b22ec9e535549ab8283..646cb1bc4343ce2f82b848cc7302d8d1c99e607a 100644
--- a/src/cdi.inc
+++ b/src/cdi.inc
@@ -248,7 +248,7 @@
       INTEGER    CDI_DATATYPE_UINT
       PARAMETER (CDI_DATATYPE_UINT      = 257)
 !
-!  Chunks
+!  Chunk types
 !
       INTEGER    CDI_CHUNK_AUTO
       PARAMETER (CDI_CHUNK_AUTO         =  1)
@@ -1130,17 +1130,6 @@
 !                                     INTEGER         varID)
       EXTERNAL        vlistInqVarDatatype
 
-!                     vlistDefVarChunkType
-!                                    (INTEGER         vlistID,
-!                                     INTEGER         varID,
-!                                     INTEGER         chunktype)
-      EXTERNAL        vlistDefVarChunkType
-
-      INTEGER         vlistInqVarChunkType
-!                                    (INTEGER         vlistID,
-!                                     INTEGER         varID)
-      EXTERNAL        vlistInqVarChunkType
-
 !                     vlistDefVarXYZ
 !                                    (INTEGER         vlistID,
 !                                     INTEGER         varID,
@@ -1640,18 +1629,22 @@
       INTEGER    CDI_KEY_DATATYPE
       PARAMETER (CDI_KEY_DATATYPE       = 946)
       INTEGER    CDI_KEY_REFERENCEURI
-      PARAMETER (CDI_KEY_REFERENCEURI   = 965)
+      PARAMETER (CDI_KEY_REFERENCEURI   = 947)
 !
 !  Integer keys
 !
       INTEGER    CDI_KEY_NUMBEROFGRIDUSED
-      PARAMETER (CDI_KEY_NUMBEROFGRIDUSED = 963)
+      PARAMETER (CDI_KEY_NUMBEROFGRIDUSED = 961)
       INTEGER    CDI_KEY_NUMBEROFGRIDINREFERENCE
-      PARAMETER (CDI_KEY_NUMBEROFGRIDINREFERENCE = 964)
+      PARAMETER (CDI_KEY_NUMBEROFGRIDINREFERENCE = 962)
       INTEGER    CDI_KEY_NUMBEROFVGRIDUSED
-      PARAMETER (CDI_KEY_NUMBEROFVGRIDUSED = 961)
+      PARAMETER (CDI_KEY_NUMBEROFVGRIDUSED = 963)
       INTEGER    CDI_KEY_NLEV
-      PARAMETER (CDI_KEY_NLEV           = 962)
+      PARAMETER (CDI_KEY_NLEV           = 964)
+      INTEGER    CDI_KEY_CHUNKTYPE
+      PARAMETER (CDI_KEY_CHUNKTYPE      = 965)
+      INTEGER    CDI_KEY_CHUNKSIZE
+      PARAMETER (CDI_KEY_CHUNKSIZE      = 966)
 !
 !  Floating point keys
 !
diff --git a/src/cdiFortran.c b/src/cdiFortran.c
index 72a44053261e57fb965d76335a07a4090e42d69c..0fef6d6777d51e9f71f771cc996e97224d36d7a1 100644
--- a/src/cdiFortran.c
+++ b/src/cdiFortran.c
@@ -69,7 +69,7 @@ int SizeType_c2f(SizeType value_SizeType)
 /*  internal data types  */
 
 
-/*  Chunks  */
+/*  Chunk types  */
 
 
 /*  GRID types  */
@@ -373,8 +373,6 @@ FCALLSCSUB3 (vlistDefVarCode, VLISTDEFVARCODE, vlistdefvarcode, INT, INT, INT)
 FCALLSCFUN2 (INT, vlistInqVarCode, VLISTINQVARCODE, vlistinqvarcode, INT, INT)
 FCALLSCSUB3 (vlistDefVarDatatype, VLISTDEFVARDATATYPE, vlistdefvardatatype, INT, INT, INT)
 FCALLSCFUN2 (INT, vlistInqVarDatatype, VLISTINQVARDATATYPE, vlistinqvardatatype, INT, INT)
-FCALLSCSUB3 (vlistDefVarChunkType, VLISTDEFVARCHUNKTYPE, vlistdefvarchunktype, INT, INT, INT)
-FCALLSCFUN2 (INT, vlistInqVarChunkType, VLISTINQVARCHUNKTYPE, vlistinqvarchunktype, INT, INT)
 FCALLSCSUB3 (vlistDefVarXYZ, VLISTDEFVARXYZ, vlistdefvarxyz, INT, INT, INT)
 FCALLSCFUN2 (INT, vlistInqVarXYZ, VLISTINQVARXYZ, vlistinqvarxyz, INT, INT)
 FCALLSCSUB3 (vlistDefVarNSB, VLISTDEFVARNSB, vlistdefvarnsb, INT, INT, INT)
diff --git a/src/cdi_int.c b/src/cdi_int.c
index c0f30a0bf57c395718e1484e6379350da3c72875..c1d5dd42739b92805d3d4c18ff097841e9d163d0 100644
--- a/src/cdi_int.c
+++ b/src/cdi_int.c
@@ -23,7 +23,6 @@ int CDI_Default_ModelID = CDI_UNDEFID;
 int CDI_Default_TableID = CDI_UNDEFID;
 // int cdiNcMissingValue  = CDI_UNDEFID;
 int CDI_Netcdf_Chunksizehint = CDI_UNDEFID;
-int CDI_ChunkType = CDI_CHUNK_GRID;
 int CDI_Split_Ltype105 = CDI_UNDEFID;
 
 bool CDI_Ignore_Att_Coordinates = false;
@@ -296,27 +295,6 @@ cdiDefTableID(int tableID)
   CDI_Default_InstID = modelInqInstitut(modelID);
 }
 
-static void
-cdiSetChunk(const char *chunkAlgo)
-{
-  int algo = -1;
-
-  if (strIsEqual("auto", chunkAlgo))
-    algo = CDI_CHUNK_AUTO;
-  else if (strIsEqual("grid", chunkAlgo))
-    algo = CDI_CHUNK_GRID;
-  else if (strIsEqual("lines", chunkAlgo))
-    algo = CDI_CHUNK_LINES;
-  else
-    Warning("Invalid environment variable CDI_CHUNK_ALGO: %s", chunkAlgo);
-
-  if (algo != -1)
-    {
-      CDI_ChunkType = algo;
-      if (CDI_Debug) Message("set ChunkAlgo to %s", chunkAlgo);
-    }
-}
-
 void
 cdiSetEccodesGrib1(bool value)
 {
@@ -400,9 +378,6 @@ cdiInitialize(void)
       envstr = getenv("NC_CHUNKSIZEHINT");
       if (envstr) CDI_Netcdf_Chunksizehint = atoi(envstr);
 
-      envstr = getenv("CDI_CHUNK_ALGO");
-      if (envstr) cdiSetChunk(envstr);
-
       envstr = getenv("SPLIT_LTYPE_105");
       if (envstr) CDI_Split_Ltype105 = atoi(envstr);
 
diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c
index 52888dbe2b91fa0abf35653bc4cd00e56ac832c0..fb076ffc9853b14e630b571aea5385befcb32701 100644
--- a/src/stream_cdf_i.c
+++ b/src/stream_cdf_i.c
@@ -3421,7 +3421,7 @@ cdf_define_all_vars(stream_t *streamptr, int vlistID, int instID, int modelID, i
 #ifdef HAVE_NETCDF4
       if (ncvar->ldeflate) vlistDefVarCompType(vlistID, varID, CDI_COMPRESS_ZIP);
       if (ncvar->lszip) vlistDefVarCompType(vlistID, varID, CDI_COMPRESS_SZIP);
-      if (ncvar->chunked && ncvar->chunkType != CDI_UNDEFID) vlistDefVarChunkType(vlistID, varID, ncvar->chunkType);
+      if (ncvar->chunked && ncvar->chunkType != CDI_UNDEFID) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKTYPE, ncvar->chunkType);
 #endif
 
       streamptr->vars[varID1].defmiss = false;
diff --git a/src/vlist.h b/src/vlist.h
index bfcf814027038d17eaa6968298d3f30d7b7bc96d..109fa1e0e07297d2652ebb62bcc167edffce7f27 100644
--- a/src/vlist.h
+++ b/src/vlist.h
@@ -58,8 +58,6 @@ typedef struct
   int modelID;
   int tableID;
   int timave;
-  int chunkType;
-  int chunkSize;
   int nsb; // Number of significant bits
   int xyz;
   bool missvalused;  // true if missval is defined
diff --git a/src/vlist_var.c b/src/vlist_var.c
index 1092061cd40c98b7e4c2a53b0a035bbbdd57987d..a1797d735342ef7189f8b1f2ea1e02f8561cf743 100644
--- a/src/vlist_var.c
+++ b/src/vlist_var.c
@@ -21,8 +21,6 @@ vlistvarInitEntry(int vlistID, int varID)
   vlistptr->vars[varID].datatype = CDI_UNDEFID;
   vlistptr->vars[varID].timetype = CDI_UNDEFID;
   vlistptr->vars[varID].tsteptype = TSTEP_INSTANT;
-  vlistptr->vars[varID].chunkType = CDI_ChunkType;
-  vlistptr->vars[varID].chunkSize = CDI_UNDEFID;
   vlistptr->vars[varID].nsb = 0;
   vlistptr->vars[varID].xyz = 321;
   vlistptr->vars[varID].gridID = CDI_UNDEFID;
@@ -1434,50 +1432,6 @@ vlistInqVarCompLevel(int vlistID, int varID)
   return vlistptr->vars[varID].complevel;
 }
 
-void
-vlistDefVarChunkType(int vlistID, int varID, int chunkType)
-{
-  vlistCheckVarID(__func__, vlistID, varID);
-
-  vlist_t *vlistptr = vlist_to_pointer(vlistID);
-  if (vlistptr->vars[varID].chunkType != chunkType)
-    {
-      vlistptr->vars[varID].chunkType = chunkType;
-      reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE);
-    }
-}
-
-int
-vlistInqVarChunkType(int vlistID, int varID)
-{
-  vlistCheckVarID(__func__, vlistID, varID);
-
-  vlist_t *vlistptr = vlist_to_pointer(vlistID);
-  return vlistptr->vars[varID].chunkType;
-}
-
-void
-vlistDefVarChunkSize(int vlistID, int varID, int chunkSize)
-{
-  vlistCheckVarID(__func__, vlistID, varID);
-
-  vlist_t *vlistptr = vlist_to_pointer(vlistID);
-  if (vlistptr->vars[varID].chunkSize != chunkSize)
-    {
-      vlistptr->vars[varID].chunkSize = chunkSize;
-      reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE);
-    }
-}
-
-int
-vlistInqVarChunkSize(int vlistID, int varID)
-{
-  vlistCheckVarID(__func__, vlistID, varID);
-
-  vlist_t *vlistptr = vlist_to_pointer(vlistID);
-  return vlistptr->vars[varID].chunkSize;
-}
-
 void
 vlistDefVarNSB(int vlistID, int varID, int nsb)
 {
@@ -1606,7 +1560,7 @@ vlistVarCompare(vlist_t *a, int varIDA, vlist_t *b, int varIDB)
 #define FCMPSTR(fs) ((pva->fs) != (pvb->fs) && strcmp((pva->fs), (pvb->fs)))
 #define FCMP2(f) (namespaceResHDecode(pva->f).idx != namespaceResHDecode(pvb->f).idx)
   int diff = FCMP(fvarID) | FCMP(mvarID) | FCMP(flag) | FCMP(param) | FCMP(datatype) | FCMP(timetype) | FCMP(tsteptype)
-             | FCMP(chunkType) | FCMP(chunkSize) | FCMP(xyz) | FCMP2(gridID) | FCMP2(zaxisID) | FCMP2(instID) | FCMP2(modelID) | FCMP2(tableID)
+             | FCMP(xyz) | FCMP2(gridID) | FCMP2(zaxisID) | FCMP2(instID) | FCMP2(modelID) | FCMP2(tableID)
              | FCMP(missvalused) | FCMPFLT(missval) | FCMPFLT(addoffset) | FCMPFLT(scalefactor) | FCMPSTR(extra) | FCMP(comptype)
              | FCMP(complevel) | FCMP(lvalidrange) | FCMPFLT(validrange[0]) | FCMPFLT(validrange[1]);
 #undef FCMP