diff --git a/src/stream_cdf_o.c b/src/stream_cdf_o.c
index f020bbead6151f434f355964f63eab151ea3b073..18c7cdb3820d9819d475238171d749aac60ac98c 100644
--- a/src/stream_cdf_o.c
+++ b/src/stream_cdf_o.c
@@ -418,6 +418,18 @@ checkZaxisName(char *axisname, int fileID, int vlistID, int zaxisID, int nzaxis)
   return (int) iz;
 }
 
+static void
+cdfGridCompress(int fileID, int ncvarid, size_t gridsize, int filetype, int comptype, size_t *chunks)
+{
+#ifdef HAVE_NETCDF4
+  if (gridsize >= 32 && comptype == CDI_COMPRESS_ZIP && (filetype == CDI_FILETYPE_NC4 || filetype == CDI_FILETYPE_NC4C || filetype == CDI_FILETYPE_NCZARR))
+    {
+      cdf_def_var_chunking(fileID, ncvarid, NC_CHUNKED, chunks);
+      cdfDefVarDeflate(fileID, ncvarid, 1);
+    }
+#endif
+}
+
 static void
 cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool addVarToGrid,
                  const struct cdfDefGridAxisInqs *gridAxisInq, int axisKey, char axisLetter,
@@ -490,6 +502,17 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
         {
           cdf_def_var(fileID, axisname, xtype, ndims, &dimID, &ncvarid);
 
+          int chunkSize = 0;
+          int chunkType = CDI_CHUNK_GRID;
+          cdiInqKeyInt(gridID, CDI_GLOBAL, CDI_KEY_CHUNKTYPE, &chunkType);
+          cdiInqKeyInt(gridID, CDI_GLOBAL, CDI_KEY_CHUNKSIZE, &chunkSize);
+          if (chunkSize > 0) chunkType = CDI_CHUNK_AUTO;
+
+          if (chunkType == CDI_CHUNK_GRID && dimlen > ChunkSizeLim) chunkType = CDI_CHUNK_LINES;
+
+          size_t chunk = calc_chunksize_x(chunkType, chunkSize, dimlen, true);
+          cdfGridCompress(fileID, ncvarid, dimlen, streamptr->filetype, streamptr->comptype, &chunk);
+
           cdfPutGridStdAtts(fileID, ncvarid, gridID, axisLetter);
           {
             char axisStr[2] = { axisLetter, '\0' };
@@ -569,18 +592,6 @@ cdfDefYaxis(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool addV
   cdfDefAxisCommon(streamptr, gridID, gridIndex, ndims, addVarToGrid, &gridInqsY, CDI_YAXIS, 'Y', finishCyclicYBounds);
 }
 
-static void
-cdfGridCompress(int fileID, int ncvarid, size_t gridsize, int filetype, int comptype, size_t *chunks)
-{
-#ifdef HAVE_NETCDF4
-  if (gridsize > 1 && comptype == CDI_COMPRESS_ZIP && (filetype == CDI_FILETYPE_NC4 || filetype == CDI_FILETYPE_NC4C))
-    {
-      cdf_def_var_chunking(fileID, ncvarid, NC_CHUNKED, chunks);
-      cdfDefVarDeflate(fileID, ncvarid, 1);
-    }
-#endif
-}
-
 static void
 cdfDefGridReference(stream_t *streamptr, int gridID)
 {
@@ -688,7 +699,7 @@ cdfDefIrregularGridCommon(stream_t *streamptr, int gridID, size_t xsize, size_t
       dimIDs[0] = ydimID;
       dimIDs[1] = xdimID;
     }
-  else /* ndims == 2 */
+  else // ndims == 2
     {
       chunks[0] = calc_chunksize_x(chunkType, chunkSize, xsize, (ydimID == CDI_UNDEFID));
       dimIDs[0] = xdimID;