diff --git a/app/printinfo.c b/app/printinfo.c
index 1fe76d4bdbad4c840f482ea03b5f1fa789a31ef7..91e17493b380445528c245347e9f834d96904735 100644
--- a/app/printinfo.c
+++ b/app/printinfo.c
@@ -116,7 +116,7 @@ printFiletype(int streamID, int vlistID)
 static void
 print_xvals(int gridID, int dig)
 {
-  size_t xsize = gridInqXsize(gridID);
+  SizeType xsize = gridInqXsize(gridID);
   if (xsize > 0 && gridInqXvals(gridID, NULL))
     {
       char xname[CDI_MAX_NAME], xunits[CDI_MAX_NAME];
@@ -141,7 +141,7 @@ print_xvals(int gridID, int dig)
 static void
 print_yvals(int gridID, int dig)
 {
-  size_t ysize = gridInqYsize(gridID);
+  SizeType ysize = gridInqYsize(gridID);
   if (ysize > 0 && gridInqYvals(gridID, NULL))
     {
       char yname[CDI_MAX_NAME], yunits[CDI_MAX_NAME];
diff --git a/examples/cdi_write_const.c b/examples/cdi_write_const.c
index d5d42156faac22c2d4ec165049c2d794042b1092..58328bdbc0337c02f87222d569fad974ef0cde03 100644
--- a/examples/cdi_write_const.c
+++ b/examples/cdi_write_const.c
@@ -10,7 +10,7 @@ main(void)
 {
   int gridID, zaxisID1, zaxisID2;
   int vlistID, varID1, varID2, streamID;
-  size_t i, numMissVals = 0;
+  SizeType numMissVals = 0;
   double lons[nlon] = { 0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330 };
   double lats[nlat] = { -75, -45, -15, 15, 45, 75 };
   double levs[nlev] = { 101300, 92500, 85000, 50000, 20000 };
@@ -67,8 +67,8 @@ main(void)
   streamDefTimestep(streamID, 0);
 
   // Init var1 and var2
-  for (i = 0; i < nlon * nlat; i++) var1[i] = 1.1;
-  for (i = 0; i < nlon * nlat * nlev; i++) var2[i] = 2.2;
+  for (size_t i = 0; i < nlon * nlat; i++) var1[i] = 1.1;
+  for (size_t i = 0; i < nlon * nlat * nlev; i++) var2[i] = 2.2;
 
   // Write var1 and var2
   streamWriteVar(streamID, varID1, var1, numMissVals);
diff --git a/examples/cdi_write_local.c b/examples/cdi_write_local.c
index 475ec0294b67e04a8cce1cc2a3386a732ebf20dc..d1442820ada38bc6a1f4b7a215ad96640467fb93 100644
--- a/examples/cdi_write_local.c
+++ b/examples/cdi_write_local.c
@@ -11,7 +11,7 @@ main(void)
 {
   int gridID, zaxisID1, zaxisID2, taxisID;
   int vlistID, varID1, varID2, streamID;
-  size_t numMissVals = 0;
+  SizeType numMissVals = 0;
   double lons[nlon] = { 0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330 };
   double lats[nlat] = { -75, -45, -15, 15, 45, 75 };
   double levs[nlev] = { 101300, 92500, 85000, 50000, 20000 };
diff --git a/src/cdf_read.c b/src/cdf_read.c
index 85b3f2f285654d6ff5ad91af255d32d9df0b3119..bb58c078a7e2e12174e263893c7aa50b32915172 100644
--- a/src/cdf_read.c
+++ b/src/cdf_read.c
@@ -456,7 +456,7 @@ cdfGetSliceSlapDescription(stream_t *streamptr, int tsID, int varID, int levelID
 
   int gridId = vlistInqVarGrid(vlistID, varID);
   int timetype = vlistInqVarTimetype(vlistID, varID);
-  size_t gridsize = gridInqSize(gridId);
+  SizeType gridsize = gridInqSize(gridId);
 
   streamptr->numvals += gridsize;
 
@@ -973,11 +973,11 @@ cdfReadVarSliceDPPart(stream_t *streamptr, int varID, int levelID, int varType,
   cdfGetSliceSlapDescription(streamptr, streamptr->curTsID, varID, levelID, &swapxy, start, count);
 
   int gridId = vlistInqVarGrid(vlistID, varID);
-  size_t gridsize = gridInqSize(gridId);
+  SizeType gridsize = gridInqSize(gridId);
 
   unsigned int position = 0;
   for (int i = 0; i < MAX_DIMENSIONS; ++i)
-    if (count[i] == gridsize) position = i;
+    if (count[i] == (size_t)gridsize) position = i;
 
   start[position] = start[position] + startpoint;
   count[position] = length;
@@ -1004,11 +1004,11 @@ cdfReadVarSliceSPPart(stream_t *streamptr, int varID, int levelID, int varType,
   cdfGetSliceSlapDescription(streamptr, streamptr->curTsID, varID, levelID, &swapxy, start, count);
 
   int gridId = vlistInqVarGrid(vlistID, varID);
-  size_t gridsize = gridInqSize(gridId);
+  SizeType gridsize = gridInqSize(gridId);
 
   unsigned int position = 0;
   for (int i = 0; i < MAX_DIMENSIONS; ++i)
-    if (count[i] == gridsize) position = i;
+    if (count[i] == (size_t)gridsize) position = i;
 
   start[position] = start[position] + startpoint;
   count[position] = length;
diff --git a/src/cdipio.h b/src/cdipio.h
index c1401954b50d34532c64686933ef115b9aceb2d6..362f1399f892423697743ee4e83e0066c0dbd449 100644
--- a/src/cdipio.h
+++ b/src/cdipio.h
@@ -12,6 +12,7 @@
 
 //FINT_ON  <--- don't change or remove this line!!!
 // Start of fortran interface for the following routines (make_fint.c)
+#include <stdbool.h>
 
 #include <mpi.h>
 
@@ -38,6 +39,8 @@
 /* parallel IO routines */
 #include <yaxt.h>
 
+#include "cdi.h"
+
 void pioEndDef(void);
 void pioEndTimestepping(void);
 void pioFinalize(void);
@@ -47,7 +50,8 @@ void pioFinalize(void);
 void cdiPioNoPostCommSetup(void);
 /* pioInit: initialize I/O server processes and communication
  * Deprecated, use cdiPioInit instead! */
-MPI_Comm pioInit(MPI_Comm commSuper, int nProcsIO, int IOMode, int *pioNamespace, float partInflate,
+MPI_Comm pioInit(MPI_Comm commSuper, int nProcsIO, int IOMode,
+                 int *pioNamespace, float partInflate,
                  void (*postCommSetupActions)(void));
 /*      cdiPioInit: initialize I/O server processes and communication */
 MPI_Comm cdiPioInit(MPI_Comm commSuper, int confResH, int *pioNamespace);
@@ -67,7 +71,9 @@ void cdiPioRDMAProgress(void);
  * conversion[varID] == CDI_DATATYPE_FLT64 or with streamWriteVarF
  * (i.e. as float) with conversion[varID] == CDI_DATATYPE_FLT32
  */
-void cdiPioStreamDefDecomposedVlist(int streamID, int vlistID, const Xt_idxlist partDesc[], const int conversion[]);
+void cdiPioStreamDefDecomposedVlist(int streamID, int vlistID,
+                                    const Xt_idxlist partDesc[],
+                                    const int conversion[]);
 
 /* streamWriteVarPart: Write part of the data making up variable varID
  * of stream streamID.
@@ -80,14 +86,16 @@ void cdiPioStreamDefDecomposedVlist(int streamID, int vlistID, const Xt_idxlist
  * the corresponding array passed to streamWriteVar in the serial version.
  * The group of processes collectively calling streamWriteVarPart
  * must provide data for all indices or the behaviour is undefined. */
-void streamWriteVarPart(int streamID, int varID, const double *data, int numMissVals, Xt_idxlist partDesc);
+void streamWriteVarPart(int streamID, int varID, const double *data,
+                        SizeType numMissVals, Xt_idxlist partDesc);
 
 /* streamWriteVarPartF: Write part of the data making up variable
  * varID of stream streamID.
  *
  * Single-precision version of streamWriteVarPart.
  */
-void streamWriteVarPartF(int streamID, int varID, const float *data, int numMissVals, Xt_idxlist partDesc);
+void streamWriteVarPartF(int streamID, int varID, const float *data,
+                         SizeType numMissVals, Xt_idxlist partDesc);
 
 /* streamWriteScatteredVarPart: Write part of the data making up
  * variable varID of stream streamID.
@@ -96,16 +104,20 @@ void streamWriteVarPartF(int streamID, int varID, const float *data, int numMiss
  * contiguous sequence but instead the numBlocks chunks of length
  * blocklengths[i] and starting displacements[i] each for i in [0,numBlocks)
  */
-void streamWriteScatteredVarPart(int streamID, int varID, const double *data, int numBlocks, const int blocklengths[],
-                                 const int displacements[], int numMissVals, Xt_idxlist partDesc);
+void streamWriteScatteredVarPart(int streamID, int varID, const double *data,
+                                 int numBlocks, const int blocklengths[],
+                                 const int displacements[],
+                                 SizeType numMissVals, Xt_idxlist partDesc);
 
 /* streamWriteScatteredVarPartF: Write part of the data making up
  * variable varID of stream streamID.
  *
  * Single-precision version of streamWriteScatteredVarPart.
  */
-void streamWriteScatteredVarPartF(int streamID, int varID, const float *data, int numBlocks, const int blocklengths[],
-                                  const int displacements[], int numMissVals, Xt_idxlist partDesc);
+void streamWriteScatteredVarPartF(int streamID, int varID, const float *data,
+                                  int numBlocks, const int blocklengths[],
+                                  const int displacements[],
+                                  SizeType numMissVals, Xt_idxlist partDesc);
 /* cdiPioCSRLastN: return role codes appropriate to use the last
    \textit{nProcsIO} tasks as I/O servers */
 int cdiPioCSRLastN(MPI_Comm commSuper, int IOMode, int nProcsIO);
@@ -156,7 +168,8 @@ int cdiPioConfGetCSRole(int confResH);
  * setup of client/server communications of configuration object.
  * Deprecated: use cdiPioConfSetCallBackActions with
  * trigger == CDIPIO_CALLBACK_POSTCOMMSETUP in new programs! */
-void cdiPioConfSetPostCommSetupActions(int confResH, void (*postCommSetupActions)(void));
+void cdiPioConfSetPostCommSetupActions(int confResH,
+                                       void (*postCommSetupActions)(void));
 
 /* cdiPioConfGetPostCommSetupActions: get function to be called after
  * setup of client/server communications from configuration object.
@@ -183,7 +196,8 @@ void (*cdiPioConfGetPostCommSetupActions(int confResH))(void);
 /* cdiPioConfSetCallBack: set function to be called at
  * indicated trigger of configuration object, action will be cast to
  * the appropriate type as indicated for the respective trigger */
-void cdiPioConfSetCallBackActions(int confResH, int trigger, void (*action)(void));
+void cdiPioConfSetCallBackActions(int confResH, int trigger,
+                                  void (*action)(void));
 
 /* cdiPioConfGetCallBack: query function to be called at
  * indicated trigger of configuration object */
@@ -304,8 +318,10 @@ int cdiPioConfGetBatchedRMA(int confResH);
  * specify the part size of the y-dimension and chunk_decomposition[0][0] the x dimension start
  * index. For unstructured grids only the x-dimension applies.
  */
-int cdiPioDistGridCreate(int gridtype, int size, int xsize, int ysize, int nvertex, const int xy_decomposition_optional[][2],
-                         Xt_idxlist partDesc2D, Xt_idxlist partDescX, Xt_idxlist partDescY);
+int cdiPioDistGridCreate(int gridtype, int size, int xsize, int ysize,
+                         int nvertex, const int xy_decomposition_optional[][2],
+                         Xt_idxlist partDesc2D, Xt_idxlist partDescX,
+                         Xt_idxlist partDescY);
 
 /* cdiPioDistGridEnableIndividualQueries: for the provided gridID, the
  * queries
diff --git a/src/grb_write.c b/src/grb_write.c
index f61138b49e7b787caeb694ad94e3cbe5b1b78770..e7cee6d2a0d33f599f557e43f5e60c75442beccb 100644
--- a/src/grb_write.c
+++ b/src/grb_write.c
@@ -25,7 +25,7 @@
 
 static size_t
 grb_encode(int filetype, int memType, int datatype, int varID, int levelID, int vlistID, int gridID, int zaxisID,
-           CdiDateTime vDateTime, int tsteptype, int numavg, size_t datasize, const void *data, size_t numMissVals,
+           CdiDateTime vDateTime, int tsteptype, int numavg, SizeType datasize, const void *data, SizeType numMissVals,
            void **gribbuffer, int comptype, void *gribContainers)
 {
   size_t nbytes = 0;
@@ -33,7 +33,7 @@ grb_encode(int filetype, int memType, int datatype, int varID, int levelID, int
 #ifdef HAVE_LIBCGRIBEX
   if (filetype == CDI_FILETYPE_GRB && !CDI_gribapi_grib1)
     {
-      size_t gribbuffersize = datasize * 4 + 3000;
+      size_t gribbuffersize = (size_t)datasize * 4 + 3000;
       *gribbuffer = Malloc(gribbuffersize);
 
       nbytes = cgribexEncode(memType, varID, levelID, vlistID, gridID, zaxisID, vDateTime, tsteptype, numavg, datasize, data,
@@ -60,13 +60,13 @@ grb_encode(int filetype, int memType, int datatype, int varID, int levelID, int
         {
           // printf("gribapi write: convert float to double\n");
           const float *dataf = (const float *) data;
-          double *datad = (double *) Malloc(datasize * sizeof(double));
-          for (size_t i = 0; i < datasize; ++i) datad[i] = (double) dataf[i];
+          double *datad = Malloc((size_t)datasize * sizeof(double));
+          for (size_t i = 0; i < (size_t)datasize; ++i) datad[i] = (double) dataf[i];
           datap = (const void *) datad;
         }
 
       size_t gribbuffersize;
-      nbytes = gribapiEncode(memTypeX, varID, levelID, vlistID, gridID, zaxisID, vDateTime, tsteptype, numavg, (long) datasize,
+      nbytes = gribapiEncode(memTypeX, varID, levelID, vlistID, gridID, zaxisID, vDateTime, tsteptype, numavg, (size_t) datasize,
                              datap, numMissVals, gribbuffer, &gribbuffersize, comptype, gribContainer);
 
       if (!useFloatInterface && memType == MEMTYPE_FLOAT) Free((void *) datap);
@@ -393,7 +393,7 @@ grb_write_var_slice(stream_t *streamptr, int varID, int levelID, int memtype, co
 
   if (CDI_Debug) Message("gridID = %d zaxisID = %d", gridID, zaxisID);
 
-  size_t datasize = gridInqSize(gridID);
+  SizeType datasize = gridInqSize(gridID);
 
   if (comptype != CDI_COMPRESS_JPEG && comptype != CDI_COMPRESS_SZIP && comptype != CDI_COMPRESS_AEC) comptype = CDI_COMPRESS_NONE;
 
diff --git a/src/grid.c b/src/grid.c
index 9d1eb1bff05ed25efad77ffc2598d409f48ea274..1a9f03eec6cfb5ce6351e0cc6315f0e98aed2a40 100644
--- a/src/grid.c
+++ b/src/grid.c
@@ -1056,14 +1056,17 @@ gridDefXsize(int gridID, SizeType xsize)
 {
   grid_t *gridptr = grid_to_pointer(gridID);
 
-  size_t gridSize = gridInqSize(gridID);
-  if ((size_t) xsize > gridSize) Error("xsize %zu is greater then gridsize %zu", (size_t) xsize, gridSize);
+  SizeType gridSize = gridInqSize(gridID);
+  if (xsize > gridSize) Error("xsize %lld is greater then gridsize %lld",
+                              (long long) xsize, (long long)gridSize);
 
   int gridType = gridInqType(gridID);
-  if (gridType == GRID_UNSTRUCTURED && (size_t) xsize != gridSize)
-    Error("xsize %zu must be equal to gridsize %zu for gridtype: %s", (size_t) xsize, gridSize, gridNamePtr(gridType));
-  if (gridType == GRID_GAUSSIAN_REDUCED && xsize != 2 && (size_t) xsize != gridSize)
-    Error("xsize %zu must be equal to gridsize %zu for gridtype: %s", (size_t) xsize, gridSize, gridNamePtr(gridType));
+  if (gridType == GRID_UNSTRUCTURED && xsize != gridSize)
+    Error("xsize %lld must be equal to gridsize %lld for gridtype: %s",
+          (long long)xsize, (long long)gridSize, gridNamePtr(gridType));
+  if (gridType == GRID_GAUSSIAN_REDUCED && xsize != 2 && xsize != gridSize)
+    Error("xsize %lld must be equal to gridsize %lld for gridtype: %s",
+          (long long)xsize, (long long)gridSize, gridNamePtr(gridType));
 
   if (gridptr->x.size != (size_t) xsize)
     {
@@ -1074,8 +1077,8 @@ gridDefXsize(int gridID, SizeType xsize)
   if (gridType != GRID_UNSTRUCTURED && gridType != GRID_GAUSSIAN_REDUCED && gridType != GRID_PROJECTION)
     {
       size_t axisproduct = gridptr->x.size * gridptr->y.size;
-      if (axisproduct > 0 && axisproduct != gridSize)
-        Error("Inconsistent grid declaration! (xsize=%zu ysize=%zu gridsize=%zu)", gridptr->x.size, gridptr->y.size, gridSize);
+      if (axisproduct > 0 && axisproduct != (size_t)gridSize)
+        Error("Inconsistent grid declaration! (xsize=%zu ysize=%zu gridsize=%zu)", gridptr->x.size, gridptr->y.size, (size_t)gridSize);
     }
 }
 
@@ -1135,13 +1138,15 @@ gridDefYsize(int gridID, SizeType ysize)
 {
   grid_t *gridptr = grid_to_pointer(gridID);
 
-  size_t gridSize = gridInqSize(gridID);
+  SizeType gridSize = gridInqSize(gridID);
 
-  if ((size_t) ysize > gridSize) Error("ysize %zu is greater then gridsize %zu", (size_t) ysize, gridSize);
+  if (ysize > gridSize) Error("ysize %lld is greater then gridsize %lld",
+                              (long long) ysize, (long long)gridSize);
 
   int gridType = gridInqType(gridID);
-  if (gridType == GRID_UNSTRUCTURED && (size_t) ysize != gridSize)
-    Error("ysize %zu must be equal gridsize %zu for gridtype: %s", gridNamePtr(gridType), (size_t) ysize, gridSize);
+  if (gridType == GRID_UNSTRUCTURED && ysize != gridSize)
+    Error("ysize %lld must be equal gridsize %lld for gridtype: %s",
+          (long long)ysize, (long long)gridSize, gridNamePtr(gridType));
 
   if (gridptr->y.size != (size_t) ysize)
     {
@@ -1152,8 +1157,9 @@ gridDefYsize(int gridID, SizeType ysize)
   if (gridType != GRID_UNSTRUCTURED && gridType != GRID_GAUSSIAN_REDUCED && gridType != GRID_PROJECTION)
     {
       size_t axisproduct = gridptr->x.size * gridptr->y.size;
-      if (axisproduct > 0 && axisproduct != gridSize)
-        Error("Inconsistent grid declaration! (xsize=%zu ysize=%zu gridsize=%zu)", gridptr->x.size, gridptr->y.size, gridSize);
+      if (axisproduct > 0 && axisproduct != (size_t)gridSize)
+        Error("Inconsistent grid declaration! (xsize=%zu ysize=%zu gridsize=%zu)",
+              gridptr->x.size, gridptr->y.size, (size_t)gridSize);
     }
 }
 
@@ -2684,7 +2690,7 @@ grid_complete(grid_t *grid)
     case GRID_GAUSSIAN_REDUCED:
       {
         gridDefNP(gridID, grid->np);
-        gridDefYsize(gridID, grid->y.size);
+        gridDefYsize(gridID, (SizeType)grid->y.size);
         if (grid->x.flag == 2)
           {
             double xvals[2] = { grid->x.first, grid->x.last };
@@ -2749,7 +2755,7 @@ int
 gridGenerate(const grid_t *grid)
 {
   int gridtype = grid->type;
-  int gridID = gridCreate(gridtype, grid->size);
+  int gridID = gridCreate(gridtype, (SizeType)grid->size);
   grid_t *restrict gridptr = grid_to_pointer(gridID);
   cdiCopyVarKey(&grid->keys, CDI_KEY_DATATYPE, &gridptr->keys);
   gridptr->x.size = grid->x.size;
diff --git a/src/pio_dist_grid.c b/src/pio_dist_grid.c
index b31e1662c07859b9b5eb772e975309a9f13e78f6..6a5fc4c9fb7d4158a0223bcaefa95c765b7d2de1 100644
--- a/src/pio_dist_grid.c
+++ b/src/pio_dist_grid.c
@@ -1112,13 +1112,13 @@ cdiPioDistGridInqXorYVal(grid_t *gridptr, enum cdiPioGDsa saIdx, const double *v
 }
 
 static double
-cdiPioDistGridInqXVal(grid_t *gridptr, int index)
+cdiPioDistGridInqXVal(grid_t *gridptr, SizeType index)
 {
   return cdiPioDistGridInqXorYVal(gridptr, cdiPioGDsaXVals, gridptr->x.vals, index);
 }
 
 static double
-cdiPioDistGridInqYVal(grid_t *gridptr, int index)
+cdiPioDistGridInqYVal(grid_t *gridptr, SizeType index)
 {
   return cdiPioDistGridInqXorYVal(gridptr, cdiPioGDsaYVals, gridptr->y.vals, index);
 }
diff --git a/src/pio_interface.c b/src/pio_interface.c
index 26f6b1f6d3ea84f17c33392c55e7294cbdbf4dee..87d602de035c573e97742fa96699333a374ec3c0 100644
--- a/src/pio_interface.c
+++ b/src/pio_interface.c
@@ -764,13 +764,15 @@ cdiPioStreamWriteVarPart_(int streamID, int varID, int memtype, const void *data
 }
 
 void
-streamWriteVarPart(int streamID, int varID, const double *data, int numMissVals, Xt_idxlist partDesc)
+streamWriteVarPart(int streamID, int varID, const double *data,
+                   SizeType numMissVals, Xt_idxlist partDesc)
 {
   cdiPioStreamWriteVarPart_(streamID, varID, MEMTYPE_DOUBLE, data, numMissVals, partDesc);
 }
 
 void
-streamWriteVarPartF(int streamID, int varID, const float *data, int numMissVals, Xt_idxlist partDesc)
+streamWriteVarPartF(int streamID, int varID, const float *data,
+                    SizeType numMissVals, Xt_idxlist partDesc)
 {
   cdiPioStreamWriteVarPart_(streamID, varID, MEMTYPE_FLOAT, data, numMissVals, partDesc);
 }
diff --git a/src/stream_cdf_o.c b/src/stream_cdf_o.c
index e5c595dc1bf027c6b6f912122e7616632c8f0697..5b23b356ea5533481f35f92ab547795a50234732 100644
--- a/src/stream_cdf_o.c
+++ b/src/stream_cdf_o.c
@@ -98,7 +98,7 @@ struct idSearch
 };
 
 static inline struct idSearch
-cdfSearchIDBySize(size_t startIdx, size_t numIDs, ncgrid_t ncgrid[/*numIDs*/], int ncIDType, int searchType, int searchSize,
+cdfSearchIDBySize(size_t startIdx, size_t numIDs, const ncgrid_t ncgrid[/*numIDs*/], int ncIDType, int searchType, SizeType searchSize,
                   int (*typeInq)(int id), SizeType (*sizeInq)(int id))
 {
   int numNonMatching = 0, foundID = CDI_UNDEFID;
@@ -110,7 +110,7 @@ cdfSearchIDBySize(size_t startIdx, size_t numIDs, ncgrid_t ncgrid[/*numIDs*/], i
           int id0 = ncgrid[index].gridID, id0Type = typeInq(id0);
           if (id0Type == searchType)
             {
-              int size0 = sizeInq(id0);
+              SizeType size0 = sizeInq(id0);
               if (searchSize == size0)
                 {
                   foundID = ncgrid[index].ncIDs[ncIDType];
@@ -135,10 +135,10 @@ cdfDefSPorFC(stream_t *streamptr, int gridID, int gridIndex, char *axisname, siz
 {
   ncgrid_t *ncgrid = streamptr->ncgrid;
 
-  size_t dimlen = gridInqSize(gridID) / 2;
+  SizeType dimlen = gridInqSize(gridID) / 2;
 
   struct idSearch search
-      = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_Y, gridRefType, (int) dimlen, gridInqType, cdfGridInqHalfSize);
+      = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_Y, gridRefType, dimlen, gridInqType, cdfGridInqHalfSize);
   int dimID = search.foundID;
   int iz = search.numNonMatching;
 
@@ -155,7 +155,7 @@ cdfDefSPorFC(stream_t *streamptr, int gridID, int gridIndex, char *axisname, siz
           cdf_redef(fileID);
         }
 
-      cdf_def_dim(fileID, axisname, dimlen, &dimID);
+      cdf_def_dim(fileID, axisname, (size_t)dimlen, &dimID);
 
       if (switchNCMode)
         {
@@ -258,7 +258,7 @@ cdfDefTrajLatLon(stream_t *streamptr, int gridID, int gridIndex, const struct cd
   nc_type xtype = grid_inq_xtype(gridID);
   ncgrid_t *ncgrid = streamptr->ncgrid;
 
-  size_t dimlen = inqs->axisSize(gridID);
+  SizeType dimlen = inqs->axisSize(gridID);
   if (dimlen != 1) Error("%c size isn't 1 for %s grid!", inqs->axisSym, gridNamePtr(gridInqType(gridID)));
 
   int ncvarid = ncgrid[gridIndex].ncIDs[inqs->dimIdx];
@@ -553,10 +553,10 @@ cdfGridCompress(int fileID, int ncvarid, size_t gridsize, int filetype, int comp
 static struct cdfPostDefActionList *
 cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool addVarToGrid,
                  const struct cdfDefGridAxisInqs *gridAxisInq, int axisKey, char axisLetter,
-                 void (*finishCyclicBounds)(double *pbounds, size_t dimlen, const double *pvals))
+                 void (*finishCyclicBounds)(double *pbounds, SizeType dimlen, const double *pvals))
 {
   int dimID = CDI_UNDEFID;
-  size_t dimlen = gridAxisInq->axisSize(gridID);
+  SizeType dimlen = gridAxisInq->axisSize(gridID);
   nc_type xtype = grid_inq_xtype(gridID);
 
   ncgrid_t *ncgrid = streamptr->ncgrid;
@@ -574,7 +574,7 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
       int gridtype0 = gridInqType(gridID0);
       if (gridtype0 == GRID_GAUSSIAN || gridtype0 == GRID_LONLAT || gridtype0 == GRID_PROJECTION || gridtype0 == GRID_GENERIC)
         {
-          size_t dimlen0 = gridAxisInq->axisSize(gridID0);
+          SizeType dimlen0 = gridAxisInq->axisSize(gridID0);
           char dimname0[CDI_MAX_NAME];
           dimname0[0] = 0;
           length = sizeof(dimname0);
@@ -584,7 +584,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
             {
               double (*inqVal)(int gridID, SizeType index) = gridAxisInq->axisVal;
               if (IS_EQUAL(inqVal(gridID0, 0), inqVal(gridID, 0))
-                  && IS_EQUAL(inqVal(gridID0, dimlen - 1), inqVal(gridID, dimlen - 1)))
+                  && IS_EQUAL(inqVal(gridID0, dimlen - 1),
+                              inqVal(gridID, dimlen - 1)))
                 {
                   dimID = ncgrid[index].ncIDs[(axisLetter == 'X') ? CDF_DIMID_X : CDF_DIMID_Y];
                   break;
@@ -616,9 +617,9 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
       if (ndims)
         {
           if (dimname[0] == 0) strcpy(dimname, axisname);
-          dimID = checkDimName(fileID, dimlen, dimname);
+          dimID = checkDimName(fileID, (size_t)dimlen, dimname);
 
-          if (dimID == CDI_UNDEFID) cdf_def_dim(fileID, dimname, dimlen, &dimID);
+          if (dimID == CDI_UNDEFID) cdf_def_dim(fileID, dimname, (size_t)dimlen, &dimID);
         }
 
       if (hasVals)
@@ -633,8 +634,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
 
           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);
+          size_t chunk = calc_chunksize_x(chunkType, chunkSize, (size_t)dimlen, true);
+          cdfGridCompress(fileID, ncvarid, (size_t)dimlen, streamptr->filetype, streamptr->comptype, &chunk);
 
           cdfPutGridStdAtts(fileID, ncvarid, gridID, axisLetter);
           {
@@ -654,8 +655,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
               const double *pvals = gridAxisInq->axisValsPtr(gridID);
               genBounds = true;
               nvertex = 2;
-              pbounds = (double *) Malloc(2 * dimlen * sizeof(double));
-              for (size_t i = 0; i < dimlen - 1; ++i)
+              pbounds = Malloc(2 * (size_t)dimlen * sizeof(double));
+              for (size_t i = 0; i < (size_t)dimlen - 1; ++i)
                 {
                   pbounds[i * 2 + 1] = (pvals[i] + pvals[i + 1]) * 0.5;
                   pbounds[i * 2 + 2] = (pvals[i] + pvals[i + 1]) * 0.5;
@@ -701,14 +702,14 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool
 }
 
 static void
-finishCyclicXBounds(double *pbounds, size_t dimlen, const double *pvals)
+finishCyclicXBounds(double *pbounds, SizeType dimlen, const double *pvals)
 {
   pbounds[0] = (pvals[0] + pvals[dimlen - 1] - 360) * 0.5;
   pbounds[2 * dimlen - 1] = (pvals[dimlen - 1] + pvals[0] + 360) * 0.5;
 }
 
 static void
-finishCyclicYBounds(double *pbounds, size_t dimlen, const double *pvals)
+finishCyclicYBounds(double *pbounds, SizeType dimlen, const double *pvals)
 {
   pbounds[0] = copysign(90.0, pvals[0]);
   pbounds[2 * dimlen - 1] = copysign(90.0, pvals[dimlen - 1]);
@@ -902,9 +903,9 @@ cdfDefIrregularGridCommon(stream_t *streamptr, int gridID, size_t xsize, size_t
 
   struct cdfPostDefActionList *delayed = NULL;
   int ncxvarid
-      = cdfDefIrregularGridAxisSetup(streamptr, gridID, xtype, CDI_XAXIS, gridsize, ndims, dimIDs, chunks, &gridInqsX, &delayed);
+    = cdfDefIrregularGridAxisSetup(streamptr, gridID, xtype, CDI_XAXIS, gridsize, ndims, dimIDs, chunks, &gridInqsX, &delayed);
   int ncyvarid
-      = cdfDefIrregularGridAxisSetup(streamptr, gridID, xtype, CDI_YAXIS, gridsize, ndims, dimIDs, chunks, &gridInqsY, &delayed);
+    = cdfDefIrregularGridAxisSetup(streamptr, gridID, xtype, CDI_YAXIS, gridsize, ndims, dimIDs, chunks, &gridInqsY, &delayed);
 
   int ncavarid = CDI_UNDEFID;
   if (gridInqPropPresence(gridID, GRID_PROP_AREA))
@@ -940,9 +941,9 @@ cdfDefCurvilinear(stream_t *streamptr, int gridID, int gridIndex)
 {
   ncgrid_t *ncgrid = streamptr->ncgrid;
 
-  size_t dimlen = gridInqSize(gridID);
-  size_t xdimlen = gridInqXsize(gridID);
-  size_t ydimlen = gridInqYsize(gridID);
+  SizeType dimlen = gridInqSize(gridID);
+  SizeType xdimlen = gridInqXsize(gridID);
+  SizeType ydimlen = gridInqYsize(gridID);
 
   int xdimID = CDI_UNDEFID, ydimID = CDI_UNDEFID;
   int ncxvarid = CDI_UNDEFID, ncyvarid = CDI_UNDEFID, ncavarid = CDI_UNDEFID;
@@ -950,16 +951,18 @@ cdfDefCurvilinear(stream_t *streamptr, int gridID, int gridIndex)
   size_t ofs = 0;
   do
     {
-      struct idSearch search = cdfSearchIDBySize(ofs, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_CURVILINEAR, (int) dimlen,
+      struct idSearch search = cdfSearchIDBySize(ofs, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_CURVILINEAR, dimlen,
                                                  gridInqType, gridInqSize);
       size_t index = search.foundIdx;
       if (index != SIZE_MAX)
         {
           int gridID0 = ncgrid[index].gridID;
           if (IS_EQUAL(gridInqXval(gridID0, 0), gridInqXval(gridID, 0))
-              && IS_EQUAL(gridInqXval(gridID0, dimlen - 1), gridInqXval(gridID, dimlen - 1))
+              && IS_EQUAL(gridInqXval(gridID0, dimlen - 1),
+                          gridInqXval(gridID, dimlen - 1))
               && IS_EQUAL(gridInqYval(gridID0, 0), gridInqYval(gridID, 0))
-              && IS_EQUAL(gridInqYval(gridID0, dimlen - 1), gridInqYval(gridID, dimlen - 1)))
+              && IS_EQUAL(gridInqYval(gridID0, dimlen - 1),
+                          gridInqYval(gridID, dimlen - 1)))
             {
               xdimID = ncgrid[index].ncIDs[CDF_DIMID_X];
               ydimID = ncgrid[index].ncIDs[CDF_DIMID_Y];
@@ -977,7 +980,7 @@ cdfDefCurvilinear(stream_t *streamptr, int gridID, int gridIndex)
   if (xdimID == CDI_UNDEFID || ydimID == CDI_UNDEFID)
     {
       struct cdfDefIrregularGridCommonIDs createdIDs = cdfDefIrregularGridCommon(
-          streamptr, gridID, xdimlen, ydimlen, 3, "x", 4, "nv4",
+                                                                                 streamptr, gridID, (size_t)xdimlen, (size_t)ydimlen, 3, "x", 4, "nv4",
           gridInqPropPresence(gridID, GRID_PROP_XBOUNDS) || gridInqPropPresence(gridID, GRID_PROP_YBOUNDS));
       xdimID = createdIDs.xdimID;
       ydimID = createdIDs.ydimID;
@@ -1001,7 +1004,7 @@ cdfDefUnstructured(stream_t *streamptr, int gridID, int gridIndex)
 {
   ncgrid_t *ncgrid = streamptr->ncgrid;
 
-  size_t dimlen = gridInqSize(gridID);
+  SizeType dimlen = gridInqSize(gridID);
 
   int dimID = CDI_UNDEFID;
   int ncxvarid = CDI_UNDEFID, ncyvarid = CDI_UNDEFID, ncavarid = CDI_UNDEFID;
@@ -1009,7 +1012,7 @@ cdfDefUnstructured(stream_t *streamptr, int gridID, int gridIndex)
   size_t ofs = 0;
   do
     {
-      struct idSearch search = cdfSearchIDBySize(ofs, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_UNSTRUCTURED, (int) dimlen,
+      struct idSearch search = cdfSearchIDBySize(ofs, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_UNSTRUCTURED, dimlen,
                                                  gridInqType, gridInqSize);
       size_t index = search.foundIdx;
       if (index != SIZE_MAX)
@@ -1037,7 +1040,7 @@ cdfDefUnstructured(stream_t *streamptr, int gridID, int gridIndex)
     {
       size_t nvertex = (size_t) gridInqNvertex(gridID);
       struct cdfDefIrregularGridCommonIDs createdIDs
-          = cdfDefIrregularGridCommon(streamptr, gridID, dimlen, 1, 2, "ncells", nvertex, "vertices", nvertex > 0);
+        = cdfDefIrregularGridCommon(streamptr, gridID, (size_t)dimlen, 1, 2, "ncells", nvertex, "vertices", nvertex > 0);
       dimID = createdIDs.xdimID;
       ncxvarid = createdIDs.ncxvarid;
       ncyvarid = createdIDs.ncyvarid;
@@ -1881,7 +1884,7 @@ cdfDefCharacter(stream_t *streamptr, int gridID, int gridIndex, int cdiAxisID, i
 
   bool isXaxis = (cdiAxisID == CDI_XAXIS);
 
-  size_t dimlen = isXaxis ? gridInqXsize(gridID) : gridInqYsize(gridID);
+  SizeType dimlen = isXaxis ? gridInqXsize(gridID) : gridInqYsize(gridID);
   ncgrid_t *ncgrid = streamptr->ncgrid;
 
   // Check for all grids up to gridIndex whether it already is defined
@@ -1892,9 +1895,9 @@ cdfDefCharacter(stream_t *streamptr, int gridID, int gridIndex, int cdiAxisID, i
       int gridtype0 = gridInqType(gridID0);
       if (gridtype0 == GRID_CHARXY)
         {
-          if (gridInqXIsc(gridID0) == strlen && (size_t) gridInqXsize(gridID0) == dimlen)
+          if (gridInqXIsc(gridID0) == strlen && gridInqXsize(gridID0) == dimlen)
             return;
-          else if (gridInqYIsc(gridID0) == strlen && (size_t) gridInqYsize(gridID0) == dimlen)
+          else if (gridInqYIsc(gridID0) == strlen && gridInqYsize(gridID0) == dimlen)
             return;
         }
     }
@@ -1913,8 +1916,8 @@ cdfDefCharacter(stream_t *streamptr, int gridID, int gridIndex, int cdiAxisID, i
       memcpy(dimname, "region", 7);
       dimname[6] = 0;
     }
-  int dimID = checkDimName(fileID, dimlen, dimname);
-  if (dimID == CDI_UNDEFID) cdf_def_dim(fileID, dimname, dimlen, &dimID);
+  int dimID = checkDimName(fileID, (size_t)dimlen, dimname);
+  if (dimID == CDI_UNDEFID) cdf_def_dim(fileID, dimname, (size_t)dimlen, &dimID);
 
   // Define strlength dim
 
@@ -1929,8 +1932,8 @@ cdfDefCharacter(stream_t *streamptr, int gridID, int gridIndex, int cdiAxisID, i
   dimIDs[1] = strlenID;
 
   char axisname[CDI_MAX_NAME];
-  char **cvals = (char **) Malloc(dimlen * sizeof(char *));
-  for (size_t i = 0; i < dimlen; i++) cvals[i] = (char *) Malloc(strlen * sizeof(char));
+  char **cvals = (char **) Malloc((size_t)dimlen * sizeof(char *));
+  for (size_t i = 0; i < (size_t)dimlen; i++) cvals[i] = (char *) Malloc(strlen * sizeof(char));
   int ncaxisid;
   length = CDI_MAX_NAME;
   cdiInqKeyString(gridID, cdiAxisID, CDI_KEY_NAME, axisname, &length);
@@ -1947,7 +1950,7 @@ cdfDefCharacter(stream_t *streamptr, int gridID, int gridIndex, int cdiAxisID, i
   // Write Var
 
   size_t start[2] = { 0, 0 }, count[2] = { 1, strlen };
-  for (size_t i = 0; i < dimlen; i++)
+  for (size_t i = 0; i < (size_t)dimlen; i++)
     {
       start[0] = i;
       (void) nc_put_vara_text(fileID, ncaxisid, start, count, cvals[i]);
@@ -1968,9 +1971,9 @@ cdfDefReducedGrid(stream_t *streamptr, int gridID, int gridIndex)
   ncgrid[gridIndex].gridID = gridID;
 
   {
-    size_t dimlen = gridInqSize(gridID);
+    SizeType dimlen = gridInqSize(gridID);
 
-    struct idSearch search = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_GAUSSIAN_REDUCED, (int) dimlen,
+    struct idSearch search = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_GAUSSIAN_REDUCED, dimlen,
                                                gridInqType, gridInqSize);
     int iz = search.numNonMatching;
     int dimID = search.foundID;
@@ -1990,7 +1993,7 @@ cdfDefReducedGrid(stream_t *streamptr, int gridID, int gridIndex)
             cdf_redef(fileID);
           }
 
-        cdf_def_dim(fileID, axisname, dimlen, &dimID);
+        cdf_def_dim(fileID, axisname, (size_t)dimlen, &dimID);
 
         if (switchNCMode)
           {
@@ -2003,9 +2006,9 @@ cdfDefReducedGrid(stream_t *streamptr, int gridID, int gridIndex)
   }
 
   {
-    size_t dimlen = gridInqYsize(gridID);
+    SizeType dimlen = gridInqYsize(gridID);
 
-    struct idSearch search = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_RP, GRID_GAUSSIAN_REDUCED, (int) dimlen,
+    struct idSearch search = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_RP, GRID_GAUSSIAN_REDUCED, dimlen,
                                                gridInqType, gridInqSize);
     int iz = search.numNonMatching;
     int dimID = search.foundID;
@@ -2020,7 +2023,7 @@ cdfDefReducedGrid(stream_t *streamptr, int gridID, int gridIndex)
 
         if (streamptr->ncmode == 2) cdf_redef(fileID);
 
-        cdf_def_dim(fileID, axisname, dimlen, &dimID);
+        cdf_def_dim(fileID, axisname, (size_t)dimlen, &dimID);
 
         int ncvarid = CDI_UNDEFID;
         cdf_def_var(fileID, axisname, NC_INT, 1, &dimID, &ncvarid);
@@ -2028,7 +2031,7 @@ cdfDefReducedGrid(stream_t *streamptr, int gridID, int gridIndex)
         cdf_enddef(fileID, streamptr->self);
         streamptr->ncmode = 2;
 
-        int *reducedPoints = (int *) Malloc(dimlen * sizeof(int));
+        int *reducedPoints = Malloc((size_t)dimlen * sizeof(int));
         gridInqReducedPoints(gridID, reducedPoints);
         cdf_put_var_int(fileID, ncvarid, reducedPoints);
         Free(reducedPoints);
@@ -2046,19 +2049,19 @@ cdf_define_generic_dim(stream_t *streamptr, int gridID, int gridIndex)
   ncgrid_t *ncgrid = streamptr->ncgrid;
   int dimID = CDI_UNDEFID;
 
-  size_t dimlen = gridInqSize(gridID);
+  SizeType dimlen = gridInqSize(gridID);
 
   if (gridInqYsize(gridID) == 0)
     {
       struct idSearch search
-          = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_GENERIC, (int) dimlen, gridInqType, gridInqSize);
+          = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_X, GRID_GENERIC, dimlen, gridInqType, gridInqSize);
       dimID = search.foundID;
     }
 
   if (gridInqXsize(gridID) == 0)
     {
       struct idSearch search
-          = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_Y, GRID_GENERIC, (int) dimlen, gridInqType, gridInqSize);
+          = cdfSearchIDBySize(0, (size_t) gridIndex, ncgrid, CDF_DIMID_Y, GRID_GENERIC, dimlen, gridInqType, gridInqSize);
       dimID = search.foundID;
     }
 
@@ -2070,7 +2073,7 @@ cdf_define_generic_dim(stream_t *streamptr, int gridID, int gridIndex)
       cdiInqKeyString(gridID, CDI_GLOBAL, CDI_KEY_DIMNAME, dimname, &length);
       if (dimname[0] == 0) strcpy(dimname, "gsize");
 
-      dimID = checkDimName(fileID, dimlen, dimname);
+      dimID = checkDimName(fileID, (size_t)dimlen, dimname);
 
       if (dimID == CDI_UNDEFID)
         {
@@ -2081,7 +2084,7 @@ cdf_define_generic_dim(stream_t *streamptr, int gridID, int gridIndex)
               cdf_redef(fileID);
             }
 
-          cdf_def_dim(fileID, dimname, dimlen, &dimID);
+          cdf_def_dim(fileID, dimname, (size_t)dimlen, &dimID);
 
           if (switchNCMode)
             {
@@ -2103,7 +2106,7 @@ cdf_define_grid(stream_t *streamptr, int gridID, int gridIndex)
   if (streamptr->ncgrid[gridIndex].ncIDs[CDF_DIMID_X] != CDI_UNDEFID) return delayed;
 
   int gridtype = gridInqType(gridID);
-  size_t size = gridInqSize(gridID);
+  SizeType size = gridInqSize(gridID);
 
   if (CDI_Debug) Message("gridtype = %d  size = %zu", gridtype, size);
 
@@ -2116,8 +2119,8 @@ cdf_define_grid(stream_t *streamptr, int gridID, int gridIndex)
   if (gridtype == GRID_GAUSSIAN || gridtype == GRID_LONLAT || gridtype == GRID_PROJECTION)
     {
       int ndims = !(gridtype == GRID_LONLAT && size == 1 && !gridInqHasDims(gridID));
-      size_t xsize = gridInqXsize(gridID);
-      size_t ysize = gridInqYsize(gridID);
+      SizeType xsize = gridInqXsize(gridID);
+      SizeType ysize = gridInqYsize(gridID);
 
       if (xsize)
         {
@@ -2141,15 +2144,15 @@ cdf_define_grid(stream_t *streamptr, int gridID, int gridIndex)
     }
   else if (gridtype == GRID_GENERIC)
     {
-      if (size == 1 && gridInqXsize(gridID) == 0 && gridInqYsize(gridID) == 0)
+      SizeType xsize = gridInqXsize(gridID);
+      SizeType ysize = gridInqYsize(gridID);
+      if (size == 1 && xsize == 0 && ysize == 0)
         {
           // no grid information
           streamptr->ncgrid[gridIndex].gridID = gridID;
         }
       else
         {
-          size_t xsize = gridInqXsize(gridID);
-          size_t ysize = gridInqYsize(gridID);
 
           if (xsize > 0)
             {
diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c
index 2442e6203d9a3bbe41ac03079daeabe2133714b8..b937d27152c47bd6bf765db5fde6ac450a8d047e 100644
--- a/src/stream_cgribex.c
+++ b/src/stream_cgribex.c
@@ -1827,7 +1827,7 @@ cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridID, in
   ISEC2_Reduced = false;
   ISEC2_ScanFlag = 0;
 
-  int gridsize = (int) gridInqSize(gridID);
+  SizeType gridsize = gridInqSize(gridID);
   bool gridIsRotated = false;
   bool gridIsCurvilinear = false;
   int gridtype = grbGetGridtype(&gridID, gridsize, &gridIsRotated, &gridIsCurvilinear);
@@ -2067,7 +2067,7 @@ cgribexDefEnsembleVar(int *isec1, int vlistID, int varID)
 
 size_t
 cgribexEncode(int memtype, int varID, int levelID, int vlistID, int gridID, int zaxisID, CdiDateTime vDateTime, int tsteptype,
-              int numavg, size_t datasize, const void *data, size_t numMissVals, void *gribbuffer, size_t gribbuffersize)
+              int numavg, SizeType datasize, const void *data, SizeType numMissVals, void *gribbuffer, size_t gribbuffersize)
 {
   cgribexrec_t *cgribexp = (cgribexrec_t *) cgribexNew();
 
diff --git a/src/stream_cgribex.h b/src/stream_cgribex.h
index 60ed867ed10b33b6b09b3b077c5d4775b925526c..cb8391a637bd8966f6bd868718be05ef1351bd31 100644
--- a/src/stream_cgribex.h
+++ b/src/stream_cgribex.h
@@ -12,7 +12,7 @@ int cgribexDecode(int memtype, void *cgribexp, void *gribbuffer, size_t gribsize
                   size_t *numMissVals, double missval);
 
 size_t cgribexEncode(int memtype, int varID, int levelID, int vlistID, int gridID, int zaxisID, CdiDateTime vDateTime,
-                     int tsteptype, int numavg, size_t datasize, const void *data, size_t numMissVals, void *gribbuffer,
+                     int tsteptype, int numavg, SizeType datasize, const void *data, SizeType numMissVals, void *gribbuffer,
                      size_t gribbuffersize);
 
 void *cgribex_handle_new_from_meassage(void *gribbuffer, size_t recsize);
diff --git a/src/stream_grb.c b/src/stream_grb.c
index 0e9a29f777f3a6677d8d74cf0fe06a5df87e60da..a78e191caa1ae643a527c61dec7ad2c215bf5483 100644
--- a/src/stream_grb.c
+++ b/src/stream_grb.c
@@ -437,7 +437,7 @@ streamInqGRIBinfo(int streamID, int *intnum, float *fltnum, off_t *bignum)
 }
 
 int
-grbGetGridtype(int *gridID, size_t gridsize, bool *gridIsRotated, bool *gridIsCurvilinear)
+grbGetGridtype(int *gridID, SizeType gridsize, bool *gridIsRotated, bool *gridIsCurvilinear)
 {
   int gridtype = gridInqType(*gridID);
 
diff --git a/src/stream_grb.h b/src/stream_grb.h
index a007c9ca93721b2a6cb2039403413fbfb102acaf..afc50208140a0bed5d7586383f41bdd721cd14be 100644
--- a/src/stream_grb.h
+++ b/src/stream_grb.h
@@ -49,7 +49,7 @@ int grib2ltypeToZaxisType(int grib_ltype);
 int zaxisTypeToGrib1ltype(int zaxistype);
 int zaxisTypeToGrib2ltype(int zaxistype);
 
-int grbGetGridtype(int *gridID, size_t gridsize, bool *gridIsRotated, bool *gridIsCurvilinear);
+int grbGetGridtype(int *gridID, SizeType gridsize, bool *gridIsRotated, bool *gridIsCurvilinear);
 
 struct cdiGribParamChange
 {
diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c
index cd324725252537ca0333c7899fed886512bc246b..3151fc0a3e02de05d859420f31cbe1c6bae07463 100644
--- a/src/stream_gribapi.c
+++ b/src/stream_gribapi.c
@@ -2220,8 +2220,8 @@ gribapiDefGridRegular(grib_handle *gh, int gridID, int gridtype, bool gridIsRota
   double xfirst = 0.0, xlast = 0.0, xinc = 0.0;
   double yfirst = 0.0, ylast = 0.0, yinc = 0.0;
 
-  size_t nlon = gridInqXsize(gridID);
-  size_t nlat = gridInqYsize(gridID);
+  SizeType nlon = gridInqXsize(gridID),
+    nlat = gridInqYsize(gridID);
 
   if (gridtype == GRID_GAUSSIAN_REDUCED)
     {
@@ -2230,8 +2230,8 @@ gribapiDefGridRegular(grib_handle *gh, int gridID, int gridtype, bool gridIsRota
 
       nlon = 0;
 
-      int *reducedPoints = (int *) Malloc(nlat * sizeof(int));
-      long *pl = (long *) Malloc(nlat * sizeof(long));
+      int *reducedPoints = Malloc((size_t)nlat * sizeof(int));
+      long *pl = Malloc((size_t)nlat * sizeof(long));
       gridInqReducedPoints(gridID, reducedPoints);
       for (size_t i = 0; i < nlat; ++i) pl[i] = reducedPoints[i];
 
@@ -2542,7 +2542,7 @@ gribapiDefGridSpectral(grib_handle *gh, int gridID)
 }
 
 static void
-gribapiDefPackingType(grib_handle *gh, bool lieee, bool lspectral, bool lcomplex, int comptype, size_t gridsize)
+gribapiDefPackingType(grib_handle *gh, bool lieee, bool lspectral, bool lcomplex, int comptype, SizeType gridsize)
 {
   static const char mesg_spectral_complex[] = "spectral_complex";
   static const char mesg_spectral_simple[] = "spectral_simple";
@@ -2576,7 +2576,7 @@ gribapiDefPackingType(grib_handle *gh, bool lieee, bool lspectral, bool lcomplex
 static void
 gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype, int datatype, int uvRelativeToGrid)
 {
-  size_t gridsize = gridInqSize(gridID);
+  SizeType gridsize = gridInqSize(gridID);
   bool gridIsRotated = false;
   bool gridIsCurvilinear = false;
   int gridtype = grbGetGridtype(&gridID, gridsize, &gridIsRotated, &gridIsCurvilinear);
@@ -3322,7 +3322,7 @@ gribapiSetExtMode(grib_handle *gh, int gridID, size_t datasize, const void *data
 
 size_t
 gribapiEncode(int memType, int varID, int levelID, int vlistID, int gridID, int zaxisID, CdiDateTime vDateTime, int tsteptype,
-              int numavg, size_t datasize, const void *data, size_t numMissVals, void **gribbuffer, size_t *gribbuffersize,
+              int numavg, SizeType datasize, const void *data, SizeType numMissVals, void **gribbuffer, size_t *gribbuffersize,
               int comptype, void *gribContainer)
 {
   long editionNumber = 2;
diff --git a/src/stream_gribapi.h b/src/stream_gribapi.h
index 130530e08b013a44c945357c8f85c314ef24aa31..d41dcbe3673ef8c2aabcb968c4d80fa6feeade2c 100644
--- a/src/stream_gribapi.h
+++ b/src/stream_gribapi.h
@@ -7,15 +7,15 @@
 
 int fdbScanTimesteps(stream_t *streamptr);
 
-int gribapiScanTimestep1(stream_t *streamptr);
-int gribapiScanTimestep2(stream_t *streamptr);
-int gribapiScanTimestep(stream_t *streamptr);
+long gribapiScanTimestep1(stream_t *streamptr);
+long gribapiScanTimestep2(stream_t *streamptr);
+long gribapiScanTimestep(stream_t *streamptr);
 
 int gribapiDecode(int memType, void *gribbuffer, size_t gribsize, void *data, size_t datasize, int unreduced, size_t *numMissVals,
                   double missval);
 
 size_t gribapiEncode(int memType, int varID, int levelID, int vlistID, int gridID, int zaxisID, CdiDateTime vDateTime,
-                     int tsteptype, int numavg, size_t datasize, const void *data, size_t numMissVals, void **gribbuffer,
+                     int tsteptype, int numavg, SizeType datasize, const void *data, SizeType numMissVals, void **gribbuffer,
                      size_t *gribbuffersize, int ljpeg, void *gribContainer);
 
 int gribapiGetScanningMode(grib_handle *gh);
diff --git a/src/stream_ieg.c b/src/stream_ieg.c
index e83d0c1ace0837a1843d6c6502473e953e0bfb67..306b88cde5a6fb959aebf2dc671e8033e413f40c 100644
--- a/src/stream_ieg.c
+++ b/src/stream_ieg.c
@@ -183,8 +183,8 @@ iegDefGrid(int *gdb, int gridID)
   int projtype = CDI_UNDEFID;
   if (gridtype == GRID_PROJECTION && gridInqProjType(gridID) == CDI_PROJ_RLL) projtype = CDI_PROJ_RLL;
 
-  size_t xsize = gridInqXsize(gridID);
-  size_t ysize = gridInqYsize(gridID);
+  SizeType xsize = gridInqXsize(gridID);
+  SizeType ysize = gridInqYsize(gridID);
 
   cdi_check_gridsize_int_limit("IEG", xsize * ysize);
 
diff --git a/src/stream_srv.c b/src/stream_srv.c
index 67c3795ba8b81be538830ced34cce387f6aa3ad7..5e7363c14bca627cc0e69abb81c1aaaaeae43935 100644
--- a/src/stream_srv.c
+++ b/src/stream_srv.c
@@ -93,9 +93,9 @@ srv_read_recordSP(stream_t *streamptr, float *data, size_t *numMissVals)
   srvInqDataFP32(srvp, data);
 
   double missval = vlistInqVarMissval(vlistID, varID);
-  size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID));
+  SizeType size = gridInqSize(vlistInqVarGrid(vlistID, varID));
 
-  *numMissVals = get_num_missvalsSP(size, data, (float) missval);
+  *numMissVals = get_num_missvalsSP((size_t)size, data, (float) missval);
 
   streamptr->numvals += size;
 }
@@ -122,9 +122,9 @@ srv_read_recordDP(stream_t *streamptr, double *data, size_t *numMissVals)
   srvInqDataFP64(srvp, data);
 
   double missval = vlistInqVarMissval(vlistID, varID);
-  size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID));
+  SizeType size = gridInqSize(vlistInqVarGrid(vlistID, varID));
 
-  *numMissVals = get_num_missvalsDP(size, data, missval);
+  *numMissVals = get_num_missvalsDP((size_t)size, data, missval);
 
   streamptr->numvals += size;
 }
@@ -159,14 +159,14 @@ srvDefRecord(stream_t *streamptr)
   header[3] = record->vtime;
 
   int gridID = record->gridID;
-  size_t xsize = gridInqXsize(gridID), ysize = gridInqYsize(gridID);
+  SizeType xsize = gridInqXsize(gridID), ysize = gridInqYsize(gridID);
   if (xsize == 0 || ysize == 0)
     {
       xsize = gridInqSize(gridID);
       ysize = 1;
     }
   if (gridInqType(gridID) == GRID_UNSTRUCTURED) ysize = 1;
-  if ((size_t) gridInqSize(gridID) != xsize * ysize) Error("Internal problem with gridsize!");
+  if (gridInqSize(gridID) != xsize * ysize) Error("Internal problem with gridsize!");
 
   cdi_check_gridsize_int_limit("SERVICE", gridInqSize(gridID));
 
@@ -584,9 +584,9 @@ srvReadVarSliceDP(stream_t *streamptr, int varID, int levID, double *data, size_
   fileSetPos(fileID, currentfilepos, SEEK_SET);
 
   double missval = vlistInqVarMissval(vlistID, varID);
-  size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID));
+  SizeType size = gridInqSize(vlistInqVarGrid(vlistID, varID));
 
-  *numMissVals = get_num_missvalsDP(size, data, missval);
+  *numMissVals = get_num_missvalsDP((size_t)size, data, missval);
 }
 
 void
@@ -622,20 +622,20 @@ srvWriteVarSliceDP(stream_t *streamptr, int varID, int levID, const double *data
   header[2] = (int) cdiDate_get(vDateTime.date);
   header[3] = cdiTime_get(vDateTime.time);
 
-  size_t xsize = gridInqXsize(gridID);
-  size_t ysize = gridInqYsize(gridID);
+  SizeType xsize = gridInqXsize(gridID),
+    ysize = gridInqYsize(gridID);
   if (xsize == 0 || ysize == 0)
     {
       xsize = gridInqSize(gridID);
       ysize = 1;
     }
   if (gridInqType(gridID) == GRID_UNSTRUCTURED) ysize = 1;
-  if ((size_t) gridInqSize(gridID) != xsize * ysize) Error("Internal problem with gridsize!");
+  if (gridInqSize(gridID) != xsize * ysize) Error("Internal problem with gridsize!");
 
   cdi_check_gridsize_int_limit("SERVICE", gridInqSize(gridID));
 
-  header[4] = xsize;
-  header[5] = ysize;
+  header[4] = (int)xsize;
+  header[5] = (int)ysize;
   header[6] = 0;
   header[7] = 0;
 
@@ -655,10 +655,11 @@ srvWriteVarDP(stream_t *streamptr, int varID, const double *data)
   if (CDI_Debug) Message("streamID = %d  varID = %d", streamptr->self, varID);
 
   int vlistID = streamptr->vlistID;
-  size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID));
-  size_t nlevs = (size_t) zaxisInqSize(vlistInqVarZaxis(vlistID, varID));
+  SizeType gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID));
+  int nlevs = zaxisInqSize(vlistInqVarZaxis(vlistID, varID));
 
-  for (size_t levID = 0; levID < nlevs; levID++) srvWriteVarSliceDP(streamptr, varID, (int) levID, &data[levID * gridsize]);
+  for (int levID = 0; levID < nlevs; levID++)
+    srvWriteVarSliceDP(streamptr, varID, levID, data + (size_t)levID*(size_t)gridsize);
 }
 
 #endif /* HAVE_LIBSERVICE */
diff --git a/src/vlist.c b/src/vlist.c
index d5a0a120b7f1cabe2d0d51f3672d557c56342022..b0820c01141c7c23ef72aad23b838906a4a0d2b2 100644
--- a/src/vlist.c
+++ b/src/vlist.c
@@ -826,8 +826,8 @@ vlistMerge(int vlistID2, int vlistID1)
       char name1[CDI_MAX_NAME], name2[CDI_MAX_NAME];
       for (varID = 0; varID < nvars2; varID++)
         {
-          size_t ngp1 = gridInqSize(vars1[varID].gridID);
-          size_t ngp2 = gridInqSize(vars2[varID].gridID);
+          SizeType ngp1 = gridInqSize(vars1[varID].gridID);
+          SizeType ngp2 = gridInqSize(vars2[varID].gridID);
           if (ngp1 != ngp2) break;
 
           int length = CDI_MAX_NAME;