diff --git a/ChangeLog b/ChangeLog
index c8ca7ad8d0c9457b1cf00e8e72605a89d29c107b..fc1b85416ee341cc57f2c7ce287c22588adc4304 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,10 @@
 
 	* Version 2.0.2 released
 
+2021-11-12  Uwe Schulzweida
+
+	* grib2: fix unsigned integer overflow for key scaledValueOfFirstFixedSurface
+
 2021-11-08  Uwe Schulzweida
 
 	* changed chunk_size_lim from 1073741823 to 16777216 (bug fix)
diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c
index fb39bbea19dc7401d540f7ac549c0bc9079b6a26..0544e8dcbf8d482ff4c9260b872c88099ed1d677 100644
--- a/src/stream_gribapi.c
+++ b/src/stream_gribapi.c
@@ -2468,14 +2468,15 @@ void gribapiDefGrid(int editionNumber, grib_handle *gh, int gridID, int comptype
 static
 void getLevelFactor(double level, long *factor, long *out_scaled_value)
 {
+  const double eps = 1.0e-7;
+
   double scaled_value  = level;
   long   iscaled_value = lround(scaled_value);
-  long   i;
 
-  const double eps = 1.e-8;
-  for ( i=0; (fabs(scaled_value - (double) iscaled_value) >= eps) && i < 7; i++ )
+  long i;
+  for (i = 0; (iscaled_value < (4294967295/10)) && (fabs(scaled_value - (double) iscaled_value) >= eps) && i < 7; i++)
     {
-      scaled_value *= 10.;
+      scaled_value *= 10.0;
       iscaled_value = lround(scaled_value);
     }
 
@@ -2587,7 +2588,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI
 
                The key/value pairs that are set in "grib2DefLevel" do not exist for this template.
             */
-            if ( proddef_template_num != 32 )
+            if (proddef_template_num != 32)
               grib2DefLevel(gh, gcinit, grib_ltype, grib_ltype2, hasBounds, level, dlevel1, dlevel2);
           }