diff --git a/ChangeLog b/ChangeLog
index e5877216c76e1c5b5ea8b17ea2d3466d4850ddad..dc90f14dc0928de9b6fa524179d596fa8ad3b523 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,10 @@
 
 	* Version 2.4.0 released
 
+2024-02-19  Uwe Schulzweida
+
+	* netCDF: use timevar buffer
+
 2024-02-05  Uwe Schulzweida
 
 	* fdb5 interface: update to release 5.11.29
diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c
index 24e155a8657cef02c5ddbcd1431d4959b1358c50..e75a983c631c1b89c54a19069eeb77b67c18f0fd 100644
--- a/src/stream_cdf_i.c
+++ b/src/stream_cdf_i.c
@@ -4249,10 +4249,18 @@ wrf_read_timestep(int fileID, int nctimevarid, int tsID)
 }
 
 static double
-get_timevalue(int fileID, int nctimevarid, size_t ncStepIndex)
+get_timevalue(int fileID, int nctimevarid, size_t ncStepIndex, double *timevarBuffer)
 {
   double timevalue = 0.0;
-  cdf_get_var1_double(fileID, nctimevarid, &ncStepIndex, &timevalue);
+
+  if (timevarBuffer)
+    {
+      timevalue = timevarBuffer[ncStepIndex];
+    }
+  else
+    {
+      cdf_get_var1_double(fileID, nctimevarid, &ncStepIndex, &timevalue);
+    }
 
   if (timevalue >= NC_FILL_DOUBLE || timevalue < -NC_FILL_DOUBLE) timevalue = 0.0;
 
@@ -4295,8 +4303,11 @@ cdf_read_timesteps(int numTimesteps, stream_t *streamptr, taxis_t *taxis0)
             }
           else
             {
+              double *timevarBuffer = (double *) malloc(numTimesteps * sizeof(double));
+              cdf_get_var_double(fileID, nctimevarid, timevarBuffer);
               for (int tsID = 0; tsID < numTimesteps; ++tsID)
-                vDateTimeList[tsID] = cdi_decode_timeval(get_timevalue(fileID, nctimevarid, tsID), taxis0);
+                vDateTimeList[tsID] = cdi_decode_timeval(get_timevalue(fileID, nctimevarid, tsID, timevarBuffer), taxis0);
+              if (timevarBuffer) free(timevarBuffer);
             }
         }
 
@@ -4367,7 +4378,7 @@ cdf_read_timesteps(int numTimesteps, stream_t *streamptr, taxis_t *taxis0)
                 {
                   size_t ncStepIndex = streamptr->tsteps[tsID].ncStepIndex;
                   taxis_t *taxis = &streamptr->tsteps[tsID].taxis;
-                  cdi_set_forecast_period(get_timevalue(fileID, leadtimeid, ncStepIndex), taxis);
+                  cdi_set_forecast_period(get_timevalue(fileID, leadtimeid, ncStepIndex, NULL), taxis);
                 }
             }
         }