diff --git a/ChangeLog b/ChangeLog
index 449802dd900622c8fb20a4a61c420b36e6827cc6..211f29c2866fbb7919698a59996556e1ff3e04d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
 2025-03-15  Uwe Schulzweida
 
-	* timpctl: Missing error handling for CDO_PCTL_NBINS>32768 (bug fix)
+	* timpctl: Short integer overflow for CDO_PCTL_NBINS>32768 (bug fix)
 
 2025-03-14  Uwe Schulzweida
 
diff --git a/NEWS b/NEWS
index ef15a1a5af3d8ca14f91b57a068f6072fb7f7b77..c27aea57a6d0e01c9438ec5de45da51f8f34847f 100644
--- a/NEWS
+++ b/NEWS
@@ -3,11 +3,16 @@ CDO NEWS
 
 Improvement
 
+Version 2.5.2 (15 Mar 2025):
+
    New features:
      * option --chunkspec to define chunkSize of t and z dimension
    New operators:
      * air_density
      * setchunkspec - Specify chunking
+   Fixed bugs:
+     * timpctl: Short integer overflow for CDO_PCTL_NBINS>32768
+     * enable-hirlam-extensions failed since release 2.5.1
 
 Version 2.5.1 (5 Mar 2025):
 
diff --git a/src/Detrend.cc b/src/Detrend.cc
index c6043e01afa0019045a09a080474a743541931cf..89a1d300fb5802d83a678c4c32ec2f3b85b742d1 100644
--- a/src/Detrend.cc
+++ b/src/Detrend.cc
@@ -129,11 +129,11 @@ public:
             auto const &zn = work[4][varID][levelID].vec_d;
 
             auto trend_kernel = [&](auto i, auto is_EQ) {
-              auto temp1 = SUBM(sumjx[i], DIVM(MULM(sumj[i], sumx[i]), zn[i]));
-              auto temp2 = SUBM(sumjj[i], DIVM(MULM(sumj[i], sumj[i]), zn[i]));
+              auto temp1 = SUBM(sumjx[i], DIVX(MULM(sumj[i], sumx[i]), zn[i]));
+              auto temp2 = SUBM(sumjj[i], DIVX(MULM(sumj[i], sumj[i]), zn[i]));
               auto temp3 = DIVM(temp1, temp2);
 
-              paramA[i] = SUBM(DIVM(sumx[i], zn[i]), MULM(DIVM(sumj[i], zn[i]), temp3));
+              paramA[i] = SUBM(DIVX(sumx[i], zn[i]), MULM(DIVX(sumj[i], zn[i]), temp3));
               paramB[i] = temp3;
             };
 
@@ -146,7 +146,7 @@ public:
   }
 
   static void
-  vars_sub_trend(FieldVector3D &work, FieldVector2D &varsData, const VarList &varList, double zj)
+  vars_sub_trend(FieldVector3D &work, FieldVector2D &varsData, VarList const &varList, double zj)
   {
     auto numVars = varList.numVars();
     for (int varID = 0; varID < numVars; ++varID)
diff --git a/src/Trend.cc b/src/Trend.cc
index 9c90991635b49ee7d592b806befa0cf1e89ee8f2..ea2badeb0c5fcb00acf589d80855ce23a6adc094 100644
--- a/src/Trend.cc
+++ b/src/Trend.cc
@@ -123,7 +123,7 @@ public:
   }
 
   void
-  write_output(const FieldVector3D &work)
+  write_output(FieldVector3D const &work)
   {
     Field field2, field3;
 
@@ -198,7 +198,7 @@ public:
   }
 
   static void
-  fields_calc_trend_sum(FieldVector3D &work, const FieldVector2D &fields2D, const std::vector<FieldInfo> &fieldInfoList,
+  fields_calc_trend_sum(FieldVector3D &work, FieldVector2D const &fields2D, std::vector<FieldInfo> const &fieldInfoList,
                         double zj) noexcept
   {
     for (auto const &fieldInfo : fieldInfoList)
diff --git a/src/field_trend.cc b/src/field_trend.cc
index 9155952d0c06217bfd48e365be2377ec23b23532..a1da6d78dea522628bd2dd076564b2314e327e5a 100644
--- a/src/field_trend.cc
+++ b/src/field_trend.cc
@@ -99,11 +99,11 @@ calc_trend_param(const FieldVector3D &work, Field &paramA, Field &paramB, int va
   auto const &zn = work[4][varID][levelID].vec_d;
 
   auto trend_kernel = [&](auto i, auto is_EQ) {
-    auto temp1 = SUBM(sumjx[i], DIVM(MULM(sumj[i], sumx[i]), zn[i]));
-    auto temp2 = SUBM(sumjj[i], DIVM(MULM(sumj[i], sumj[i]), zn[i]));
+    auto temp1 = SUBM(sumjx[i], DIVX(MULM(sumj[i], sumx[i]), zn[i]));
+    auto temp2 = SUBM(sumjj[i], DIVX(MULM(sumj[i], sumj[i]), zn[i]));
     auto temp3 = DIVM(temp1, temp2);
 
-    paramA.vec_d[i] = SUBM(DIVM(sumx[i], zn[i]), MULM(DIVM(sumj[i], zn[i]), temp3));
+    paramA.vec_d[i] = SUBM(DIVX(sumx[i], zn[i]), MULM(DIVX(sumj[i], zn[i]), temp3));
     paramB.vec_d[i] = temp3;
   };