From 978ecfec76cb39942248204a21b377fd34339c7b Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Wed, 5 Mar 2025 19:07:34 +0100
Subject: [PATCH 1/6] Replaced WorkerThread::start() by WorkerThread::doAsync()

---
 src/Afterburner.cc  | 62 +++++++++++++++++----------------------------
 src/workerthread.cc | 29 +++------------------
 src/workerthread.h  |  5 +---
 3 files changed, 28 insertions(+), 68 deletions(-)

diff --git a/src/Afterburner.cc b/src/Afterburner.cc
index 8e4951155..5d7e60f67 100644
--- a/src/Afterburner.cc
+++ b/src/Afterburner.cc
@@ -42,9 +42,11 @@ void scan_darray(char *namelist, const char *name, double *values, int maxValues
 
 char zaxistypename[CDI_MAX_NAME];
 
-struct RARG
+struct ReadArgs
 {
-  int lana, numFields;
+  int lana;
+  int numFields;
+  int numFieldsNext;
   struct Variable *vars;
   AfterControl *globs;
 };
@@ -364,19 +366,16 @@ after_setNextDate(AfterControl *globs)
   return numFields;
 }
 
-static int num_recs = 0;
-
-static void *
-after_readTimestep(void *arg)
+static void
+after_readTimestep(ReadArgs &readArgs)
 {
   int varID, gridID, zaxisID, levelID, timeType;
   size_t numMissVals;
-  auto rarg = (RARG *) arg;
 
-  auto numFields = rarg->numFields;
-  auto analysisData = rarg->lana;
-  auto vars = rarg->vars;
-  auto globs = rarg->globs;
+  auto numFields = readArgs.numFields;
+  auto analysisData = readArgs.lana;
+  auto vars = readArgs.vars;
+  auto globs = readArgs.globs;
 
   for (int code = 0; code < MaxCodes; ++code) vars[code].numMissVals0 = 0;
 
@@ -443,9 +442,7 @@ after_readTimestep(void *arg)
 
   // printf("%3d  date = %d  time = %04d\n", TsID, vdate, vtime);
 
-  num_recs = after_setNextDate(globs);
-
-  return (void *) &num_recs;
+  readArgs.numFieldsNext = after_setNextDate(globs);
 }
 
 static void
@@ -558,7 +555,7 @@ static void
 after_control(AfterControl &globs, struct Variable *vars)
 {
   int numFields = 0;
-  RARG rarg;
+  ReadArgs readArgs;
 
   if (afterReadAsync) afterReadTask = new WorkerThread;
 
@@ -605,41 +602,31 @@ after_control(AfterControl &globs, struct Variable *vars)
 
   while (numFields > 0)
     {
-      rarg.numFields = numFields;
-      rarg.lana = globs.AnalysisData;
-      rarg.vars = vars;
-      rarg.globs = &globs;
-
-      int status = -1;
+      readArgs.numFields = numFields;
+      readArgs.lana = globs.AnalysisData;
+      readArgs.vars = vars;
+      readArgs.globs = &globs;
+      std::function<void()> readTimestep_func = std::bind(after_readTimestep, std::ref(readArgs));
 
       if (tsFirst || !afterReadAsync)
         {
-          if (afterReadAsync) { afterReadTask->start(after_readTimestep, &rarg); }
-          else { status = *(int *) after_readTimestep(&rarg); }
+          afterReadAsync ? afterReadTask->doAsync(readTimestep_func) : readTimestep_func();
 
           if (tsFirst && globs.Type > 0) after_legini_setup(globs, vars);
 
-          if (afterReadAsync)
-            {
-              status = *(int *) afterReadTask->wait();
-              if (status < 0) cdo_abort("after_readTimestep error! (status = %d)", status);
-            }
+          if (afterReadAsync) { afterReadTask->wait(); }
           tsFirst = false;
         }
-      else
-        {
-          status = *(int *) afterReadTask->wait();
-          if (status < 0) cdo_abort("after_readTimestep error! (status = %d)", status);
-        }
+      else { afterReadTask->wait(); }
 
-      numFields = status;
+      numFields = readArgs.numFieldsNext;
 
       globs.MeanCount0 = globs.MeanCount;
       globs.NewDate = globs.NextDate;
 
       after_moveTimestep(vars);
 
-      if (numFields && afterReadAsync) { afterReadTask->start(after_readTimestep, &rarg); }
+      if (numFields && afterReadAsync) { afterReadTask->doAsync(readTimestep_func); }
 
       after_setEndOfInterval(globs, numFields);
 
@@ -653,10 +640,7 @@ after_control(AfterControl &globs, struct Variable *vars)
           after_defineNextTimestep(globs);
         }
 
-      if (globs.AnalysisData)
-        after_processPL(globs, vars);
-      else
-        after_processML(globs, vars);
+      globs.AnalysisData ? after_processPL(globs, vars) : after_processML(globs, vars);
 
       after_PostProcess(globs);
 
diff --git a/src/workerthread.cc b/src/workerthread.cc
index 48871943d..2b12b4316 100644
--- a/src/workerthread.cc
+++ b/src/workerthread.cc
@@ -38,10 +38,7 @@ WorkerThread::task(WorkerThread *taskInfo)
 
       // do blocking task
       // printf("<worker> JOB start\n");
-      if (taskInfo->useFunction)
-        taskInfo->function();
-      else
-        taskInfo->result = taskInfo->routine(taskInfo->arg);
+      taskInfo->function();
       // printf("<worker> JOB end\n");
       // ensure boss is waiting
       taskInfo->bossMutex.lock();
@@ -60,26 +57,12 @@ WorkerThread::doAsync(const std::function<void()> &_function)
   std::lock_guard<std::mutex> _(workMutex);
   // set job information & state
   this->function = _function;
-  this->useFunction = true;
   this->state = State::JOB;
   // wake-up signal
   workCond.notify_one();
 }
 
 void
-WorkerThread::start(void *(*taskRoutine)(void *), void *taskArg)
-{
-  // ensure worker is waiting
-  std::lock_guard<std::mutex> _(workMutex);
-  // set job information & state
-  this->routine = taskRoutine;
-  this->arg = taskArg;
-  this->state = State::JOB;
-  // wake-up signal
-  workCond.notify_one();
-}
-
-void *
 WorkerThread::wait()
 {
   while (1)
@@ -87,8 +70,6 @@ WorkerThread::wait()
       if (State::IDLE == this->state) break;
       bossCond.wait(bossMutex);
     }
-
-  return this->result;
 }
 
 WorkerThread::WorkerThread()
@@ -115,7 +96,7 @@ WorkerThread::~WorkerThread()
 #ifdef TEST_WORKERTHREAD
 // g++ -g -Wall -O2 -DTEST_WORKERTHREAD workerthread.cc
 
-void *
+void
 myfunc(void *arg)
 {
   printf("run myfunc\n");
@@ -128,10 +109,9 @@ mytask1(void)
   WorkerThread task;
 
   void *myarg = nullptr;
-  void *myresult;
 
   task.start(myfunc, myarg);
-  myresult = task.wait();
+  task.wait();
 }
 
 void
@@ -141,14 +121,13 @@ mytask2(void)
   auto task = useTask ? std::make_unique<WorkerThread>() : nullptr;
 
   void *myarg = nullptr;
-  void *myresult;
 
   if (useTask)
     task->start(myfunc, myarg);
   else
     myfunc(myarg);
 
-  if (useTask) myresult = task->wait();
+  if (useTask) task->wait();
 }
 
 int
diff --git a/src/workerthread.h b/src/workerthread.h
index cf82f4df2..22589af88 100644
--- a/src/workerthread.h
+++ b/src/workerthread.h
@@ -25,11 +25,9 @@ private:
   };
 
   std::function<void()> function;
-  bool useFunction{ false };
 
   void *(*routine)(void *) = nullptr;
   void *arg = nullptr;
-  void *result = nullptr;
 
   State state{ State::SETUP };
   std::thread thread;
@@ -43,8 +41,7 @@ public:
   WorkerThread();
   ~WorkerThread();
   void doAsync(const std::function<void()> &_function);
-  void start(void *(*task_routine)(void *), void *task_arg);
-  void *wait();
+  void wait();
 };
 
 #endif /* WORKERTHREAD_H */
-- 
GitLab


From 1b838fb12fa198fb7ebd7ee46144dd866d01fd8e Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Thu, 6 Mar 2025 09:14:17 +0100
Subject: [PATCH 2/6] workerthread.cc: cleanup

---
 src/workerthread.cc | 39 +++++++++++++++++++++------------------
 src/workerthread.h  |  4 +---
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/src/workerthread.cc b/src/workerthread.cc
index 2b12b4316..d97d109c5 100644
--- a/src/workerthread.cc
+++ b/src/workerthread.cc
@@ -97,44 +97,47 @@ WorkerThread::~WorkerThread()
 // g++ -g -Wall -O2 -DTEST_WORKERTHREAD workerthread.cc
 
 void
-myfunc(void *arg)
+func(int &intArg)
 {
+  intArg = -1;
   printf("run myfunc\n");
-  return nullptr;
 }
 
 void
-mytask1(void)
+worker1(void)
 {
-  WorkerThread task;
+  WorkerThread workerThread;
 
-  void *myarg = nullptr;
+  int ivalue = 0;
+  std::function<void()> my_task = std::bind(func, std::ref(ivalue));
 
-  task.start(myfunc, myarg);
-  task.wait();
+  workerThread.doAsync(my_task);
+  workerThread.wait();
+
+  printf("worker1: %d\n", ivalue);
 }
 
 void
-mytask2(void)
+worker2(void)
 {
-  bool useTask = true;
-  auto task = useTask ? std::make_unique<WorkerThread>() : nullptr;
+  bool useWorkerThread = true;
+  auto workerThread = useWorkerThread ? std::make_unique<WorkerThread>() : nullptr;
+
+  int ivalue = 0;
+  std::function<void()> my_task = std::bind(func, std::ref(ivalue));
 
-  void *myarg = nullptr;
+  useWorkerThread ? workerThread->doAsync(my_task) : my_task();
 
-  if (useTask)
-    task->start(myfunc, myarg);
-  else
-    myfunc(myarg);
+  if (useWorkerThread) workerThread->wait();
 
-  if (useTask) task->wait();
+  printf("worker2: %d\n", ivalue);
 }
 
 int
 main(int argc, char **argv)
 {
-  mytask1();
-  mytask2();
+  worker1();
+  worker2();
 
   return 0;
 }
diff --git a/src/workerthread.h b/src/workerthread.h
index 22589af88..97dedbc23 100644
--- a/src/workerthread.h
+++ b/src/workerthread.h
@@ -26,9 +26,6 @@ private:
 
   std::function<void()> function;
 
-  void *(*routine)(void *) = nullptr;
-  void *arg = nullptr;
-
   State state{ State::SETUP };
   std::thread thread;
   std::mutex workMutex;
@@ -40,6 +37,7 @@ private:
 public:
   WorkerThread();
   ~WorkerThread();
+
   void doAsync(const std::function<void()> &_function);
   void wait();
 };
-- 
GitLab


From efe6c7e629b0be6ba6f3b3843830984af583a108 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Thu, 6 Mar 2025 10:48:23 +0100
Subject: [PATCH 3/6] cinfo: set min and max for gridsize=1 (bug fix)

---
 src/Info.cc      | 52 +++++++++++++++++++++++++++---------------------
 src/Vertintgh.cc |  6 +++---
 2 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/src/Info.cc b/src/Info.cc
index 01954583d..8c948733e 100644
--- a/src/Info.cc
+++ b/src/Info.cc
@@ -310,13 +310,15 @@ compute_stat_real(const Field &field, InfoStat &infoStat, size_t &imiss, size_t
 {
   if (infoStat.numMissVals)
     {
-      auto nvals = field_min_max_sum_mv(field, infoStat.min, infoStat.max, infoStat.sum);
-      imiss = gridsize - nvals;
-      infoStat.numVals += nvals;
+      auto numVals = field_min_max_sum_mv(field, infoStat.min, infoStat.max, infoStat.sum);
+      imiss = gridsize - numVals;
+      infoStat.numVals += numVals;
     }
   else if (gridsize == 1)
     {
       infoStat.sum = (infoStat.numVals == 0) ? field[0] : infoStat.sum + field[0];
+      infoStat.min = (infoStat.numVals == 0) ? field[0] : std::min(infoStat.min, field[0]);
+      infoStat.max = (infoStat.numVals == 0) ? field[0] : std::max(infoStat.max, field[0]);
       infoStat.numVals += 1;
     }
   else
@@ -380,13 +382,13 @@ print_xinfo(int numSteps, CdoVar const &var, InfoStat const &infoStat)
 }
 
 static void
-print_info(int indg, int levelID, CdiDateTime const &vDateTime, CdoVar const &var, int operfunc, bool lvinfo,
+print_info(int setNum, int levelID, CdiDateTime const &vDateTime, CdoVar const &var, int operfunc, bool lvinfo,
            InfoStat const &infoStat)
 {
   char paramstr[32];
   cdiParamToString(var.param, paramstr, sizeof(paramstr));
 
-  fprintf(stdout, "%6d :", indg);
+  fprintf(stdout, "%6d :", setNum);
 
   auto vdateString = date_to_string(vDateTime.date);
   auto vtimeString = time_to_string(vDateTime.time);
@@ -427,10 +429,10 @@ print_info(int indg, int levelID, CdiDateTime const &vDateTime, CdoVar const &va
 }
 
 static void
-info(Field &field, int indg, int indf, int levelID, CdiDateTime vDateTime, CdoVar &var, int operfunc, bool printMap, bool lvinfo,
-     bool lcinfo, InfoStat &infoStat)
+info(Field &field, int setNum, int streamIndex, int levelID, CdiDateTime vDateTime, CdoVar &var, int operfunc, bool printMap,
+     bool lvinfo, bool lcinfo, InfoStat &infoStat)
 {
-  if (printMap) print_header(-(indf + 1), lvinfo, operfunc);
+  if (printMap) print_header(-(streamIndex + 1), lvinfo, operfunc);
 
   auto numMissVals = field.numMissVals;
   auto loutput = (not lvinfo and not lcinfo);
@@ -455,7 +457,7 @@ info(Field &field, int indg, int indf, int levelID, CdiDateTime vDateTime, CdoVa
   else                      compute_stat_comp(field, infoStat, imiss, var.gridsize);
   // clang-format on
 
-  if (loutput) print_info(indg, levelID, vDateTime, var, operfunc, lvinfo, infoStat);
+  if (loutput) print_info(setNum, levelID, vDateTime, var, operfunc, lvinfo, infoStat);
 
   if (imiss != numMissVals && numMissVals) cdo_warning("Found %zu of %zu missing values (%s)!", imiss, numMissVals, var.name);
 
@@ -530,9 +532,9 @@ public:
     int numSets = 0;
     auto numStreams = cdo_stream_cnt();
 
-    for (int indf = 0; indf < numStreams; indf++)
+    for (int streamIndex = 0; streamIndex < numStreams; streamIndex++)
       {
-        auto streamID = cdo_open_read(indf);
+        auto streamID = cdo_open_read(streamIndex);
         auto vlistID = cdo_stream_inq_vlist(streamID);
         auto taxisID = vlistInqTaxis(vlistID);
 
@@ -541,19 +543,19 @@ public:
         if (numVars == 0) continue;
 
         auto runAsync = (Options::CDO_Async_Read > 0);
-        auto task = runAsync ? std::make_unique<WorkerThread>() : nullptr;
+        auto workerThread = runAsync ? std::make_unique<WorkerThread>() : nullptr;
         auto numTasks = runAsync ? 2 : 1;
 
-        FieldVector fieldVector(numTasks);
+        Field fieldVector[2];
         std::vector<InfoStat> infoStatList(numVars);
 
         if (lcinfo)
-          print_xheader(-(indf + 1));
-        else if (not printMap)
-          print_header(-(indf + 1), lvinfo, operfunc);
+          for (auto &infoStat : infoStatList) infostat_init(infoStat);
 
         if (lcinfo)
-          for (auto &infoStat : infoStatList) infostat_init(infoStat);
+          print_xheader(-(streamIndex + 1));
+        else if (not printMap)
+          print_header(-(streamIndex + 1), lvinfo, operfunc);
 
         numSets = 0;
         int tsID = 0;
@@ -565,7 +567,10 @@ public:
             auto vDateTime = taxisInqVdatetime(taxisID);
 
             if (not lcinfo)
-              for (auto &infoStat : infoStatList) infostat_init(infoStat);
+              {
+                if (numFields == 1 && runAsync && numSets > 0) { workerThread->wait(); }
+                for (auto &infoStat : infoStatList) infostat_init(infoStat);
+              }
 
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
@@ -576,20 +581,21 @@ public:
                 field.init(var);
                 cdo_read_field(streamID, field);
 
-                if (runAsync && numSets > 0) { task->wait(); }
+                if (runAsync && numSets > 0) { workerThread->wait(); }
 
                 numSets = lvinfo ? varID + 1 : numSets + 1;
 
-                std::function<void()> info_func = std::bind(info, std::ref(field), numSets, indf, levelID, vDateTime, std::ref(var),
-                                                            operfunc, printMap, lvinfo, lcinfo, std::ref(infoStatList[varID]));
+                std::function<void()> info_task
+                    = std::bind(info, std::ref(field), numSets, streamIndex, levelID, vDateTime, std::ref(var), operfunc, printMap,
+                                lvinfo, lcinfo, std::ref(infoStatList[varID]));
 
-                runAsync ? task->doAsync(info_func) : info_func();
+                runAsync ? workerThread->doAsync(info_task) : info_task();
               }
 
             tsID++;
           }
 
-        if (runAsync) task->wait();
+        if (runAsync) workerThread->wait();
 
         cdo_stream_close(streamID);
 
diff --git a/src/Vertintgh.cc b/src/Vertintgh.cc
index 30f4522e8..d04ed1f5b 100644
--- a/src/Vertintgh.cc
+++ b/src/Vertintgh.cc
@@ -193,9 +193,9 @@ public:
     for (int index = 0; index < numZaxes; ++index)
       {
         auto zaxisID = vlistZaxis(vlistID1, index);
-        auto nlevels = zaxisInqSize(zaxisID);
+        auto numLevels = zaxisInqSize(zaxisID);
         if (zaxisID == zaxisID_FL || zaxisID == zaxisID_HL
-            || (is_height_axis(zaxisID) && (nlevels == numHalfLevels || nlevels == numFullLevels)))
+            || (is_height_axis(zaxisID) && (numLevels == numHalfLevels || numLevels == numFullLevels)))
           vlistChangeZaxis(vlistID2, zaxisID, zaxisID2);
       }
 
@@ -345,7 +345,7 @@ public:
                   {
                     cdo_def_field(streamID2, varID, levelID);
                     cdo_write_field(streamID2, interpVars[varID] ? vardata2[varID] : vardata1[varID], levelID,
-                                     varnumMissVals[varID][levelID]);
+                                    varnumMissVals[varID][levelID]);
                   }
               }
           }
-- 
GitLab


From a3fa2eb42657b3a7946cc69afe8c0e6590ac7729 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Thu, 6 Mar 2025 11:24:03 +0100
Subject: [PATCH 4/6] Info: changed if(not lcinfo) to if(lvinfo)

---
 src/Info.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Info.cc b/src/Info.cc
index 8c948733e..dab5261bb 100644
--- a/src/Info.cc
+++ b/src/Info.cc
@@ -566,7 +566,7 @@ public:
 
             auto vDateTime = taxisInqVdatetime(taxisID);
 
-            if (not lcinfo)
+            if (lvinfo)
               {
                 if (numFields == 1 && runAsync && numSets > 0) { workerThread->wait(); }
                 for (auto &infoStat : infoStatList) infostat_init(infoStat);
-- 
GitLab


From dbcb6605993bec71bf298c59488cbc6bd428f343 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Thu, 6 Mar 2025 13:07:16 +0100
Subject: [PATCH 5/6] Renamed task to workerThread

---
 src/Afterburner.cc | 12 ++++++------
 src/Detrend.cc     | 16 ++++++++--------
 src/Diff.cc        | 10 +++++-----
 src/Ensstat.cc     | 10 +++++-----
 src/Longinfo.cc    | 10 +++++-----
 src/Timstat.cc     | 10 +++++-----
 src/Trend.cc       | 12 ++++++------
 src/afterburner.h  |  4 ++--
 8 files changed, 42 insertions(+), 42 deletions(-)

diff --git a/src/Afterburner.cc b/src/Afterburner.cc
index 5d7e60f67..816ba4a8d 100644
--- a/src/Afterburner.cc
+++ b/src/Afterburner.cc
@@ -557,7 +557,7 @@ after_control(AfterControl &globs, struct Variable *vars)
   int numFields = 0;
   ReadArgs readArgs;
 
-  if (afterReadAsync) afterReadTask = new WorkerThread;
+  if (afterReadAsync) afterWorkerThread = new WorkerThread;
 
   for (int code = 0; code < MaxCodes; ++code) vars[code].needed0 = vars[code].needed;
 
@@ -610,14 +610,14 @@ after_control(AfterControl &globs, struct Variable *vars)
 
       if (tsFirst || !afterReadAsync)
         {
-          afterReadAsync ? afterReadTask->doAsync(readTimestep_func) : readTimestep_func();
+          afterReadAsync ? afterWorkerThread->doAsync(readTimestep_func) : readTimestep_func();
 
           if (tsFirst && globs.Type > 0) after_legini_setup(globs, vars);
 
-          if (afterReadAsync) { afterReadTask->wait(); }
+          if (afterReadAsync) { afterWorkerThread->wait(); }
           tsFirst = false;
         }
-      else { afterReadTask->wait(); }
+      else { afterWorkerThread->wait(); }
 
       numFields = readArgs.numFieldsNext;
 
@@ -626,7 +626,7 @@ after_control(AfterControl &globs, struct Variable *vars)
 
       after_moveTimestep(vars);
 
-      if (numFields && afterReadAsync) { afterReadTask->doAsync(readTimestep_func); }
+      if (numFields && afterReadAsync) { afterWorkerThread->doAsync(readTimestep_func); }
 
       after_setEndOfInterval(globs, numFields);
 
@@ -655,7 +655,7 @@ after_control(AfterControl &globs, struct Variable *vars)
       globs.OldDate = globs.NewDate;
     }
 
-  if (afterReadTask) delete afterReadTask;
+  if (afterWorkerThread) delete afterWorkerThread;
 }
 
 static void
diff --git a/src/Detrend.cc b/src/Detrend.cc
index 6e38316f4..eccdcbc15 100644
--- a/src/Detrend.cc
+++ b/src/Detrend.cc
@@ -182,7 +182,7 @@ public:
   run() override
   {
     auto runAsync = (Options::CDO_Async_Read > 0);
-    auto task = runAsync ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = runAsync ? std::make_unique<WorkerThread>() : nullptr;
 
     auto calendar = taxisInqCalendar(taxisID1);
     CheckTimeIncr checkTimeIncr;
@@ -221,17 +221,17 @@ public:
             cdo_read_field(streamID1, field);
           }
 
-        if (runAsync && tsID > 0) task->wait();
+        if (runAsync && tsID > 0) workerThread->wait();
 
-        std::function<void()> vars_trend_sum_func
+        std::function<void()> vars_trend_sum_task
             = std::bind(vars_trend_sum, std::ref(work), std::cref(varsData[tsID]), std::cref(varList1), zj);
 
-        runAsync ? task->doAsync(vars_trend_sum_func) : vars_trend_sum_func();
+        runAsync ? workerThread->doAsync(vars_trend_sum_task) : vars_trend_sum_task();
 
         tsID++;
       }
 
-    if (runAsync) task->wait();
+    if (runAsync) workerThread->wait();
 
     numSteps = tsID;
 
@@ -244,14 +244,14 @@ public:
         auto zj = tstepIsEqual ? (double) step : delta_time_step_0(step, calendar, vDateTime, julianDate0, deltat1);
         std::function<void()> vars_sub_trend_func
             = std::bind(vars_sub_trend, std::ref(work), std::ref(varsData[step]), std::ref(varList1), zj);
-        task->doAsync(vars_sub_trend_func);
+        workerThread->doAsync(vars_sub_trend_func);
       }
 
     for (tsID = 0; tsID < numSteps; ++tsID)
       {
         progress.update((tsID + 1.0) / numSteps, 0.5, 0.5);
 
-        if (runAsync) task->wait();
+        if (runAsync) workerThread->wait();
         auto step = runAsync ? tsID + 1 : tsID;
 
         if (step < numSteps)
@@ -262,7 +262,7 @@ public:
             std::function<void()> vars_sub_trend_func
                 = std::bind(vars_sub_trend, std::ref(work), std::ref(varsData[step]), std::cref(varList1), zj);
 
-            runAsync ? task->doAsync(vars_sub_trend_func) : vars_sub_trend_func();
+            runAsync ? workerThread->doAsync(vars_sub_trend_func) : vars_sub_trend_func();
           }
 
         dtlist.taxis_def_timestep(taxisID2, tsID);
diff --git a/src/Diff.cc b/src/Diff.cc
index 770329f46..1c35fb813 100644
--- a/src/Diff.cc
+++ b/src/Diff.cc
@@ -396,7 +396,7 @@ public:
   run() override
   {
     auto runAsync = (Options::CDO_Async_Read > 0);
-    auto task = runAsync ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = runAsync ? std::make_unique<WorkerThread>() : nullptr;
     auto numTasks = runAsync ? 2 : 1;
 
     FieldVector fieldVector1(numTasks);
@@ -467,16 +467,16 @@ public:
 
             if (runAsync && numSets > 0)
               {
-                task->wait();
+                workerThread->wait();
                 // clang-format off
                 if (params.numDiffFields >= params.maxDiffFields) { stopRead = true; break; }
                 // clang-format on
               }
 
-            std::function<void()> compare_fields_func
+            std::function<void()> compare_fields_task
                 = std::bind(compare_fields, std::ref(field1), std::ref(field2), numSets + 1, std::ref(var1), levelID, operfunc,
                             vDateTime, std::ref(params), operfunc2, std::ref(progress));
-            runAsync ? task->doAsync(compare_fields_func) : compare_fields_func();
+            runAsync ? workerThread->doAsync(compare_fields_task) : compare_fields_task();
 
             if (not runAsync)
               {
@@ -493,7 +493,7 @@ public:
         tsID++;
       }
 
-    if (runAsync) task->wait();
+    if (runAsync) workerThread->wait();
 
     if (params.numDiffFields > 0)
       {
diff --git a/src/Ensstat.cc b/src/Ensstat.cc
index 837c12f75..dfe644e82 100644
--- a/src/Ensstat.cc
+++ b/src/Ensstat.cc
@@ -235,7 +235,7 @@ public:
   void
   run() override
   {
-    auto task = Options::CDO_task ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = Options::CDO_task ? std::make_unique<WorkerThread>() : nullptr;
     auto numTasks = Options::CDO_task ? 2 : 1;
 
     FieldVector workFields(Threading::ompNumMaxThreads);
@@ -298,17 +298,17 @@ public:
 #endif
             for (int fileID = 0; fileID < numFiles; ++fileID) { cdo_read_field(ef[fileID].streamID, fields[fileID]); }
 
-            if (Options::CDO_task) task->wait();
+            if (Options::CDO_task) workerThread->wait();
 
-            std::function<void()> ensstat_func = std::bind(ensstat, std::cref(ef), std::ref(fields), streamID2, varID, levelID,
+            std::function<void()> ensstat_task = std::bind(ensstat, std::cref(ef), std::ref(fields), streamID2, varID, levelID,
                                                            std::ref(workFields), std::ref(array2), std::ref(count2), operfunc, pn);
 
-            Options::CDO_task ? task->doAsync(ensstat_func) : ensstat_func();
+            Options::CDO_task ? workerThread->doAsync(ensstat_task) : ensstat_task();
 
             fieldNum++;
           }
 
-        if (Options::CDO_task) task->wait();
+        if (Options::CDO_task) workerThread->wait();
 
         tsID++;
       }
diff --git a/src/Longinfo.cc b/src/Longinfo.cc
index 99cbf4ed4..5d792a028 100644
--- a/src/Longinfo.cc
+++ b/src/Longinfo.cc
@@ -191,7 +191,7 @@ public:
   run() override
   {
     auto runAsync = (Options::CDO_Async_Read > 0);
-    auto task = runAsync ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = runAsync ? std::make_unique<WorkerThread>() : nullptr;
     auto numTasks = runAsync ? 2 : 1;
 
     FieldVector fieldVector(numTasks);
@@ -213,12 +213,12 @@ public:
             field.init(var);
             cdo_read_field(streamID, field);
 
-            if (runAsync && numSets > 0) { task->wait(); }
+            if (runAsync && numSets > 0) { workerThread->wait(); }
 
-            std::function<void()> long_info_func = std::bind(long_info, std::ref(field), tsID, vDateTime, numFields, fieldID, varID,
+            std::function<void()> long_info_task = std::bind(long_info, std::ref(field), tsID, vDateTime, numFields, fieldID, varID,
                                                              levelID, vlistID, std::ref(var));
 
-            runAsync ? task->doAsync(long_info_func) : long_info_func();
+            runAsync ? workerThread->doAsync(long_info_task) : long_info_task();
 
             numSets++;
           }
@@ -228,7 +228,7 @@ public:
         tsID++;
       }
 
-    if (runAsync) task->wait();
+    if (runAsync) workerThread->wait();
 
     for (auto const &var : varList.vars)
       {
diff --git a/src/Timstat.cc b/src/Timstat.cc
index 1ff05a8de..ad8c90886 100644
--- a/src/Timstat.cc
+++ b/src/Timstat.cc
@@ -422,7 +422,7 @@ public:
     field2D_init(fields3D[1], varList1, FIELD_VEC | FIELD_NAT);
 
     auto useTask = true;
-    auto task = useTask ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = useTask ? std::make_unique<WorkerThread>() : nullptr;
 
     int tsID = 0;
     int otsID = 0;
@@ -455,13 +455,13 @@ public:
                 cdo_read_field(streamID1, fields3D[numSets % 2][varID][levelID]);
               }
 
-            if (useTask && numSets > 0) task->wait();
+            if (useTask && numSets > 0) workerThread->wait();
 
-            std::function<void()> add_fields2D_func
+            std::function<void()> add_fields2D_task
                 = std::bind(add_fields2D, std::cref(fields3D[numSets % 2]), std::cref(fieldInfoList), std::cref(varList1),
                             std::ref(stepStat), numSets);
 
-            useTask ? task->doAsync(add_fields2D_func) : add_fields2D_func();
+            useTask ? workerThread->doAsync(add_fields2D_task) : add_fields2D_task();
 
             vDateTimeN = vDateTime;
             numSets++;
@@ -470,7 +470,7 @@ public:
 
         if (numFields == 0 && numSets == 0) break;
 
-        if (useTask) task->wait();
+        if (useTask) workerThread->wait();
 
         if (compareDate == CMP_DAY || compareDate == CMP_MONTH || compareDate == CMP_YEAR)
           {
diff --git a/src/Trend.cc b/src/Trend.cc
index 9fabd21e9..e7fee8791 100644
--- a/src/Trend.cc
+++ b/src/Trend.cc
@@ -227,7 +227,7 @@ public:
     field2D_init(fields3D[1], varList1, FIELD_VEC | FIELD_NAT);
 
     bool useTask = true;
-    auto task = useTask ? std::make_unique<WorkerThread>() : nullptr;
+    auto workerThread = useTask ? std::make_unique<WorkerThread>() : nullptr;
 
     int tsID = 0;
     while (true)
@@ -250,18 +250,18 @@ public:
             cdo_read_field(streamID1, fields3D[tsID % 2][varID][levelID]);
           }
 
-        if (useTask && tsID > 0) task->wait();
+        if (useTask && tsID > 0) workerThread->wait();
 
-        std::function<void()> fields_calc_trend_sum_func
+        std::function<void()> fields_calc_trend_sum_task
             = std::bind(fields_calc_trend_sum, std::ref(work), std::ref(fields3D[tsID % 2]), std::cref(fieldInfoList), zj);
 
-        if (useTask) { task->doAsync(fields_calc_trend_sum_func); }
-        else { fields_calc_trend_sum_func(); }
+        if (useTask) { workerThread->doAsync(fields_calc_trend_sum_task); }
+        else { fields_calc_trend_sum_task(); }
 
         tsID++;
       }
 
-    if (useTask) task->wait();
+    if (useTask) workerThread->wait();
 
     taxisDefVdatetime(taxisID2, vDateTime);
     write_output(work);
diff --git a/src/afterburner.h b/src/afterburner.h
index 51cac9f37..a35bc3711 100644
--- a/src/afterburner.h
+++ b/src/afterburner.h
@@ -220,14 +220,14 @@ void after_EchamDependencies(struct Variable *vars, int ncodes, int type, int so
 
 void after_legini_setup(AfterControl &globs, struct Variable *vars);
 
-static WorkerThread *afterReadTask = nullptr;
+static WorkerThread *afterWorkerThread = nullptr;
 static bool afterReadAsync = true;
 
 template <typename... Args>
 void
 afterAbort(const std::string &format, Args const &...args)
 {
-  if (afterReadAsync && afterReadTask) afterReadTask->wait();
+  if (afterReadAsync && afterWorkerThread) afterWorkerThread->wait();
   cdo_abort(format, args...);
 }
 
-- 
GitLab


From 98190670add9989d47258549995b36adbd7575cb Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Fri, 7 Mar 2025 10:39:30 +0100
Subject: [PATCH 6/6] Changed 'const T &' to 'T const &'

---
 src/Adisit.cc                   |  20 ++--
 src/Afterburner.cc              |   2 +-
 src/Arithdays.cc                |   2 +-
 src/Arithlat.cc                 |   2 +-
 src/Bitrounding.cc              |  38 +++---
 src/CDIwrite.cc                 |   8 +-
 src/CMOR.cc                     | 124 +++++++++----------
 src/CMOR_lite.cc                |  18 +--
 src/CMOR_table.cc               |  22 ++--
 src/Cat.cc                      |   2 +-
 src/Change.cc                   |  14 +--
 src/Change_e5slm.cc             |   2 +-
 src/Cloudlayer.cc               |  12 +-
 src/Collgrid.cc                 |  14 +--
 src/Command.cc                  |  42 +++----
 src/Comp.cc                     |   6 +-
 src/Compc.cc                    |   2 +-
 src/Complextorect.cc            |   2 +-
 src/Cond.cc                     |   8 +-
 src/Cond2.cc                    |   4 +-
 src/Condc.cc                    |   2 +-
 src/Consecstat.cc               |   8 +-
 src/Copy.cc                     |   4 +-
 src/DCW_util.cc                 |   4 +-
 src/Deltat.cc                   |   8 +-
 src/Depth.cc                    |   2 +-
 src/Derivepar.cc                |   6 +-
 src/Detrend.cc                  |  14 +--
 src/Diff.cc                     |  22 ++--
 src/Distgrid.cc                 |  24 ++--
 src/Duplicate.cc                |   4 +-
 src/EOFs.cc                     |  12 +-
 src/EcaEtccdi.cc                |   6 +-
 src/EcaIndices.cc               |  22 ++--
 src/Echam5ini.cc                |   6 +-
 src/Enlarge.cc                  |   2 +-
 src/Ensstat3.cc                 |   4 +-
 src/Exprf.cc                    |  26 ++--
 src/FC.cc                       |   2 +-
 src/Filedes.cc                  |   4 +-
 src/Fillmiss.cc                 |   2 +-
 src/Filter.cc                   |   4 +-
 src/Fldrms.cc                   |   4 +-
 src/Fldstat.cc                  |  22 ++--
 src/Fldstat2.cc                 |  16 +--
 src/Fourier.cc                  |   2 +-
 src/Getgridcell.cc              |   8 +-
 src/Gradsdes.cc                 |   4 +-
 src/Gridboxstat.cc              |   2 +-
 src/Gridcell.cc                 |   8 +-
 src/Gridsearch.cc               |   6 +-
 src/Harmonic.cc                 |  12 +-
 src/Healpix.cc                  |  18 +--
 src/Hi.cc                       |   2 +-
 src/Importamsr.cc               |   2 +-
 src/Importobs.cc                |   4 +-
 src/Info.cc                     |  24 ++--
 src/Intgrid.cc                  |   8 +-
 src/Intlevel.cc                 |  42 +++----
 src/Intlevel3d.cc               |  18 +--
 src/Intntime.cc                 |   6 +-
 src/Inttime.cc                  |   8 +-
 src/Intyear.cc                  |   2 +-
 src/Invertlev.cc                |   4 +-
 src/Longinfo.cc                 |  10 +-
 src/Maggraph.cc                 |  10 +-
 src/Magplot.cc                  |   8 +-
 src/Magvector.cc                |  10 +-
 src/MapReduce.cc                |   8 +-
 src/Maskbox.cc                  |  18 +--
 src/Mastrfu.cc                  |   2 +-
 src/Math.cc                     |   2 +-
 src/Merge.cc                    |   8 +-
 src/Mergetime.cc                |  16 +--
 src/Merstat.cc                  |   2 +-
 src/Mrotuv.cc                   |   4 +-
 src/Mrotuvb.cc                  |   4 +-
 src/NCL_wind.cc                 |  18 +--
 src/Ninfo.cc                    |   4 +-
 src/Nmldump.cc                  |  10 +-
 src/Output.cc                   |  20 ++--
 src/Outputgmt.cc                |  12 +-
 src/Pack.cc                     |  28 ++---
 src/Pinfo.cc                    |   2 +-
 src/Regres.cc                   |  10 +-
 src/Remapeta.cc                 |  22 ++--
 src/Remapgrid.cc                |  20 ++--
 src/Remapstat.cc                |  24 ++--
 src/Remapweights.cc             |  18 +--
 src/Replace.cc                  |   8 +-
 src/Replacevalues.cc            |   2 +-
 src/Rhopot.cc                   |  12 +-
 src/Rotuv.cc                    |   4 +-
 src/Samplegrid.cc               |   2 +-
 src/Samplegridicon.cc           |  18 +--
 src/Seascount.cc                |   2 +-
 src/Seasmonstat.cc              |   6 +-
 src/Seaspctl.cc                 |   8 +-
 src/Selbox.cc                   |  76 ++++++------
 src/Select.cc                   |  18 +--
 src/Selgridcell.cc              |   6 +-
 src/Selmulti.cc                 |   4 +-
 src/Selregion.cc                |  16 +--
 src/Selsurface.cc               |  14 +--
 src/Seltime.cc                  |  16 +--
 src/Selvar.cc                   |  10 +-
 src/Selyearidx.cc               |   6 +-
 src/Setattribute.cc             |  22 ++--
 src/Setbox.cc                   |  12 +-
 src/Setchunkspec.cc             |  20 ++--
 src/Setfilter.cc                |  26 ++--
 src/Setgrid.cc                  |  12 +-
 src/Setgridcell.cc              |  14 +--
 src/Sethalo.cc                  |  20 ++--
 src/Setmiss.cc                  |   4 +-
 src/Setpartab.cc                |  16 +--
 src/Setrcaname.cc               |   2 +-
 src/Settime.cc                  |   4 +-
 src/Setzaxis.cc                 |   4 +-
 src/Shiftxy.cc                  |   2 +-
 src/Showattribute.cc            |   6 +-
 src/Showinfo.cc                 |  18 +--
 src/Sinfo.cc                    |   4 +-
 src/Smooth.cc                   |  20 ++--
 src/Sort.cc                     |  14 +--
 src/Sorttimestamp.cc            |   4 +-
 src/Spectral.cc                 |   4 +-
 src/Spectrum.cc                 |   6 +-
 src/Split.cc                    |  40 +++----
 src/Splitdate.cc                |   6 +-
 src/Splitsel.cc                 |   8 +-
 src/Splittime.cc                |   6 +-
 src/Splityear.cc                |   6 +-
 src/Timfillmiss.cc              |  12 +-
 src/Timpctl.cc                  |   6 +-
 src/Timselpctl.cc               |   6 +-
 src/Timsort.cc                  |   4 +-
 src/Timstat.cc                  |  12 +-
 src/Timstat2.cc                 |  16 +--
 src/Transpose.cc                |   2 +-
 src/Trend.cc                    |  12 +-
 src/Trendarith.cc               |  18 +--
 src/Tstepcount.cc               |   4 +-
 src/Vargen.cc                   |   8 +-
 src/Varrms.cc                   |   2 +-
 src/Varsstat.cc                 |   4 +-
 src/Verifygrid.cc               |  12 +-
 src/Verifyweights.cc            |  20 ++--
 src/Vertcum.cc                  |   8 +-
 src/Vertfillmiss.cc             |  10 +-
 src/Vertintap.cc                |  16 +--
 src/Vertintgh.cc                |  16 +--
 src/Vertintml.cc                |  32 ++---
 src/Vertintzs.cc                |   6 +-
 src/Vertstat.cc                 |  10 +-
 src/Vertwind.cc                 |   2 +-
 src/Wind.cc                     |  16 +--
 src/WindTrans.cc                |  10 +-
 src/Ydaypctl.cc                 |   8 +-
 src/Ydaystat.cc                 |  10 +-
 src/Ydrunpctl.cc                |  18 +--
 src/Ydrunstat.cc                |  12 +-
 src/Yearmonstat.cc              |   6 +-
 src/Ymoncomp.cc                 |   6 +-
 src/Ymonpctl.cc                 |   8 +-
 src/Yseaspctl.cc                |   8 +-
 src/Zonstat.cc                  |   6 +-
 src/after_fctrans.cc            |   2 +-
 src/afterburner.h               |   2 +-
 src/afterburnerlib.cc           |   2 +-
 src/cdo.cc                      |  38 +++---
 src/cdo_cdi_wrapper.cc          |   6 +-
 src/cdo_cdi_wrapper.h           |   6 +-
 src/cdo_data.cc                 |   6 +-
 src/cdo_data.h                  |   6 +-
 src/cdo_def_options.cc          |  62 +++++-----
 src/cdo_exception.h             |   2 +-
 src/cdo_features.cc             |  10 +-
 src/cdo_features.h              |   2 +-
 src/cdo_fftw3.cc                |   8 +-
 src/cdo_fftw3.h                 |   4 +-
 src/cdo_fill.cc                 |   4 +-
 src/cdo_getopt.cc               |  22 ++--
 src/cdo_getopt.h                |  20 ++--
 src/cdo_module.cc               |   8 +-
 src/cdo_module.h                |  10 +-
 src/cdo_node_attach_exception.h |   8 +-
 src/cdo_output.cc               |   8 +-
 src/cdo_output.h                |  14 +--
 src/cdo_query.cc                |  10 +-
 src/cdo_query.h                 |   2 +-
 src/cdo_read.cc                 |   6 +-
 src/cdo_settings.cc             |  14 +--
 src/cdo_settings.h              |  14 +--
 src/cdo_stepstat.h              |  28 ++---
 src/cdo_syntax_error.cc         |   4 +-
 src/cdo_syntax_error.h          |   4 +-
 src/cdo_timer.h                 |   2 +-
 src/cdo_varlist.cc              |  22 ++--
 src/cdo_vlist.cc                |   2 +-
 src/cdo_vlist.h                 |   2 +-
 src/cdo_zaxis.cc                |  26 ++--
 src/cdo_zaxis.h                 |   8 +-
 src/cellsearch_reg2d.cc         |   8 +-
 src/cellsearch_reg2d.h          |   6 +-
 src/cellsearch_spherepart.h     |   6 +-
 src/convert_units.cc            |   2 +-
 src/convert_units.h             |   2 +-
 src/custom_modules.cc           |   4 +-
 src/datetime.cc                 |  22 ++--
 src/datetime.h                  |  18 +--
 src/dcw_reader.cc               |   8 +-
 src/ecacore.cc                  |  22 ++--
 src/ecacore.h                   |   4 +-
 src/ecautil.cc                  |  32 ++---
 src/ecautil.h                   |  22 ++--
 src/expr.cc                     |  52 ++++----
 src/expr.h                      |   2 +-
 src/expr_fun.cc                 |  18 +--
 src/factory.cc                  |  26 ++--
 src/factory.h                   |  26 ++--
 src/field.cc                    | 114 +++++++++---------
 src/field.h                     |  10 +-
 src/field2.cc                   |  96 +++++++--------
 src/field2_complex.cc           |  18 +--
 src/field_functions.h           | 146 +++++++++++-----------
 src/field_memory.cc             |   6 +-
 src/field_meridional.cc         |  62 +++++-----
 src/field_trend.cc              |  20 ++--
 src/field_trend.h               |   4 +-
 src/field_vinterp.cc            |   2 +-
 src/field_vinterp.h             |   2 +-
 src/field_zonal.cc              |  46 +++----
 src/fileStream.cc               |   2 +-
 src/fileStream.h                |   2 +-
 src/fill_1d.cc                  |  10 +-
 src/fill_1d.h                   |   6 +-
 src/grid_cellsearch.cc          |   4 +-
 src/grid_from_name.cc           |  28 ++---
 src/grid_icosphere.cc           |   4 +-
 src/grid_pointsearch.cc         |  14 +--
 src/grid_pointsearch.h          |  12 +-
 src/grid_read.cc                |  12 +-
 src/griddes.cc                  |   8 +-
 src/griddes.h                   |   6 +-
 src/hetaeta.cc                  |  30 ++---
 src/hetaeta.h                   |   6 +-
 src/institution.cc              |   4 +-
 src/institution.h               |   2 +-
 src/interpol.cc                 |  18 +--
 src/interpol.h                  |   8 +-
 src/knndata.cc                  |   4 +-
 src/knndata.h                   |   8 +-
 src/module_info.cc              |  24 ++--
 src/module_info.h               |   8 +-
 src/mpmo.cc                     |   2 +-
 src/mpmo.h                      |  16 +--
 src/node.cc                     |   4 +-
 src/node.h                      |   4 +-
 src/oper_args.cc                |  10 +-
 src/oper_args.h                 |   6 +-
 src/param_conversion.cc         |  50 ++++----
 src/param_conversion.h          |  32 ++---
 src/parse_literals.cc           |   6 +-
 src/parse_literals.h            |   6 +-
 src/parser.cc                   |   8 +-
 src/parser.h                    |   6 +-
 src/percentiles.cc              |   2 +-
 src/percentiles.h               |   2 +-
 src/percentiles_hist.cc         |  14 +--
 src/percentiles_hist.h          |   6 +-
 src/pmlist.cc                   |  28 ++---
 src/pmlist.h                    |  10 +-
 src/pointsearch_full.h          |   8 +-
 src/pointsearch_healpix.h       |   6 +-
 src/pointsearch_kdtree.h        |   8 +-
 src/pointsearch_nanoflann.h     |   8 +-
 src/pointsearch_reg2d.h         |   8 +-
 src/pointsearch_spherepart.h    |   8 +-
 src/pointsearch_unstruct.h      |   8 +-
 src/printinfo.cc                |   6 +-
 src/process.cc                  |  24 ++--
 src/process.h                   |  22 ++--
 src/processManager.cc           |   6 +-
 src/processManager.h            |   2 +-
 src/process_int.cc              |   2 +-
 src/process_int.h               |   2 +-
 src/region.cc                   |   4 +-
 src/region.h                    |   2 +-
 src/remap.h                     |  36 +++---
 src/remap_bicubic.cc            |  14 +--
 src/remap_bilinear.cc           |  22 ++--
 src/remap_conserv.cc            |  36 +++---
 src/remap_gradients.cc          |  10 +-
 src/remap_knn.cc                |  16 +--
 src/remap_point_search.cc       |  18 +--
 src/remap_scrip_io.cc           |   4 +-
 src/remap_search_reg2d.cc       |   2 +-
 src/remap_stat.cc               |   4 +-
 src/remap_store_link.cc         |   8 +-
 src/remap_utils.cc              |   6 +-
 src/remap_utils.h               |   6 +-
 src/remap_vars.cc               |  64 +++++-----
 src/remap_vars.h                |   8 +-
 src/remaplib.cc                 |  16 +--
 src/sellist.cc                  |  32 ++---
 src/sellist.h                   |   8 +-
 src/specspace.cc                |  30 ++---
 src/specspace.h                 |  20 ++--
 src/stdnametable.cc             |   2 +-
 src/stdnametable.h              |   2 +-
 src/table.cc                    |   4 +-
 src/table.h                     |   2 +-
 src/util_date.h                 |   2 +-
 src/util_files.cc               |   8 +-
 src/util_files.h                |   6 +-
 src/util_string.cc              |  12 +-
 src/util_string.h               |  20 ++--
 src/util_wildcards.cc           |   2 +-
 src/util_wildcards.h            |   2 +-
 src/varray.cc                   | 206 ++++++++++++++++----------------
 src/varray.h                    |  64 +++++-----
 src/vector3d.h                  |  12 +-
 src/vertical_interp.cc          |   6 +-
 src/vertical_interp.h           |   2 +-
 325 files changed, 2193 insertions(+), 2193 deletions(-)

diff --git a/src/Adisit.cc b/src/Adisit.cc
index 67a948169..fa52369fa 100644
--- a/src/Adisit.cc
+++ b/src/Adisit.cc
@@ -76,7 +76,7 @@ adipot_kernel(double t, double s, double p)
 }
 
 static void
-calc_adisit(size_t gridsize, size_t nlevel, const Varray<double> &pressure, const FieldVector &tho, const FieldVector &sao,
+calc_adisit(size_t gridsize, size_t nlevel, Varray<double> const &pressure, FieldVector const &tho, FieldVector const &sao,
             FieldVector &tis)
 {
   // pressure units: hPa
@@ -85,8 +85,8 @@ calc_adisit(size_t gridsize, size_t nlevel, const Varray<double> &pressure, cons
 
   for (size_t levelID = 0; levelID < nlevel; ++levelID)
     {
-      const auto &thovec = tho[levelID].vec_d;
-      const auto &saovec = sao[levelID].vec_d;
+      auto const &thovec = tho[levelID].vec_d;
+      auto const &saovec = sao[levelID].vec_d;
       auto &tisvec = tis[levelID].vec_d;
       auto thoMissval = tho[levelID].missval;
       auto saoMissval = sao[levelID].missval;
@@ -100,7 +100,7 @@ calc_adisit(size_t gridsize, size_t nlevel, const Varray<double> &pressure, cons
 }
 
 static void
-calc_adipot(size_t gridsize, size_t nlevel, const Varray<double> &pressure, const FieldVector &t, const FieldVector &s,
+calc_adipot(size_t gridsize, size_t nlevel, Varray<double> const &pressure, FieldVector const &t, FieldVector const &s,
             FieldVector &tpot)
 {
   // pressure units: hPa
@@ -109,8 +109,8 @@ calc_adipot(size_t gridsize, size_t nlevel, const Varray<double> &pressure, cons
 
   for (size_t levelID = 0; levelID < nlevel; ++levelID)
     {
-      const auto &tvec = t[levelID].vec_d;
-      const auto &svec = s[levelID].vec_d;
+      auto const &tvec = t[levelID].vec_d;
+      auto const &svec = s[levelID].vec_d;
       auto &tpotvec = tpot[levelID].vec_d;
       auto tMissval = t[levelID].missval;
       auto sMissval = s[levelID].missval;
@@ -124,7 +124,7 @@ calc_adipot(size_t gridsize, size_t nlevel, const Varray<double> &pressure, cons
 }
 
 int
-get_code(const CdoVar &var, const std::string &cname)
+get_code(const CdoVar &var, std::string const &cname)
 {
   auto code = var.code;
   if (code <= 0)
@@ -159,7 +159,7 @@ configureOutput(const std::function<void(int, int)> &outputSettingFunc, const Va
 {
   double pin = (cdo_operator_argc() == 1) ? parameter_to_double(cdo_operator_argv(0)) : -1.0;
 
-  const auto &vars = varList.vars;
+  auto const &vars = varList.vars;
 
   auto units = vars[thoID].units;
   if (units.empty()) units = "Celcius";
@@ -287,7 +287,7 @@ public:
     std::string cname_ADIPOT{ "sea_water_temperature" };
     std::string cname = (operatorID == ADISIT) ? cname_ADISIT : cname_ADIPOT;
 
-    for (const auto &var : varList1.vars)
+    for (auto const &var : varList1.vars)
       {
         auto code = get_code(var, cname);
 
@@ -315,7 +315,7 @@ public:
 
     auto outputSettingFunc = (operatorID == ADISIT) ? outputSetting_ADISIT : outputSetting_ADIPOT;
 
-    const auto &configResults = configureOutput(outputSettingFunc, varList1, vlistID1, thoID, saoID, tho, sao, tis, pressure);
+    auto const &configResults = configureOutput(outputSettingFunc, varList1, vlistID1, thoID, saoID, tho, sao, tis, pressure);
 
     streamID2 = configResults.streamID2;
     vlistID2 = configResults.vlistID2;
diff --git a/src/Afterburner.cc b/src/Afterburner.cc
index 816ba4a8d..98f62f400 100644
--- a/src/Afterburner.cc
+++ b/src/Afterburner.cc
@@ -286,7 +286,7 @@ after_getDateTime(const struct Date &datetime)
 }
 
 static void
-after_setDateTime(struct Date *datetime, const CdiDateTime &cdiDateTime)
+after_setDateTime(struct Date *datetime, CdiDateTime const &cdiDateTime)
 {
   int sec, ms;
   cdiDate_decode(cdiDateTime.date, &datetime->yr, &datetime->mo, &datetime->dy);
diff --git a/src/Arithdays.cc b/src/Arithdays.cc
index 6af23fbd1..ebe668705 100644
--- a/src/Arithdays.cc
+++ b/src/Arithdays.cc
@@ -24,7 +24,7 @@
 #include "field_functions.h"
 
 static double
-dayofyear(int calendar, const CdiDateTime &vDateTime)
+dayofyear(int calendar, CdiDateTime const &vDateTime)
 {
   constexpr int month_360[12] = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 };
   constexpr int month_365[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
diff --git a/src/Arithlat.cc b/src/Arithlat.cc
index f9e8084b2..8c71eec52 100644
--- a/src/Arithlat.cc
+++ b/src/Arithlat.cc
@@ -111,7 +111,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field.init(var1);
             cdo_read_field(streamID1, field);
 
diff --git a/src/Bitrounding.cc b/src/Bitrounding.cc
index ec99399f7..6dcd7d68f 100644
--- a/src/Bitrounding.cc
+++ b/src/Bitrounding.cc
@@ -133,13 +133,13 @@ bitround(int nsb, size_t len, Varray<float> &v, float missval)
 }
 
 static void
-check_range(double value, double minVal, double maxVal, const std::string &key)
+check_range(double value, double minVal, double maxVal, std::string const &key)
 {
   if (value < minVal || value > maxVal) cdo_abort("Parameter %s=%g out of range (min=%g/max=%g)!", key, value, minVal, maxVal);
 }
 
 static void
-check_range(int value, int minVal, int maxVal, const std::string &key)
+check_range(int value, int minVal, int maxVal, std::string const &key)
 {
   if (value < minVal || value > maxVal) cdo_abort("Parameter %s=%d out of range (min=%d/max=%d)!", key, value, minVal, maxVal);
 }
@@ -152,19 +152,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "inflevel")  check_range(params.infLevel = parameter_to_double(value), 0.0, 1.0, key);
@@ -244,7 +244,7 @@ set_global_attributes(int vlistID, const BitroundParams &params, int numVarsHave
 }
 
 static std::vector<int>
-get_vars_numbits(const VarList &varList, const std::string &filename)
+get_vars_numbits(const VarList &varList, std::string const &filename)
 {
   auto numVars = varList.numVars();
   std::vector<int> varsNumbits(numVars, -1);
@@ -259,17 +259,17 @@ get_vars_numbits(const VarList &varList, const std::string &filename)
       std::fclose(fp);
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
 
-          for (const auto &var : varList.vars)
+          for (auto const &var : varList.vars)
             {
               if (key == var.name)
                 {
-                  const auto &value = kv.values[0];
+                  auto const &value = kv.values[0];
                   auto numBits = parameter_to_int(value);
                   check_range(numBits, 1, 23, key);
                   varsNumbits[var.ID] = numBits;
@@ -346,7 +346,7 @@ public:
     set_global_attributes(vlistID2, params, numVarsHaveNumbits);
 
     auto numVars = varList1.numVars();
-    for (const auto &var : varList1.vars)
+    for (auto const &var : varList1.vars)
       {
         if (var.memType == MemType::Float)
           {
@@ -393,7 +393,7 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID1);
             cdo_def_field(streamID2, varID, levelID);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
 
@@ -442,9 +442,9 @@ public:
         if (Options::cdoVerbose && params.numBits == -1)
           {
             fprintf(stderr, "NSB: step=%d:", tsID + 1);
-            for (const auto &var1 : varList1.vars)
+            for (auto const &var1 : varList1.vars)
               {
-                const auto &varStat = varsStat[var1.ID];
+                auto const &varStat = varsStat[var1.ID];
                 if (varStat.nsbMin >= 1 && varStat.nsbMin <= 23)
                   {
                     fprintf(stderr, " %s=%d", var1.name.c_str(), varStat.nsbMin);
@@ -468,9 +468,9 @@ public:
 
     if (params.printBits)
       {
-        for (const auto &var1 : varList1.vars)
+        for (auto const &var1 : varList1.vars)
           {
-            const auto &varStatGlob = varsStatGlob[var1.ID];
+            auto const &varStatGlob = varsStatGlob[var1.ID];
             if (varStatGlob.nsbMin >= 1 && varStatGlob.nsbMin <= 23)
               fprintf(stdout, "%s=%d\n", var1.name.c_str(), varStatGlob.nsbMax);
           }
@@ -478,9 +478,9 @@ public:
     else if (Options::cdoVerbose && params.numBits == -1)
       {
         fprintf(stderr, "NSB: step=all:");
-        for (const auto &var1 : varList1.vars)
+        for (auto const &var1 : varList1.vars)
           {
-            const auto &varStatGlob = varsStatGlob[var1.ID];
+            auto const &varStatGlob = varsStatGlob[var1.ID];
             if (varStatGlob.nsbMin >= 1 && varStatGlob.nsbMin <= 23)
               {
                 fprintf(stderr, " %s=%d", var1.name.c_str(), varStatGlob.nsbMin);
diff --git a/src/CDIwrite.cc b/src/CDIwrite.cc
index c25bd1afe..8a391c001 100644
--- a/src/CDIwrite.cc
+++ b/src/CDIwrite.cc
@@ -88,7 +88,7 @@ get_parameter(void)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       // kvlist.name = cdo_module_name();
@@ -96,12 +96,12 @@ get_parameter(void)
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "nruns")      params.nruns = parameter_to_int(value);
diff --git a/src/CMOR.cc b/src/CMOR.cc
index 7cb07b4a2..c36ac8ad3 100644
--- a/src/CMOR.cc
+++ b/src/CMOR.cc
@@ -52,7 +52,7 @@ get_stringcode(int vlistID, int varID, std::string &varcodestring)
 }
 
 static int
-get_ifilevalue_code(int vlistID, const std::string &value, int nvars)
+get_ifilevalue_code(int vlistID, std::string const &value, int nvars)
 {
   int code = std::stoi(value);
   if (code > 0 && code < 1000)
@@ -75,7 +75,7 @@ get_ifilevalue_code(int vlistID, const std::string &value, int nvars)
 }
 
 static int
-get_ifilevalue_name(int vlistID, const std::string &value, int nvars)
+get_ifilevalue_name(int vlistID, std::string const &value, int nvars)
 {
   char ifilevalue[CDI_MAX_NAME];
   for (int varID = 0; varID < nvars; ++varID)
@@ -87,7 +87,7 @@ get_ifilevalue_name(int vlistID, const std::string &value, int nvars)
 }
 
 static int
-getVarIDToMap(int vlistID, int nvars, const std::string &key, const std::string &value)
+getVarIDToMap(int vlistID, int nvars, std::string const &key, std::string const &value)
 {
   if (key.compare("code") == 0)
     return get_ifilevalue_code(vlistID, value, nvars);
@@ -123,13 +123,13 @@ sigfunc(int sig)
 }
 
 static std::string
-kv_get_a_val(KVList *kvl, const std::string &key, const std::string &replacer)
+kv_get_a_val(KVList *kvl, std::string const &key, std::string const &replacer)
 {
   return kvl->get_first_value(key, replacer);
 }
 
 KVList
-maptab_search_miptab(PMList pmlist, const std::string &cmorname, const std::string &miptab, const std::string &key)
+maptab_search_miptab(PMList pmlist, std::string const &cmorname, std::string const &miptab, std::string const &key)
 {
   KVList listlatest;
   if (pmlist.size() && !cmorname.empty() && !miptab.empty())
@@ -150,7 +150,7 @@ maptab_search_miptab(PMList pmlist, const std::string &cmorname, const std::stri
 }
 
 static void
-handleError(std::string filename, int errnum, const std::string &argument)
+handleError(std::string filename, int errnum, std::string const &argument)
 {
   if (filename.empty())
     cdo_abort("ERROR (infile: '%s')! In parsing the command line:\n          More than 150 values for a key are not supported.",
@@ -241,7 +241,7 @@ copy_value(std::string const &value, std::vector<std::string> &values)
 }
 
 static char *
-to_cmor(const std::string &convert)
+to_cmor(std::string const &convert)
 {
   if (convert.empty()) return nullptr;
   return ((char *) convert.c_str());
@@ -257,7 +257,7 @@ quote_replace(std::vector<std::string> &values, int nvalues, int i)
 }
 
 static std::vector<std::string>
-parse_string_to_values(const std::string &workfile, const std::string &pppline, int *nvalues, const std::string &keyword)
+parse_string_to_values(std::string const &workfile, std::string const &pppline, int *nvalues, std::string const &keyword)
 {
   const char *pline = pppline.c_str();
   std::vector<std::string> values;
@@ -337,7 +337,7 @@ parse_string_to_values(const std::string &workfile, const std::string &pppline,
 }
 
 static void
-kv_insert_vals(KVList *kvl, const std::string &key, const std::string &stringValue, bool lreplace, bool lparse)
+kv_insert_vals(KVList *kvl, std::string const &key, std::string const &stringValue, bool lreplace, bool lparse)
 {
   /* For internal model and institution check if string is not null */
   if (!stringValue.empty())
@@ -361,7 +361,7 @@ kv_insert_vals(KVList *kvl, const std::string &key, const std::string &stringVal
 }
 
 static std::vector<std::string>
-kv_get_vals(KVList *kvl, const std::string &key, int *numvals)
+kv_get_vals(KVList *kvl, std::string const &key, int *numvals)
 {
   std::vector<std::string> result;
   const KeyValues *kv = kvl->search(key);
@@ -375,7 +375,7 @@ kv_get_vals(KVList *kvl, const std::string &key, int *numvals)
 }
 
 PMList
-cdo_parse_cmor_file(const std::string &filename, bool lismap)
+cdo_parse_cmor_file(std::string const &filename, bool lismap)
 {
   PMList pml;
 
@@ -412,7 +412,7 @@ cdo_parse_cmor_file(const std::string &filename, bool lismap)
 }
 
 static const std::string
-check_short_key(const std::string &key, bool l_short)
+check_short_key(std::string const &key, bool l_short)
 {
   std::vector<std::string> short_keys
       = { "cn", "n",  "c",  "u",   "cm",     "vc",         "p",  "i",  "ca", "za", "gi", "rtu", "mt", "om", "ms", "dr",
@@ -458,9 +458,9 @@ check_short_key(const std::string &key, bool l_short)
 }
 
 static void
-map_it(KVList *kvl, int vlistID, int varID, const std::string &var2map)
+map_it(KVList *kvl, int vlistID, int varID, std::string const &var2map)
 {
-  for (const auto &kv : *kvl)
+  for (auto const &kv : *kvl)
     {
       const std::string longkey = !check_short_key(kv.key, false).empty() ? check_short_key(kv.key, false) : "";
       if (longkey.empty())
@@ -487,7 +487,7 @@ map_it(KVList *kvl, int vlistID, int varID, const std::string &var2map)
 }
 
 static int
-change_name_via_name(int vlistID, const std::string &map_name, const std::string &cmor_name)
+change_name_via_name(int vlistID, std::string const &map_name, std::string const &cmor_name)
 {
   char name[CDI_MAX_NAME];
   for (int varID = 0; varID < vlistNvars(vlistID); ++varID)
@@ -503,7 +503,7 @@ change_name_via_name(int vlistID, const std::string &map_name, const std::string
 }
 
 static int
-change_name_via_code(int vlistID, const std::string &map_code, const std::string &cmor_name)
+change_name_via_code(int vlistID, std::string const &map_code, std::string const &cmor_name)
 {
   int codeproof = std::stol(map_code);
   if (!codeproof || codeproof > 1000)
@@ -593,7 +593,7 @@ count_axis_ids(int *axis_ids)
 }
 
 static const KVList *
-check_for_charvars(KVList *cmorVarLine, const std::string &key)
+check_for_charvars(KVList *cmorVarLine, std::string const &key)
 {
   /***/
   /* If a infile variable selector (name or code) has more than one value, it must be a character coordinate*/
@@ -632,7 +632,7 @@ check_for_charvars(KVList *cmorVarLine, const std::string &key)
 }
 
 static void
-addcharvar(const KeyValues *charvars, int vlistID, const std::string &key, struct mapping vars[])
+addcharvar(const KeyValues *charvars, int vlistID, std::string const &key, struct mapping vars[])
 {
   MergeVarsOnAxis withnewcharaxis;
   withnewcharaxis.inputNames = *charvars;
@@ -720,8 +720,8 @@ addcharvar(const KeyValues *charvars, int vlistID, const std::string &key, struc
 }
 
 static int
-maptab_via_key(const std::string &tablename, PMList pml, int vlistID, int varID, const std::string &key,
-               const std::string &miptabfreq)
+maptab_via_key(std::string const &tablename, PMList pml, int vlistID, int varID, std::string const &key,
+               std::string const &miptabfreq)
 {
   char ifilevalue[CDI_MAX_NAME];
   std::string cppifile;
@@ -762,7 +762,7 @@ maptab_via_key(const std::string &tablename, PMList pml, int vlistID, int varID,
 }
 
 static int
-maptab_via_cn_and_key(KVList *kvl_oname, int vlistID, int nvars, const std::string &key)
+maptab_via_cn_and_key(KVList *kvl_oname, int vlistID, int nvars, std::string const &key)
 {
   const KeyValues *kv = kvl_oname->search(key);
   const KeyValues *kvcn = kvl_oname->search("cmor_name");
@@ -798,8 +798,8 @@ maptab_via_cn_and_key(KVList *kvl_oname, int vlistID, int nvars, const std::stri
 }
 
 static void
-maptab_via_cmd(std::string tablename, PMList pml, const std::string &origValue, int vlistID, const std::string &key,
-               std::string cmorName, const std::string &miptabfreq, int filetype, const std::string &maptab)
+maptab_via_cmd(std::string tablename, PMList pml, std::string const &origValue, int vlistID, std::string const &key,
+               std::string cmorName, std::string const &miptabfreq, int filetype, std::string const &maptab)
 {
   KVList cmorVarLine;
 
@@ -847,8 +847,8 @@ maptab_via_cmd(std::string tablename, PMList pml, const std::string &origValue,
 }
 
 static void
-maptab_via_cn(const std::string &tablename, PMList pml, std::vector<std::string> request, int vlistID, int numvals,
-              const std::string &miptabfreq, int filetype, struct mapping vars[], bool isWarn)
+maptab_via_cn(std::string const &tablename, PMList pml, std::vector<std::string> request, int vlistID, int numvals,
+              std::string const &miptabfreq, int filetype, struct mapping vars[], bool isWarn)
 {
   for (int j = 0; j < numvals; ++j)
     {
@@ -912,7 +912,7 @@ maptab_via_cn(const std::string &tablename, PMList pml, std::vector<std::string>
 }
 
 static bool
-file_exist(const std::string &tfilename, bool force, const std::string &fileart, bool print)
+file_exist(std::string const &tfilename, bool force, std::string const &fileart, bool print)
 {
   assert(!tfilename.empty());
   size_t filesize = FileUtils::size(tfilename.c_str());
@@ -938,7 +938,7 @@ file_exist(const std::string &tfilename, bool force, const std::string &fileart,
 }
 
 static int
-parse_kv_file(KVList *kvl, const std::string &filename)
+parse_kv_file(KVList *kvl, std::string const &filename)
 {
   PMList pmkv = cdo_parse_cmor_file(filename, false);
   if (!pmkv.size()) return 0;
@@ -959,7 +959,7 @@ parse_kv_file(KVList *kvl, const std::string &filename)
 }
 
 static void
-check_compare_set(std::string &finalset, std::string &attribute, const std::string &attname, const std::string &defaultstr)
+check_compare_set(std::string &finalset, std::string &attribute, std::string const &attname, std::string const &defaultstr)
 {
   if (finalset.empty())
     {
@@ -1043,7 +1043,7 @@ get_infile_attname(int vlistID, int varID, int natt, int *type, int *len)
 }
 
 static std::string
-get_txtatt(int vlistID, int varID, const std::string &key)
+get_txtatt(int vlistID, int varID, std::string const &key)
 {
   int natts;
   std::string returnvalue = "";
@@ -1196,7 +1196,7 @@ attErr(const std::vector<std::string> &reqAtt, int errnum)
 }
 
 static void
-check_attr(KVList *kvl, const std::string &project_id, int vlistID)
+check_attr(KVList *kvl, std::string const &project_id, int vlistID)
 {
   /* Project id moved to main void fct */
   std::vector<std::string> reqAtt = { "institution", "source", "experiment_id", "rtu" };
@@ -1305,7 +1305,7 @@ check_attr(KVList *kvl, const std::string &project_id, int vlistID)
 }
 
 static void
-check_mem(KVList *kvl, const std::string &project_id)
+check_mem(KVList *kvl, std::string const &project_id)
 {
   /*Check if both is registered */
   std::vector<std::string> ensindexCMIP5 = { "realization", "initialization_method", "physics_version" };
@@ -1329,7 +1329,7 @@ check_mem(KVList *kvl, const std::string &project_id)
           long int indexvalues[3] = { 0 };
           int indexint = 0;
 
-          for (const auto &index : ensindexCMIP5)
+          for (auto const &index : ensindexCMIP5)
             {
               std::string indexstring = kv_get_a_val(kvl, index, "");
               if (!indexstring.empty())
@@ -1366,7 +1366,7 @@ check_mem(KVList *kvl, const std::string &project_id)
                           "Make sure it has the format 'rINTiINTpINT'",
                           cdo_get_stream_name(0));
               indexint = 0;
-              for (const auto &index : ensindexCMIP5)
+              for (auto const &index : ensindexCMIP5)
                 {
                   std::string index2string = std::to_string(indexvalues[indexint]);
                   kv_insert_vals(kvl, index, index2string, true, false);
@@ -1411,7 +1411,7 @@ check_mem(KVList *kvl, const std::string &project_id)
       long int indexvalues[4] = { 0 };
       int indexint = 0;
 
-      for (const auto &index : ensindexCMIP6)
+      for (auto const &index : ensindexCMIP6)
         {
           std::string indexstring = kv_get_a_val(kvl, index, "");
           if (!indexstring.empty())
@@ -1448,7 +1448,7 @@ check_mem(KVList *kvl, const std::string &project_id)
                       "Make sure it has the format 'rINTiINTpINTfINT'",
                       cdo_get_stream_name(0));
           indexint = 0;
-          for (const auto &index : ensindexCMIP6)
+          for (auto const &index : ensindexCMIP6)
             {
               std::string index2string = std::to_string(indexvalues[indexint]);
               kv_insert_vals(kvl, index, index2string, true, false);
@@ -1536,7 +1536,7 @@ read_config_files(KVList *kvl)
 }
 
 static int
-in_list(const std::vector<std::string> &list, const std::string &needle, int num)
+in_list(const std::vector<std::string> &list, std::string const &needle, int num)
 {
   for (int i = 0; i < num; ++i)
     if (list[i] == needle) return 1;
@@ -1544,7 +1544,7 @@ in_list(const std::vector<std::string> &list, const std::string &needle, int num
 }
 
 static int
-get_netcdf_file_action(KVList *kvl, const std::string &proj)
+get_netcdf_file_action(KVList *kvl, std::string const &proj)
 {
   (void) proj;
   std::string chunk = kv_get_a_val(kvl, "om", "a");
@@ -1623,7 +1623,7 @@ get_calendar_ptr(int calendar)
 }
 
 static int
-get_calendar_int(const std::string &calendar)
+get_calendar_int(std::string const &calendar)
 {
   if (calendar.empty())
     return -1;
@@ -1670,7 +1670,7 @@ get_time_units(int taxisID)
 }
 
 static int
-get_time_step_int(const std::string &time_step)
+get_time_step_int(std::string const &time_step)
 {
   if (time_step == "seconds")
     return TUNIT_SECOND;
@@ -1693,7 +1693,7 @@ get_time_step_int(const std::string &time_step)
 }
 
 static int
-check_time_units(const std::string &time_units)
+check_time_units(std::string const &time_units)
 {
   /* Required attribute in check_att */
   int attyear, attmonth, attday, atthour, attminute, attsecond;
@@ -1713,7 +1713,7 @@ check_time_units(const std::string &time_units)
 }
 
 static void
-get_time_method(KVList *kvl, int vlistID, int varID, std::string &cmor_time_name, const std::string &project_id, int miptab_freq,
+get_time_method(KVList *kvl, int vlistID, int varID, std::string &cmor_time_name, std::string const &project_id, int miptab_freq,
                 int *time_axis)
 {
   if ((project_id == "CMIP5" || project_id == "CMIP6") && miptab_freq) switch (miptab_freq)
@@ -1795,7 +1795,7 @@ get_time_method(KVList *kvl, int vlistID, int varID, std::string &cmor_time_name
 }
 
 static CdiDateTime
-get_taxis(const std::string &required_time_units, int *timeunit)
+get_taxis(std::string const &required_time_units, int *timeunit)
 {
   int attyear, attmonth, attday, atthour, attminute, attsecond;
   char atttimeunit[CMOR_MAX_STRING];
@@ -1811,7 +1811,7 @@ get_taxis(const std::string &required_time_units, int *timeunit)
 }
 
 static double *
-get_branch_times(KVList *kvl, int calendar, const std::string &time_units, const std::string &project_id)
+get_branch_times(KVList *kvl, int calendar, std::string const &time_units, std::string const &project_id)
 {
   if (Options::cdoVerbose) cdo_print("6.1.2. Start to compute attribute 'branch_time'.");
   std::string btip = kv_get_a_val(kvl, "branch_time_in_parent", "");
@@ -1969,7 +1969,7 @@ copyCV(std::string directory)
 #endif
 
 static void
-setup_dataset(KVList *kvl, CdoStreamID streamID, int *calendar, const std::string &project_id)
+setup_dataset(KVList *kvl, CdoStreamID streamID, int *calendar, std::string const &project_id)
 {
   if (Options::cdoVerbose) cdo_print("6. Start to process cmor_setup and cmor_dataset.");
   int netcdf_file_action = get_netcdf_file_action(kvl, project_id);
@@ -2449,7 +2449,7 @@ get_strmaxlen(const std::vector<std::string> &array, size_t len)
 }
 
 static void
-get_charvals_and_bnds(KVList *kvl, const std::string &chardim, std::vector<std::string> &fvalss, std::vector<std::string> &fbndss,
+get_charvals_and_bnds(KVList *kvl, std::string const &chardim, std::vector<std::string> &fvalss, std::vector<std::string> &fbndss,
                       std::string &funits, int *nofvals, int *nofbnds, std::string cmor_name)
 {
   bool fivedim = true;
@@ -2522,7 +2522,7 @@ register_char_axis(int numchar, const std::vector<std::string> &charvals, int *a
 }
 
 static void
-register_fourth_axis(KVList *kvl, int vlistID, int varID, const std::string &varname, int *axis_ids, const std::string &project_id,
+register_fourth_axis(KVList *kvl, int vlistID, int varID, std::string const &varname, int *axis_ids, std::string const &project_id,
                      int miptab_freq, int *mergeIDs)
 {
   (void) project_id;
@@ -2670,8 +2670,8 @@ registerPsid(struct mapping vars[], int psindex, int vlistID)
 }
 
 static void
-register_z_axis(KVList *kvl, int vlistID, int varID, int zaxisID, const std::string &varname, std::string &zaxis, int *axis_ids,
-                int *zfactor_id, const std::string &project_id, int miptab_freq, int *mergeIDs, struct mapping vars[],
+register_z_axis(KVList *kvl, int vlistID, int varID, int zaxisID, std::string const &varname, std::string &zaxis, int *axis_ids,
+                int *zfactor_id, std::string const &project_id, int miptab_freq, int *mergeIDs, struct mapping vars[],
                 CdoStreamID streamID)
 {
   char zaxisunits[CDI_MAX_NAME];
@@ -3148,7 +3148,7 @@ dimension.\n");
 }
 */
 static void
-change_zaxis(KVList *kvl, int vlistID, int zaxisID, int zaxisID2, const std::string &grid_file)
+change_zaxis(KVList *kvl, int vlistID, int zaxisID, int zaxisID2, std::string const &grid_file)
 {
   int a, b;
   a = zaxisInqSize(zaxisID);
@@ -3285,7 +3285,7 @@ inquire_vals_and_bounds(int gridID, int *xnbounds, int *ynbounds, double *xcoord
 }
 
 static void
-get_cmor_table(KVList *kvl, const std::string &project_id)
+get_cmor_table(KVList *kvl, std::string const &project_id)
 {
   int gridtable_id;
   int cmf = 0;
@@ -3753,8 +3753,8 @@ register_projection(int *grid_ids, int projID, double *ycoord_vals, double *xcoo
 }
 
 static void
-register_grid(KVList *kvl, int vlistID, int varID, int *axis_ids, int *grid_ids, const std::string &project_id,
-              const std::string &cmor_name)
+register_grid(KVList *kvl, int vlistID, int varID, int *axis_ids, int *grid_ids, std::string const &project_id,
+              std::string const &cmor_name)
 {
   int cmf = 0;
   int gridID = vlistInqVarGrid(vlistID, varID);
@@ -4140,7 +4140,7 @@ switch_grid_info(KVList *kvl, CdoStreamID streamID, std::string grid_file, int v
 }
 
 static void
-register_all_dimensions(KVList *kvl, CdoStreamID streamID, struct mapping vars[], int table_id, const std::string &project_id,
+register_all_dimensions(KVList *kvl, CdoStreamID streamID, struct mapping vars[], int table_id, std::string const &project_id,
                         int miptab_freq, int *time_axis, int *mergeIDs)
 {
   int cmf = 0;
@@ -4508,7 +4508,7 @@ get_tunitsec(int tunit)
 }
 
 static JulianDate
-get_cmor_time_val(KVList *kvl, int taxisID, JulianDate ref_date, int /*tunitsec*/, int calendar, const std::string &frequency,
+get_cmor_time_val(KVList *kvl, int taxisID, JulianDate ref_date, int /*tunitsec*/, int calendar, std::string const &frequency,
                   int ts_id, int time_axis)
 {
   auto vDateTime = taxisInqVdatetime(taxisID);
@@ -5920,7 +5920,7 @@ static int find_cmorvar(list_t *tester, std::string cn, std::string  miptabfreq)
 }
 */
 static void
-read_maptab(KVList *kvl, CdoStreamID streamID, const std::string &miptabfreq, struct mapping vars[])
+read_maptab(KVList *kvl, CdoStreamID streamID, std::string const &miptabfreq, struct mapping vars[])
 {
   /***/
   /* Build mapping table from a combination of two attributes if mt does not begin with / and a directory path is given
@@ -6047,7 +6047,7 @@ read_maptab(KVList *kvl, CdoStreamID streamID, const std::string &miptabfreq, st
 }
 
 static void
-replace_key(KVList *kvl, const KeyValues &kv, const std::string &newkey)
+replace_key(KVList *kvl, const KeyValues &kv, std::string const &newkey)
 {
   std::vector<std::string> values(kv.nvalues);
   int k = 0;
@@ -6063,7 +6063,7 @@ parse_cmdline(KVList *kvl, std::vector<std::string> &params)
   if (kvl->parse_arguments(params) != 0) cdo_abort("ERROR (infile: '%s')! Could not parse command line.", cdo_get_stream_name(0));
 
   std::vector<KeyValues> keystorm, keystosubs;
-  for (const auto &kv : *kvl)
+  for (auto const &kv : *kvl)
     {
       const std::string short_key = check_short_key(kv.key, true);
       if (!short_key.empty())
@@ -6081,7 +6081,7 @@ parse_cmdline(KVList *kvl, std::vector<std::string> &params)
 }
 
 static std::string
-get_mip_table(const std::string &params, KVList *kvl, const std::string &project_id, bool print)
+get_mip_table(std::string const &params, KVList *kvl, std::string const &project_id, bool print)
 {
   std::string miptab;
   if (print && Options::cdoVerbose) cdo_print("2.2. Start to find a MIP table file.");
@@ -6148,7 +6148,7 @@ get_mip_table(const std::string &params, KVList *kvl, const std::string &project
 }
 
 static std::string
-freq_from_path(const std::string &mip_table)
+freq_from_path(std::string const &mip_table)
 {
   std::string freq;
 
@@ -6164,7 +6164,7 @@ freq_from_path(const std::string &mip_table)
 }
 
 static int
-get_miptab_freq(const std::string &mip_table, const std::string &project_id)
+get_miptab_freq(std::string const &mip_table, std::string const &project_id)
 {
   int miptab_freq = 0;
   std::string freq = freq_from_path(mip_table);
@@ -6226,7 +6226,7 @@ check_cmdline_mapping(KVList *kvl)
 }
 
 static std::string
-get_project_id(KVList *kvl, const std::string &params)
+get_project_id(KVList *kvl, std::string const &params)
 {
   if (Options::cdoVerbose) cdo_print("2.1. Start to check whether 'project_id' or 'mip_era' is denoted.");
   std::string project_id = "", dummy, dummy2;
@@ -6306,7 +6306,7 @@ get_project_id(KVList *kvl, const std::string &params)
 }
 
 static int
-cmor_load_and_set_table(KVList *kvl, const std::string &param0, const std::string &project_id, std::string &mip_table)
+cmor_load_and_set_table(KVList *kvl, std::string const &param0, std::string const &project_id, std::string &mip_table)
 {
   int table_id = 0, cmf = 0;
 #if (CMOR_VERSION_MAJOR == 3)
diff --git a/src/CMOR_lite.cc b/src/CMOR_lite.cc
index 7ab3aa680..f9b542851 100644
--- a/src/CMOR_lite.cc
+++ b/src/CMOR_lite.cc
@@ -22,7 +22,7 @@
 #include "cdi_lockedIO.h"
 
 void
-cdo_define_var_units(CmorVar &cmorVar, int vlistID2, int varID, const std::string &units)
+cdo_define_var_units(CmorVar &cmorVar, int vlistID2, int varID, std::string const &units)
 {
   auto unitsOld = cdo::inq_var_units(vlistID2, varID);
   if (units != unitsOld)
@@ -60,7 +60,7 @@ cmor_check_eval(int vlistID, const std::vector<CmorVar> &cmorVars)
   int numVars = cmorVars.size();
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &cmorVar = cmorVars[varID];
+      auto const &cmorVar = cmorVars[varID];
       if (cmorVar.checkValid || cmorVar.check_min_mean_abs || cmorVar.check_max_mean_abs)
         {
           auto amean = cmorVar.amean;
@@ -152,10 +152,10 @@ search_global_missval(PMList &pmlist, int vlistID2, bool &hasMissvals, double &m
   auto kvlist = pmlist.getKVListVentry(hentry);
   if (kvlist)
     {
-      for (const auto &kv : *kvlist)
+      for (auto const &kv : *kvlist)
         {
-          const auto &key = kv.key;
-          const auto &value = kv.values[0];
+          auto const &key = kv.key;
+          auto const &value = kv.values[0];
           if (kv.nvalues != 1 || value.empty()) continue;
 
           if (key == "missing_value")
@@ -203,10 +203,10 @@ apply_cmor_list(PMList &pmlist, int vlistID2, std::vector<CmorVar> &cmorVars)
         {
           auto hasValidMin = false, hasValidMax = false;
 
-          for (const auto &kv : *kvlist)
+          for (auto const &kv : *kvlist)
             {
-              const auto &key = kv.key;
-              const auto &value = kv.values[0];
+              auto const &key = kv.key;
+              auto const &value = kv.values[0];
               if (kv.nvalues != 1 || value.empty()) continue;
               auto value_cstr = value.c_str();
 
@@ -458,7 +458,7 @@ public:
             size_t numMissVals;
             cdo_read_field(streamID1, array.data(), &numMissVals);
 
-            const auto &var2 = varList2.vars[varID2];
+            auto const &var2 = varList2.vars[varID2];
             auto missval = var2.missval;
             auto gridsize = var2.gridsize;
             if (var2.nwpv != CDI_REAL) gridsize *= 2;
diff --git a/src/CMOR_table.cc b/src/CMOR_table.cc
index 6709136eb..094d10a28 100644
--- a/src/CMOR_table.cc
+++ b/src/CMOR_table.cc
@@ -19,11 +19,11 @@ dump_cmor_table(const PMList &pmlist)
 {
   printf("# Number of lists: %zu\n", pmlist.size());
   int i = 0;
-  for (const auto &kvlist : pmlist)
+  for (auto const &kvlist : pmlist)
     {
       printf("# list ID: %d;   Number of elements: %zu\n", i, kvlist.size());
       printf("&%s\n", kvlist.name.c_str());
-      for (const auto &kv : kvlist) { printf("  %s = %s\n", kv.key.c_str(), kv.values[0].c_str()); }
+      for (auto const &kv : kvlist) { printf("  %s = %s\n", kv.key.c_str(), kv.values[0].c_str()); }
       printf("/\n");
       ++i;
     }
@@ -39,16 +39,16 @@ conv_cmor_table(const PMList &pmlist)
   bool hasmissval = false;
   double missval = 0;
 
-  for (const auto &kvlist : pmlist)
+  for (auto const &kvlist : pmlist)
     {
-      const auto &listname = kvlist.name;
+      auto const &listname = kvlist.name;
 
       if (listname.starts_with(hname))
         {
-          for (const auto &kv : kvlist)
+          for (auto const &kv : kvlist)
             {
-              const auto &key = kv.key;
-              const auto &value = kv.values[0];
+              auto const &key = kv.key;
+              auto const &value = kv.values[0];
               if (key == "missing_value")
                 {
                   missval = std::stof(value);
@@ -59,10 +59,10 @@ conv_cmor_table(const PMList &pmlist)
       else if (listname.starts_with(vname))
         {
           printf("&%s\n", "parameter");
-          for (const auto &kv : kvlist)
+          for (auto const &kv : kvlist)
             {
-              const auto &key = kv.key;
-              const auto &value = kv.values[0];
+              auto const &key = kv.key;
+              auto const &value = kv.values[0];
               int vlen = value.size();
 
               int start = 0;
@@ -125,7 +125,7 @@ public:
     auto operatorID = cdo_operator_id();
 
     if (cdo_operator_argc() != 1) cdo_abort("Too few arguments!");
-    const auto &filename = cdo_operator_argv(0);
+    auto const &filename = cdo_operator_argv(0);
 
     if (Options::cdoVerbose) cdo_print("Parse file: %s", filename);
 
diff --git a/src/Cat.cc b/src/Cat.cc
index 81b992f24..6fa6ad56d 100644
--- a/src/Cat.cc
+++ b/src/Cat.cc
@@ -138,7 +138,7 @@ public:
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
 
-                const auto &var1 = varList1.vars[varID];
+                auto const &var1 = varList1.vars[varID];
                 if (hasConstVars && tsID2 > 0 && tsID1 == 0 && var1.isConstant) continue;
 
                 cdo_def_field(streamID2, varID, levelID);
diff --git a/src/Change.cc b/src/Change.cc
index d74f48a5a..a48468f1d 100644
--- a/src/Change.cc
+++ b/src/Change.cc
@@ -27,7 +27,7 @@
 static void
 change_code(const VarList &varList1, int vlistID2, int nch, const std::vector<int> &chints)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       for (int i = 0; i < nch; i += 2)
         if (var1.code == chints[i]) vlistDefVarCode(vlistID2, var1.ID, chints[i + 1]);
@@ -37,7 +37,7 @@ change_code(const VarList &varList1, int vlistID2, int nch, const std::vector<in
 static void
 change_tabnum(const VarList &varList1, int vlistID2, int nch, const std::vector<int> &chints)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       auto tabnum = tableInqNum(vlistInqVarTable(vlistID2, var1.ID));
       for (int i = 0; i < nch; i += 2)
@@ -52,7 +52,7 @@ change_tabnum(const VarList &varList1, int vlistID2, int nch, const std::vector<
 static void
 change_param(const VarList &varList1, int vlistID2, int nch, const std::vector<const char *> &chnames)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       if (Options::cdoVerbose)
         {
@@ -74,7 +74,7 @@ change_name(const VarList &varList1, int vlistID2, int nch, const std::vector<co
   for (int i = 0; i < npairs; ++i) vpairs[i].second = chnames[i * 2 + 1];
 
   std::vector<bool> namefound(npairs, false);
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       for (int i = 0; i < npairs; ++i)
         if (var1.name == vpairs[i].first)
@@ -172,7 +172,7 @@ change_name(const VarList &varList1, int vlistID2, int nch, const std::vector<co
 static void
 change_unit(const VarList &varList1, int vlistID2, int nch, const std::vector<const char *> &chnames)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       for (int i = 0; i < nch; i += 2)
         if (var1.units == chnames[i]) cdiDefKeyString(vlistID2, var1.ID, CDI_KEY_UNITS, chnames[i + 1]);
@@ -243,7 +243,7 @@ change_varLevel(int varID, int vlistID2, const std::vector<double> &chlevels)
 static void
 change_levelByCode(int chcode, const VarList &varList1, int vlistID2, const std::vector<double> &chlevels)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       if (var1.code == chcode)
         {
@@ -258,7 +258,7 @@ change_levelByCode(int chcode, const VarList &varList1, int vlistID2, const std:
 static void
 change_levelByName(const char *chname, const VarList &varList1, int vlistID2, const std::vector<double> &chlevels)
 {
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       if (var1.name == chname)
         {
diff --git a/src/Change_e5slm.cc b/src/Change_e5slm.cc
index 8699f9085..2f31aa3f5 100644
--- a/src/Change_e5slm.cc
+++ b/src/Change_e5slm.cc
@@ -105,7 +105,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         if (gridsize != var.gridsize) cdo_abort("gridsize differ!");
 
         auto code = var.code;
diff --git a/src/Cloudlayer.cc b/src/Cloudlayer.cc
index 2bc9db566..c5c4bfaa2 100644
--- a/src/Cloudlayer.cc
+++ b/src/Cloudlayer.cc
@@ -18,7 +18,7 @@
 /* ================================================= */
 
 static void
-layer_cloud(const Varray<double> &cc, Varray<double> &ll, long maxLevIndex, long minLevIndex, long dimgp)
+layer_cloud(Varray<double> const &cc, Varray<double> &ll, long maxLevIndex, long minLevIndex, long dimgp)
 {
   constexpr double ZEPSEC = 1.0 - 1.0e-12;
 
@@ -38,14 +38,14 @@ layer_cloud(const Varray<double> &cc, Varray<double> &ll, long maxLevIndex, long
 }
 
 static void
-vct2plev(const Varray<double> &vct, Varray<double> &plevs, long nlevels)
+vct2plev(Varray<double> const &vct, Varray<double> &plevs, long nlevels)
 {
   constexpr double SCALESLP = 101325.0;
   for (long k = 0; k < nlevels; ++k) plevs[k] = vct[k] + vct[k + nlevels] * SCALESLP;
 }
 
 static void
-hl_index(long &maxLevIndex, long &minLevIndex, double pmax, double pmin, long nlevels, const Varray<double> &levels)
+hl_index(long &maxLevIndex, long &minLevIndex, double pmax, double pmin, long nlevels, Varray<double> const &levels)
 {
   maxLevIndex = -1;
   minLevIndex = -1;
@@ -66,7 +66,7 @@ hl_index(long &maxLevIndex, long &minLevIndex, double pmax, double pmin, long nl
 }
 
 static void
-pl_index(long &maxLevIndex, long &minLevIndex, double pmax, double pmin, long nlevels, const Varray<double> &levels)
+pl_index(long &maxLevIndex, long &minLevIndex, double pmax, double pmin, long nlevels, Varray<double> const &levels)
 {
   maxLevIndex = -1;
   minLevIndex = -1;
@@ -146,7 +146,7 @@ public:
 
     auto aclcac_code = 223;
 
-    for (const auto &var1 : varList1.vars)
+    for (auto const &var1 : varList1.vars)
       {
         zaxisID = var1.zaxisID;
         auto code = var1.code;
@@ -175,7 +175,7 @@ public:
           cdo_abort("Cloud cover (parameter 223) not found!");
       }
 
-    const auto &aclcacVar = varList1.vars[aclcacID];
+    auto const &aclcacVar = varList1.vars[aclcacID];
     missval = aclcacVar.missval;
     gridID = aclcacVar.gridID;
     zaxisID = aclcacVar.zaxisID;
diff --git a/src/Collgrid.cc b/src/Collgrid.cc
index 8646f59fe..05372d6cf 100644
--- a/src/Collgrid.cc
+++ b/src/Collgrid.cc
@@ -266,7 +266,7 @@ gen_coll_grid(int numGrids, int numFiles, std::vector<CollgridInfo> &collgridInf
 }
 /*
 static void
-coll_cells_reg2d(const Field &field1, Field &field2, const CollgridInfo &collgridInfo, size_t nlon)
+coll_cells_reg2d(Field const &field1, Field &field2, const CollgridInfo &collgridInfo, size_t nlon)
 {
   auto nx = collgridInfo.nx;
   auto ny = collgridInfo.ny;
@@ -276,7 +276,7 @@ coll_cells_reg2d(const Field &field1, Field &field2, const CollgridInfo &collgri
       auto offset1 = j * nx;
       auto offset2 = collgridInfo.offset + j * nlon;
 
-      auto func = [&](const auto &v1, auto &v2, auto n) {
+      auto func = [&](auto const &v1, auto &v2, auto n) {
         for (size_t i = 0; i < nx; ++i) { v2[offset2 + i] = v1[offset1 + i]; }
       };
       field_operation2(func, field1, field2);
@@ -284,9 +284,9 @@ coll_cells_reg2d(const Field &field1, Field &field2, const CollgridInfo &collgri
 }
 */
 static void
-collect_cells(const Field &field1, Field &field2, const std::vector<long> &cellIndex)
+collect_cells(Field const &field1, Field &field2, const std::vector<long> &cellIndex)
 {
-  auto func = [&](const auto &v1, auto &v2, auto n) {
+  auto func = [&](auto const &v1, auto &v2, auto n) {
     for (size_t i = 0; i < n; ++i) { v2[cellIndex[i]] = v1[i]; }
   };
   field_operation2(func, field1, field2, field1.size);
@@ -299,7 +299,7 @@ get_var_gridindex(int vlistID, const VarList &varList)
   auto numGrids = vlistNumGrids(vlistID);
 
   std::vector<int> varGridIndex(numVars, 0);
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       for (int index = 0; index < numGrids; ++index)
         {
@@ -332,7 +332,7 @@ get_gridinfo(int vlistID, const VarList &varList, const std::vector<int> &varGri
   int globalEdgeIndicesID = -1;
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       // clang-format off
       if      (var.name == "global_cell_indices") globalCellIndicesID = varID;
       else if (var.name == "global_vert_indices") globalVertIndicesID = varID;
@@ -474,7 +474,7 @@ public:
         collgridInfo[fileID].varList = VarList(vlistID);
       }
 
-    const auto &varList1 = collgridInfo[0].varList;
+    auto const &varList1 = collgridInfo[0].varList;
     vlistID1 = collgridInfo[0].vlistID;
     vlistClearFlag(vlistID1);
 
diff --git a/src/Command.cc b/src/Command.cc
index 50efa273b..6d4b78603 100644
--- a/src/Command.cc
+++ b/src/Command.cc
@@ -38,16 +38,16 @@ static Varray<double> gl_data;
 
 static int Done = 0;
 
-static int com_help(const std::string &);
-static int com_list(const std::string &);
-static int com_quit(const std::string &);
-static int com_stat(const std::string &);
-static int com_set(const std::string &);
-static int com_vars(const std::string &);
+static int com_help(std::string const &);
+static int com_list(std::string const &);
+static int com_quit(std::string const &);
+static int com_stat(std::string const &);
+static int com_set(std::string const &);
+static int com_vars(std::string const &);
 
 struct command_t
 {
-  int (*func)(const std::string &);  // Function to call to do the job.
+  int (*func)(std::string const &);  // Function to call to do the job.
   const std::string name;            // User printable name of the function.
   const std::string doc;             // Documentation for this function.
 };
@@ -76,7 +76,7 @@ valid_argument(char *caller, char *arg)
 */
 // Print out help for ARG, or for all of the commands if ARG is not present.
 static int
-com_help(const std::string &arg)
+com_help(std::string const &arg)
 {
   int printed = 0;
 
@@ -111,7 +111,7 @@ com_help(const std::string &arg)
 
 // List the file(s) named in arg
 static int
-com_list(const std::string &arg)
+com_list(std::string const &arg)
 {
   (void) (arg);
 
@@ -120,7 +120,7 @@ com_list(const std::string &arg)
 
 // The user wishes to quit using this program. Just set DONE non-zero.
 static int
-com_quit(const std::string &arg)
+com_quit(std::string const &arg)
 {
   (void) (arg);
 
@@ -130,11 +130,11 @@ com_quit(const std::string &arg)
 }
 
 static int
-com_stat(const std::string &arg)
+com_stat(std::string const &arg)
 {
   (void) (arg);  // unused
 
-  const auto &var = varList.vars[gl_varID];
+  auto const &var = varList.vars[gl_varID];
   auto name = var.name.c_str();
 
   auto tsID2 = gl_tsID2;
@@ -181,7 +181,7 @@ paramWarning(const char *name, const char *cstring, const char *endptr)
 }
 
 int
-param2int(const std::string &str)
+param2int(std::string const &str)
 {
   char *endptr = nullptr;
   int ival = (int) strtol(str.c_str(), &endptr, 10);
@@ -329,7 +329,7 @@ set_var(const std::vector<std::string> &argv)
 }
 
 static int
-com_set(const std::string &arg)
+com_set(std::string const &arg)
 {
   printf("com_set: >%s<\n", arg.c_str());
   if (arg.empty())
@@ -353,7 +353,7 @@ com_set(const std::string &arg)
 }
 
 static int
-com_vars(const std::string &arg)
+com_vars(std::string const &arg)
 {
   char paramstr[32];
 
@@ -361,7 +361,7 @@ com_vars(const std::string &arg)
 
   for (int varID = 0; varID < gl_numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       cdiParamToString(var.param, paramstr, sizeof(paramstr));
 
       fprintf(stdout, "varID=%3d, param=%s, name=%s, longname=\"%s\", units=\"%s\"\n", varID + 1, paramstr, var.name.c_str(),
@@ -375,7 +375,7 @@ com_vars(const std::string &arg)
  * name.
  */
 static const command_t *
-find_command(const std::string &name)
+find_command(std::string const &name)
 {
   for (int i = 0; i < ncommands; ++i)
     if (name == commands[i].name) return &commands[i];
@@ -385,7 +385,7 @@ find_command(const std::string &name)
 
 // Execute a command line.
 static int
-execute_line(const std::string &line)
+execute_line(std::string const &line)
 {
   if (line.empty()) return 0;
 
@@ -415,7 +415,7 @@ execute_line(const std::string &line)
 }
 
 std::string
-trim(const std::string &str, const std::string &chars = "\t\n\v\f\r ")
+trim(std::string const &str, std::string const &chars = "\t\n\v\f\r ")
 {
   auto first = str.find_first_not_of(chars);
   if (std::string::npos == first) return str;
@@ -448,7 +448,7 @@ peakRSS_string()
 }
 
 static void
-read_line(const std::string &p_prompt, std::string &line)
+read_line(std::string const &p_prompt, std::string &line)
 {
   fputs(p_prompt.c_str(), stdout);
   if (Options::cdoVerbose)
@@ -490,7 +490,7 @@ run_demo()
   gl_tsID2 = -1;
   for (int varID = 0; varID < gl_numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       auto nlevels = var.nlevels;
       for (int levelID = 0; levelID < nlevels; ++levelID)
         {
diff --git a/src/Comp.cc b/src/Comp.cc
index 57d43c4f3..9cc4922ff 100644
--- a/src/Comp.cc
+++ b/src/Comp.cc
@@ -27,7 +27,7 @@
 #include "field_functions.h"
 
 static auto func_comp
-    = [](auto hasMissvals, auto n, auto mv1, auto mv2, const auto &vIn1, const auto &vIn2, auto &vOut, auto binary_operator) {
+    = [](auto hasMissvals, auto n, auto mv1, auto mv2, auto const &vIn1, auto const &vIn2, auto &vOut, auto binary_operator) {
         if (hasMissvals)
           {
             if (std::isnan(mv1) || std::isnan(mv2))
@@ -224,13 +224,13 @@ public:
                 array_copy(gridsize, &vardata[varID][offset], arrayx2);
               }
 
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             auto datatype1 = var1.dataType;
             auto gridsize1 = var1.gridsize;
             auto missval1 = var1.missval;
 
             auto xvarID = (fillType == FillType::REC) ? 0 : varID;
-            const auto &var2 = varList2.vars[xvarID];
+            auto const &var2 = varList2.vars[xvarID];
             auto datatype2 = var2.dataType;
             auto gridsize2 = var2.gridsize;
             auto missval2 = var2.missval;
diff --git a/src/Compc.cc b/src/Compc.cc
index 295b81952..dbe73bb7a 100644
--- a/src/Compc.cc
+++ b/src/Compc.cc
@@ -138,7 +138,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
 
diff --git a/src/Complextorect.cc b/src/Complextorect.cc
index db0c1939b..ea4dd9f53 100644
--- a/src/Complextorect.cc
+++ b/src/Complextorect.cc
@@ -106,7 +106,7 @@ public:
             cdo_def_field(streamID2, varID, levelID);
             cdo_def_field(streamID3, varID, levelID);
 
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             auto gridsize = var1.gridsize;
 
             size_t numMissVals;
diff --git a/src/Cond.cc b/src/Cond.cc
index cd47c678c..7f96bae1b 100644
--- a/src/Cond.cc
+++ b/src/Cond.cc
@@ -20,7 +20,7 @@
 #include "cdo_fill.h"
 
 static void
-operator_IFTHEN(size_t n, double mv1, double mv2, const Varray<double> &vIn1, const Varray<double> &vIn2, Varray<double> &vOut)
+operator_IFTHEN(size_t n, double mv1, double mv2, Varray<double> const &vIn1, Varray<double> const &vIn2, Varray<double> &vOut)
 {
   if (std::isnan(mv1))
     for (size_t i = 0; i < n; ++i) vOut[i] = (fp_is_not_equal(vIn1[i], mv1) && fp_is_not_equal(vIn1[i], 0.0)) ? vIn2[i] : mv2;
@@ -29,7 +29,7 @@ operator_IFTHEN(size_t n, double mv1, double mv2, const Varray<double> &vIn1, co
 }
 
 static void
-operator_IFNOTTHEN(size_t n, double mv1, double mv2, const Varray<double> &vIn1, const Varray<double> &vIn2, Varray<double> &vOut)
+operator_IFNOTTHEN(size_t n, double mv1, double mv2, Varray<double> const &vIn1, Varray<double> const &vIn2, Varray<double> &vOut)
 {
   if (std::isnan(mv1))
     for (size_t i = 0; i < n; ++i) vOut[i] = (fp_is_not_equal(vIn1[i], mv1) && fp_is_equal(vIn1[i], 0.0)) ? vIn2[i] : mv2;
@@ -189,8 +189,8 @@ public:
                 numMissVals1 = varnumMissVals1[varID][levelID];
               }
 
-            const auto &var1 = varList1.vars[varID];
-            const auto &var2 = varList2.vars[varID];
+            auto const &var1 = varList1.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             auto ngp = var2.gridsize;
             auto missval2 = var2.missval;
             if (fieldID == 0 || filltype != FILL_REC) missval1 = var1.missval;
diff --git a/src/Cond2.cc b/src/Cond2.cc
index 69cb064d0..948367b51 100644
--- a/src/Cond2.cc
+++ b/src/Cond2.cc
@@ -177,8 +177,8 @@ public:
                 numMissVals1 = varnumMissVals1[varID][levelID];
               }
 
-            const auto &var1 = varList1.vars[varID];
-            const auto &var2 = varList2.vars[varID];
+            auto const &var1 = varList1.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             auto gridsize = var2.gridsize;
             auto missval2 = var2.missval;
             if (fieldID == 0 || filltype != FILL_REC) missval1 = var1.missval;
diff --git a/src/Condc.cc b/src/Condc.cc
index 998311dbf..e42f15bd1 100644
--- a/src/Condc.cc
+++ b/src/Condc.cc
@@ -116,7 +116,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
 
diff --git a/src/Consecstat.cc b/src/Consecstat.cc
index f3276b72d..9736ec1ea 100644
--- a/src/Consecstat.cc
+++ b/src/Consecstat.cc
@@ -30,14 +30,14 @@
 #define SWITCHWARN "Hit default case! This should never happen (%s).\n"
 
 static void
-selEndOfPeriod(Field &periods, const Field &history, const Field &current, int isLastTimestep)
+selEndOfPeriod(Field &periods, Field const &history, Field const &current, int isLastTimestep)
 {
   auto pmissval = periods.missval;
   auto &parray = periods.vec_d;
   auto hmissval = history.missval;
-  const auto &harray = history.vec_d;
+  auto const &harray = history.vec_d;
   auto cmissval = current.missval;
-  const auto &carray = current.vec_d;
+  auto const &carray = current.vec_d;
 
   auto len = gridInqSize(periods.grid);
   if (len != gridInqSize(current.grid) || (gridInqSize(current.grid) != gridInqSize(history.grid)))
@@ -205,7 +205,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(istreamID);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field.init(var1);
             cdo_read_field(istreamID, field);
 
diff --git a/src/Copy.cc b/src/Copy.cc
index c390cafc5..fd43fca75 100644
--- a/src/Copy.cc
+++ b/src/Copy.cc
@@ -19,7 +19,7 @@
 #include "cdo_options.h"
 
 bool
-is_fdb_stream(const std::string &filename)
+is_fdb_stream(std::string const &filename)
 {
   return (filename.size() >= 4 && filename.starts_with("fdb:"));
 }
@@ -157,7 +157,7 @@ public:
 
                 auto [varID, levelID] = cdo_inq_field(streamID1);
 
-                const auto &var1 = varList1.vars[varID];
+                auto const &var1 = varList1.vars[varID];
                 if (hasConstantFields && tsID2 > 0 && tsID1 == 0 && var1.isConstant) continue;
 
                 cdo_def_field(streamID2, varID, levelID);
diff --git a/src/DCW_util.cc b/src/DCW_util.cc
index 1818fe69c..bce1add29 100644
--- a/src/DCW_util.cc
+++ b/src/DCW_util.cc
@@ -10,7 +10,7 @@
 #include "dcw_reader.h"
 
 static void
-print_polygons(DCW_Lists &dcw_lists, const std::string &codeNames)
+print_polygons(DCW_Lists &dcw_lists, std::string const &codeNames)
 {
   auto codeList = split_string(codeNames, "\\+");
 
@@ -18,7 +18,7 @@ print_polygons(DCW_Lists &dcw_lists, const std::string &codeNames)
 
   printf("# Digital Chart of the World\n");
   printf("# Region for country:");
-  for (const auto &code : codeList) printf(" %s", code.c_str());
+  for (auto const &code : codeList) printf(" %s", code.c_str());
   printf("\n");
 
   codeList = dcw_expand_code_list(dcw_lists, codeList);
diff --git a/src/Deltat.cc b/src/Deltat.cc
index ae70b914a..b8a24a2dc 100644
--- a/src/Deltat.cc
+++ b/src/Deltat.cc
@@ -18,7 +18,7 @@
 
 template <typename T>
 static void
-varray_deltat(size_t len, const Varray<T> &v0, const Varray<T> &v1, Varray<T> &v2, double factor, double mv)
+varray_deltat(size_t len, Varray<T> const &v0, Varray<T> const &v1, Varray<T> &v2, double factor, double mv)
 {
   assert(len > 0);
   assert(v0.size() > 0);
@@ -39,7 +39,7 @@ varray_deltat(size_t len, const Varray<T> &v0, const Varray<T> &v1, Varray<T> &v
 
 template <typename T>
 static void
-varray_deltat(size_t len, const Varray<T> &v0, const Varray<T> &v1, Varray<T> &v2, double factor)
+varray_deltat(size_t len, Varray<T> const &v0, Varray<T> const &v1, Varray<T> &v2, double factor)
 {
   assert(len > 0);
 
@@ -47,7 +47,7 @@ varray_deltat(size_t len, const Varray<T> &v0, const Varray<T> &v1, Varray<T> &v
 }
 
 void
-field_deltat(const Field &field0, const Field &field1, Field &field2, double factor)
+field_deltat(Field const &field0, Field const &field1, Field &field2, double factor)
 {
   if (field1.memType != field2.memType) cdo_abort("Interal error, memType of field1 and field2 differ!");
 
@@ -154,7 +154,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field1.init(var1);
             cdo_read_field(streamID1, field1);
 
diff --git a/src/Depth.cc b/src/Depth.cc
index c3cdfebc4..7e96b461a 100644
--- a/src/Depth.cc
+++ b/src/Depth.cc
@@ -14,7 +14,7 @@
 
 template <typename T>
 static void
-calc_full_depth(size_t gridsize, size_t nlevels, const Varray<T> &thick_c, const Varray<T> &stretch_c, const Varray<T> &zos,
+calc_full_depth(size_t gridsize, size_t nlevels, Varray<T> const &thick_c, Varray<T> const &stretch_c, Varray<T> const &zos,
                 Varray<T> &fullDepth)
 {
   ranges::fill_n(fullDepth.begin(), gridsize, 0.0);
diff --git a/src/Derivepar.cc b/src/Derivepar.cc
index 557376147..598de03c3 100644
--- a/src/Derivepar.cc
+++ b/src/Derivepar.cc
@@ -29,7 +29,7 @@ void geopot_height_half(double *gheight, const double *ta_fl, const double *hus_
 void geopot_height_full(double *gheight, const double *ta_fl, const double *hus_fl, const double *p_hl, long ngp, long nlev);
 
 static void
-check_range_var2d(int stepNum, const Varray<double> &var2d, double rMin, double rMax, const char *varname)
+check_range_var2d(int stepNum, Varray<double> const &var2d, double rMin, double rMax, const char *varname)
 {
   auto mm = varray_min_max(var2d);
   if (mm.min < rMin || mm.max > rMax)
@@ -37,7 +37,7 @@ check_range_var2d(int stepNum, const Varray<double> &var2d, double rMin, double
 }
 
 static void
-check_range_var3d(int stepNum, int nlevels, size_t gridsize, const Varray<double> &var3d, double rMin, double rMax,
+check_range_var3d(int stepNum, int nlevels, size_t gridsize, Varray<double> const &var3d, double rMin, double rMax,
                   const char *varname)
 {
   static auto printWarning = true;
@@ -194,7 +194,7 @@ public:
       {
         if (operatorID == SEALEVELPRESSURE) varIDs.husID = -1;
 
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         if (var.gridType == GRID_SPECTRAL && var.zaxisType == ZAXIS_HYBRID) cdo_abort("Spectral data on model level unsupported!");
         if (var.gridType == GRID_SPECTRAL) cdo_abort("Spectral data unsupported!");
       }
diff --git a/src/Detrend.cc b/src/Detrend.cc
index eccdcbc15..c6043e01a 100644
--- a/src/Detrend.cc
+++ b/src/Detrend.cc
@@ -32,19 +32,19 @@ get_parameter(bool &tstepIsEqual)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "equal") tstepIsEqual = parameter_to_bool(value);
@@ -113,7 +113,7 @@ public:
     auto numVars = varList1.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             auto gridsize = var.gridsize;
@@ -169,7 +169,7 @@ public:
     auto numVars = varList.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList.vars[varID];
+        auto const &var = varList.vars[varID];
         if (var.isConstant) continue;
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
@@ -271,7 +271,7 @@ public:
         auto numVars = varList1.numVars();
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (tsID && var.isConstant) continue;
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
diff --git a/src/Diff.cc b/src/Diff.cc
index 1c35fb813..6d2968980 100644
--- a/src/Diff.cc
+++ b/src/Diff.cc
@@ -77,20 +77,20 @@ diff_kernel_mv(double v1, double v2, double missval1, double missval2, DiffResul
 }
 
 static DiffResult
-diff(size_t n, const Field &field1, const Field &field2)
+diff(size_t n, Field const &field1, Field const &field2)
 {
   DiffResult diffParam;
   auto hasMissvals = (field1.numMissVals || field2.numMissVals);
   if (hasMissvals)
     {
-      auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2) {
+      auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel_mv(v1[i], v2[i], mv1, mv2, diffParam); }
       };
       field_operation2(func, field1, field2, field1.missval, field2.missval);
     }
   else
     {
-      auto func = [&](const auto &v1, const auto &v2) {
+      auto func = [&](auto const &v1, auto const &v2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel(v1[i], v2[i], diffParam); }
       };
       field_operation2(func, field1, field2);
@@ -120,7 +120,7 @@ diff_kernel2(double v1, double v2, DiffResult &result)
 }
 
 static DiffResult
-diff2(size_t n, const Field &field1, const Field &field2)
+diff2(size_t n, Field const &field1, Field const &field2)
 {
   DiffResult diffParam;
   auto hasMissvals = (field1.numMissVals || field2.numMissVals);
@@ -135,7 +135,7 @@ diff2(size_t n, const Field &field1, const Field &field2)
     }
   else
     {
-      auto func = [&](const auto &v1, const auto &v2) {
+      auto func = [&](auto const &v1, auto const &v2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel2(v1[i], v2[i], diffParam); }
       };
       field_operation2(func, field1, field2);
@@ -176,19 +176,19 @@ get_parameter(void)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "abslim")   params.absLimit = parameter_to_double(value);
@@ -243,7 +243,7 @@ print_header2(int operfunc, DiffParam &params)
 }
 
 void
-print_diff(const Field &field1, const Field &field2, int fieldNumber, CdoVar const &var1, int levelID, int operfunc,
+print_diff(Field const &field1, Field const &field2, int fieldNumber, CdoVar const &var1, int levelID, int operfunc,
            CdiDateTime const &vDateTime, DiffParam &params, int operfunc2, const DiffResult &dr)
 {
   if (params.printHeader) (operfunc2 == 0) ? print_header(operfunc, params) : print_header2(operfunc, params);
@@ -385,7 +385,7 @@ public:
     if (params.mapFlag == MapFlag::Undefined)
       {
         varList_compare(varList1, varList2);
-        for (const auto &var : varList1.vars) mapOfVarIDs[var.ID] = var.ID;
+        for (auto const &var : varList1.vars) mapOfVarIDs[var.ID] = var.ID;
       }
     else { varList_map(varList1, varList2, params.mapFlag, mapOfVarIDs); }
 
diff --git a/src/Distgrid.cc b/src/Distgrid.cc
index 974cbd109..8cc95c52a 100644
--- a/src/Distgrid.cc
+++ b/src/Distgrid.cc
@@ -38,8 +38,8 @@ struct DistgridInfo
 };
 
 static void
-calc_boundbox(size_t gridsize2, size_t nv, bool withBounds, const Varray<double> &xvals2, const Varray<double> &yvals2,
-              const Varray<double> &xbounds2, const Varray<double> &ybounds2, double *lonBounds, double *latBounds)
+calc_boundbox(size_t gridsize2, size_t nv, bool withBounds, Varray<double> const &xvals2, Varray<double> const &yvals2,
+              Varray<double> const &xbounds2, Varray<double> const &ybounds2, double *lonBounds, double *latBounds)
 {
   constexpr double Pi = M_PI;
   constexpr double Pi2 = 2.0 * M_PI;
@@ -301,7 +301,7 @@ gen_dist_grids(const GridInfo1 &gridInfo1, std::vector<DistgridInfo> &distgridIn
 }
 
 static void
-dist_cells_reg2d(const Field &field1, Field &field2, const DistgridInfo &distgridInfo, size_t nlon)
+dist_cells_reg2d(Field const &field1, Field &field2, const DistgridInfo &distgridInfo, size_t nlon)
 {
   auto nx = distgridInfo.nx;
   auto ny = distgridInfo.ny;
@@ -311,7 +311,7 @@ dist_cells_reg2d(const Field &field1, Field &field2, const DistgridInfo &distgri
       auto offset1 = distgridInfo.offset + j * nlon;
       auto offset2 = j * nx;
 
-      auto func = [&](const auto &v1, auto &v2) {
+      auto func = [&](auto const &v1, auto &v2) {
         for (size_t i = 0; i < nx; ++i) { v2[offset2 + i] = v1[offset1 + i]; }
       };
       field_operation2(func, field1, field2);
@@ -319,12 +319,12 @@ dist_cells_reg2d(const Field &field1, Field &field2, const DistgridInfo &distgri
 }
 
 static void
-dist_cells(const Field &field1, Field &field2, const DistgridInfo &distgridInfo)
+dist_cells(Field const &field1, Field &field2, const DistgridInfo &distgridInfo)
 {
   auto gridsize = distgridInfo.gridsize;
-  const auto &cellIndex = distgridInfo.cellindex;
+  auto const &cellIndex = distgridInfo.cellindex;
 
-  auto func = [&](const auto &v1, auto &v2) {
+  auto func = [&](auto const &v1, auto &v2) {
     for (size_t i = 0; i < gridsize; ++i) { v2[i] = v1[cellIndex[i]]; }
   };
   field_operation2(func, field1, field2);
@@ -484,8 +484,8 @@ public:
           {
             auto gridsize2 = distgridInfo[0][index].gridsize;
             auto offset = distgridInfo[0][index].offset;
-            const auto &lons = distgridInfo[0][index].lonBounds;
-            const auto &lats = distgridInfo[0][index].latBounds;
+            auto const &lons = distgridInfo[0][index].lonBounds;
+            auto const &lats = distgridInfo[0][index].latBounds;
             printf("--- # %zu\n", index + 1);
             printf("filename=%s\n", fileName.c_str());
             printf("numcells=%zu\n", gridsize2);
@@ -504,7 +504,7 @@ public:
         auto numFields = cdo_stream_inq_timestep(streamID1, tsID);
         if (numFields == 0) break;
 
-        for (const auto &streamID : streamIDs) cdo_def_timestep(streamID, tsID);
+        for (auto const &streamID : streamIDs) cdo_def_timestep(streamID, tsID);
 
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
@@ -545,8 +545,8 @@ public:
   {
     cdo_stream_close(streamID1);
 
-    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
-    for (const auto &vlistID : vlistIDs) vlistDestroy(vlistID);
+    for (auto const &streamID : streamIDs) cdo_stream_close(streamID);
+    for (auto const &vlistID : vlistIDs) vlistDestroy(vlistID);
 
     for (int i = 0; i < numGrids; ++i)
       for (size_t index = 0; index < nsplit; ++index) gridDestroy(distgridInfo[i][index].gridID);
diff --git a/src/Duplicate.cc b/src/Duplicate.cc
index 7bd2a6ba8..755390b60 100644
--- a/src/Duplicate.cc
+++ b/src/Duplicate.cc
@@ -120,11 +120,11 @@ public:
 
             for (int varID = 0; varID < nvars; ++varID)
               {
-                const auto &var1 = varList1.vars[varID];
+                auto const &var1 = varList1.vars[varID];
                 fieldOut.init(var1);
                 for (int levelID = 0; levelID < var1.nlevels; ++levelID)
                   {
-                    const auto &field = varsData[tsID][varID][levelID];
+                    auto const &field = varsData[tsID][varID][levelID];
                     if (field.hasData())
                       {
                         field_copy(field, fieldOut);
diff --git a/src/EOFs.cc b/src/EOFs.cc
index d750e1a2a..38d766c7a 100644
--- a/src/EOFs.cc
+++ b/src/EOFs.cc
@@ -35,7 +35,7 @@
 // No missing value support added so far!
 
 static void
-scale_eigvec_grid(Varray<double> &out, int tsID, size_t npack, const std::vector<size_t> &pack, const Varray<double> &weight,
+scale_eigvec_grid(Varray<double> &out, int tsID, size_t npack, const std::vector<size_t> &pack, Varray<double> const &weight,
                   const Varray2D<double> &covar, double sumWeights)
 {
   for (size_t i = 0; i < npack; ++i) out[pack[i]] = covar[tsID][i] / std::sqrt(weight[pack[i]] / sumWeights);
@@ -43,7 +43,7 @@ scale_eigvec_grid(Varray<double> &out, int tsID, size_t npack, const std::vector
 
 static void
 scale_eigvec_time(Varray<double> &out, int tsID, int numSteps, size_t npack, const std::vector<size_t> &pack,
-                  const Varray<double> &weight, const Varray2D<double> &covar, const Varray2D<double> &data, double missval,
+                  Varray<double> const &weight, const Varray2D<double> &covar, const Varray2D<double> &data, double missval,
                   double sumWeights)
 {
 #ifdef _OPENMP
@@ -434,12 +434,12 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
 
             for (int levelID = 0; levelID < var1.nlevels; ++levelID)
               {
                 auto &eofData = eofData2D[varID][levelID];
-                const auto &data = eofData.data;
+                auto const &data = eofData.data;
                 auto &covar = eofData.covar;
 
                 if (eofData.first_call)
@@ -484,10 +484,10 @@ public:
 #endif
                         for (int j1 = 0; j1 < numSteps; ++j1)
                           {
-                            const auto &df1p = data[j1];
+                            auto const &df1p = data[j1];
                             for (int j2 = j1; j2 < numSteps; ++j2)
                               {
-                                const auto &df2p = data[j2];
+                                auto const &df2p = data[j2];
                                 double sum = 0.0;
                                 for (size_t i = 0; i < npack; ++i) sum += weights[pack[i]] * df1p[i] * df2p[i];
                                 covar[j2][j1] = covar[j1][j2] = sum / sum_w / numSteps;
diff --git a/src/EcaEtccdi.cc b/src/EcaEtccdi.cc
index a76bf5615..5aba77fdc 100644
--- a/src/EcaEtccdi.cc
+++ b/src/EcaEtccdi.cc
@@ -358,7 +358,7 @@ etccdi_op(ETCCDI_REQUEST &request)
           field2D_init(varsPtemp[dayOfYear], varList2, FIELD_VEC);
           hsets[dayOfYear].create(numVars);
 
-          for (const auto &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
+          for (auto const &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
         }
 
       for (int fieldID = 0; fieldID < numFields; ++fieldID)
@@ -459,7 +459,7 @@ etccdi_op(ETCCDI_REQUEST &request)
 
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var1 = varList1.vars[varID];
+      auto const &var1 = varList1.vars[varID];
       if (var1.isConstant) continue;
       for (int levelID = 0; levelID < var1.nlevels; ++levelID)
         {
@@ -509,7 +509,7 @@ etccdi_op(ETCCDI_REQUEST &request)
     {
       for (int varID = 0; varID < numVars; ++varID)
         {
-          const auto &var1 = varList1.vars[varID];
+          auto const &var1 = varList1.vars[varID];
           if (var1.isConstant) continue;
           for (int levelID = 0; levelID < var1.nlevels; ++levelID)
             {
diff --git a/src/EcaIndices.cc b/src/EcaIndices.cc
index 3552c32e2..f4ac93d42 100644
--- a/src/EcaIndices.cc
+++ b/src/EcaIndices.cc
@@ -346,7 +346,7 @@ class EcaIndices : public Process
 {
 
 protected:
-  EcaIndices(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module,
+  EcaIndices(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module,
              std::function<void(Request p_request)> p_eca_func)
       : Process(p_ID, p_operatorName, p_arguments, p_module), eca_func(p_eca_func)
   {
@@ -372,7 +372,7 @@ public:
 class EcaIndices1 : public EcaIndices<ECA_REQUEST_1>
 {
 public:
-  EcaIndices1(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
+  EcaIndices1(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
       : EcaIndices<ECA_REQUEST_1>(p_ID, p_operatorName, p_arguments, p_module, eca1)
   {
   }
@@ -381,7 +381,7 @@ public:
 class EcaIndices2 : public EcaIndices<ECA_REQUEST_2>
 {
 public:
-  EcaIndices2(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
+  EcaIndices2(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
       : EcaIndices<ECA_REQUEST_2>(p_ID, p_operatorName, p_arguments, p_module, eca2)
   {
   }
@@ -390,7 +390,7 @@ public:
 class EcaIndices3 : public EcaIndices<ECA_REQUEST_3>
 {
 public:
-  EcaIndices3(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
+  EcaIndices3(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
       : EcaIndices<ECA_REQUEST_3>(p_ID, p_operatorName, p_arguments, p_module, eca3)
   {
   }
@@ -399,7 +399,7 @@ public:
 class EcaIndices4 : public EcaIndices<ECA_REQUEST_4>
 {
 public:
-  EcaIndices4(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
+  EcaIndices4(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module)
       : EcaIndices<ECA_REQUEST_4>(p_ID, p_operatorName, p_arguments, p_module, eca4)
   {
   }
@@ -696,7 +696,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
     else {}
@@ -968,7 +968,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
     else {}
@@ -1935,7 +1935,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
 
@@ -2191,7 +2191,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
 
@@ -2235,7 +2235,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
 
@@ -2279,7 +2279,7 @@ public:
 
     if (cdo_operator_argc() > 0)
       {
-        const auto &params = cdo_get_oper_argv();
+        auto const &params = cdo_get_oper_argv();
         set_compare_type_from_params(request.compare_type, params);
       }
 
diff --git a/src/Echam5ini.cc b/src/Echam5ini.cc
index 312b0e77e..214a8ecd6 100644
--- a/src/Echam5ini.cc
+++ b/src/Echam5ini.cc
@@ -70,8 +70,8 @@ iniatts(ATTS *atts)
 }
 
 static void
-inivar(VAR &var, int gridtype, int zaxistype, int code, const std::string &name, const std::string &longname,
-       const std::string &units)
+inivar(VAR &var, int gridtype, int zaxistype, int code, std::string const &name, std::string const &longname,
+       std::string const &units)
 {
   var.gridtype = gridtype;
   var.zaxistype = zaxistype;
@@ -626,7 +626,7 @@ public:
     int ntr = 0;
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var1 = varList1.vars[varID];
+        auto const &var1 = varList1.vars[varID];
         auto code = var1.code;
         auto name = var1.name;
         auto longname = var1.longname;
diff --git a/src/Enlarge.cc b/src/Enlarge.cc
index fe489fe3e..fec531860 100644
--- a/src/Enlarge.cc
+++ b/src/Enlarge.cc
@@ -102,7 +102,7 @@ public:
             size_t numMissVals;
             cdo_read_field(streamID1, array1.data(), &numMissVals);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             auto gridID1 = var.gridID;
             auto gridsize1 = var.gridsize;
 
diff --git a/src/Ensstat3.cc b/src/Ensstat3.cc
index 607da3d15..a72aa2426 100644
--- a/src/Ensstat3.cc
+++ b/src/Ensstat3.cc
@@ -179,7 +179,7 @@ public:
     for (int fileID = 1; fileID < numFiles; ++fileID) varList_compare(ef[0].varList, ef[fileID].varList);
 
     auto vlistID1 = ef[0].vlistID;
-    const auto &varList1 = ef[0].varList;
+    auto const &varList1 = ef[0].varList;
     auto vlistID2 = vlistCreate();
     vlistDefNtsteps(vlistID2, varList1.numSteps());
 
@@ -278,7 +278,7 @@ public:
   void
   run() override
   {
-    const auto &varList1 = ef[0].varList;
+    auto const &varList1 = ef[0].varList;
 
     int varID = 0, levelID;
     int numFields0;
diff --git a/src/Exprf.cc b/src/Exprf.cc
index de398b934..738905a94 100644
--- a/src/Exprf.cc
+++ b/src/Exprf.cc
@@ -75,7 +75,7 @@ exprs_from_file(const std::vector<std::string> &exprArgv)
 constexpr int MaxParams = 4096;
 
 static std::size_t
-replace_all(std::string &inout, const std::string &what, const std::string &with)
+replace_all(std::string &inout, std::string const &what, std::string const &with)
 {
   std::size_t count{};
   for (std::string::size_type pos{}; inout.npos != (pos = inout.find(what.data(), pos, what.length()));
@@ -87,7 +87,7 @@ replace_all(std::string &inout, const std::string &what, const std::string &with
 }
 
 static std::string
-exprs_expand(const std::string &exprString, const VarList &varList)
+exprs_expand(std::string const &exprString, const VarList &varList)
 {
   auto replaceTemplate = false;
   std::string templateName = "_ALL_";
@@ -95,7 +95,7 @@ exprs_expand(const std::string &exprString, const VarList &varList)
   if (exprString.find(templateName) != std::string::npos)
     {
       replaceTemplate = true;
-      for (const auto &var : varList.vars)
+      for (auto const &var : varList.vars)
         {
           if (templateName == var.name)
             {
@@ -109,12 +109,12 @@ exprs_expand(const std::string &exprString, const VarList &varList)
     {
       std::string exprStringNew{};
       auto exprStringArgv = split_string(exprString, ";");
-      for (const auto &string : exprStringArgv)
+      for (auto const &string : exprStringArgv)
         {
           if (string.find(templateName) == std::string::npos) { exprStringNew += string + ";"; }
           else
             {
-              for (const auto &var : varList.vars)
+              for (auto const &var : varList.vars)
                 {
                   auto tmpString = string;
                   replace_all(tmpString, templateName, var.name);
@@ -132,7 +132,7 @@ exprs_expand(const std::string &exprString, const VarList &varList)
 static void
 params_init(std::vector<ParamEntry> &params, const VarList &varList)
 {
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       auto &param = params[var.ID];
 
@@ -157,14 +157,14 @@ params_init(std::vector<ParamEntry> &params, const VarList &varList)
 static void
 params_delete(const std::vector<ParamEntry> &params)
 {
-  for (const auto &param : params)
+  for (auto const &param : params)
     {
       if (param.data) delete[] param.data;
     }
 }
 
 static void
-params_add_coord(ParseParamType &parseArg, int coord, int cdiID, size_t size, const std::string &units, const std::string &longname)
+params_add_coord(ParseParamType &parseArg, int coord, int cdiID, size_t size, std::string const &units, std::string const &longname)
 {
   auto ncoords = parseArg.numCoords;
   if (ncoords >= parseArg.maxCoords) cdo_abort("Too many coordinates (limit=%d)", parseArg.maxCoords);
@@ -277,7 +277,7 @@ genZonalID(int vlistID)
 }
 
 static void
-set_date_and_time(ParamEntry &varts, int calendar, int tsID, const CdiDateTime &vDateTime0, const CdiDateTime &vDateTime)
+set_date_and_time(ParamEntry &varts, int calendar, int tsID, CdiDateTime const &vDateTime0, CdiDateTime const &vDateTime)
 {
   double jdelta = 0.0;
 
@@ -479,7 +479,7 @@ private:
                 auto coordID = params_get_coord_ID(parseArg, coord, params[varID].gridID);
                 auto gridID = parseArg.coords[coordID].cdiID;
                 auto ngp = parseArg.coords[coordID].size;
-                const auto &cdata = parseArg.coords[coordID].data;
+                auto const &cdata = parseArg.coords[coordID].data;
                 assert(gridID == params[varID].gridID);
                 assert(!cdata.empty());
 
@@ -490,7 +490,7 @@ private:
                 auto coordID = params_get_coord_ID(parseArg, coord, params[varID].zaxisID);
                 auto zaxisID = parseArg.coords[coordID].cdiID;
                 auto nlev = parseArg.coords[coordID].size;
-                const auto &cdata = parseArg.coords[coordID].data;
+                auto const &cdata = parseArg.coords[coordID].data;
                 assert(zaxisID == params[varID].zaxisID);
                 assert(!cdata.empty());
 
@@ -523,7 +523,7 @@ private:
     //  printf("parseArg.nparams %d\n", parseArg.nparams);
     for (int pidx = 0, n = parseArg.numParams; pidx < n; pidx++)
       {
-        const auto &param = params[pidx];
+        auto const &param = params[pidx];
         if (pidx < numVars1 && !param.select) continue;
         if (pidx >= numVars1)
           {
@@ -563,7 +563,7 @@ public:
 
     operator_input_arg(cdo_operator_enter(operatorID));
 
-    const auto &exprArgv = cdo_get_oper_argv();
+    auto const &exprArgv = cdo_get_oper_argv();
 
     exprString = readsCommandLine ? exprs_from_argument(exprArgv) : exprs_from_file(exprArgv);
 
diff --git a/src/FC.cc b/src/FC.cc
index 3fbdeab9a..118514c40 100644
--- a/src/FC.cc
+++ b/src/FC.cc
@@ -278,7 +278,7 @@ public:
 
     auto numVars = varList1.numVars();
     vars = std::vector<bool>(numVars);
-    for (const auto &var : varList1.vars) vars[var.ID] = (gridID1 == var.gridID);
+    for (auto const &var : varList1.vars) vars[var.ID] = (gridID1 == var.gridID);
 
     if (gridID1 != -1) vlistChangeGrid(vlistID2, gridID1, gridID2);
     if (operatorID == GRID2FOURIER)
diff --git a/src/Filedes.cc b/src/Filedes.cc
index 3d8d5dfb9..512835cb7 100644
--- a/src/Filedes.cc
+++ b/src/Filedes.cc
@@ -84,7 +84,7 @@ printCodeTable(const VarList &varList)
   int nvars = varList.numVars();
   for (int varID = 0; varID < nvars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       fprintf(stdout, "%4d  %-12s", var.code, var.name.c_str());
       if (var.longname.size())
         {
@@ -148,7 +148,7 @@ partab(FILE *fp, int vlistID, const VarList &varList, int option)
 
   for (varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
 
       fprintf(fp, "&parameter");
       if (linebreak) fprintf(fp, "\n");
diff --git a/src/Fillmiss.cc b/src/Fillmiss.cc
index 2996ba59c..24102db28 100644
--- a/src/Fillmiss.cc
+++ b/src/Fillmiss.cc
@@ -462,7 +462,7 @@ public:
         while (numFields--)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field1.init(var1);
             cdo_read_field(streamID1, field1);
 
diff --git a/src/Filter.cc b/src/Filter.cc
index e2727d3c0..5bb4f60df 100644
--- a/src/Filter.cc
+++ b/src/Filter.cc
@@ -333,7 +333,7 @@ public:
     auto numVars = varList1.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             if (useFFTW)
@@ -422,7 +422,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
                 auto &field = varsData[tsID][varID][levelID];
diff --git a/src/Fldrms.cc b/src/Fldrms.cc
index 616d436b4..b67c8c0e8 100644
--- a/src/Fldrms.cc
+++ b/src/Fldrms.cc
@@ -126,8 +126,8 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID2);
             cdo_read_field(streamID2, field2);
 
-            const auto &var1 = varList1.vars[varID];
-            const auto &var2 = varList2.vars[varID];
+            auto const &var1 = varList1.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             field1.grid = var1.gridID;
             field2.grid = var2.gridID;
 
diff --git a/src/Fldstat.cc b/src/Fldstat.cc
index 95e204429..1086303ee 100644
--- a/src/Fldstat.cc
+++ b/src/Fldstat.cc
@@ -37,7 +37,7 @@ void gridcell_areas(int gridID, Varray<double> &array);
 
 template <typename T>
 static void
-print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, const Varray<T> &v, CdiDateTime vDateTime)
+print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, Varray<T> const &v, CdiDateTime vDateTime)
 {
   static auto printHeader = true;
   const char *funcName = (operfunc == FieldFunc_Min) ? "Minval" : "Maxval";
@@ -72,15 +72,15 @@ print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, c
 }
 
 static void
-print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, const Field &field, CdiDateTime vDateTime)
+print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, Field const &field, CdiDateTime vDateTime)
 {
-  auto func = [&](const auto &v) { print_location_LL(operfunc, var, levelID, sglval, v, vDateTime); };
+  auto func = [&](auto const &v) { print_location_LL(operfunc, var, levelID, sglval, v, vDateTime); };
   field_operation(func, field);
 }
 
 template <typename T>
 static void
-field_mul_weights(Varray<T> &v1, const Varray<double> &v2, size_t numMissVals, double mv)
+field_mul_weights(Varray<T> &v1, Varray<double> const &v2, size_t numMissVals, double mv)
 {
   T missval = mv;
   assert(v1.size() > 0);
@@ -101,7 +101,7 @@ field_mul_weights(Varray<T> &v1, const Varray<double> &v2, size_t numMissVals, d
 static void
 field_mul_weights(Field &field)
 {
-  auto func = [&](auto &v, const auto &w, auto numMissVals, double missval) { field_mul_weights(v, w, numMissVals, missval); };
+  auto func = [&](auto &v, auto const &w, auto numMissVals, double missval) { field_mul_weights(v, w, numMissVals, missval); };
   field_operation(func, field, field.weightv, field.numMissVals, field.missval);
 }
 
@@ -146,7 +146,7 @@ gen_target_gridpoint(int gridID1)
 }
 
 static void
-print_weights_warning(int numGrids, const std::string &varname)
+print_weights_warning(int numGrids, std::string const &varname)
 {
   if (numGrids == 1)
     cdo_warning("Grid cell bounds not available, using constant grid cell area weights!");
@@ -160,19 +160,19 @@ get_parameter(bool &useWeights)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           if (key == "weights")
             useWeights = parameter_to_bool(value);
@@ -183,7 +183,7 @@ get_parameter(bool &useWeights)
 }
 
 static int
-get_gridcell_weights(Field &field, bool useWeights, bool doPrintWarning, int numGrids, const std::string &varName)
+get_gridcell_weights(Field &field, bool useWeights, bool doPrintWarning, int numGrids, std::string const &varName)
 {
   auto gridSize = field.size;
   field.weightv.resize(gridSize);
diff --git a/src/Fldstat2.cc b/src/Fldstat2.cc
index 84593d6bb..a972092e7 100644
--- a/src/Fldstat2.cc
+++ b/src/Fldstat2.cc
@@ -37,7 +37,7 @@ auto correlation_kernel = [](auto v1, auto mv1, auto v2, auto mv2, auto w, auto
 template <typename T1, typename T2>
 static double
 correlation(const Varray<T1> &v1, const Varray<T2> &v2, double missval1, double missval2, size_t gridsize,
-            const Varray<double> &weight)
+            Varray<double> const &weight)
 {
   double sum0 = 0.0, sum1 = 0.0, sum00 = 0.0, sum01 = 0.0, sum11 = 0.0, wsum0 = 0.0;
 
@@ -61,9 +61,9 @@ correlation(const Varray<T1> &v1, const Varray<T2> &v2, double missval1, double
 }
 
 static double
-correlation(const Field &field1, const Field &field2, const Varray<double> &weight)
+correlation(Field const &field1, Field const &field2, Varray<double> const &weight)
 {
-  auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2, size_t size) {
+  auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2, size_t size) {
     return correlation(v1, v2, mv1, mv2, size, weight);
   };
   return field_operation2(func, field1, field2, field1.missval, field2.missval, field1.size);
@@ -84,7 +84,7 @@ auto covariance_kernel
 template <typename T1, typename T2>
 static double
 covariance(const Varray<T1> &v1, const Varray<T2> &v2, double missval1, double missval2, size_t gridsize,
-           const Varray<double> &weight)
+           Varray<double> const &weight)
 {
   double sum0 = 0.0, sum1 = 0.0, sum01 = 0.0, wsum0 = 0.0;
 
@@ -105,9 +105,9 @@ covariance(const Varray<T1> &v1, const Varray<T2> &v2, double missval1, double m
 }
 
 static double
-covariance(const Field &field1, const Field &field2, const Varray<double> &weight)
+covariance(Field const &field1, Field const &field2, Varray<double> const &weight)
 {
-  auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2, size_t size) {
+  auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2, size_t size) {
     return covariance(v1, v2, mv1, mv2, size, weight);
   };
   return field_operation2(func, field1, field2, field1.missval, field2.missval, field1.size);
@@ -207,8 +207,8 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
-            const auto &var2 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
+            auto const &var2 = varList1.vars[varID];
             field1.init(var1);
             (void) cdo_inq_field(streamID2);
             field2.init(var2);
diff --git a/src/Fourier.cc b/src/Fourier.cc
index 02070436f..6a8b61991 100644
--- a/src/Fourier.cc
+++ b/src/Fourier.cc
@@ -263,7 +263,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList.vars[varID];
+        auto const &var = varList.vars[varID];
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             if (use_fftw)
diff --git a/src/Getgridcell.cc b/src/Getgridcell.cc
index 5707f2bbc..c3b7c76a3 100644
--- a/src/Getgridcell.cc
+++ b/src/Getgridcell.cc
@@ -69,19 +69,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "lon")        gridPoint.lon = parameter_to_double(value);
diff --git a/src/Gradsdes.cc b/src/Gradsdes.cc
index e0537c3d4..063ea2abb 100644
--- a/src/Gradsdes.cc
+++ b/src/Gradsdes.cc
@@ -668,7 +668,7 @@ ctl_vars(FILE *gdp, int filetype, int vlistID, const VarList &varList, int nvars
     {
       if (vars[varID] == true)
         {
-          const auto &var = varList.vars[varID];
+          auto const &var = varList.vars[varID];
           int zaxisID = var.zaxisID;
           int ltype = 0;
           cdiInqKeyInt(zaxisID, CDI_GLOBAL, CDI_KEY_TYPEOFFIRSTFIXEDSURFACE, &ltype);
@@ -1177,7 +1177,7 @@ public:
     recoffset = std::vector<int>(numVars);
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList.vars[varID];
+        auto const &var = varList.vars[varID];
         if (var.gridID == gridID)
           {
             if (filetype == CDI_FILETYPE_SRV || filetype == CDI_FILETYPE_EXT || filetype == CDI_FILETYPE_IEG)
diff --git a/src/Gridboxstat.cc b/src/Gridboxstat.cc
index ea19603f1..43f1613e0 100644
--- a/src/Gridboxstat.cc
+++ b/src/Gridboxstat.cc
@@ -226,7 +226,7 @@ gen_boxgrid(int gridID1, size_t xinc, size_t yinc)
 }
 
 static void
-gridbox_stat(const Field &field1, Field &field2, size_t xinc, size_t yinc, int statfunc)
+gridbox_stat(Field const &field1, Field &field2, size_t xinc, size_t yinc, int statfunc)
 {
   auto useWeight = !field1.weightv.empty();
 
diff --git a/src/Gridcell.cc b/src/Gridcell.cc
index bf3a079f9..a58213049 100644
--- a/src/Gridcell.cc
+++ b/src/Gridcell.cc
@@ -200,19 +200,19 @@ get_parameter(double &radiusInMeter)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if (key == "radius") radiusInMeter = radius_str_to_meter(value);
diff --git a/src/Gridsearch.cc b/src/Gridsearch.cc
index ca12a83ee..180047355 100644
--- a/src/Gridsearch.cc
+++ b/src/Gridsearch.cc
@@ -77,7 +77,7 @@ grid_delete(grid_type *grid)
 }
 
 static void
-boundbox_from_corners1r(long ic, long nc, const Varray<double> &cornerLon, const Varray<double> &cornerLat, float *bound_box)
+boundbox_from_corners1r(long ic, long nc, Varray<double> const &cornerLon, Varray<double> const &cornerLat, float *bound_box)
 {
   auto inc = ic * nc;
 
@@ -110,7 +110,7 @@ boundbox_from_corners1r(long ic, long nc, const Varray<double> &cornerLon, const
 }
 
 static void
-boundbox_from_corners(long size, long nc, const Varray<double> &cornerLon, const Varray<double> &cornerLat,
+boundbox_from_corners(long size, long nc, Varray<double> const &cornerLon, Varray<double> const &cornerLat,
                       Varray<float> &bound_box)
 {
   for (long i = 0; i < size; ++i)
@@ -162,7 +162,7 @@ search_cells(cellsearch_type *cellsearch, long tgtCellIndex, long *srchIndices)
 {
   const grid_type *srcGrid = cellsearch->srcGrid;
   const grid_type *tgtGrid = cellsearch->tgtGrid;
-  const auto &src_cell_bound_box = cellsearch->src_cell_bound_box;
+  auto const &src_cell_bound_box = cellsearch->src_cell_bound_box;
 
   float tgt_cell_bound_box[4];
   boundbox_from_corners1r(tgtCellIndex, tgtGrid->numCorners, tgtGrid->cell_corner_lon, tgtGrid->cell_corner_lat,
diff --git a/src/Harmonic.cc b/src/Harmonic.cc
index 6e0393d3d..77fb9e740 100644
--- a/src/Harmonic.cc
+++ b/src/Harmonic.cc
@@ -115,7 +115,7 @@ public:
         work[j].resize(numVars);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             work[j][varID].resize(var.gridsize * var.nlevels, 0);
           }
       }
@@ -165,7 +165,7 @@ public:
       {
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             for (int levelID = 0; levelID < var2.nlevels; ++levelID)
               {
                 auto offset = var2.gridsize * levelID;
@@ -183,7 +183,7 @@ public:
       {
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             for (int levelID = 0; levelID < var2.nlevels; ++levelID)
               {
                 auto offset = var2.gridsize * levelID;
@@ -203,7 +203,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             for (int levelID = 0; levelID < var2.nlevels; ++levelID)
               {
                 auto offset = var2.gridsize * levelID;
@@ -217,7 +217,7 @@ public:
       {
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             for (int levelID = 0; levelID < var2.nlevels; ++levelID)
               {
                 auto offset = var2.gridsize * levelID;
@@ -244,7 +244,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             for (int levelID = 0; levelID < var2.nlevels; ++levelID)
               {
                 auto offset = var2.gridsize * levelID;
diff --git a/src/Healpix.cc b/src/Healpix.cc
index 6efb23764..e87a94dbd 100644
--- a/src/Healpix.cc
+++ b/src/Healpix.cc
@@ -107,10 +107,10 @@ degrade(const Varray<T1> &v1, size_t gridsize2, Varray<T2> &v2, bool hasMissvals
 }
 
 static void
-hp_degrade(const Field &field1, Field &field2, const HealpixParams &params)
+hp_degrade(Field const &field1, Field &field2, const HealpixParams &params)
 {
   auto hasMissvals = (field1.numMissVals > 0);
-  auto func = [&](const auto &v1, auto &v2, auto size, double mv) { degrade(v1, size, v2, hasMissvals, mv, params); };
+  auto func = [&](auto const &v1, auto &v2, auto size, double mv) { degrade(v1, size, v2, hasMissvals, mv, params); };
   field_operation2(func, field1, field2, field2.gridsize, field1.missval);
   if (hasMissvals) field_num_mv(field2);
 }
@@ -135,10 +135,10 @@ upgrade(size_t gridsize1, const Varray<T1> &v1, Varray<T2> &v2, bool hasMissvals
 }
 
 static void
-hp_upgrade(const Field &field1, Field &field2, const HealpixParams &params)
+hp_upgrade(Field const &field1, Field &field2, const HealpixParams &params)
 {
   auto hasMissvals = (field1.numMissVals > 0);
-  auto func = [&](const auto &v1, auto &v2, auto size, double mv) { upgrade(size, v1, v2, hasMissvals, mv, params); };
+  auto func = [&](auto const &v1, auto &v2, auto size, double mv) { upgrade(size, v1, v2, hasMissvals, mv, params); };
   field_operation2(func, field1, field2, field1.gridsize, field1.missval);
   if (hasMissvals) field_num_mv(field2);
 }
@@ -174,7 +174,7 @@ nested_to_ring(Field &field, int nside)
 }
 
 static Stat
-set_stat(const std::string &statString)
+set_stat(std::string const &statString)
 {
   if (statString == "mean")
     return Stat::Mean;
@@ -194,19 +194,19 @@ get_parameter(void)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "nside") params.nsideOut = parameter_to_int(value);
diff --git a/src/Hi.cc b/src/Hi.cc
index 1c2a9522f..9029b9ac8 100644
--- a/src/Hi.cc
+++ b/src/Hi.cc
@@ -34,7 +34,7 @@ humidityIndex(double t, double e, double r, double missval)
 }
 
 static void
-farexpr(Field &field1, const Field &field2, const Field &field3, double (*expression)(double, double, double, double))
+farexpr(Field &field1, Field const &field2, Field const &field3, double (*expression)(double, double, double, double))
 {
   auto grid1 = field1.grid;
   auto grid2 = field2.grid;
diff --git a/src/Importamsr.cc b/src/Importamsr.cc
index dadd762f9..cd25273b2 100644
--- a/src/Importamsr.cc
+++ b/src/Importamsr.cc
@@ -99,7 +99,7 @@ read_amsr(FILE *fp, const VarList &varList, Varray2D<double> &data, size_t *numM
 {
   std::vector<unsigned char> amsr_data;
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       amsr_data.resize(var.gridsize);
       size_t size = fread(amsr_data.data(), 1, var.gridsize, fp);
diff --git a/src/Importobs.cc b/src/Importobs.cc
index 9c9383f3c..04d669ce5 100644
--- a/src/Importobs.cc
+++ b/src/Importobs.cc
@@ -35,7 +35,7 @@ init_vars(int vlistID, int gridID, int zaxisID, int nvars)
 static void
 init_data(const VarList &varList, Varray2D<double> &data)
 {
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       for (size_t i = 0; i < var.gridsize; ++i) data[var.ID][i] = var.missval;
     }
@@ -44,7 +44,7 @@ init_data(const VarList &varList, Varray2D<double> &data)
 static void
 write_data(CdoStreamID streamID, const VarList &varList, Varray2D<double> &data)
 {
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       auto numMissVals = varray_num_mv(var.gridsize, data[var.ID], var.missval);
       cdo_def_field(streamID, var.ID, 0);
diff --git a/src/Info.cc b/src/Info.cc
index dab5261bb..7b4de96ef 100644
--- a/src/Info.cc
+++ b/src/Info.cc
@@ -37,10 +37,10 @@ struct InfoStat
 };
 
 static void
-field_min_max_sum(const Field &field, double &min, double &max, double &sum)
+field_min_max_sum(Field const &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](const auto &v, auto n) { return varray_min_max_sum(v, n, mms); };
+  auto func = [&](auto const &v, auto n) { return varray_min_max_sum(v, n, mms); };
   mms = field_operation(func, field, field.size);
 
   min = mms.min;
@@ -49,10 +49,10 @@ field_min_max_sum(const Field &field, double &min, double &max, double &sum)
 }
 
 static size_t
-field_min_max_sum_mv(const Field &field, double &min, double &max, double &sum)
+field_min_max_sum_mv(Field const &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](const auto &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
+  auto func = [&](auto const &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
   mms = field_operation(func, field, field.size, field.missval);
 
   min = mms.min;
@@ -182,7 +182,7 @@ char_to_mode_and_color(unsigned char c, int &blinkMin, int &blinkMax)
 
 template <typename T>
 static void
-print_map(int nlon, int nlat, const Varray<T> &varray, double mv, double min, double max)
+print_map(int nlon, int nlat, Varray<T> const &varray, double mv, double min, double max)
 {
   auto missval = static_cast<T>(mv);
   // source code from PINGO
@@ -235,15 +235,15 @@ print_map(int nlon, int nlat, const Varray<T> &varray, double mv, double min, do
 }
 
 static void
-print_map(int nlon, int nlat, const Field &field, double min, double max)
+print_map(int nlon, int nlat, Field const &field, double min, double max)
 {
-  auto func = [&](const auto &v, double mv) { print_map(nlon, nlat, v, mv, min, max); };
+  auto func = [&](auto const &v, double mv) { print_map(nlon, nlat, v, mv, min, max); };
   field_operation(func, field, field.missval);
 }
 
 template <typename T>
 static size_t
-complex_sum(const Varray<T> &v, double mv, size_t gridsize, double &sumr, double &sumi)
+complex_sum(Varray<T> const &v, double mv, size_t gridsize, double &sumr, double &sumi)
 {
   T missval = static_cast<T>(mv);
   size_t n = 0;
@@ -261,9 +261,9 @@ complex_sum(const Varray<T> &v, double mv, size_t gridsize, double &sumr, double
 }
 
 static size_t
-field_complex_sum(const Field &field, double &sumr, double &sumi)
+field_complex_sum(Field const &field, double &sumr, double &sumi)
 {
-  auto func = [&](const auto &v, double mv, size_t gridsize) { return complex_sum(v, mv, gridsize, sumr, sumi); };
+  auto func = [&](auto const &v, double mv, size_t gridsize) { return complex_sum(v, mv, gridsize, sumr, sumi); };
   return field_operation(func, field, field.missval, field.gridsize);
 }
 
@@ -306,7 +306,7 @@ print_xheader(int fileIndex)
 }
 
 static void
-compute_stat_real(const Field &field, InfoStat &infoStat, size_t &imiss, size_t gridsize)
+compute_stat_real(Field const &field, InfoStat &infoStat, size_t &imiss, size_t gridsize)
 {
   if (infoStat.numMissVals)
     {
@@ -329,7 +329,7 @@ compute_stat_real(const Field &field, InfoStat &infoStat, size_t &imiss, size_t
 }
 
 static void
-compute_stat_comp(const Field &field, InfoStat &infoStat, size_t &imiss, size_t gridsize)
+compute_stat_comp(Field const &field, InfoStat &infoStat, size_t &imiss, size_t gridsize)
 {
   auto numVals = field_complex_sum(field, infoStat.sum, infoStat.sumi);
   imiss = gridsize - numVals;
diff --git a/src/Intgrid.cc b/src/Intgrid.cc
index d01208b4b..c7e3e472c 100644
--- a/src/Intgrid.cc
+++ b/src/Intgrid.cc
@@ -48,9 +48,9 @@ thinout(const Varray<T1> &varray1, Varray<T2> &varray2, int gridID1, int gridID2
 }
 
 static void
-thinout(const Field &field1, Field &field2, size_t xinc, size_t yinc)
+thinout(Field const &field1, Field &field2, size_t xinc, size_t yinc)
 {
-  auto func = [&](const auto &v1, auto &v2, auto grid1, auto grid2) { thinout(v1, v2, grid1, grid2, xinc, yinc); };
+  auto func = [&](auto const &v1, auto &v2, auto grid1, auto grid2) { thinout(v1, v2, grid1, grid2, xinc, yinc); };
   field_operation2(func, field1, field2, field1.grid, field2.grid);
   field_num_mv(field2);
 }
@@ -227,9 +227,9 @@ boxavg(const Varray<T1> &varray1, Varray<T2> &varray2, int gridID1, int gridID2,
 }
 
 static void
-boxavg(const Field &field1, Field &field2, size_t xinc, size_t yinc)
+boxavg(Field const &field1, Field &field2, size_t xinc, size_t yinc)
 {
-  auto func = [&](const auto &v1, auto &v2, auto grid1, auto grid2) { boxavg(v1, v2, grid1, grid2, xinc, yinc); };
+  auto func = [&](auto const &v1, auto &v2, auto grid1, auto grid2) { boxavg(v1, v2, grid1, grid2, xinc, yinc); };
   field_operation2(func, field1, field2, field1.grid, field2.grid);
   field_num_mv(field2);
 }
diff --git a/src/Intlevel.cc b/src/Intlevel.cc
index 619d5542f..26c4caaf6 100644
--- a/src/Intlevel.cc
+++ b/src/Intlevel.cc
@@ -69,7 +69,7 @@ restore_index_and_weights(int nlev1, int idx, float wgt, int &idx1, int &idx2, f
 template <typename T1, typename T2>
 static void
 vert_interp_lev(size_t gridsize, int nlev1, double mv, const Varray<T1> &vardata1, Varray<T2> &vardata2, int nlev2,
-                const Varray<int> &lev_idx, const Varray<float> &lev_wgt)
+                const Varray<int> &lev_idx, Varray<float> const &lev_wgt)
 {
   T1 missval = mv;
 
@@ -96,7 +96,7 @@ vert_interp_lev(size_t gridsize, int nlev1, double mv, const Varray<T1> &vardata
 
 static void
 vert_interp_lev(size_t gridsize, int nlev1, double missval, const Field3D &field1, Field3D &field2, int nlev2,
-                const Varray<int> &lev_idx, const Varray<float> &lev_wgt)
+                const Varray<int> &lev_idx, Varray<float> const &lev_wgt)
 {
   auto func = [&](auto &v1, auto &v2) { vert_interp_lev(gridsize, nlev1, missval, v1, v2, nlev2, lev_idx, lev_wgt); };
   field_operation2(func, field1, field2);
@@ -106,7 +106,7 @@ vert_interp_lev(size_t gridsize, int nlev1, double missval, const Field3D &field
 template <typename T1, typename T2>
 void
 vert_interp_lev3d(size_t gridsize, int nlev1, double mv, const Varray<T1> &vardata1, Varray<T2> &vardata2, int nlev2,
-                  const Varray<int> &lev_idx, const Varray<float> &lev_wgt)
+                  const Varray<int> &lev_idx, Varray<float> const &lev_wgt)
 {
   T1 missval = mv;
 
@@ -137,14 +137,14 @@ vert_interp_lev3d(size_t gridsize, int nlev1, double mv, const Varray<T1> &varda
 
 void
 vert_interp_lev3d(size_t gridsize, int nlev1, double missval, const Field3D &field1, Field3D &field2, int nlev2,
-                  const Varray<int> &lev_idx, const Varray<float> &lev_wgt)
+                  const Varray<int> &lev_idx, Varray<float> const &lev_wgt)
 {
   auto func = [&](auto &v1, auto &v2) { vert_interp_lev3d(gridsize, nlev1, missval, v1, v2, nlev2, lev_idx, lev_wgt); };
   field_operation2(func, field1, field2);
 }
 
 void
-vert_gen_weights(int extrapolate, int nlev1, const Varray<double> &lev1, int nlev2, const Varray<double> &lev2,
+vert_gen_weights(int extrapolate, int nlev1, Varray<double> const &lev1, int nlev2, Varray<double> const &lev2,
                  Varray<int> &lev_idx, Varray<float> &lev_wgt)
 {
   for (int i2 = 0; i2 < nlev2; ++i2)
@@ -208,7 +208,7 @@ levelDirDown(int nlev, const double *const lev)
 
 template <typename T>
 static void
-vert_gen_weights3d1d(bool extrapolate, size_t gridsize, int nlev1, const Varray<T> &xlev1, int nlev2,
+vert_gen_weights3d1d(bool extrapolate, size_t gridsize, int nlev1, Varray<T> const &xlev1, int nlev2,
                      const std::vector<double> &lev2, Varray<int> &xlev_idx, Varray<float> &xlev_wgt)
 {
   auto nthreads = Threading::ompNumMaxThreads;
@@ -300,20 +300,20 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           // if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &values = kv.values;
-          const auto &value = kv.values[0];
+          auto const &values = kv.values;
+          auto const &value = kv.values[0];
           int nvalues = kv.nvalues;
           if (nvalues == 1 && value.empty()) nvalues = 0;
 
@@ -345,11 +345,11 @@ get_parameter()
 }
 
 static void
-handle_zvar(size_t &zvarGridsize, size_t &wisize, const std::string &zvarname, const VarList &varList1, int &zvarID,
-            bool &zvarIsVarying, const std::vector<double> &lev2, int &nlev1, const int &nlev2, const int &vlistID1, int &zaxisID2,
+handle_zvar(size_t &zvarGridsize, size_t &wisize, std::string const &zvarname, const VarList &varList1, int &zvarID,
+            bool &zvarIsVarying, const std::vector<double> &lev2, int &nlev1, int const &nlev2, int const &vlistID1, int &zaxisID2,
             int &zaxisID1)
 {
-  for (const auto &var : varList1.vars)
+  for (auto const &var : varList1.vars)
     {
       if (zvarname == var.name)
         {
@@ -358,7 +358,7 @@ handle_zvar(size_t &zvarGridsize, size_t &wisize, const std::string &zvarname, c
         }
     }
 
-  const auto &zvar = varList1.vars[zvarID];
+  auto const &zvar = varList1.vars[zvarID];
   if (zvarID == CDI_UNDEFID) cdo_abort("Variable %s not found!", zvarname);
   zvarIsVarying = (zvar.timeType == TIME_VARYING);
   zvarGridsize = zvar.gridsize;
@@ -384,8 +384,8 @@ handle_zvar(size_t &zvarGridsize, size_t &wisize, const std::string &zvarname, c
 }
 
 static void
-handle_empty_zvar(size_t &wisize, std::vector<double> &lev1, const std::vector<double> &lev2, int &nlev1, const int &nlev2,
-                  const int &vlistID1, int &zaxisID2, int &zaxisID1)
+handle_empty_zvar(size_t &wisize, std::vector<double> &lev1, const std::vector<double> &lev2, int &nlev1, int const &nlev2,
+                  int const &vlistID1, int &zaxisID2, int &zaxisID1)
 {
   int numLevels = 0;
   int i;
@@ -481,7 +481,7 @@ public:
     operator_input_arg("level|zdescription[, zvarname, extrapolate]");
 
     zaxisID2 = CDI_UNDEFID;
-    const auto &pargv = cdo_get_oper_argv();
+    auto const &pargv = cdo_get_oper_argv();
 
     if (std::isdigit((int) pargv[0][0])) { params.levels = cdo_argv_to_fltarr(pargv); }
     else
@@ -559,7 +559,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var1 = varList1.vars[varID];
+        auto const &var1 = varList1.vars[varID];
 
         vardata1[varID].init(var1);
 
@@ -609,7 +609,7 @@ public:
           {
             if (processVars[varID] && interpVars[varID])
               {
-                const auto &var1 = varList1.vars[varID];
+                auto const &var1 = varList1.vars[varID];
 
                 auto missval = var1.missval;
                 auto gridsize = var1.gridsize;
@@ -623,7 +623,7 @@ public:
                   {
                     auto offset = gridsize * levelID;
                     auto func
-                        = [&](const auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
+                        = [&](auto const &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
                     field_operation(func, vardata2[varID]);
                   }
               }
diff --git a/src/Intlevel3d.cc b/src/Intlevel3d.cc
index ad25f1a88..8b8ed8427 100644
--- a/src/Intlevel3d.cc
+++ b/src/Intlevel3d.cc
@@ -21,8 +21,8 @@
 #include "cdi_lockedIO.h"
 
 void vert_interp_lev3d(size_t gridsize, int nlev1, double missval, const Field3D &field1, Field3D &field2, int nlev2,
-                       const Varray<int> &lev_idx, const Varray<float> &lev_wgt);
-void vert_gen_weights(int expol, int nlev1, const Varray<double> &lev1, int nlev2, const Varray<double> &lev2, Varray<int> &lev_idx,
+                       const Varray<int> &lev_idx, Varray<float> const &lev_wgt);
+void vert_gen_weights(int expol, int nlev1, Varray<double> const &lev1, int nlev2, Varray<double> const &lev2, Varray<int> &lev_idx,
                       Varray<float> &lev_wgt);
 bool levelDirUp(int nlev, const double *const lev);
 bool levelDirDown(int nlev, const double *const lev);
@@ -36,7 +36,7 @@ bool levelDirDown(int nlev, const double *const lev);
  * 3d version of vert_gen_weights() (src/Intlevel.cc)
  */
 static void
-vert_gen_weights3d(bool expol, size_t gridsize, int nlev1, const Varray<float> &xlev1, int nlev2, const Varray<float> &xlev2,
+vert_gen_weights3d(bool expol, size_t gridsize, int nlev1, Varray<float> const &xlev1, int nlev2, Varray<float> const &xlev2,
                    Varray<int> &xlev_idx, Varray<float> &xlev_wgt)
 {
   auto nthreads = Threading::ompNumMaxThreads;
@@ -90,7 +90,7 @@ read_source_coordinate(int streamNumber, Varray<float> &zlevelsIn)
 
   if (varList.numVars() != 1) cdo_abort("infile2: Only one single variable is allowed!");
 
-  const auto &var0 = varList.vars[0];
+  auto const &var0 = varList.vars[0];
 
   zlevelsIn.resize(var0.gridsize * var0.nlevels);
 
@@ -112,7 +112,7 @@ read_source_coordinate(int streamNumber, Varray<float> &zlevelsIn)
 }
 
 static CdoVar
-read_target_coordinate(const std::string &fileName, Varray<float> &zlevelsOut)
+read_target_coordinate(std::string const &fileName, Varray<float> &zlevelsOut)
 {
   auto streamID0 = stream_open_read_locked(fileName.c_str());  // 3d vertical target coordinate
   auto vlistID0 = streamInqVlist(streamID0);
@@ -121,7 +121,7 @@ read_target_coordinate(const std::string &fileName, Varray<float> &zlevelsOut)
 
   if (varList.numVars() != 1) cdo_abort("tgtcoordinate: Only one single variable is allowed!");
 
-  const auto &var0 = varList.vars[0];
+  auto const &var0 = varList.vars[0];
 
   zlevelsOut.resize(var0.gridsize * var0.nlevels);
 
@@ -300,7 +300,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var1 = varList1.vars[varID];
+        auto const &var1 = varList1.vars[varID];
         auto zaxisID = var1.zaxisID;
         auto gridsize = var1.gridsize;
         auto nlevel = var1.nlevels;
@@ -358,7 +358,7 @@ public:
         // Perform the interpolation on all valid data variables
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             if (processVars[varID] && interpVars[varID])
               {
                 auto gridsize = var1.gridsize;
@@ -370,7 +370,7 @@ public:
                   {
                     auto offset = gridsize * levelID;
                     auto func
-                        = [&](const auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
+                        = [&](auto const &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
                     field_operation(func, vardata2[varID]);
                   }
               }
diff --git a/src/Intntime.cc b/src/Intntime.cc
index 95fdbfbc4..55c26915b 100644
--- a/src/Intntime.cc
+++ b/src/Intntime.cc
@@ -20,7 +20,7 @@
 #include "printinfo.h"
 #include "field_functions.h"
 
-void interp_time(double fac1, double fac2, const Field &field1, const Field &field2, Field &field3, bool withMissval);
+void interp_time(double fac1, double fac2, Field const &field1, Field const &field2, Field &field3, bool withMissval);
 
 class Intntime : public Process
 {
@@ -140,8 +140,8 @@ public:
               {
                 auto [varID, levelID] = fieldInfoList[fieldID].get();
 
-                const auto &field1 = varsData[curFirst][varID][levelID];
-                const auto &field2 = varsData[curSecond][varID][levelID];
+                auto const &field1 = varsData[curFirst][varID][levelID];
+                auto const &field2 = varsData[curSecond][varID][levelID];
 
                 field3.init(varList1.vars[varID]);
 
diff --git a/src/Inttime.cc b/src/Inttime.cc
index 67e482001..c2e734925 100644
--- a/src/Inttime.cc
+++ b/src/Inttime.cc
@@ -24,7 +24,7 @@
 
 template <typename T>
 size_t
-interp_time(double fac1, double fac2, size_t gridsize, const Varray<T> &v1, const Varray<T> &v2, Varray<T> &v3, bool withMissval,
+interp_time(double fac1, double fac2, size_t gridsize, Varray<T> const &v1, Varray<T> const &v2, Varray<T> &v3, bool withMissval,
             T missval)
 {
   size_t numMissVals3 = 0;
@@ -60,7 +60,7 @@ interp_time(double fac1, double fac2, size_t gridsize, const Varray<T> &v1, cons
 }
 
 void
-interp_time(double fac1, double fac2, const Field &field1, const Field &field2, Field &field3, bool withMissval)
+interp_time(double fac1, double fac2, Field const &field1, Field const &field2, Field &field3, bool withMissval)
 {
   if (field3.memType == MemType::Float)
     field3.numMissVals
@@ -255,8 +255,8 @@ public:
                   {
                     auto [varID, levelID] = fieldInfoList[fieldID].get();
 
-                    const auto &field1 = varsData[curFirst][varID][levelID];
-                    const auto &field2 = varsData[curSecond][varID][levelID];
+                    auto const &field1 = varsData[curFirst][varID][levelID];
+                    auto const &field2 = varsData[curSecond][varID][levelID];
 
                     field3.init(varList1.vars[varID]);
 
diff --git a/src/Intyear.cc b/src/Intyear.cc
index fe32e2b32..5a09ab64d 100644
--- a/src/Intyear.cc
+++ b/src/Intyear.cc
@@ -20,7 +20,7 @@
 #include "util_string.h"
 
 static size_t
-intlin_year(double fac1, double fac2, size_t gridsize, const Varray<double> &array1, const Varray<double> &array2,
+intlin_year(double fac1, double fac2, size_t gridsize, Varray<double> const &array1, Varray<double> const &array2,
             Varray<double> &array3, bool withMissval, double missval1, double missval2)
 {
   size_t numMissVals3 = 0;
diff --git a/src/Invertlev.cc b/src/Invertlev.cc
index f11cbc12a..321419815 100644
--- a/src/Invertlev.cc
+++ b/src/Invertlev.cc
@@ -128,7 +128,7 @@ public:
     auto has3dVar = false;
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         if (var.nlevels > 1)
           {
             has3dVar = true;
@@ -181,7 +181,7 @@ public:
           {
             if (vardata[varID].size())
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
                   {
                     cdo_def_field(streamID2, varID, levelID);
diff --git a/src/Longinfo.cc b/src/Longinfo.cc
index 5d792a028..674ee1174 100644
--- a/src/Longinfo.cc
+++ b/src/Longinfo.cc
@@ -33,10 +33,10 @@ struct LonginfoStat
 };
 
 static void
-field_min_max_sum(const Field &field, double &min, double &max, double &sum)
+field_min_max_sum(Field const &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](const auto &v, auto n) { return varray_min_max_sum(v, n, mms); };
+  auto func = [&](auto const &v, auto n) { return varray_min_max_sum(v, n, mms); };
   mms = field_operation(func, field, field.size);
 
   min = mms.min;
@@ -45,10 +45,10 @@ field_min_max_sum(const Field &field, double &min, double &max, double &sum)
 }
 
 static size_t
-field_min_max_sum_mv(const Field &field, double &min, double &max, double &sum)
+field_min_max_sum_mv(Field const &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](const auto &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
+  auto func = [&](auto const &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
   mms = field_operation(func, field, field.size, field.missval);
 
   min = mms.min;
@@ -58,7 +58,7 @@ field_min_max_sum_mv(const Field &field, double &min, double &max, double &sum)
 }
 
 static size_t
-compute_stat_real(const Field &field, LonginfoStat &infostat, size_t gridsize)
+compute_stat_real(Field const &field, LonginfoStat &infostat, size_t gridsize)
 {
   size_t imiss = 0;
 
diff --git a/src/Maggraph.cc b/src/Maggraph.cc
index 91bfc1b91..582a76567 100644
--- a/src/Maggraph.cc
+++ b/src/Maggraph.cc
@@ -128,7 +128,7 @@ compareTime(CdiTime time1, CdiTime time2)
 }
 
 static void
-maggraph(const char *plotfile, const std::string &varname, const std::string &varunits, long nfiles, std::vector<long> nts,
+maggraph(const char *plotfile, std::string const &varname, std::string const &varunits, long nfiles, std::vector<long> nts,
          const std::vector<std::vector<CdiDateTime>> &vDateTimes, std::vector<std::vector<double>> datatab, int nparam,
          std::vector<std::string> &params)
 {
@@ -157,8 +157,8 @@ maggraph(const char *plotfile, const std::string &varname, const std::string &va
   for (i = 0; i < nparam; ++i)
     {
       auto splitStrings = split_string(params[i], "=");
-      const auto &key = splitStrings[0];
-      const auto &value = splitStrings[1];
+      auto const &key = splitStrings[0];
+      auto const &value = splitStrings[1];
 
       if (key == "obsv")
         {
@@ -664,8 +664,8 @@ verifyGraphParameters(int num_param, std::vector<std::string> &param_names)
 
       if (splitStrings.size() > 1)
         {
-          const auto &key = splitStrings[0];
-          const auto &value = splitStrings[1];
+          auto const &key = splitStrings[0];
+          auto const &value = splitStrings[1];
 
           for (j = 0; j < graph_param_count; ++j)
             {
diff --git a/src/Magplot.cc b/src/Magplot.cc
index a5978d6cf..ac9510bb4 100644
--- a/src/Magplot.cc
+++ b/src/Magplot.cc
@@ -464,7 +464,7 @@ public:
 
         if (splitStrings.size() > 1)
           {
-            const auto &key = splitStrings[0];
+            auto const &key = splitStrings[0];
             auto value = strdup(splitStrings[1].c_str());
 
             if (opID == CONTOUR)
@@ -656,9 +656,9 @@ public:
 
 #ifdef HAVE_LIBMAGICS
   void
-  magplot(const char *plotfile, int p_operatorID, const std::string &varname, const std::string &units, long p_nlon, long p_nlat,
+  magplot(const char *plotfile, int p_operatorID, std::string const &varname, std::string const &units, long p_nlon, long p_nlat,
           Varray<double> &p_grid_center_lon, Varray<double> &p_grid_center_lat, Varray<double> &p_array, size_t numMissVals,
-          double missval, int p_nparam, const std::vector<std::string> &params, const std::string &datetimeStr, bool p_lregular)
+          double missval, int p_nparam, const std::vector<std::string> &params, std::string const &datetimeStr, bool p_lregular)
 
   {
     double dlon = 0, dlat = 0;
@@ -676,7 +676,7 @@ public:
         for (int i = 0; i < p_nparam; ++i)
           {
             const auto splitStrings = split_string(params[i], "=");
-            const auto &key = splitStrings[0];
+            auto const &key = splitStrings[0];
 
             if (key == "min") fprintf(stderr, "Min Val %g\n", YMIN);
             if (key == "max") fprintf(stderr, "Max Val %g\n", YMAX);
diff --git a/src/Magvector.cc b/src/Magvector.cc
index c1d8b63ec..7467574f2 100644
--- a/src/Magvector.cc
+++ b/src/Magvector.cc
@@ -61,7 +61,7 @@ quit_MAGICS()
 void
 magvector(const char *plotfile, long nlon, long nlat, Varray<double> &grid_center_lon, Varray<double> &grid_center_lat,
           Varray<double> &uarray, Varray<double> &varray, int nparam, std::vector<std::string> &params,
-          const std::string &datetimeStr)
+          std::string const &datetimeStr)
 
 {
   long i;
@@ -92,8 +92,8 @@ magvector(const char *plotfile, long nlon, long nlat, Varray<double> &grid_cente
   for (i = 0; i < nparam; ++i)
     {
       auto splitStrings = split_string(params[i], "=");
-      const auto &key = splitStrings[0];
-      const auto &value = splitStrings[1];
+      auto const &key = splitStrings[0];
+      auto const &value = splitStrings[1];
 
       if (key == "thin_fac")
         {
@@ -212,8 +212,8 @@ verify_vector_parameters(int num_param, std::vector<std::string> &param_names, b
 
       if (splitStrings.size() > 1)
         {
-          const auto &key = splitStrings[0];
-          const auto &value = splitStrings[1];
+          auto const &key = splitStrings[0];
+          auto const &value = splitStrings[1];
           if (vectorMode)
             {
               param_count = vector_param_count;
diff --git a/src/MapReduce.cc b/src/MapReduce.cc
index 805bdbad5..3ce66387e 100644
--- a/src/MapReduce.cc
+++ b/src/MapReduce.cc
@@ -14,7 +14,7 @@
 
 // read only the first data variable from input filename into a given double pointer
 static void
-read_first_field(const std::string &filename, double *field)
+read_first_field(std::string const &filename, double *field)
 {
   size_t numMissVals;
   int varID, levelID;
@@ -76,7 +76,7 @@ public:
     if (cdo_operator_argc() < 1) cdo_abort("Too few arguments!");
 
     // check input grid type and size - this will be used for selecting relevant variables from the input file
-    const auto &maskfilename = cdo_operator_argv(0);
+    auto const &maskfilename = cdo_operator_argv(0);
     auto inputGridID = cdo_define_grid(maskfilename);
     auto inputGridSize = gridInqSize(inputGridID);
     auto inputGridType = gridInqType(inputGridID);
@@ -106,7 +106,7 @@ public:
     bool nobounds = false, nocoords = false;
     if (2 <= cdo_operator_argc())
       {
-        const auto &coordinatesLimitation = cdo_operator_argv(1);
+        auto const &coordinatesLimitation = cdo_operator_argv(1);
         if (coordinatesLimitation == "nobounds") nobounds = true;
         if (coordinatesLimitation == "nocoords") nocoords = true;
       }
@@ -128,7 +128,7 @@ public:
     vlistClearFlag(vlistID1);
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         if (inputGridType == var.gridType && inputGridSize == var.gridsize)
           {
             vars[varID] = true;
diff --git a/src/Maskbox.cc b/src/Maskbox.cc
index 205145827..87696b47a 100644
--- a/src/Maskbox.cc
+++ b/src/Maskbox.cc
@@ -26,12 +26,12 @@
 static void
 maskbox(Vmask &mask, int gridID, const SelboxInfo &selboxInfo)
 {
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   long nlon = gridInqXsize(gridID);
   long nlat = gridInqYsize(gridID);
 
@@ -123,7 +123,7 @@ point_is_inside(double xval, double yval, double xmin, double xmax, const double
 }
 
 static void
-mask_region_regular(Vmask &mask, size_t nlon, size_t nlat, const Varray<double> &xvals, const Varray<double> &yvals,
+mask_region_regular(Vmask &mask, size_t nlon, size_t nlat, Varray<double> const &xvals, Varray<double> const &yvals,
                     const double *xcoords, const double *ycoords, size_t segmentSize)
 {
   auto xmm = varray_min_max(segmentSize, xcoords);
@@ -145,7 +145,7 @@ mask_region_regular(Vmask &mask, size_t nlon, size_t nlat, const Varray<double>
 }
 
 static void
-mask_region_cell(Vmask &mask, size_t gridsize, const Varray<double> &xvals, const Varray<double> &yvals, const double *xcoords,
+mask_region_cell(Vmask &mask, size_t gridsize, Varray<double> const &xvals, Varray<double> const &yvals, const double *xcoords,
                  const double *ycoords, size_t segmentSize)
 {
   auto xmm = varray_min_max(segmentSize, xcoords);
@@ -382,7 +382,7 @@ public:
 
             if (processVars[varID])
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 field.init(var);
                 cdo_read_field(streamID1, field);
 
diff --git a/src/Mastrfu.cc b/src/Mastrfu.cc
index 3822049cc..586cfcc88 100644
--- a/src/Mastrfu.cc
+++ b/src/Mastrfu.cc
@@ -117,7 +117,7 @@ public:
     auto numVars = varList1.numVars();
     if (numVars != 1) cdo_abort("This operator works only with one variable!");
 
-    const auto &var0 = varList1.vars[0];
+    auto const &var0 = varList1.vars[0];
     if (var0.code > 0 && var0.code != 132) cdo_warning("Unexpected code %d!", var0.code);
 
     missval = var0.missval;
diff --git a/src/Math.cc b/src/Math.cc
index ac360ff0e..721a1c186 100644
--- a/src/Math.cc
+++ b/src/Math.cc
@@ -387,7 +387,7 @@ public:
         auto numVars = varList1.numVars();
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             if (var1.dataType == CDI_DATATYPE_CPX32) vlistDefVarDatatype(vlistID2, varID, CDI_DATATYPE_FLT32);
             if (var1.dataType == CDI_DATATYPE_CPX64) vlistDefVarDatatype(vlistID2, varID, CDI_DATATYPE_FLT64);
           }
diff --git a/src/Merge.cc b/src/Merge.cc
index 7e6b5c9a1..0728fed89 100644
--- a/src/Merge.cc
+++ b/src/Merge.cc
@@ -22,14 +22,14 @@
 #include "cdo_default_values.h"
 
 static void
-check_dup_entry(int vlistID1, int vlistID2, const std::string &filename)
+check_dup_entry(int vlistID1, int vlistID2, std::string const &filename)
 {
   Varray<double> lev1, lev2;
 
   VarList varList1(vlistID1);
   VarList varList2(vlistID2);
 
-  for (const auto &var1 : varList1.vars)
+  for (auto const &var1 : varList1.vars)
     {
       auto gtype1 = var1.gridType;
       auto gsize1 = var1.gridsize;
@@ -38,7 +38,7 @@ check_dup_entry(int vlistID1, int vlistID2, const std::string &filename)
       if (nlev1 > lev1.size()) lev1.resize(nlev1);
       cdo_zaxis_inq_levels(var1.zaxisID, lev1.data());
 
-      for (const auto &var2 : varList2.vars)
+      for (auto const &var2 : varList2.vars)
         {
           auto gtype2 = var2.gridType;
           auto gsize2 = var2.gridsize;
@@ -308,7 +308,7 @@ public:
   void
   close() override
   {
-    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
+    for (auto const &streamID : streamIDs) cdo_stream_close(streamID);
 
     cdo_stream_close(streamID2);
 
diff --git a/src/Mergetime.cc b/src/Mergetime.cc
index 75f331744..a3574f37b 100644
--- a/src/Mergetime.cc
+++ b/src/Mergetime.cc
@@ -94,19 +94,19 @@ get_parameter(bool &skipSameTime, MapFlag &mapFlag)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "skip_same_time")  skipSameTime = parameter_to_bool(value);
@@ -179,7 +179,7 @@ public:
           {
             auto &si = streamInfoList[fileID];
             varList_compare(streamInfoList[0].varList, si.varList);
-            for (const auto &var : si.varList.vars) si.mapOfVarIDs[var.ID] = var.ID;
+            for (auto const &var : si.varList.vars) si.mapOfVarIDs[var.ID] = var.ID;
           }
       }
     else
@@ -193,7 +193,7 @@ public:
             if (numVars > streamInfoList[vlistFileIDmax].varList.numVars()) vlistFileIDmax = fileID;
           }
 
-        const auto &varList2 = streamInfoList[(mapFlag == MapFlag::Intersect) ? vlistFileIDmin : vlistFileIDmax].varList;
+        auto const &varList2 = streamInfoList[(mapFlag == MapFlag::Intersect) ? vlistFileIDmin : vlistFileIDmax].varList;
         for (int fileID = 0; fileID < numFiles; ++fileID)
           {
             auto &si = streamInfoList[fileID];
@@ -224,7 +224,7 @@ public:
           {
             if (missingIDs[varID] != 1)
               {
-                const auto &var1 = si1.varList.vars[varID];
+                auto const &var1 = si1.varList.vars[varID];
                 field.init(var1);
                 field_fill(field, var1.missval);
                 field.numMissVals = field.gridsize;
@@ -303,7 +303,7 @@ public:
               {
                 auto [varID, levelID] = cdo_inq_field(si.streamID);
 
-                const auto &var = si.varList.vars[varID];
+                auto const &var = si.varList.vars[varID];
                 if (tsID2 > 0 && si.tsID == 0 && var.isConstant) continue;
 
                 auto varID2 = varID;
diff --git a/src/Merstat.cc b/src/Merstat.cc
index d302802c6..d5b45f99c 100644
--- a/src/Merstat.cc
+++ b/src/Merstat.cc
@@ -145,7 +145,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID1, field1);
 
diff --git a/src/Mrotuv.cc b/src/Mrotuv.cc
index 62a85f688..b6b3fa59e 100644
--- a/src/Mrotuv.cc
+++ b/src/Mrotuv.cc
@@ -252,8 +252,8 @@ public:
           cdo_abort("U and V not found in %s", cdo_get_stream_name(0));
       }
 
-    const auto &varU = varList1.vars[uid];
-    const auto &varV = varList1.vars[vid];
+    auto const &varU = varList1.vars[uid];
+    auto const &varV = varList1.vars[vid];
     if (varU.nlevels != varV.nlevels) cdo_abort("U and V have different number of levels!");
 
     auto gridID1 = varU.gridID;
diff --git a/src/Mrotuvb.cc b/src/Mrotuvb.cc
index 71cd66e85..f72681c4c 100644
--- a/src/Mrotuvb.cc
+++ b/src/Mrotuvb.cc
@@ -279,8 +279,8 @@ public:
     VarList varList1(vlistID1);
     VarList varList2(vlistID2);
 
-    const auto &varU = varList1.vars[0];
-    const auto &varV = varList2.vars[0];
+    auto const &varU = varList1.vars[0];
+    auto const &varV = varList2.vars[0];
 
     if (varList1.numVars() > 1) cdo_abort("More than one variable found in %s", cdo_get_stream_name(0));
     if (varList2.numVars() > 1) cdo_abort("More than one variable found in %s", cdo_get_stream_name(1));
diff --git a/src/NCL_wind.cc b/src/NCL_wind.cc
index f04399eed..2d6bbce6b 100644
--- a/src/NCL_wind.cc
+++ b/src/NCL_wind.cc
@@ -77,7 +77,7 @@ uv2vr_cfd_W(double missval, double *u, double *v, double *lon, double *lat, size
 }
 
 static int
-find_name(const VarList &varList, const std::string &name)
+find_name(const VarList &varList, std::string const &name)
 {
   auto numVars = varList.numVars();
   for (int varID = 0; varID < numVars; ++varID)
@@ -119,19 +119,19 @@ set_parameter(void)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = "PARAMETER";
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "u") uName = value;
@@ -225,8 +225,8 @@ public:
     if (varIDu == CDI_UNDEFID) cdo_abort("%s not found!", uName);
     if (varIDv == CDI_UNDEFID) cdo_abort("%s not found!", vName);
 
-    const auto &varU = varList1.vars[varIDu];
-    const auto &varV = varList1.vars[varIDv];
+    auto const &varU = varList1.vars[varIDu];
+    auto const &varV = varList1.vars[varIDv];
 
     auto gridIDu = varU.gridID;
     auto gridIDv = varV.gridID;
@@ -288,8 +288,8 @@ public:
     Varray<double> arrayv(nlev * gridsizeuv);
     Varray<double> arrayo(nlev * gridsizeuv);
 
-    const auto &varU = varList1.vars[varIDu];
-    const auto &varV = varList1.vars[varIDv];
+    auto const &varU = varList1.vars[varIDu];
+    auto const &varV = varList1.vars[varIDv];
     int tsID = 0;
     while (true)
       {
diff --git a/src/Ninfo.cc b/src/Ninfo.cc
index 051503112..b1fad9e24 100644
--- a/src/Ninfo.cc
+++ b/src/Ninfo.cc
@@ -169,10 +169,10 @@ public:
         }
       case NPAR: fprintf(stdout, "%d\n", numVars); break;
       case NLEVEL:
-        for (const auto &var : varList.vars) { fprintf(stdout, "%d\n", var.nlevels); }
+        for (auto const &var : varList.vars) { fprintf(stdout, "%d\n", var.nlevels); }
         break;
       case NGRIDPOINTS:
-        for (const auto &var : varList.vars) { fprintf(stdout, "%zu\n", var.gridsize); }
+        for (auto const &var : varList.vars) { fprintf(stdout, "%zu\n", var.gridsize); }
         break;
       case NGRIDS: fprintf(stdout, "%d\n", numGrids); break;
       default: cdo_abort("operator not implemented!"); break;
diff --git a/src/Nmldump.cc b/src/Nmldump.cc
index 6ccd1d136..dc449bf44 100644
--- a/src/Nmldump.cc
+++ b/src/Nmldump.cc
@@ -27,7 +27,7 @@ print_values(int numValues, const std::vector<std::string> &values)
       auto dataType = literals_find_datatype(numValues, values);
       for (int i = 0; i < numValues; ++i)
         {
-          const auto &value = values[i];
+          auto const &value = values[i];
           if (i) printf(", ");
           switch (dataType)
             {
@@ -49,13 +49,13 @@ print_values(int numValues, const std::vector<std::string> &values)
 void
 kvldump(const PMList &pmlist)
 {
-  for (const auto &kvlist : pmlist)
+  for (auto const &kvlist : pmlist)
     {
-      const auto &listname = kvlist.name;
+      auto const &listname = kvlist.name;
       if (!listname.empty()) printf("&%s\n", listname.c_str());
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (!listname.empty()) printf("  ");
           printf("%s = ", key.c_str());
           print_values(kv.nvalues, kv.values);
diff --git a/src/Output.cc b/src/Output.cc
index 46080b684..099860fba 100644
--- a/src/Output.cc
+++ b/src/Output.cc
@@ -26,13 +26,13 @@
 #include "cdo_zaxis.h"
 
 static void
-outputarr(int dig, size_t gridsize, const Varray<double> &array)
+outputarr(int dig, size_t gridsize, Varray<double> const &array)
 {
   for (size_t i = 0; i < gridsize; ++i) { fprintf(stdout, "  arr[%zu] = %.*g;\n", i, dig, array[i]); }
 }
 
 static void
-outputsp(size_t gridsize, const Varray<double> &array, long ntr)
+outputsp(size_t gridsize, Varray<double> const &array, long ntr)
 {
   auto mm = varray_min_max(gridsize, array);
   if (/* T11 */ mm.min >= -1 && mm.max <= 12)
@@ -51,7 +51,7 @@ outputsp(size_t gridsize, const Varray<double> &array, long ntr)
 }
 
 static void
-output(size_t gridsize, const Varray<double> &array)
+output(size_t gridsize, Varray<double> const &array)
 {
   int nout = 0;
   for (size_t i = 0; i < gridsize; ++i)
@@ -74,8 +74,8 @@ print_xyz(FILE *fp, double x, double y, double z)
 }
 
 static void
-outputxyz(size_t gridsize, const Varray<double> &array, double missval, size_t nlon, size_t nlat, const Varray<double> &lon,
-          const Varray<double> &lat)
+outputxyz(size_t gridsize, Varray<double> const &array, double missval, size_t nlon, size_t nlat, Varray<double> const &lon,
+          Varray<double> const &lat)
 {
   double fmin = 0.0;
   for (size_t i = 0; i < gridsize; ++i)
@@ -175,7 +175,7 @@ read_lonlat_coordinates(int gridID0, Varray<double> &grid_center_lon, Varray<dou
 }
 
 static void
-outputint(size_t gridsize, const Varray<double> &array)
+outputint(size_t gridsize, Varray<double> const &array)
 {
   int nout = 0;
   for (size_t i = 0; i < gridsize; ++i)
@@ -192,7 +192,7 @@ outputint(size_t gridsize, const Varray<double> &array)
 }
 
 static void
-outputf(int nelem, const std::string &format, size_t gridsize, const Varray<double> &array)
+outputf(int nelem, std::string const &format, size_t gridsize, Varray<double> const &array)
 {
   int nout = 0;
   for (size_t i = 0; i < gridsize; ++i)
@@ -333,7 +333,7 @@ public:
         operator_input_arg("keys to print");
 
         auto npar = cdo_operator_argc();
-        const auto &parnames = cdo_get_oper_argv();
+        auto const &parnames = cdo_get_oper_argv();
 
         if (Options::cdoVerbose)
           for (int i = 0; i < npar; ++i) cdo_print("key%d=%s", i + 1, parnames[i]);
@@ -347,7 +347,7 @@ public:
             size_t k;
             for (k = 0; k < keyMap.size(); ++k)
               {
-                const auto &key = keyMap[k].key;
+                auto const &key = keyMap[k].key;
                 if (key == currentName)
                   {
                     if (keyMap[k].idx == knohead)
@@ -427,7 +427,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID);
-                const auto &var = varList.vars[varID];
+                auto const &var = varList.vars[varID];
 
                 auto code = var.code;
                 auto gridID = var.gridID;
diff --git a/src/Outputgmt.cc b/src/Outputgmt.cc
index 0aedd6ed4..fef5717ed 100644
--- a/src/Outputgmt.cc
+++ b/src/Outputgmt.cc
@@ -125,7 +125,7 @@ get_rgb(double value, double missval, const CPT &cpt)
 }
 
 static void
-output_vrml(long nlon, long nlat, long ngp, const Varray<double> &array, double missval, const CPT &cpt)
+output_vrml(long nlon, long nlat, long ngp, Varray<double> const &array, double missval, const CPT &cpt)
 {
   auto mm = varray_min_max_mv(ngp, array, missval);
   auto dx = 10.0 / nlon;
@@ -219,7 +219,7 @@ output_vrml(long nlon, long nlat, long ngp, const Varray<double> &array, double
 }
 
 static void
-output_kml(size_t ngp, const Varray<double> &array, int ncorner, const Varray<double> &grid_corner_lat,
+output_kml(size_t ngp, Varray<double> const &array, int ncorner, Varray<double> const &grid_corner_lat,
            Varray<double> &grid_corner_lon, const std::vector<int> &grid_mask, double missval, const CPT &cpt)
 {
   fprintf(stdout, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
@@ -330,8 +330,8 @@ output_kml(size_t ngp, const Varray<double> &array, int ncorner, const Varray<do
 }
 
 static void
-output_vector(long nlon, long nlat, int ninc, const Varray<double> &lon, const Varray<double> &lat, const Varray<double> &uf,
-              const Varray<double> &vf)
+output_vector(long nlon, long nlat, int ninc, Varray<double> const &lon, Varray<double> const &lat, Varray<double> const &uf,
+              Varray<double> const &vf)
 {
   for (long j = 0; j < nlat; j += ninc)
     for (long i = 0; i < nlon; i += ninc)
@@ -469,7 +469,7 @@ public:
 
     varList = VarList(vlistID);
 
-    const auto &var0 = varList.vars[0];
+    auto const &var0 = varList.vars[0];
     gridID = var0.gridID;
     auto zaxisID = var0.zaxisID;
     missval = var0.missval;
@@ -620,7 +620,7 @@ public:
 
         if (tsID == 0 && printHeader)
           {
-            const auto &var0 = varList.vars[0];
+            auto const &var0 = varList.vars[0];
             if (operatorID == OUTPUTVRML) printf("#VRML V2.0 utf8\n\n");
 #ifdef VERSION
             fprintf(stdout, "# Generated by CDO version %s\n", VERSION);
diff --git a/src/Pack.cc b/src/Pack.cc
index 8a80cf565..93d7bb18f 100644
--- a/src/Pack.cc
+++ b/src/Pack.cc
@@ -40,7 +40,7 @@ struct PackEntry
 };
 
 static std::vector<PackEntry>
-read_params_from_file(const std::string &filename)
+read_params_from_file(std::string const &filename)
 {
   std::vector<PackEntry> packList;
 
@@ -59,12 +59,12 @@ read_params_from_file(const std::string &filename)
           if (Options::cdoVerbose) kvlist.print();
 
           PackEntry packEntry;
-          for (const auto &kv : kvlist)
+          for (auto const &kv : kvlist)
             {
-              const auto &key = kv.key;
+              auto const &key = kv.key;
               if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
               if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-              const auto &value = kv.values[0];
+              auto const &value = kv.values[0];
 
               // clang-format off
               if      (key == "name")         packEntry.name = parameter_to_word(value);
@@ -154,7 +154,7 @@ print_parameter(const PackParams &params)
 }
 
 static void
-print_pack_params(const std::string &name, double addOffset, double scaleFactor)
+print_pack_params(std::string const &name, double addOffset, double scaleFactor)
 {
   fprintf(stdout, "name=%s  add_offset=%.9g  scale_factor=%.9g\n", name.c_str(), addOffset, scaleFactor);
 }
@@ -167,19 +167,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "add_offset")   params.add_offset = parameter_to_double(value);
@@ -261,7 +261,7 @@ private:
     auto numVars = varList1.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
         double fmin = undefValue, fmax = -undefValue;
         size_t numMissValspv = 0;
@@ -272,7 +272,7 @@ private:
               {
                 if (t > 0 && var.isConstant) continue;
 
-                const auto &field = varsData[t][varID][levelID];
+                auto const &field = varsData[t][varID][levelID];
                 auto numMissVals = field.numMissVals;
 
                 if (numMissVals) numMissValspv += numMissVals;
@@ -336,7 +336,7 @@ private:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (tsID > 0 && var.isConstant) continue;
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
@@ -359,9 +359,9 @@ private:
     auto numVars = varList1.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
-        for (const auto &packEntry : packList)
+        for (auto const &packEntry : packList)
           {
             if (var.name == packEntry.name)
               {
diff --git a/src/Pinfo.cc b/src/Pinfo.cc
index b380e3caa..31db26939 100644
--- a/src/Pinfo.cc
+++ b/src/Pinfo.cc
@@ -107,7 +107,7 @@ public:
             size_t numMissVals;
             cdo_read_field(streamID1, array1.data(), &numMissVals);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             indg += 1;
             auto gridsize = var.gridsize;
 
diff --git a/src/Regres.cc b/src/Regres.cc
index f7bf397ab..a58316376 100644
--- a/src/Regres.cc
+++ b/src/Regres.cc
@@ -32,19 +32,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "equal") tstepIsEqual = parameter_to_bool(value);
@@ -158,7 +158,7 @@ public:
       {
         auto [varID, levelID] = fieldInfoList[fieldID].get();
 
-        const auto &var = varList2.vars[varID];
+        auto const &var = varList2.vars[varID];
         field2.init(var);
         field3.init(var);
 
diff --git a/src/Remapeta.cc b/src/Remapeta.cc
index ea5205ecf..32a5c7acd 100644
--- a/src/Remapeta.cc
+++ b/src/Remapeta.cc
@@ -26,7 +26,7 @@
 #include "cdi_lockedIO.h"
 
 static void
-set_missval(const Vmask &imiss, double missval, auto &sarray)
+set_missval(Vmask const &imiss, double missval, auto &sarray)
 {
   auto n = imiss.size();
   if (n > 0)
@@ -90,7 +90,7 @@ ncctop(double cptop, long nlev, long nlevp1, const double *vct_a, const double *
 }
 
 static Varray<double>
-vct_from_file(const std::string &filename)
+vct_from_file(std::string const &filename)
 {
   constexpr int maxvct = 8192;
   Varray<double> vct;
@@ -137,7 +137,7 @@ vct_from_file(const std::string &filename)
 
 template <typename T>
 static void
-vertSum(Varray<double> &sum, const Varray<T> &var3d, size_t gridsize, size_t nlevels)
+vertSum(Varray<double> &sum, Varray<T> const &var3d, size_t gridsize, size_t nlevels)
 {
   for (size_t i = 0; i < gridsize; ++i) sum[i] = 0;
 
@@ -147,7 +147,7 @@ vertSum(Varray<double> &sum, const Varray<T> &var3d, size_t gridsize, size_t nle
 
 template <typename T>
 static void
-vertSumw(Varray<double> &sum, const Varray<T> &var3d, size_t gridsize, size_t nlevels, const Varray<double> &deltap)
+vertSumw(Varray<double> &sum, Varray<T> const &var3d, size_t gridsize, size_t nlevels, Varray<double> const &deltap)
 {
   for (size_t i = 0; i < gridsize; ++i) sum[i] = 0;
 
@@ -157,9 +157,9 @@ vertSumw(Varray<double> &sum, const Varray<T> &var3d, size_t gridsize, size_t nl
 
 template <typename T>
 void
-field_copy_array(size_t len, const Field &field, T *array)
+field_copy_array(size_t len, Field const &field, T *array)
 {
-  auto func = [&](const auto &v) {
+  auto func = [&](auto const &v) {
     for (size_t i = 0; i < len; ++i) array[i] = v[i];
   };
   field_operation(func, field);
@@ -351,7 +351,7 @@ public:
   }
 
   void
-  read_fis(const std::string &fileName)
+  read_fis(std::string const &fileName)
   {
     auto streamID = stream_open_read_locked(fileName.c_str());
     auto vlistID = streamInqVlist(streamID);
@@ -360,7 +360,7 @@ public:
     int varID, levelID;
     streamInqField(streamID, &varID, &levelID);
 
-    const auto &var = varList.vars[0];
+    auto const &var = varList.vars[0];
 
     nfis2gp = var.gridsize;
     fis2.resize(nfis2gp);
@@ -500,7 +500,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
         if (var.gridType == GRID_SPECTRAL && var.zaxisType == ZAXIS_HYBRID) cdo_abort("Spectral data on model level unsupported!");
 
@@ -624,7 +624,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
 
@@ -698,7 +698,7 @@ public:
         if (ltq)
           {
             int varID = varIDs.taID;
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             for (int levelID = 0; levelID < var1.nlevels; ++levelID)
               {
                 auto offset = gridsize * levelID;
diff --git a/src/Remapgrid.cc b/src/Remapgrid.cc
index 684b13488..ca4b51d55 100644
--- a/src/Remapgrid.cc
+++ b/src/Remapgrid.cc
@@ -34,7 +34,7 @@
 #include "remapknn.h"
 
 int
-get_remapIndex(int numRemaps, std::vector<RemapType> &remaps, int gridID, size_t numMissVals, bool useMask, const Vmask &imask)
+get_remapIndex(int numRemaps, std::vector<RemapType> &remaps, int gridID, size_t numMissVals, bool useMask, Vmask const &imask)
 {
   int remapIndex = -1;
   for (remapIndex = numRemaps - 1; remapIndex >= 0; remapIndex--)
@@ -87,12 +87,12 @@ maptype_to_operfunc(const RemapSwitches &remapSwitches)
 }
 
 static void
-scale_gridbox_area(const Field &field1, Field &field2, const Varray<double> &grid2_area)
+scale_gridbox_area(Field const &field1, Field &field2, Varray<double> const &grid2_area)
 {
   auto gridsize1 = field1.size;
   auto gridsize2 = field2.size;
   double v1sum;
-  auto func = [&](const auto &v1, auto &v2) {
+  auto func = [&](auto const &v1, auto &v2) {
     v1sum = varray_sum(gridsize1, v1);
     auto v2sum = varray_sum(gridsize2, grid2_area);
     for (size_t i = 0; i < gridsize2; ++i) v2[i] = grid2_area[i] / v2sum * v1sum;
@@ -202,7 +202,7 @@ remap_set_fracmin(double fracMin, Field &field, const RemapGrid *tgtGrid)
 }
 
 static void
-remap_field(RemapMethod mapType, const KnnParams &knnParams, RemapType &remap, const Field &field1, Field &field2)
+remap_field(RemapMethod mapType, KnnParams const &knnParams, RemapType &remap, Field const &field1, Field &field2)
 {
   // clang-format off
   if      (mapType == RemapMethod::BILINEAR) remap_bilinear(remap.search, field1, field2);
@@ -213,7 +213,7 @@ remap_field(RemapMethod mapType, const KnnParams &knnParams, RemapType &remap, c
 }
 
 static RemapSwitches
-remap_read_weights(const std::string &remapWeightsFile, int gridID1, int gridID2, RemapType &remap0, bool extrapolateIsSet,
+remap_read_weights(std::string const &remapWeightsFile, int gridID1, int gridID2, RemapType &remap0, bool extrapolateIsSet,
                    bool &remapExtrapolate, KnnParams &knnParams)
 {
   auto remapSwitches
@@ -272,7 +272,7 @@ remap_read_weights(const std::string &remapWeightsFile, int gridID1, int gridID2
 double get_planet_radius_in_meter(int gridID);
 
 static void
-print_node_info(int gridID2, const RemapVars &rv, const RemapGrid &srcGrid)
+print_node_info(int gridID2, RemapVars const &rv, const RemapGrid &srcGrid)
 {
   static auto printNodeInfo = true;
   if (printNodeInfo == false) return;
@@ -309,19 +309,19 @@ remapknn_get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "k")           knnParams.k = parameter_to_int(value);
diff --git a/src/Remapstat.cc b/src/Remapstat.cc
index 1925c61be..b345416fa 100644
--- a/src/Remapstat.cc
+++ b/src/Remapstat.cc
@@ -190,7 +190,7 @@ is_zonal_grid(int gridID, const std::vector<double> &xbounds2d, const std::vecto
 }
 
 static double
-calc_maxdist(size_t i, size_t nv, const PointLonLat &pointLL, const Varray<double> &xbounds, const Varray<double> &ybounds)
+calc_maxdist(size_t i, size_t nv, PointLonLat const &pointLL, Varray<double> const &xbounds, Varray<double> const &ybounds)
 {
   double p1[3], p2[3];
   gcLLtoXYZ(pointLL.get_lon(), pointLL.get_lat(), p1);
@@ -209,7 +209,7 @@ calc_maxdist(size_t i, size_t nv, const PointLonLat &pointLL, const Varray<doubl
 }
 
 static double
-calc_maxdist_rec2d(size_t i, size_t nlon, const PointLonLat &pointLL, const std::vector<double> &xbounds,
+calc_maxdist_rec2d(size_t i, size_t nlon, PointLonLat const &pointLL, const std::vector<double> &xbounds,
                    const std::vector<double> &ybounds)
 {
   double p1[3], p2[3];
@@ -242,8 +242,8 @@ calc_maxdist_rec2d(size_t i, size_t nlon, const PointLonLat &pointLL, const std:
 #ifdef USE_YAC
 static size_t
 find_points_yac(Vmask &vmask, size_t cell_no, size_t ncorner, size_t numIndices, Varray<size_t> &indices,
-                const Varray<double> &xvals1, const Varray<double> &yvals1, const Varray<double> &xbounds,
-                const Varray<double> &ybounds)
+                Varray<double> const &xvals1, Varray<double> const &yvals1, Varray<double> const &xbounds,
+                Varray<double> const &ybounds)
 {
 #ifndef TESTIMPL
   cdo_abort("Internal error: find_points() not implemented!");
@@ -297,8 +297,8 @@ find_points_yac(Vmask &vmask, size_t cell_no, size_t ncorner, size_t numIndices,
 #endif
 
 static size_t
-find_points(Vmask &vmask, size_t cell_no, size_t ncorner, size_t numIndices, Varray<size_t> &indices, const Varray<double> &xvals1,
-            const Varray<double> &yvals1, const Varray<double> &xbounds, const Varray<double> &ybounds)
+find_points(Vmask &vmask, size_t cell_no, size_t ncorner, size_t numIndices, Varray<size_t> &indices, Varray<double> const &xvals1,
+            Varray<double> const &yvals1, Varray<double> const &xbounds, Varray<double> const &ybounds)
 {
 #ifndef TESTIMPL
   cdo_abort("Internal error: find_points() not implemented!");
@@ -369,8 +369,8 @@ find_points(Vmask &vmask, size_t cell_no, size_t ncorner, size_t numIndices, Var
 }
 
 static size_t
-find_points_rec2d(Vmask &vmask, size_t i, size_t nlon2, size_t numIndices, Varray<size_t> &indices, const Varray<double> &xvals1,
-                  const Varray<double> &yvals1, const std::vector<double> &xbounds2d, const std::vector<double> &ybounds2d)
+find_points_rec2d(Vmask &vmask, size_t i, size_t nlon2, size_t numIndices, Varray<size_t> &indices, Varray<double> const &xvals1,
+                  Varray<double> const &yvals1, const std::vector<double> &xbounds2d, const std::vector<double> &ybounds2d)
 {
   auto iy = i / nlon2;
   auto ix = i - iy * nlon2;
@@ -425,7 +425,7 @@ get_bin_num(double lon1, double lat1, size_t numBins, const std::vector<double>
 }
 
 static void
-check_vmask(const Vmask &vmask)
+check_vmask(Vmask const &vmask)
 {
   constexpr int maxVals = 128;
   size_t vm[maxVals] = { 0 };
@@ -576,7 +576,7 @@ gen_mapdata(int gridID1, int gridID2)
 template <typename T>
 static T
 remap_kernel(int operfunc, const Varray<size_t> &indices, size_t &numMissVals2, Field &field, Varray<T> &fieldvec,
-             const Varray<T> &vec1, double mv)
+             Varray<T> const &vec1, double mv)
 {
   T missval = mv;
   T value;
@@ -606,7 +606,7 @@ remap_kernel(int operfunc, const Varray<size_t> &indices, size_t &numMissVals2,
 }
 
 static void
-remap_field(const Varray2D<size_t> &mapdata, const Field &field1, Field &field2, int operfunc)
+remap_field(const Varray2D<size_t> &mapdata, Field const &field1, Field &field2, int operfunc)
 {
   std::vector<Field> fields(Threading::ompNumMaxThreads);
 
@@ -619,7 +619,7 @@ remap_field(const Varray2D<size_t> &mapdata, const Field &field1, Field &field2,
 #endif
   for (size_t i = 0; i < gridsize2; ++i)
     {
-      const auto &indices = mapdata[i];
+      auto const &indices = mapdata[i];
       auto nvalues = indices.size();
       auto missval = field1.missval;
 
diff --git a/src/Remapweights.cc b/src/Remapweights.cc
index f082d39b9..fbdff010c 100644
--- a/src/Remapweights.cc
+++ b/src/Remapweights.cc
@@ -32,7 +32,7 @@
 #include "pmlist.h"
 
 int get_remapIndex(int numRemaps, std::vector<RemapType> &remapList, int gridID, size_t numMissVals, bool useMask,
-                   const Vmask &imask);
+                   Vmask const &imask);
 void pack_gme_vgpm(const Varray<int> &vgpm, Vmask &imask);
 
 struct RemapweightsParams
@@ -49,19 +49,19 @@ get_parameter_knn()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "k")           params.knnParams.k = parameter_to_int(value);
@@ -106,12 +106,12 @@ get_parameter_map3d(int offset, int &neighbors, bool &map3D, std::string &grid)
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "grid")                    grid = parameter_to_word(value);
@@ -124,7 +124,7 @@ get_parameter_map3d(int offset, int &neighbors, bool &map3D, std::string &grid)
 }
 
 static void
-remap_write_weights(const std::string &remapWeightsFile, const KnnParams &knnParams, const RemapSwitches &remapSwitches,
+remap_write_weights(std::string const &remapWeightsFile, KnnParams const &knnParams, const RemapSwitches &remapSwitches,
                     RemapType &remap)
 {
   remap_write_data_scrip(remapWeightsFile, knnParams, remapSwitches, remap.srcGrid, remap.tgtGrid, remap.vars);
diff --git a/src/Replace.cc b/src/Replace.cc
index ef9664146..80e25d1cd 100644
--- a/src/Replace.cc
+++ b/src/Replace.cc
@@ -80,7 +80,7 @@ public:
 
     for (int varID2 = 0; varID2 < numVars2; ++varID2)
       {
-        const auto &var2 = varList2.vars[varID2];
+        auto const &var2 = varList2.vars[varID2];
         int varID1;
         for (varID1 = 0; varID1 < numVars1; ++varID1)
           {
@@ -89,7 +89,7 @@ public:
 
         if (varID1 < numVars1)
           {
-            const auto &var1 = varList1.vars[varID1];
+            auto const &var1 = varList1.vars[varID1];
 
             if (var1.gridsize != var2.gridsize) cdo_abort("Variables have different gridsize!");
             if (var1.nlevels < var2.nlevels) cdo_abort("Variables have different number of levels!");
@@ -111,8 +111,8 @@ public:
         varlevel.resize(nchvars);
         for (idx = 0; idx < nchvars; idx++)
           {
-            const auto &var1 = varList1.vars[vars1[idx]];
-            const auto &var2 = varList2.vars[vars2[idx]];
+            auto const &var1 = varList1.vars[vars1[idx]];
+            auto const &var2 = varList2.vars[vars2[idx]];
 
             vardata2[idx].resize(var2.nlevels * var2.gridsize);
             varnumMissVals2[idx].resize(var2.nlevels);
diff --git a/src/Replacevalues.cc b/src/Replacevalues.cc
index 8249accb0..9a1abd678 100644
--- a/src/Replacevalues.cc
+++ b/src/Replacevalues.cc
@@ -121,7 +121,7 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID1);
             size_t numMissVals;
             cdo_read_field(streamID1, array.data(), &numMissVals);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             auto gridsize = var.gridsize;
             auto missval = var.missval;
diff --git a/src/Rhopot.cc b/src/Rhopot.cc
index 2a9d7fbe9..e6934aebb 100644
--- a/src/Rhopot.cc
+++ b/src/Rhopot.cc
@@ -116,7 +116,7 @@ r[i]-x[i]);
 */
 
 static void
-calc_rhopot(size_t gridsize, size_t nlevel, const Varray<double> &pressure, const FieldVector &to, const FieldVector &sao,
+calc_rhopot(size_t gridsize, size_t nlevel, Varray<double> const &pressure, FieldVector const &to, FieldVector const &sao,
             FieldVector &rho)
 {
   // pressure units: hPa
@@ -125,8 +125,8 @@ calc_rhopot(size_t gridsize, size_t nlevel, const Varray<double> &pressure, cons
 
   for (size_t levelID = 0; levelID < nlevel; ++levelID)
     {
-      const auto &tovec = to[levelID].vec_d;
-      const auto &saovec = sao[levelID].vec_d;
+      auto const &tovec = to[levelID].vec_d;
+      auto const &saovec = sao[levelID].vec_d;
       auto &rhovec = rho[levelID].vec_d;
       auto to_missval = to[levelID].missval;
       auto sao_missval = sao[levelID].missval;
@@ -188,7 +188,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto code = var.code;
         if (code <= 0)
           {
@@ -224,8 +224,8 @@ public:
     auto gridID = vlistGrid(vlistID1, 0);
     gridsize = vlist_check_gridsize(vlistID1);
 
-    const auto &varSAO = varList1.vars[saoID];
-    const auto &varTO = varList1.vars[toID];
+    auto const &varSAO = varList1.vars[saoID];
+    auto const &varTO = varList1.vars[toID];
     zaxisID = varSAO.zaxisID;
 
     if (varSAO.nlevels != varTO.nlevels) cdo_abort("temperature and salinity have different number of levels!");
diff --git a/src/Rotuv.cc b/src/Rotuv.cc
index 412ed0d1c..01e0401f8 100644
--- a/src/Rotuv.cc
+++ b/src/Rotuv.cc
@@ -231,8 +231,8 @@ public:
             if (varID == numVars) cdo_abort("v-wind not found!");
 
             auto vsvarID = varID;
-            const auto &usVar = varList1.vars[usvarID];
-            const auto &vsVar = varList1.vars[vsvarID];
+            auto const &usVar = varList1.vars[usvarID];
+            auto const &vsVar = varList1.vars[vsvarID];
 
             if (Options::cdoVerbose)
               {
diff --git a/src/Samplegrid.cc b/src/Samplegrid.cc
index f14d691fc..924c8cfb0 100644
--- a/src/Samplegrid.cc
+++ b/src/Samplegrid.cc
@@ -174,7 +174,7 @@ public:
 
         vlistChangeGridIndex(vlistID2, index, gridIDsampled);
 
-        for (const auto &var : varList1.vars)
+        for (auto const &var : varList1.vars)
           if (gridSrcID == var.gridID) vars[var.ID] = true;
       }
 
diff --git a/src/Samplegridicon.cc b/src/Samplegridicon.cc
index 7b8818cab..31d3c9b91 100644
--- a/src/Samplegridicon.cc
+++ b/src/Samplegridicon.cc
@@ -31,13 +31,13 @@ struct CellIndex
 };
 
 static void
-copy_data_to_index(long ncells, const Varray<double> &data, long *cellindex)
+copy_data_to_index(long ncells, Varray<double> const &data, long *cellindex)
 {
   for (long i = 0; i < ncells; ++i) cellindex[i] = std::lround(data[i]);
 }
 
 static void
-read_cellindex(const std::string &filename, CellIndex &cellindex)
+read_cellindex(std::string const &filename, CellIndex &cellindex)
 {
   auto streamID = stream_open_read_locked(filename.c_str());
   auto vlistID = streamInqVlist(streamID);
@@ -120,7 +120,7 @@ read_cellindex(const std::string &filename, CellIndex &cellindex)
 }
 
 static int
-read_grid(const std::string &filename)
+read_grid(std::string const &filename)
 {
   auto streamID = stream_open_read_locked(filename.c_str());
   auto vlistID = streamInqVlist(streamID);
@@ -236,7 +236,7 @@ compute_child_from_parent(CellIndex &cellindex1, CellIndex &cellindex2)
 }
 
 static void
-read_coordinates(const std::string &filename, long n, Varray<double> &lon, Varray<double> &lat)
+read_coordinates(std::string const &filename, long n, Varray<double> &lon, Varray<double> &lat)
 {
   auto streamID = streamOpenRead(filename.c_str());
   auto vlistID = streamInqVlist(streamID);
@@ -261,7 +261,7 @@ read_coordinates(const std::string &filename, long n, Varray<double> &lon, Varra
 }
 
 static void
-read_coordinates(const std::string &filename, long n, Varray<double> &lon, Varray<double> &lat, int nv, Varray<double> &lon_bnds,
+read_coordinates(std::string const &filename, long n, Varray<double> &lon, Varray<double> &lat, int nv, Varray<double> &lon_bnds,
                  Varray<double> &lat_bnds)
 {
   auto streamID = streamOpenRead(filename.c_str());
@@ -298,7 +298,7 @@ read_coordinates(const std::string &filename, long n, Varray<double> &lon, Varra
 static void
 compute_child_from_bounds(CellIndex &cellindex2, Varray<double> &grid_center_lon2, Varray<double> &grid_center_lat2,
                           Varray<double> &grid_corner_lon2, Varray<double> &grid_corner_lat2,
-                          const Varray<double> &grid_center_lon1, const Varray<double> &grid_center_lat1)
+                          Varray<double> const &grid_center_lon1, Varray<double> const &grid_center_lat1)
 {
   if (Options::cdoVerbose) cdo_print("%s", __func__);
 
@@ -394,7 +394,7 @@ compute_child(CellIndex &cellindex1, CellIndex &cellindex2)
 {
   bool lparent = true;
   auto ncells1 = cellindex1.ncells;
-  const auto &parent1 = cellindex1.parent;
+  auto const &parent1 = cellindex1.parent;
 
   long i;
   for (i = 0; i < ncells1; ++i)
@@ -410,7 +410,7 @@ compute_child(CellIndex &cellindex1, CellIndex &cellindex2)
 }
 
 static void
-compute_sum(long i, long &n, double &sum, double &sumq, long kci, Varray<CellIndex> &cellindex, const Varray<double> &array)
+compute_sum(long i, long &n, double &sum, double &sumq, long kci, Varray<CellIndex> &cellindex, Varray<double> const &array)
 {
   // printf("compute: i, kci %d %d\n", i, kci);
   auto ncells2 = cellindex[kci].ncells;
@@ -432,7 +432,7 @@ compute_sum(long i, long &n, double &sum, double &sumq, long kci, Varray<CellInd
 }
 
 static void
-samplegrid(double missval, long nci, Varray<CellIndex> &cellindex, const Varray<double> &array1, Varray<double> &array2,
+samplegrid(double missval, long nci, Varray<CellIndex> &cellindex, Varray<double> const &array1, Varray<double> &array2,
            Varray<double> &array3)
 {
   static bool lstat = true;
diff --git a/src/Seascount.cc b/src/Seascount.cc
index 13ab4ca47..aabd4bd2f 100644
--- a/src/Seascount.cc
+++ b/src/Seascount.cc
@@ -119,7 +119,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
diff --git a/src/Seasmonstat.cc b/src/Seasmonstat.cc
index c0d48fdc0..db051a72b 100644
--- a/src/Seasmonstat.cc
+++ b/src/Seasmonstat.cc
@@ -158,7 +158,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -208,11 +208,11 @@ public:
         auto numVars = varList1.numVars();
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant) continue;
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
-                const auto &rsamp1 = samp1[varID][levelID];
+                auto const &rsamp1 = samp1[varID][levelID];
                 auto &rvars1 = varsData1[varID][levelID];
                 if (!rsamp1.empty())
                   field2_div(rvars1, rsamp1);
diff --git a/src/Seaspctl.cc b/src/Seaspctl.cc
index e71d90b7e..ccc178ab0 100644
--- a/src/Seaspctl.cc
+++ b/src/Seaspctl.cc
@@ -103,7 +103,7 @@ public:
 
     hset = HistogramSet(numVars, numSteps);
 
-    for (const auto &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
+    for (auto const &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
   }
 
   void
@@ -135,7 +135,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID2);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID2, field1);
 
@@ -178,7 +178,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -208,7 +208,7 @@ public:
         for (int fieldID = 0; fieldID < maxFields; ++fieldID)
           {
             auto [varID, levelID] = fieldInfoList[fieldID].get();
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (otsID && var.isConstant) continue;
 
             cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Selbox.cc b/src/Selbox.cc
index 6273b97ae..a82863890 100644
--- a/src/Selbox.cc
+++ b/src/Selbox.cc
@@ -74,12 +74,12 @@ gengridxyvals(int gridtype, int gridID1, int gridID2, long nlon, long nlat, long
   if (lxvals) gridInqXvals(gridID1, xvals1.data());
   if (lyvals) gridInqYvals(gridID1, yvals1.data());
 
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
 
   if (gridtype == GRID_CURVILINEAR)
     {
@@ -127,12 +127,12 @@ gengridXboundsCurvi(int gridID1, long nlon, long nlat, long nlon2, long nlat2, c
 
   gridInqXbounds(gridID1, xbounds1.data());
 
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   for (long ilat = lat1; ilat <= lat2; ilat++)
     {
       for (long ilon = 4 * lon21; ilon < 4 * (lon22 + 1); ilon++) *pxbounds2++ = xbounds1[4 * ilat * nlon + ilon];
@@ -151,12 +151,12 @@ gengridYboundsCurvi(int gridID1, long nlon, long nlat, long nlon2, long nlat2, c
 
   gridInqYbounds(gridID1, ybounds1.data());
 
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   for (long ilat = lat1; ilat <= lat2; ilat++)
     {
       for (long ilon = 4 * lon21; ilon < 4 * (lon22 + 1); ilon++) *pybounds2++ = ybounds1[4 * ilat * nlon + ilon];
@@ -175,10 +175,10 @@ gengridXboundsRect2D(int gridID1, long nlon, long nlon2, const SelboxInfo &selbo
 
   gridInqXbounds(gridID1, xbounds1.data());
 
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   for (long i = 2 * lon21; i < 2 * (lon22 + 1); ++i) *pxbounds2++ = xbounds1[i];
   for (long i = 2 * lon11; i < 2 * (lon12 + 1); ++i) *pxbounds2++ = xbounds1[i];
 
@@ -206,8 +206,8 @@ gengridYboundsRect2D(int gridID1, long nlat, long nlat2, const SelboxInfo &selbo
 
   gridInqYbounds(gridID1, ybounds1.data());
 
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
   for (long i = 2 * lat1; i < 2 * (lat2 + 1); ++i) *pybounds2++ = ybounds1[i];
 }
 
@@ -255,12 +255,12 @@ gengridYbounds(int gridID1, int gridID2, long nlon, long nlat, long nlon2, long
 static int
 gengrid(int gridID1, const SelboxInfo &selboxInfo)
 {
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   long nlon = gridInqXsize(gridID1);
   long nlat = gridInqYsize(gridID1);
 
@@ -908,9 +908,9 @@ window_box(int nwpv, const T1 *array1, int gridID, T2 *array2, long lat1, long l
 }
 
 static void
-window_box(const Field &field1, Field &field2, long lat1, long lat2, long lon11, long lon12, long lon21, long lon22)
+window_box(Field const &field1, Field &field2, long lat1, long lat2, long lon11, long lon12, long lon21, long lon22)
 {
-  auto func = [&](const auto &v1, auto &v2) {
+  auto func = [&](auto const &v1, auto &v2) {
     window_box(field1.nwpv, v1.data(), field1.grid, v2.data(), lat1, lat2, lon11, lon12, lon21, lon22);
   };
   field_operation2(func, field1, field2);
@@ -938,7 +938,7 @@ window_cell(int nwpv, const Varray<T1> &v1, Varray<T2> &v2, long n, const std::v
 }
 
 void
-window_cell(const Field &field1, Field &field2, const std::vector<long> &cellidx)
+window_cell(Field const &field1, Field &field2, const std::vector<long> &cellidx)
 {
   auto func = [&](auto &v1, auto &v2) { window_cell(field1.nwpv, v1, v2, field2.gridsize, cellidx); };
   field_operation2(func, field1, field2);
@@ -982,7 +982,7 @@ get_selboxInfoList(int vlistID1, int vlistID2, bool operIndexBox)
 
   if (Options::cdoVerbose)
     {
-      for (const auto &sb : selboxInfoList)
+      for (auto const &sb : selboxInfoList)
         if (sb.gridtype != GRID_UNSTRUCTURED && !is_healpix_grid(sb.gridID1))
           {
             cdo_print("box1 - idx1,idx2,idy1,idy2: %ld,%ld,%ld,%ld", sb.lon21 + 1, sb.lon22 + 1, sb.lat1 + 1, sb.lat2 + 1);
@@ -1001,7 +1001,7 @@ get_processVars(const VarList &varList, const std::vector<SelboxInfo> &selboxInf
   std::vector<bool> processVars(numVars, false);
 
   int varID;
-  for (const auto &sb : selboxInfoList)
+  for (auto const &sb : selboxInfoList)
     {
       for (varID = 0; varID < numVars; ++varID)
         if (sb.gridID1 == varList.vars[varID].gridID) processVars[varID] = true;
@@ -1018,7 +1018,7 @@ get_processVars(const VarList &varList, const std::vector<SelboxInfo> &selboxInf
 static const SelboxInfo &
 select_selboxInfo(int gridID, const std::vector<SelboxInfo> &selboxInfoList)
 {
-  for (const auto &selboxInfo : selboxInfoList)
+  for (auto const &selboxInfo : selboxInfoList)
     if (gridID == selboxInfo.gridID1) return selboxInfo;
 
   cdo_abort("Internal problem, grid not found!");
@@ -1105,7 +1105,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field1.init(var1);
             cdo_read_field(streamID1, field1);
 
@@ -1115,7 +1115,7 @@ public:
               {
                 field2.init(varList2.vars[varID]);
 
-                const auto &sb = select_selboxInfo(var1.gridID, selboxInfoList);
+                auto const &sb = select_selboxInfo(var1.gridID, selboxInfoList);
 
                 if (operatorID == SELLONLATBOX && (sb.gridtype == GRID_UNSTRUCTURED || is_healpix_grid(sb.gridID1)))
                   window_cell(field1, field2, sb.cellidx);
diff --git a/src/Select.cc b/src/Select.cc
index 87c3c91e6..c097dbbde 100644
--- a/src/Select.cc
+++ b/src/Select.cc
@@ -162,7 +162,7 @@ public:
     operator_input_arg(cdo_operator_enter(operatorID));
 
     auto argc = cdo_operator_argc();
-    const auto &argnames = cdo_get_oper_argv();
+    auto const &argnames = cdo_get_oper_argv();
 
     if (argc == 0) cdo_abort("Parameter missing!");
 
@@ -274,7 +274,7 @@ public:
                 xresult = false;
                 for (int varID = 0; varID < numVars; ++varID)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     for (int levelID = 0; levelID < var.nlevels; ++levelID) vlistDefFlag(vlistID1, varID, levelID, true);
                   }
               }
@@ -292,7 +292,7 @@ public:
 
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 code = var.code;
 
@@ -366,7 +366,7 @@ public:
               {
                 if (processVars[varID])
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (zaxisInqType(var.zaxisID) == ZAXIS_HYBRID)
                       {
                         auto psvarid = varList_get_psvarid(varList1, var.zaxisID);
@@ -379,7 +379,7 @@ public:
               {
                 if (processVars[varID])
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     for (int levelID = 0; levelID < var.nlevels; ++levelID)
                       {
                         levidx = levelID + 1;
@@ -436,7 +436,7 @@ public:
                     for (int varID = 0; varID < numVars; ++varID)
                       {
                         processVars[varID] = true;
-                        const auto &var = varList1.vars[varID];
+                        auto const &var = varList1.vars[varID];
                         for (int levelID = 0; levelID < var.nlevels; ++levelID) vlistDefFlag(vlistID1, varID, levelID, true);
                       }
                   }
@@ -448,7 +448,7 @@ public:
             vlistID0 = vlistDuplicate(vlistID1);
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
                   vlistDefFlag(vlistID0, varID, levelID, vlistInqFlag(vlistID1, varID, levelID));
               }
@@ -643,7 +643,7 @@ public:
                     auto [varID, levelID] = cdo_inq_field(streamID1);
                     if (vlistInqFlag(vlistID0, varID, levelID) == true)
                       {
-                        const auto &var = varList1.vars[varID];
+                        auto const &var = varList1.vars[varID];
 
                         if (hasConstVars && tsID2 > 0 && tsID1 == 0)
                           if (var.isConstant) continue;
@@ -675,7 +675,7 @@ public:
                     if (vlistInqFlag(vlistID0, varID, levelID) == true)
                       {
                         auto varID2 = vlistFindVar(vlistID2, varID);
-                        const auto &var = varList2.vars[varID2];
+                        auto const &var = varList2.vars[varID2];
                         if (var.isConstant)
                           {
                             auto levelID2 = vlistFindLevel(vlistID2, varID, levelID);
diff --git a/src/Selgridcell.cc b/src/Selgridcell.cc
index 6c44059cb..b770436f3 100644
--- a/src/Selgridcell.cc
+++ b/src/Selgridcell.cc
@@ -75,9 +75,9 @@ genindexgrid(int gridID1, size_t gridsize2, const std::vector<long> &cellidx)
 }
 
 static void
-select_index(const Field &field1, Field &field2, long nind, const std::vector<long> &cellIndex)
+select_index(Field const &field1, Field &field2, long nind, const std::vector<long> &cellIndex)
 {
-  auto func = [&](const auto &v1, auto &v2) {
+  auto func = [&](auto const &v1, auto &v2) {
     for (long i = 0; i < nind; ++i) v2[i] = v1[cellIndex[i]];
   };
   field_operation2(func, field1, field2);
@@ -140,7 +140,7 @@ public:
     if (cdo_operator_argc() == 1)
       {
         bool maskfile = true, indexfile = false;
-        const auto &filename = cdo_operator_argv(0);
+        auto const &filename = cdo_operator_argv(0);
         const auto *filenameCstr = filename.c_str();
         if (filename.starts_with("index="))
           {
diff --git a/src/Selmulti.cc b/src/Selmulti.cc
index 291138cca..4180e42cc 100644
--- a/src/Selmulti.cc
+++ b/src/Selmulti.cc
@@ -237,7 +237,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto ltype = zaxis_to_ltype(var.zaxisID);
 
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -402,7 +402,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (vlistInqFlag(vlistID1, varID, levelID) == true)
               {
diff --git a/src/Selregion.cc b/src/Selregion.cc
index 6d8552d78..5bb47fba0 100644
--- a/src/Selregion.cc
+++ b/src/Selregion.cc
@@ -15,7 +15,7 @@
 #include "region.h"
 
 int gengridcell(int gridID1, size_t gridsize2, const std::vector<long> &cellidx);
-void window_cell(const Field &field1, Field &field2, const std::vector<long> &cellidx);
+void window_cell(Field const &field1, Field &field2, const std::vector<long> &cellidx);
 double radiusDegToKm(double radiusInDeg);
 
 struct CirclePoint
@@ -72,7 +72,7 @@ point_is_inside(double xval, double yval, double xmin, double xmax, const double
 }
 
 static void
-sel_region_cell(Vmask &mask, size_t gridsize, const Varray<double> &xvals, const Varray<double> &yvals, const double *xcoords,
+sel_region_cell(Vmask &mask, size_t gridsize, Varray<double> const &xvals, Varray<double> const &yvals, const double *xcoords,
                 const double *ycoords, size_t segmentSize, std::vector<long> &cellidx)
 {
   auto xmm = varray_min_max(segmentSize, xcoords);
@@ -199,19 +199,19 @@ selcircle_get_parameter(CirclePoint &cpoint)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "maxpoints") cpoint.maxpoints = parameter_to_size_t(value);
@@ -332,7 +332,7 @@ public:
 
                 vlistChangeGridIndex(vlistID2, index, gridID2);
 
-                for (const auto &var : varList1.vars)
+                for (auto const &var : varList1.vars)
                   if (gridID1 == var.gridID) varIDs[var.ID] = true;
               }
           }
@@ -362,7 +362,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID1, field1);
 
diff --git a/src/Selsurface.cc b/src/Selsurface.cc
index 7153dfd3e..c81dba13b 100644
--- a/src/Selsurface.cc
+++ b/src/Selsurface.cc
@@ -16,7 +16,7 @@
 
 template <typename T>
 static void
-isosurface_kernel(double isoval, size_t numMissVals, const Varray<double> &levels, int nlevels, size_t gridsize, double mv,
+isosurface_kernel(double isoval, size_t numMissVals, Varray<double> const &levels, int nlevels, size_t gridsize, double mv,
                   const Varray<const T *> &data3D, Varray<T> &data2D)
 {
   T missval = mv;
@@ -52,7 +52,7 @@ isosurface_kernel(double isoval, size_t numMissVals, const Varray<double> &level
 }
 
 static void
-isosurface(double isoval, int nlevels, const Varray<double> &levels, const FieldVector &field3D, Field &field2D)
+isosurface(double isoval, int nlevels, Varray<double> const &levels, FieldVector const &field3D, Field &field2D)
 {
   auto gridsize = gridInqSize(field3D[0].grid);
   auto missval = field3D[0].missval;
@@ -101,7 +101,7 @@ layer_value_min_kernel(int nlevels, size_t gridsize, double mv, const Varray<con
 }
 
 static void
-layer_value_min(int nlevels, const FieldVector &field3D, Field &field2D)
+layer_value_min(int nlevels, FieldVector const &field3D, Field &field2D)
 {
   auto gridsize = gridInqSize(field3D[0].grid);
   auto missval = field3D[0].missval;
@@ -147,7 +147,7 @@ layer_value_max_kernel(int nlevels, size_t gridsize, double mv, const Varray<con
 }
 
 static void
-layer_value_max(int nlevels, const FieldVector &field3D, Field &field2D)
+layer_value_max(int nlevels, FieldVector const &field3D, Field &field2D)
 {
   auto gridsize = gridInqSize(field3D[0].grid);
   auto missval = field3D[0].missval;
@@ -279,7 +279,7 @@ public:
 
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         isVar3D[varID] = (var.zaxisID == zaxisID1);
       }
   }
@@ -305,7 +305,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             auto &field1 = varsData1[varID][levelID];
             field1.init(var);
             cdo_read_field(streamID1, field1);
@@ -316,7 +316,7 @@ public:
           {
             if (foundVar[varID])
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (isVar3D[varID])
                   {
                     field2.init(var);
diff --git a/src/Seltime.cc b/src/Seltime.cc
index 90d23ad1f..52bffa954 100644
--- a/src/Seltime.cc
+++ b/src/Seltime.cc
@@ -112,7 +112,7 @@ get_argv_string(const std::vector<std::string> &argVec)
 static bool
 argv_has_negativ_values(const std::vector<std::string> &argVec)
 {
-  for (const auto &argument : argVec)
+  for (auto const &argument : argVec)
     {
       int first, last, inc;
       split_intstring(argument, first, last, inc);
@@ -127,7 +127,7 @@ cdo_argv_to_int_timestep(const std::vector<std::string> &argVec, int ntimesteps)
 {
   std::vector<int> v;
 
-  for (const auto &argument : argVec)
+  for (auto const &argument : argVec)
     {
       int first, last, inc;
       split_intstring(argument, first, last, inc);
@@ -408,7 +408,7 @@ public:
 
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (lnts1 || var.isConstant)
                   {
                     for (int levelID = 0; levelID < var.nlevels; ++levelID) varsData[tsID][varID][levelID].resize(var.gridsize);
@@ -541,7 +541,7 @@ public:
 
                     for (int varID = 0; varID < numVars; ++varID)
                       {
-                        const auto &var = varList1.vars[varID];
+                        auto const &var = varList1.vars[varID];
                         if (var.isConstant && tsID2 > 1) continue;
                         for (int levelID = 0; levelID < var.nlevels; ++levelID)
                           {
@@ -571,7 +571,7 @@ public:
                 nts = nts1 - 1;
                 for (int varID = 0; varID < numVars; ++varID)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (var.isConstant)
                       {
                         for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -592,7 +592,7 @@ public:
                 if (dataIsUnchanged) { cdo_copy_field(streamID2, streamID1); }
                 else
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     field.init(var);
                     cdo_read_field(streamID1, field);
                     cdo_write_field(streamID2, field);
@@ -618,7 +618,7 @@ public:
                           vDateTimes[it] = vDateTimes[it + 1];
                           for (int varID = 0; varID < numVars; ++varID)
                             {
-                              const auto &var = varList1.vars[varID];
+                              auto const &var = varList1.vars[varID];
                               if (var.isConstant) continue;
                               for (int levelID = 0; levelID < var.nlevels; ++levelID)
                                 {
@@ -636,7 +636,7 @@ public:
                 for (int fieldID = 0; fieldID < numFields; ++fieldID)
                   {
                     auto [varID, levelID] = cdo_inq_field(streamID1);
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (lnts1 || var.isConstant)
                       {
                         auto single = varsData[nts][varID][levelID].vec_d.data();
diff --git a/src/Selvar.cc b/src/Selvar.cc
index 10cba5bd2..c114d40f8 100644
--- a/src/Selvar.cc
+++ b/src/Selvar.cc
@@ -115,7 +115,7 @@ public:
 
     auto argsAreNumeric = (cdo_operator_argc() > 0 && std::isdigit(cdo_operator_argv(0)[0]));
 
-    const auto &argnames = cdo_get_oper_argv();
+    auto const &argnames = cdo_get_oper_argv();
     if (TAKES_STRINGS(operatorID) && !(TAKES_INTEGERS(operatorID) && argsAreNumeric))
       {
         nsel = cdo_operator_argc();
@@ -163,7 +163,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.name == gridvarname)
               {
                 gridnum = 1 + vlistGridIndex(vlistID1, var.gridID);
@@ -181,7 +181,7 @@ public:
       {
         vars[varID] = doDelete;
 
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto tabnum = tableInqNum(vlistInqVarTable(vlistID1, varID));
         auto grididx = vlistGridIndex(vlistID1, var.gridID);
         auto zaxisidx = vlistZaxisIndex(vlistID1, var.zaxisID);
@@ -240,7 +240,7 @@ public:
       {
         if (vars[varID])
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (zaxisInqType(var.zaxisID) == ZAXIS_HYBRID)
               {
                 auto psvarid = varList_get_psvarid(varList1, var.zaxisID);
@@ -335,7 +335,7 @@ public:
                 if (dataIsUnchanged) { cdo_copy_field(streamID2, streamID1); }
                 else
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     field.init(var);
                     cdo_read_field(streamID1, field);
                     cdo_write_field(streamID2, field);
diff --git a/src/Selyearidx.cc b/src/Selyearidx.cc
index 182321410..e8face792 100644
--- a/src/Selyearidx.cc
+++ b/src/Selyearidx.cc
@@ -91,7 +91,7 @@ public:
     auto numVars = varList1.numVars();
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto missval = varList2.vars[varID].missval;
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
@@ -131,11 +131,11 @@ public:
             for (int fieldID = 0; fieldID < numFields2; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID2);
-                const auto &var = varList2.vars[varID];
+                auto const &var = varList2.vars[varID];
                 field.init(var);
                 cdo_read_field(streamID2, field);
 
-                const auto &field1 = varsData1[varID][levelID];
+                auto const &field1 = varsData1[varID][levelID];
                 auto &field2 = varsData2[varID][levelID];
                 for (size_t i = 0; i < var.gridsize; ++i)
                   if (numSets == (int) std::lround(field1.vec_d[i]))
diff --git a/src/Setattribute.cc b/src/Setattribute.cc
index d545bfb3c..e566a013e 100644
--- a/src/Setattribute.cc
+++ b/src/Setattribute.cc
@@ -45,7 +45,7 @@ get_datatype(char *buffer)
 }
 
 static std::pair<std::string, std::string>
-split_var_attr(const std::string &key, int delimiter)
+split_var_attr(std::string const &key, int delimiter)
 {
   std::string varName, attName;
 
@@ -62,7 +62,7 @@ split_var_attr(const std::string &key, int delimiter)
 }
 
 static std::vector<int>
-find_variables(const std::string &varName, int vlistID, std::vector<std::string> &wnames, int &cdiID)
+find_variables(std::string const &varName, int vlistID, std::vector<std::string> &wnames, int &cdiID)
 {
   std::vector<int> varIDs;
 
@@ -138,7 +138,7 @@ find_variables(const std::string &varName, int vlistID, std::vector<std::string>
 }
 
 static std::vector<std::string>
-find_attribute(int cdiID, int varID, const std::string &attrName, int &dtype)
+find_attribute(int cdiID, int varID, std::string const &attrName, int &dtype)
 {
   std::vector<std::string> attrValues;
 
@@ -180,7 +180,7 @@ find_attribute(int cdiID, int varID, const std::string &attrName, int &dtype)
   if (varID != CDI_GLOBAL && attrValues.empty())
     {
       VarList varList(cdiID);
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       auto stdname = cdo::inq_key_string(cdiID, varID, CDI_KEY_STDNAME);
       auto table = vlistInqVarTable(cdiID, varID);
 
@@ -205,7 +205,7 @@ find_attribute(int cdiID, int varID, const std::string &attrName, int &dtype)
 }
 
 static std::vector<std::string>
-get_attribute(int vlistID, const std::string &varAttr, int &dtype)
+get_attribute(int vlistID, std::string const &varAttr, int &dtype)
 {
   auto [varName, attName] = split_var_attr(varAttr, Delimiter);
   if (attName.empty()) cdo_abort("Attribute name missing in >%s<!", varAttr);
@@ -240,7 +240,7 @@ get_attribute(int vlistID, const std::string &varAttr, int &dtype)
 }
 
 static void
-delete_attribute(int cdiID, int varID, const std::string &attName, const std::string &varAtt)
+delete_attribute(int cdiID, int varID, std::string const &attName, std::string const &varAtt)
 {
   auto status = cdiDelAtt(cdiID, varID, attName.c_str());
   if (status != CDI_NOERR)  // check CDI keys
@@ -273,7 +273,7 @@ delete_attribute(int cdiID, int varID, const std::string &attName, const std::st
 }
 
 static void
-set_attribute(int cdiID, int varID, const std::string &attName, int dtype, const std::vector<std::string> &values)
+set_attribute(int cdiID, int varID, std::string const &attName, int dtype, const std::vector<std::string> &values)
 {
   int nvalues = values.size();
 
@@ -292,7 +292,7 @@ set_attribute(int cdiID, int varID, const std::string &attName, int dtype, const
   else
     {
       if (nvalues > 1) cdo_abort("Multidimensional string attributes not supported! %s=\"%s\"", attName, values[1]);
-      const auto &value = values[0];
+      auto const &value = values[0];
       auto len = (int) value.size();
       int outlen = 0;
       std::vector<char> outvalue(len);
@@ -316,7 +316,7 @@ set_attributes(const KVList &kvlist, int vlistID)
   std::vector<std::string> wnames(kvn);
 
   char buffer[CDI_MAX_NAME];
-  for (const auto &kv : kvlist)
+  for (auto const &kv : kvlist)
     {
       std::strcpy(buffer, kv.key.c_str());
       auto dtype = get_datatype(buffer);
@@ -340,7 +340,7 @@ set_attributes(const KVList &kvlist, int vlistID)
               auto useAttrValues = false;
               if (kv.nvalues == 1)
                 {
-                  const auto &value = kv.values[0];
+                  auto const &value = kv.values[0];
                   if (value.size() > 2 && value[0] == '{' && value[value.size() - 1] == '}')
                     {
                       attrValues = get_attribute(vlistID, value.substr(1, value.size() - 2), dtype);
@@ -348,7 +348,7 @@ set_attributes(const KVList &kvlist, int vlistID)
                     }
                 }
 
-              const auto &values = useAttrValues ? attrValues : kv.values;
+              auto const &values = useAttrValues ? attrValues : kv.values;
 
               if (dtype == -1) dtype = literals_find_datatype(values.size(), values);
 
diff --git a/src/Setbox.cc b/src/Setbox.cc
index b9365fb48..5e5344525 100644
--- a/src/Setbox.cc
+++ b/src/Setbox.cc
@@ -22,12 +22,12 @@
 static void
 setcbox(double constant, double *array, int gridID, const SelboxInfo &selboxInfo)
 {
-  const auto &lat1 = selboxInfo.lat1;
-  const auto &lat2 = selboxInfo.lat2;
-  const auto &lon11 = selboxInfo.lon11;
-  const auto &lon12 = selboxInfo.lon12;
-  const auto &lon21 = selboxInfo.lon21;
-  const auto &lon22 = selboxInfo.lon22;
+  auto const &lat1 = selboxInfo.lat1;
+  auto const &lat2 = selboxInfo.lat2;
+  auto const &lon11 = selboxInfo.lon11;
+  auto const &lon12 = selboxInfo.lon12;
+  auto const &lon21 = selboxInfo.lon21;
+  auto const &lon22 = selboxInfo.lon22;
   long nlon = gridInqXsize(gridID);
   long nlat = gridInqYsize(gridID);
 
diff --git a/src/Setchunkspec.cc b/src/Setchunkspec.cc
index 65a82c8ce..ebc86c132 100644
--- a/src/Setchunkspec.cc
+++ b/src/Setchunkspec.cc
@@ -29,19 +29,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if (key == "filename")  params.filename = parameter_to_word(value);
@@ -54,7 +54,7 @@ get_parameter()
 }
 
 static std::vector<std::string>
-get_vars_chunkspec(const VarList &varList, const std::string &filename)
+get_vars_chunkspec(const VarList &varList, std::string const &filename)
 {
   auto numVars = varList.numVars();
   std::vector<std::string> varsChunkSpec(numVars);
@@ -69,17 +69,17 @@ get_vars_chunkspec(const VarList &varList, const std::string &filename)
       std::fclose(fp);
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
 
-          for (const auto &var : varList.vars)
+          for (auto const &var : varList.vars)
             {
               if (key == var.name)
                 {
-                  const auto &value = kv.values[0];
+                  auto const &value = kv.values[0];
                   auto chunkSpec = parameter_to_word(value);
                   varsChunkSpec[var.ID] = chunkSpec;
                 }
@@ -212,7 +212,7 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID1);
             cdo_def_field(streamID2, varID, levelID);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
             cdo_write_field(streamID2, field);
diff --git a/src/Setfilter.cc b/src/Setfilter.cc
index dd4c0c9a9..0fefdf1b1 100644
--- a/src/Setfilter.cc
+++ b/src/Setfilter.cc
@@ -17,7 +17,7 @@
 #include <utility>
 
 static void
-string_replace_name(std::string &str, const std::string &name, const std::string &replace)
+string_replace_name(std::string &str, std::string const &name, std::string const &replace)
 {
   auto pos = str.find(name);
   if (pos != std::string::npos) { str.replace(pos, name.size(), replace); }
@@ -44,7 +44,7 @@ expand_filter_names(std::string &filterSpec)
   };
   // clang-format on
 
-  for (const auto &[key, value] : filterList) string_replace_name(filterSpec, key, value);
+  for (auto const &[key, value] : filterList) string_replace_name(filterSpec, key, value);
 }
 
 struct SetfilterParams
@@ -60,19 +60,19 @@ get_parameter()
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if (key == "filename")  params.filename = parameter_to_word(value);
@@ -85,7 +85,7 @@ get_parameter()
 }
 
 static std::vector<std::string>
-get_vars_filter(const VarList &varList, const std::string &filename)
+get_vars_filter(const VarList &varList, std::string const &filename)
 {
   auto numVars = varList.numVars();
   std::vector<std::string> varsFilter(numVars);
@@ -100,17 +100,17 @@ get_vars_filter(const VarList &varList, const std::string &filename)
       std::fclose(fp);
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
 
-          for (const auto &var : varList.vars)
+          for (auto const &var : varList.vars)
             {
               if (key == var.name)
                 {
-                  const auto &value = kv.values[0];
+                  auto const &value = kv.values[0];
                   auto filter = parameter_to_word(value);
                   varsFilter[var.ID] = filter;
                 }
@@ -122,7 +122,7 @@ get_vars_filter(const VarList &varList, const std::string &filename)
 }
 
 static void
-set_key_filterspec(int vlistID, int varID, const std::string &filterSpec)
+set_key_filterspec(int vlistID, int varID, std::string const &filterSpec)
 {
   cdiDefKeyString(vlistID, varID, CDI_KEY_FILTERSPEC, filterSpec.c_str());
 }
@@ -210,7 +210,7 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID1);
             cdo_def_field(streamID2, varID, levelID);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
             cdo_write_field(streamID2, field);
diff --git a/src/Setgrid.cc b/src/Setgrid.cc
index a2557080c..7bcaab874 100644
--- a/src/Setgrid.cc
+++ b/src/Setgrid.cc
@@ -43,7 +43,7 @@ change_grid(int vlistID1, int vlistID2, int gridID2)
 }
 
 static void
-grid_set_type(int vlistID1, int vlistID2, int gridtype, const std::string &gridname, bool lregular, bool lregularnn,
+grid_set_type(int vlistID1, int vlistID2, int gridtype, std::string const &gridname, bool lregular, bool lregularnn,
               bool ldereference, bool withBounds, std::vector<int> &grid2_vgpm)
 {
   auto needCorners = withBounds ? NeedCorners::Yes : NeedCorners::No;
@@ -158,7 +158,7 @@ grid_set_cellarea(int vlistID1, int vlistID2, Varray<double> &gridcellArea)
 }
 
 static void
-grid_set_mask(int vlistID1, int vlistID2, const Varray<double> &gridmask)
+grid_set_mask(int vlistID1, int vlistID2, Varray<double> const &gridmask)
 {
   auto masksize = gridmask.size();
   auto numGrids = vlistNumGrids(vlistID1);
@@ -194,7 +194,7 @@ grid_unset_mask(int vlistID1, int vlistID2)
 }
 
 static void
-grid_set_proj_params(int vlistID1, int vlistID2, const std::string &projparams)
+grid_set_proj_params(int vlistID1, int vlistID2, std::string const &projparams)
 {
   auto numGrids = vlistNumGrids(vlistID1);
   for (int index = 0; index < numGrids; ++index)
@@ -210,7 +210,7 @@ grid_set_proj_params(int vlistID1, int vlistID2, const std::string &projparams)
 }
 
 static void
-grid_read_cellarea(const std::string &areafile, Varray<double> &gridcellArea)
+grid_read_cellarea(std::string const &areafile, Varray<double> &gridcellArea)
 {
   auto searchName = false;
   std::string filename = areafile;
@@ -500,8 +500,8 @@ public:
             auto [varID, levelID] = cdo_inq_field(streamID1);
             cdo_def_field(streamID2, varID, levelID);
 
-            const auto &var1 = varList1.vars[varID];
-            const auto &var2 = varList2.vars[varID];
+            auto const &var1 = varList1.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             field.init((lregular || lregularnn) ? var2 : var1);
             cdo_read_field(streamID1, field);
             auto numMissVals = field.numMissVals;
diff --git a/src/Setgridcell.cc b/src/Setgridcell.cc
index fcc02a825..9e936d901 100644
--- a/src/Setgridcell.cc
+++ b/src/Setgridcell.cc
@@ -56,7 +56,7 @@ set_value(Field &field, double value, const Varray<size_t> &cells)
 }
 
 static void
-read_index_from_maskfile(const std::string &maskfile, Varray<size_t> &cells)
+read_index_from_maskfile(std::string const &maskfile, Varray<size_t> &cells)
 {
   size_t cdo_read_mask(const char *maskfile, std::vector<bool> &imask);
   std::vector<bool> mask;
@@ -80,19 +80,19 @@ setgridcell_get_parameter(double &constant, Varray<size_t> &cells, std::vector<s
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &values = kv.values;
-          const auto &value = kv.values[0];
+          auto const &values = kv.values;
+          auto const &value = kv.values[0];
           int nvalues = kv.nvalues;
 
           // clang-format off
@@ -196,7 +196,7 @@ public:
     selectVars = Varray<bool>(numVars, !varnames.size());
     if (varnames.size())
       {
-        for (const auto &varname : varnames)
+        for (auto const &varname : varnames)
           {
             auto varFound = false;
             for (int varID = 0; varID < numVars; ++varID)
diff --git a/src/Sethalo.cc b/src/Sethalo.cc
index 712cd67fc..4d1d41d69 100644
--- a/src/Sethalo.cc
+++ b/src/Sethalo.cc
@@ -364,12 +364,12 @@ get_parameter(void)
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "east")   haloParam.east = parameter_to_long(value);
@@ -429,7 +429,7 @@ gen_index_grid(int gridID1, HaloParam &haloParam)
 }
 
 static bool
-regular_halo(const Varray<double> &array1, int gridID1, Varray<double> &array2, const HaloParam &haloParam, double missval)
+regular_halo(Varray<double> const &array1, int gridID1, Varray<double> &array2, const HaloParam &haloParam, double missval)
 {
   auto recalcNumMiss = false;
 
@@ -484,7 +484,7 @@ regular_halo(const Varray<double> &array1, int gridID1, Varray<double> &array2,
 }
 
 static void
-tripolar_halo(const Varray<double> &array1, int gridID1, Varray<double> &array2)
+tripolar_halo(Varray<double> const &array1, int gridID1, Varray<double> &array2)
 {
   auto nlon = gridInqXsize(gridID1);
   auto nlat = gridInqYsize(gridID1);
@@ -528,7 +528,7 @@ get_haloInfoList(int vlistID1, int vlistID2, HaloParam &haloParam, bool operSetH
 
   if (Options::cdoVerbose)
     {
-      /*  for (const auto &sb : haloInfoList)
+      /*  for (auto const &sb : haloInfoList)
          if (sb.gridtype != GRID_UNSTRUCTURED && !is_healpix_grid(sb.gridID1))
            {
              cdo_print("box1 - idx1,idx2,idy1,idy2: %ld,%ld,%ld,%ld", sb.lon21 + 1, sb.lon22 + 1, sb.lat1 + 1, sb.lat2 + 1);
@@ -548,7 +548,7 @@ get_processVars(const VarList &varList, const std::vector<HaloInfo> &haloInfoLis
   std::vector<bool> processVars(numVars, false);
 
   int varID;
-  for (const auto &haloInfo : haloInfoList)
+  for (auto const &haloInfo : haloInfoList)
     {
       for (varID = 0; varID < numVars; ++varID)
         if (haloInfo.gridID1 == varList.vars[varID].gridID) processVars[varID] = true;
@@ -565,7 +565,7 @@ get_processVars(const VarList &varList, const std::vector<HaloInfo> &haloInfoLis
 static const HaloInfo &
 select_haloInfo(int gridID, const std::vector<HaloInfo> &haloInfoList)
 {
-  for (const auto &haloInfo : haloInfoList)
+  for (auto const &haloInfo : haloInfoList)
     if (gridID == haloInfo.gridID1) return haloInfo;
 
   cdo_abort("Internal problem, grid not found!");
@@ -652,7 +652,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field1.init(var1);
             cdo_read_field(streamID1, field1);
 
@@ -665,7 +665,7 @@ public:
 
                 field2.init(varList2.vars[varID]);
 
-                const auto &haloInfo = select_haloInfo(var1.gridID, haloInfoList);
+                auto const &haloInfo = select_haloInfo(var1.gridID, haloInfoList);
 
                 if (operatorID == SETHALO)
                   recalcNumMiss = regular_halo(field1.vec_d, haloInfo.gridID1, field2.vec_d, haloParam, missval);
diff --git a/src/Setmiss.cc b/src/Setmiss.cc
index 23998227e..7db4df414 100644
--- a/src/Setmiss.cc
+++ b/src/Setmiss.cc
@@ -242,7 +242,7 @@ public:
         auto nvars = vlistNvars(vlistID2);
         for (int varID = 0; varID < nvars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (fp_is_equal(rconst, var.missval))
               {
                 cdo_warning("Missing value and constant have the same value!");
@@ -284,7 +284,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field.init(var);
             cdo_read_field(streamID1, field);
 
diff --git a/src/Setpartab.cc b/src/Setpartab.cc
index 3d0f195f2..05832ab14 100644
--- a/src/Setpartab.cc
+++ b/src/Setpartab.cc
@@ -33,14 +33,14 @@ enum pt_mode_t
   STANDARD_NAME
 };
 
-void cdo_define_var_units(CmorVar &cmorVar, int vlistID2, int varID, const std::string &units);
+void cdo_define_var_units(CmorVar &cmorVar, int vlistID2, int varID, std::string const &units);
 
 void
 mapvar(int vlistID, int varID, const KeyValues &kv, CmorVar &cmorVar, bool &hasValidMin, bool &hasValidMax, int ptab,
        bool isnPtmodeName)
 {
   const auto key = string_to_lower(kv.key);
-  const auto &value = kv.values[0];
+  auto const &value = kv.values[0];
   auto lv1 = (kv.nvalues == 1);
 
   // printf("key=%s  value=>%s<\n", key.c_str(), value.c_str());
@@ -175,8 +175,8 @@ mapvar(int vlistID, int varID, const KeyValues &kv, CmorVar &cmorVar, bool &hasV
   else if (lv1 && key == "dimensions") {}
   else
     {
-      const auto &values = kv.values;
-      const auto &rvalue = kv.values[0];
+      auto const &values = kv.values;
+      auto const &rvalue = kv.values[0];
       auto nvalues = kv.nvalues;
       if (nvalues == 1 && rvalue.empty()) nvalues = 0;
 
@@ -237,7 +237,7 @@ apply_parameterList(pt_mode_t ptmode, PMList &pmlist, int vlistID2, std::vector<
       auto &cmorVar = cmorVars[varID];
       cmorVar.name = cdo::inq_var_name(vlistID2, varID);
 
-      const auto &var2 = varList2.vars[varID];
+      auto const &var2 = varList2.vars[varID];
       if (hasMissvals)
         {
           if (fp_is_not_equal(missval, var2.missval))
@@ -298,7 +298,7 @@ apply_parameterList(pt_mode_t ptmode, PMList &pmlist, int vlistID2, std::vector<
 
           auto hasValidMin = false;
           auto hasValidMax = false;
-          for (const auto &kv : *kvlist)
+          for (auto const &kv : *kvlist)
             {
               mapvar(vlistID2, varID, kv, cmorVar, hasValidMin, hasValidMax, ptab, (ptmode != VARIABLE_NAME));
             }
@@ -424,7 +424,7 @@ public:
 
     if (ptmode == CODE_NUMBER)
       {
-        const auto &partab = cdo_operator_argv(0);
+        auto const &partab = cdo_operator_argv(0);
         FILE *fp = FileUtils::file_exists(partab) ? std::fopen(partab.c_str(), "r") : nullptr;
         if (fp != nullptr)
           {
@@ -577,7 +577,7 @@ public:
             size_t numMissVals;
             cdo_read_field(streamID1, array.data(), &numMissVals);
 
-            const auto &var2 = varList2.vars[varID2];
+            auto const &var2 = varList2.vars[varID2];
             auto missval = var2.missval;
             auto gridsize = var2.nwpv * var2.gridsize;
 
diff --git a/src/Setrcaname.cc b/src/Setrcaname.cc
index 081100c18..7a9598e3e 100644
--- a/src/Setrcaname.cc
+++ b/src/Setrcaname.cc
@@ -43,7 +43,7 @@ public:
   Field field;
 
   void
-  read_rca(const std::string &filename, int p_nvars, int p_vlistID2)
+  read_rca(std::string const &filename, int p_nvars, int p_vlistID2)
   {
     std::ifstream file(filename);
     if (!file.is_open()) cdo_abort("Open failed on: %s\n", filename);
diff --git a/src/Settime.cc b/src/Settime.cc
index 5d493bbba..31b92a744 100644
--- a/src/Settime.cc
+++ b/src/Settime.cc
@@ -56,7 +56,7 @@ shift_time(int calendar, int tunit, int64_t ijulinc, CdiDateTime &vDateTime)
 }
 
 static void
-time_gen_bounds(int calendar, int tunit, int incrPeriod, const CdiDateTime &vDateTime, CdiDateTime *vDateTimeBounds)
+time_gen_bounds(int calendar, int tunit, int incrPeriod, CdiDateTime const &vDateTime, CdiDateTime *vDateTimeBounds)
 {
   cdiDateTime_init(&vDateTimeBounds[0]);
   cdiDateTime_init(&vDateTimeBounds[1]);
@@ -116,7 +116,7 @@ time_gen_bounds(int calendar, int tunit, int incrPeriod, const CdiDateTime &vDat
 }
 
 int
-evaluate_calendar_string(int operatorID, const std::string &calendarName)
+evaluate_calendar_string(int operatorID, std::string const &calendarName)
 {
   int calendar = CALENDAR_STANDARD;
   auto calendarString = string_to_lower(calendarName);
diff --git a/src/Setzaxis.cc b/src/Setzaxis.cc
index 1e8ba6db8..b41dfa469 100644
--- a/src/Setzaxis.cc
+++ b/src/Setzaxis.cc
@@ -19,7 +19,7 @@
 #include "cdo_zaxis.h"
 
 int
-getkeyval_dp(const std::string &keyval, const std::string &key, double *val)
+getkeyval_dp(std::string const &keyval, std::string const &key, double *val)
 {
   int status = 0;
 
@@ -81,7 +81,7 @@ public:
     else if (operatorID == GENLEVELBOUNDS)
       {
         auto npar = cdo_operator_argc();
-        const auto &parNames = cdo_get_oper_argv();
+        auto const &parNames = cdo_get_oper_argv();
         for (int i = 0; i < npar; ++i)
           {
             if (Options::cdoVerbose) cdo_print("keyval[%d]: %s", i + 1, parNames[i]);
diff --git a/src/Shiftxy.cc b/src/Shiftxy.cc
index f508e1773..da7906895 100644
--- a/src/Shiftxy.cc
+++ b/src/Shiftxy.cc
@@ -235,7 +235,7 @@ public:
                 vlistChangeGridIndex(vlistID2, index, gridID2);
               }
 
-            for (const auto &var : varList1.vars)
+            for (auto const &var : varList1.vars)
               if (gridID1 == var.gridID) vars[var.ID] = true;
           }
         else if (gridtype == GRID_GENERIC && gridInqXsize(gridID1) <= 1 && gridInqYsize(gridID1) <= 1) {}
diff --git a/src/Showattribute.cc b/src/Showattribute.cc
index e0c6dff68..52f631cc8 100644
--- a/src/Showattribute.cc
+++ b/src/Showattribute.cc
@@ -130,7 +130,7 @@ print_attr_special_global(int vlistID, const char *argument)
 static void
 print_attr_special(const char *varName, const CdoVars &cdoVars, int vlistID, int varOrGlobal, const char *argument)
 {
-  const auto &var = cdoVars[varOrGlobal];
+  auto const &var = cdoVars[varOrGlobal];
   auto stdname = cdo::inq_key_string(vlistID, varOrGlobal, CDI_KEY_STDNAME);
 
   double addoffset = 0.0, scalefactor = 1.0;
@@ -194,7 +194,7 @@ check_varname_and_print(const VarList &varList, int vlistID, char *checkvarname,
   auto numVars = varList.numVars();
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       if (!checkvarname || (wildcardmatch(checkvarname, var.name) == 0))
         {
           lfound = true;
@@ -267,7 +267,7 @@ public:
           {
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList.vars[varID];
+                auto const &var = varList.vars[varID];
                 // fprintf(stdout, "%s:\n", var.name.c_str());
                 fprintf(stdout, "\n");
 
diff --git a/src/Showinfo.cc b/src/Showinfo.cc
index 557e1749d..b0d59ec4f 100644
--- a/src/Showinfo.cc
+++ b/src/Showinfo.cc
@@ -205,7 +205,7 @@ show_code(const VarList &varList)
   for (int varID = 0; varID < numVars; ++varID)
     {
       nout++;
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       fprintf(stdout, " %d", var.code);
       print_newline(nout, maxOut);
     }
@@ -217,7 +217,7 @@ show_grid(const VarList &varList)
 {
   fprintf(stdout, "# param nr | grid nr | z-axis nr:   /* Use in combination with operatores: griddes and zaxisdes */\n");
   auto vlistID = varList.vlistID;
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       fprintf(stdout, "      %3d     %3d      %3d\n", var.code, vlistGridIndex(vlistID, var.gridID) + 1,
               vlistZaxisIndex(vlistID, var.zaxisID) + 1);
@@ -230,7 +230,7 @@ show_unit(const VarList &varList)
   constexpr int maxOut = 10;
   int nout = 0;
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       nout++;
       if (var.units.size()) fprintf(stdout, " %s", var.units.c_str());
@@ -246,7 +246,7 @@ show_param(const VarList &varList)
   int nout = 0;
 
   char paramstr[32];
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       nout++;
       cdiParamToString(var.param, paramstr, sizeof(paramstr));
@@ -263,7 +263,7 @@ show_name(const VarList &varList)
   constexpr int maxOut = 10;
   int nout = 0;
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       nout++;
       fprintf(stdout, " %s", var.name.c_str());
@@ -278,7 +278,7 @@ show_stdname(const VarList &varList)
   constexpr int maxOut = 1;
   int nout = 0;
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       nout++;
       fprintf(stdout, " %s", var.stdname.size() ? var.stdname.c_str() : "unknown");
@@ -290,7 +290,7 @@ show_stdname(const VarList &varList)
 static void
 show_level(const VarList &varList)
 {
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       for (int levelID = 0; levelID < var.nlevels; ++levelID) fprintf(stdout, " %.9g", cdo_zaxis_inq_level(var.zaxisID, levelID));
       fprintf(stdout, "\n");
@@ -321,7 +321,7 @@ show_filter(int vlistID, const VarList &varList)
       auto comptype = vlistInqVarCompType(vlistID, varID);
       if (comptype == CDI_COMPRESS_FILTER || comptype == CDI_COMPRESS_ZIP || comptype == CDI_COMPRESS_SZIP)
         {
-          const auto &var = varList.vars[varID];
+          auto const &var = varList.vars[varID];
           int length = CDI_MAX_NAME;
           cdiInqKeyString(vlistID, varID, CDI_KEY_FILTERSPEC_IN, filterSpec, &length);
           if (length > 0) fprintf(stdout, "%s=\"%s\"\n", var.name.c_str(), filterSpec);
@@ -335,7 +335,7 @@ show_chunks(int vlistID, const VarList &varList)
   auto numVars = varList.numVars();
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
       auto chunkSpecString = cdo::get_chunkspec_string(vlistID, varID);
       if (chunkSpecString.size() > 0) fprintf(stdout, "%s=\"%s\"\n", var.name.c_str(), chunkSpecString.c_str());
     }
diff --git a/src/Sinfo.cc b/src/Sinfo.cc
index b3bcb7bcb..b7d788643 100644
--- a/src/Sinfo.cc
+++ b/src/Sinfo.cc
@@ -118,7 +118,7 @@ print_vars_info(int operfunc, bool ensembleInfo, const VarList &varList, int vli
 
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = varList.vars[varID];
+      auto const &var = varList.vars[varID];
 
       auto tabnum = tableInqNum(vlistInqVarTable(vlistID, varID));
 
@@ -462,7 +462,7 @@ public:
           {
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList.vars[varID];
+                auto const &var = varList.vars[varID];
 
                 if (var.isConstant)
                   numFieldsConst += var.nlevels;
diff --git a/src/Smooth.cc b/src/Smooth.cc
index ea16d7114..cd0092224 100644
--- a/src/Smooth.cc
+++ b/src/Smooth.cc
@@ -128,9 +128,9 @@ smooth(int gridID, double mv, const Varray<T1> &array1, Varray<T2> &array2, cons
 }
 
 static void
-smooth(const Field &field1, Field &field2, const SmoothPoint &spoint)
+smooth(Field const &field1, Field &field2, const SmoothPoint &spoint)
 {
-  auto func = [&](const auto &v1, auto &v2) { field2.numMissVals = smooth(field1.grid, field1.missval, v1, v2, spoint); };
+  auto func = [&](auto const &v1, auto &v2) { field2.numMissVals = smooth(field1.grid, field1.missval, v1, v2, spoint); };
   field_operation2(func, field1, field2);
 }
 
@@ -227,9 +227,9 @@ smooth9(int gridID, double mv, const Varray<T1> &array1, Varray<T2> &array2)
 }
 
 static void
-smooth9(const Field &field1, Field &field2)
+smooth9(Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { field2.numMissVals = smooth9(field1.grid, field1.missval, v1, v2); };
+  auto func = [&](auto const &v1, auto &v2) { field2.numMissVals = smooth9(field1.grid, field1.missval, v1, v2); };
   field_operation2(func, field1, field2);
 }
 
@@ -246,19 +246,19 @@ get_parameter(int &xnsmooth, SmoothPoint &spoint)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "nsmooth")     xnsmooth = parameter_to_int(value);
@@ -363,7 +363,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto gridID = var.gridID;
         auto gridtype = gridInqType(gridID);
         if (gridtype == GRID_GAUSSIAN || gridtype == GRID_LONLAT || gridtype == GRID_CURVILINEAR || gridtype == GRID_PROJECTION
@@ -401,7 +401,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             field2.init(var);
             cdo_read_field(streamID1, field1);
diff --git a/src/Sort.cc b/src/Sort.cc
index 96bb4a518..9ffa4e770 100644
--- a/src/Sort.cc
+++ b/src/Sort.cc
@@ -128,7 +128,7 @@ public:
     varsInfo = std::vector<VarInfo>(nvars);
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         varsInfo[varID].nlevels = var.nlevels;
         varsInfo[varID].levInfo.resize(var.nlevels);
       }
@@ -136,7 +136,7 @@ public:
     vardata = Varray2D<double>(nvars);
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         vardata[varID].resize(var.gridsize * var.nlevels);
       }
   }
@@ -156,7 +156,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (tsID == 0)
               {
@@ -184,7 +184,7 @@ public:
             if (Options::cdoVerbose)
               for (int vindex = 0; vindex < nvars; vindex++)
                 {
-                  const auto &varInfo = varsInfo[vindex];
+                  auto const &varInfo = varsInfo[vindex];
                   for (int lindex = 0; lindex < varInfo.nlevels; ++lindex)
                     printf("sort in: %d %s %d %d %g\n", vindex, varInfo.name.c_str(), varInfo.code, varInfo.nlevels,
                            varInfo.levInfo[lindex].level);
@@ -210,7 +210,7 @@ public:
             if (Options::cdoVerbose)
               for (int vindex = 0; vindex < nvars; vindex++)
                 {
-                  const auto &varInfo = varsInfo[vindex];
+                  auto const &varInfo = varsInfo[vindex];
                   for (int lindex = 0; lindex < varInfo.nlevels; ++lindex)
                     printf("sort out: %d %s %d %d %g\n", vindex, varInfo.name.c_str(), varInfo.code, varInfo.nlevels,
                            varInfo.levInfo[lindex].level);
@@ -219,8 +219,8 @@ public:
 
         for (int vindex = 0; vindex < nvars; vindex++)
           {
-            const auto &varInfo = varsInfo[vindex];
-            const auto &var = varList1.vars[varInfo.varID];
+            auto const &varInfo = varsInfo[vindex];
+            auto const &var = varList1.vars[varInfo.varID];
             for (int lindex = 0; lindex < var.nlevels; ++lindex)
               {
                 auto levelID = varInfo.levInfo[lindex].levelID;
diff --git a/src/Sorttimestamp.cc b/src/Sorttimestamp.cc
index f27af7930..a4e215344 100644
--- a/src/Sorttimestamp.cc
+++ b/src/Sorttimestamp.cc
@@ -169,8 +169,8 @@ public:
               {
                 auto lskip = false;
                 auto xtsID2 = timeinfo[lasttsID].index;
-                const auto &field1 = varsData[xtsID][0][0];
-                const auto &field2 = varsData[xtsID2][0][0];
+                auto const &field1 = varsData[xtsID][0][0];
+                auto const &field2 = varsData[xtsID2][0][0];
                 if (field1.memType == MemType::Float)
                   {
                     if (field1.vec_f == field2.vec_f) lskip = true;
diff --git a/src/Spectral.cc b/src/Spectral.cc
index 67e472457..8cc29daab 100644
--- a/src/Spectral.cc
+++ b/src/Spectral.cc
@@ -163,7 +163,7 @@ public:
     auto paramArgc = cdo_operator_argc();
     if ((lgp2sp || lsp2gp) && paramArgc == 1)
       {
-        const auto &parg = cdo_operator_argv(0);
+        auto const &parg = cdo_operator_argv(0);
         auto pos = parg.find('=');
         if (pos > 0 && parg.substr(0, pos) == "trunc") { defaultTrunc = parameter_to_int(parg.substr(pos + 1)); }
         else
@@ -262,7 +262,7 @@ public:
 
     auto numVars = varList1.numVars();
     processVars = std::vector<bool>(numVars);
-    for (const auto &var : varList1.vars) processVars[var.ID] = (gridID1 == var.gridID);
+    for (auto const &var : varList1.vars) processVars[var.ID] = (gridID1 == var.gridID);
 
     if (gridID1 != -1) vlistChangeGrid(vlistID2, gridID1, gridID2);
 
diff --git a/src/Spectrum.cc b/src/Spectrum.cc
index 6f6519b9c..61c12505d 100644
--- a/src/Spectrum.cc
+++ b/src/Spectrum.cc
@@ -196,7 +196,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             auto &varData = varsData[tsID][varID][levelID];
             varData.resize(var.gridsize);
             cdo_read_field(streamID1, varData);
@@ -270,7 +270,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             for (size_t i = 0; i < var.gridsize; ++i)
@@ -293,7 +293,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
                 auto &varData2 = varsData2[tsID][varID][levelID];
diff --git a/src/Split.cc b/src/Split.cc
index 0e951c646..7a0f20b19 100644
--- a/src/Split.cc
+++ b/src/Split.cc
@@ -29,7 +29,7 @@
 #include <cassert>
 
 static void
-gen_filename(std::string &fileName, bool swapObase, const std::string &obase, const std::string &suffix)
+gen_filename(std::string &fileName, bool swapObase, std::string const &obase, std::string const &suffix)
 {
   if (swapObase) fileName += obase;
   if (suffix.size() > 0) fileName += suffix;
@@ -38,7 +38,7 @@ gen_filename(std::string &fileName, bool swapObase, const std::string &obase, co
 class Split : public Process
 {
   int
-  split_code(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_code(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto numVars = varList1.numVars();
     std::vector<int> codes(numVars);
@@ -46,7 +46,7 @@ class Split : public Process
     int nsplit = 0;
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         int index;
         for (index = 0; index < varID; ++index)
           if (var.code == varList1.vars[index].code) break;
@@ -62,7 +62,7 @@ class Split : public Process
         vlistClearFlag(vlistID1);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (codes[index] == var.code)
               {
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -88,7 +88,7 @@ class Split : public Process
   }
 
   int
-  split_param(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_param(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     char paramstr[32];
     auto numVars = varList1.numVars();
@@ -97,7 +97,7 @@ class Split : public Process
     int nsplit = 0;
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         int index;
         for (index = 0; index < varID; ++index)
           if (var.param == varList1.vars[index].param) break;
@@ -113,7 +113,7 @@ class Split : public Process
         vlistClearFlag(vlistID1);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (params[index] == var.param)
               {
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -140,7 +140,7 @@ class Split : public Process
   }
 
   int
-  split_name(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_name(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto numVars = varList1.numVars();
     auto nsplit = numVars;
@@ -152,7 +152,7 @@ class Split : public Process
       {
         vlistClearFlag(vlistID1);
         int varID = index;
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             vlistDefIndex(vlistID1, varID, levelID, index);
@@ -173,7 +173,7 @@ class Split : public Process
   }
 
   int
-  split_level(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_level(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto numVars = varList1.numVars();
     auto numZaxes = vlistNumZaxis(vlistID1);
@@ -204,7 +204,7 @@ class Split : public Process
         vlistClearFlag(vlistID1);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
                 auto level = cdo_zaxis_inq_level(var.zaxisID, levelID);
@@ -230,7 +230,7 @@ class Split : public Process
   }
 
   int
-  split_grid(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_grid(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto nsplit = vlistNumGrids(vlistID1);
     auto numVars = varList1.numVars();
@@ -245,7 +245,7 @@ class Split : public Process
         vlistClearFlag(vlistID1);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (gridIDs[index] == var.gridID)
               {
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -270,7 +270,7 @@ class Split : public Process
   }
 
   int
-  split_zaxis(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_zaxis(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto nsplit = vlistNumZaxis(vlistID1);
     auto numVars = varList1.numVars();
@@ -285,7 +285,7 @@ class Split : public Process
         vlistClearFlag(vlistID1);
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (zaxisIDs[index] == var.zaxisID)
               {
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -310,7 +310,7 @@ class Split : public Process
   }
 
   int
-  split_tabnum(bool swapObase, const std::string &fileSuffix, const std::string &fileName)
+  split_tabnum(bool swapObase, std::string const &fileSuffix, std::string const &fileName)
   {
     auto numVars = varList1.numVars();
     std::vector<int> tabnums(numVars);
@@ -337,7 +337,7 @@ class Split : public Process
             auto tabnum = tableInqNum(vlistInqVarTable(vlistID1, varID));
             if (tabnums[index] == tabnum)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
                   {
                     vlistDefIndex(vlistID1, varID, levelID, index);
@@ -472,7 +472,7 @@ public:
             if (dataIsUnchanged) { cdo_copy_field(streamIDs[index], streamID1); }
             else
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 field.init(var);
                 cdo_read_field(streamID1, field);
                 cdo_write_field(streamIDs[index], field);
@@ -488,7 +488,7 @@ public:
   {
     cdo_stream_close(streamID1);
 
-    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
-    for (const auto &id : vlistIDs) vlistDestroy(id);
+    for (auto const &streamID : streamIDs) cdo_stream_close(streamID);
+    for (auto const &id : vlistIDs) vlistDestroy(id);
   }
 };
diff --git a/src/Splitdate.cc b/src/Splitdate.cc
index cd0a9f3ff..58bf5fc59 100644
--- a/src/Splitdate.cc
+++ b/src/Splitdate.cc
@@ -89,7 +89,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant)
               {
                 vars[varID].resize(var.nlevels);
@@ -169,7 +169,7 @@ public:
           {
             for (int varID = 0; varID < varList1.numVars(); ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (var.isConstant)
                   {
                     for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -195,7 +195,7 @@ public:
 
                 if (tsID == 0 && haveConstVars)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (var.isConstant)
                       {
                         varray_copy(var.gridsize, array, vars[varID][levelID].vec_d);
diff --git a/src/Splitsel.cc b/src/Splitsel.cc
index b756dc911..a59be5405 100644
--- a/src/Splitsel.cc
+++ b/src/Splitsel.cc
@@ -106,7 +106,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant)
               {
                 fields[varID].resize(var.nlevels);
@@ -142,7 +142,7 @@ public:
             {
               auto [varID, levelID] = cdo_inq_field(streamID1);
 
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (var.isConstant) { cdo_read_field(streamID1, fields[varID][levelID]); }
             }
       }
@@ -177,7 +177,7 @@ public:
                 int numVars = varList1.numVars();
                 for (int varID = 0; varID < numVars; ++varID)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (var.isConstant)
                       {
                         for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -203,7 +203,7 @@ public:
 
                     if (tsID == 0 && haveConstVars)
                       {
-                        const auto &var = varList1.vars[varID];
+                        auto const &var = varList1.vars[varID];
                         if (var.isConstant)
                           {
                             auto &field = fields[varID][levelID];
diff --git a/src/Splittime.cc b/src/Splittime.cc
index 0206794e5..b91ee9fe4 100644
--- a/src/Splittime.cc
+++ b/src/Splittime.cc
@@ -144,7 +144,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant)
               {
                 vars[varID].resize(var.nlevels);
@@ -223,7 +223,7 @@ public:
           {
             for (int varID = 0; varID < varList1.numVars(); ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (var.isConstant)
                   {
                     for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -249,7 +249,7 @@ public:
 
                 if (tsID == 0 && haveConstVars)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (var.isConstant)
                       {
                         varray_copy(var.gridsize, array, vars[varID][levelID].vec_d);
diff --git a/src/Splityear.cc b/src/Splityear.cc
index 4d5cbb92c..4cdaa3c7d 100644
--- a/src/Splityear.cc
+++ b/src/Splityear.cc
@@ -93,7 +93,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant)
               {
                 vars[varID].resize(var.nlevels);
@@ -186,7 +186,7 @@ public:
             auto numVars = varList1.numVars();
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (var.isConstant)
                   {
                     for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -212,7 +212,7 @@ public:
 
                 if (tsID == 0 && haveConstVars)
                   {
-                    const auto &var = varList1.vars[varID];
+                    auto const &var = varList1.vars[varID];
                     if (var.isConstant)
                       {
                         varray_copy(var.gridsize, array, vars[varID][levelID].vec_d);
diff --git a/src/Timfillmiss.cc b/src/Timfillmiss.cc
index 25a4cda34..8e0fb17db 100644
--- a/src/Timfillmiss.cc
+++ b/src/Timfillmiss.cc
@@ -21,7 +21,7 @@
 #include "fill_1d.h"
 
 static double
-julianDate_to_double(int calendar, const CdiDateTime &dateTime1, const CdiDateTime &datetime0)
+julianDate_to_double(int calendar, CdiDateTime const &dateTime1, CdiDateTime const &datetime0)
 {
   return julianDate_to_seconds(julianDate_sub(julianDate_encode(calendar, dateTime1), julianDate_encode(calendar, datetime0)))
          / 86400.0;
@@ -72,19 +72,19 @@ private:
     auto pargc = cdo_operator_argc();
     if (pargc)
       {
-        const auto &pargv = cdo_get_oper_argv();
+        auto const &pargv = cdo_get_oper_argv();
 
         KVList kvlist;
         kvlist.name = cdo_module_name();
         if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
         if (Options::cdoVerbose) kvlist.print();
 
-        for (const auto &kv : kvlist)
+        for (auto const &kv : kvlist)
           {
-            const auto &key = kv.key;
+            auto const &key = kv.key;
             if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
             if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-            const auto &value = kv.values[0];
+            auto const &value = kv.values[0];
 
             // clang-format off
             if      (key == "method")   method = convert<FillMethod>(value);
@@ -125,7 +125,7 @@ public:
   void
   step(int varID)
   {
-    const auto &var = varList1.vars[varID];
+    auto const &var = varList1.vars[varID];
     auto fieldMemType = var.memType;
     auto gridsize = var.gridsize;
     auto missval = var.missval;
diff --git a/src/Timpctl.cc b/src/Timpctl.cc
index d797d67bd..4cf13f1d4 100644
--- a/src/Timpctl.cc
+++ b/src/Timpctl.cc
@@ -117,7 +117,7 @@ public:
 
     hset = HistogramSet(numVars, numSteps);
 
-    for (const auto &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
+    for (auto const &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
   }
 
   void
@@ -172,7 +172,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
-                const auto &var1 = varList1.vars[varID];
+                auto const &var1 = varList1.vars[varID];
 
                 if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -202,7 +202,7 @@ public:
         for (int fieldID = 0; fieldID < maxFields; ++fieldID)
           {
             auto [varID, levelID] = fieldInfoList[fieldID].get();
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             if (otsID && var1.isConstant) continue;
 
             cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Timselpctl.cc b/src/Timselpctl.cc
index 43fe09a23..fcb4ab55a 100644
--- a/src/Timselpctl.cc
+++ b/src/Timselpctl.cc
@@ -114,7 +114,7 @@ public:
 
     hset = HistogramSet(numVars, numSteps);
 
-    for (const auto &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
+    for (auto const &var : varList1.vars) hset.createVarLevels(var.ID, var.nlevels, var.gridsize);
   }
 
   void
@@ -187,7 +187,7 @@ public:
 
                   if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
-                  const auto &var1 = varList1.vars[varID];
+                  auto const &var1 = varList1.vars[varID];
                   if (tsID == 0 && var1.isConstant)
                     {
                       constFields[fieldID].init(var1);
@@ -213,7 +213,7 @@ public:
         for (int fieldID = 0; fieldID < maxFields; ++fieldID)
           {
             auto [varID, levelID] = fieldInfoList[fieldID].get();
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             if (otsID && var1.isConstant) continue;
 
             cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Timsort.cc b/src/Timsort.cc
index 119bb8e15..6480be1a9 100644
--- a/src/Timsort.cc
+++ b/src/Timsort.cc
@@ -108,7 +108,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
         if (var.isConstant) continue;
 
@@ -154,7 +154,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
                 auto &field = varsData[tsID][varID][levelID];
diff --git a/src/Timstat.cc b/src/Timstat.cc
index ad8c90886..55088b4cd 100644
--- a/src/Timstat.cc
+++ b/src/Timstat.cc
@@ -77,7 +77,7 @@
 #include "pmlist.h"
 
 static void
-vlist_set_frequency(int vlistID, const std::string &frequency)
+vlist_set_frequency(int vlistID, std::string const &frequency)
 {
   if (frequency.size()) cdiDefAttTxt(vlistID, CDI_GLOBAL, "frequency", frequency.size(), frequency.c_str());
 }
@@ -98,19 +98,19 @@ get_parameter(double &vfraction, bool &completeOnly)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "vfraction")       vfraction = parameter_to_double(value);
@@ -399,7 +399,7 @@ public:
   add_fields2D(const FieldVector2D &fields2D, const std::vector<FieldInfo> &fieldInfoList, const VarList &varList1,
                cdo::StepStat2D &stepStat, int numSets) noexcept
   {
-    for (const auto &fieldInfo : fieldInfoList)
+    for (auto const &fieldInfo : fieldInfoList)
       {
         auto [varID, levelID] = fieldInfo.get();
         if (varList1.vars[varID].isConstant) continue;
diff --git a/src/Timstat2.cc b/src/Timstat2.cc
index d842a8713..fc688dfe2 100644
--- a/src/Timstat2.cc
+++ b/src/Timstat2.cc
@@ -72,11 +72,11 @@ correlation_init(const Varray<T1> &x, const Varray<T2> &y, double missval1, doub
 }
 
 static void
-correlation_init(size_t gridsize, const Field &field1, const Field &field2, Varray<size_t> &nofvals, Varray2D<double> &work)
+correlation_init(size_t gridsize, Field const &field1, Field const &field2, Varray<size_t> &nofvals, Varray2D<double> &work)
 {
   auto hasMissValues = (field1.numMissVals > 0 || field2.numMissVals > 0);
 
-  auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2) {
+  auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2) {
     correlation_init(v1, v2, mv1, mv2, hasMissValues, gridsize, nofvals, work);
   };
   field_operation2(func, field1, field2, field1.missval, field2.missval);
@@ -169,11 +169,11 @@ covariance_init(const Varray<T1> &x, const Varray<T2> &y, double missval1, doubl
 }
 
 static void
-covariance_init(size_t gridsize, const Field &field1, const Field &field2, Varray<size_t> &nofvals, Varray2D<double> &work)
+covariance_init(size_t gridsize, Field const &field1, Field const &field2, Varray<size_t> &nofvals, Varray2D<double> &work)
 {
   auto hasMissValues = (field1.numMissVals > 0 || field2.numMissVals > 0);
 
-  auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2) {
+  auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2) {
     covariance_init(v1, v2, mv1, mv2, hasMissValues, gridsize, nofvals, work);
   };
   field_operation2(func, field1, field2, field1.missval, field2.missval);
@@ -232,9 +232,9 @@ rmsd_init(const Varray<T1> &x, const Varray<T2> &y, double missval1, double miss
 }
 
 static void
-rmsd_init(size_t gridsize, const Field &field1, const Field &field2, Varray<size_t> &nofvals, Varray<double> &rmsd)
+rmsd_init(size_t gridsize, Field const &field1, Field const &field2, Varray<size_t> &nofvals, Varray<double> &rmsd)
 {
-  auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2) { rmsd_init(v1, v2, mv1, mv2, gridsize, nofvals, rmsd); };
+  auto func = [&](auto const &v1, auto const &v2, double mv1, double mv2) { rmsd_init(v1, v2, mv1, mv2, gridsize, nofvals, rmsd); };
   field_operation2(func, field1, field2, field1.missval, field2.missval);
 }
 
@@ -349,7 +349,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto gridsize = var.gridsize;
         auto nlevels = var.nlevels;
 
@@ -412,7 +412,7 @@ public:
         auto missval = varList1.vars[varID].missval;
 
         auto &rwork = work[varID][levelID];
-        const auto &rnofvals = nofvals[varID][levelID];
+        auto const &rnofvals = nofvals[varID][levelID];
 
         size_t numMissVals = 0;
         if (operfunc == FieldFunc_Cor) { numMissVals = correlation(gridsize, missval, rnofvals, rwork); }
diff --git a/src/Transpose.cc b/src/Transpose.cc
index d9ccac7af..e14d656a6 100644
--- a/src/Transpose.cc
+++ b/src/Transpose.cc
@@ -24,7 +24,7 @@
 #include "process_int.h"
 
 void
-transxy(int gridID, const Varray<double> &v1, Varray<double> &v2)
+transxy(int gridID, Varray<double> const &v1, Varray<double> &v2)
 {
   auto nx = gridInqXsize(gridID);
   auto ny = gridInqYsize(gridID);
diff --git a/src/Trend.cc b/src/Trend.cc
index e7fee8791..9c9099163 100644
--- a/src/Trend.cc
+++ b/src/Trend.cc
@@ -33,19 +33,19 @@ get_parameter(bool &tstepIsEqual)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if (key == "equal") tstepIsEqual = parameter_to_bool(value);
@@ -134,7 +134,7 @@ public:
       {
         auto [varID, levelID] = fieldInfoList[fieldID].get();
 
-        const auto &var = varList2.vars[varID];
+        auto const &var = varList2.vars[varID];
         field2.init(var);
         field3.init(var);
 
@@ -201,7 +201,7 @@ public:
   fields_calc_trend_sum(FieldVector3D &work, const FieldVector2D &fields2D, const std::vector<FieldInfo> &fieldInfoList,
                         double zj) noexcept
   {
-    for (const auto &fieldInfo : fieldInfoList)
+    for (auto const &fieldInfo : fieldInfoList)
       {
         auto [varID, levelID] = fieldInfo.get();
         calc_trend_sum(work, fields2D[varID][levelID], zj, varID, levelID);
diff --git a/src/Trendarith.cc b/src/Trendarith.cc
index 83caee17b..158269cb9 100644
--- a/src/Trendarith.cc
+++ b/src/Trendarith.cc
@@ -26,7 +26,7 @@
 
 template <typename T>
 static void
-add_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<double> &v3, size_t n, double mv)
+add_trend(double zj, Varray<T> &v1, Varray<double> const &v2, Varray<double> const &v3, size_t n, double mv)
 {
   auto missval1 = mv;
   auto missval2 = mv;
@@ -46,7 +46,7 @@ add_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<doubl
 }
 
 static void
-add_trend(double zj, Field &field1, const Field &field2, const Field &field3)
+add_trend(double zj, Field &field1, Field const &field2, Field const &field3)
 {
   auto func = [&](auto &v1) { add_trend(zj, v1, field2.vec_d, field3.vec_d, field1.size, field1.missval); };
   field_operation(func, field1);
@@ -54,7 +54,7 @@ add_trend(double zj, Field &field1, const Field &field2, const Field &field3)
 
 template <typename T>
 static void
-sub_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<double> &v3, size_t n, double mv)
+sub_trend(double zj, Varray<T> &v1, Varray<double> const &v2, Varray<double> const &v3, size_t n, double mv)
 {
   auto missval1 = mv;
   auto missval2 = mv;
@@ -74,7 +74,7 @@ sub_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<doubl
 }
 
 static void
-sub_trend(double zj, Field &field1, const Field &field2, const Field &field3)
+sub_trend(double zj, Field &field1, Field const &field2, Field const &field3)
 {
   auto func = [&](auto &v1) { sub_trend(zj, v1, field2.vec_d, field3.vec_d, field1.size, field1.missval); };
   field_operation(func, field1);
@@ -86,19 +86,19 @@ get_parameter(bool &tstepIsEqual)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if (key == "equal") tstepIsEqual = parameter_to_bool(value);
@@ -228,7 +228,7 @@ public:
             if (numSteps > 0) progress.update(fstatus);
 
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var1 = varList1.vars[varID];
+            auto const &var1 = varList1.vars[varID];
             field.init(var1);
             cdo_read_field(streamID1, field);
 
diff --git a/src/Tstepcount.cc b/src/Tstepcount.cc
index 35c76835e..c7e2fbf0a 100644
--- a/src/Tstepcount.cc
+++ b/src/Tstepcount.cc
@@ -21,7 +21,7 @@
 
 template <typename T>
 static T
-tstepcount(long nts, T missval, const Varray<T> &v, T refval)
+tstepcount(long nts, T missval, Varray<T> const &v, T refval)
 {
   if (fp_is_equal(refval, missval)) return missval;
 
@@ -124,7 +124,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var1 = varList1.vars[varID];
+        auto const &var1 = varList1.vars[varID];
         auto memType = var1.memType;
         auto missval = var1.missval;
         auto gridsize = var1.gridsize;
diff --git a/src/Vargen.cc b/src/Vargen.cc
index 7eeaa8301..e950fbc29 100644
--- a/src/Vargen.cc
+++ b/src/Vargen.cc
@@ -104,7 +104,7 @@ calc_index_jj(size_t ny, double yval)
 }
 
 static void
-remap_nn_reg2d_to_reg2d(size_t nx, size_t ny, const Varray<float> &data, int gridID, Varray<float> &array)
+remap_nn_reg2d_to_reg2d(size_t nx, size_t ny, Varray<float> const &data, int gridID, Varray<float> &array)
 {
   auto gridtype = gridInqType(gridID);
   if (gridtype != GRID_LONLAT && gridtype != GRID_GAUSSIAN) cdo_abort("Internal error, wrong grid type!");
@@ -135,7 +135,7 @@ remap_nn_reg2d_to_reg2d(size_t nx, size_t ny, const Varray<float> &data, int gri
 }
 
 static void
-remap_nn_reg2d_to_nonreg2d(size_t nx, size_t ny, const Varray<float> &data, int gridID, Varray<float> &array)
+remap_nn_reg2d_to_nonreg2d(size_t nx, size_t ny, Varray<float> const &data, int gridID, Varray<float> &array)
 {
   auto gridsize = gridInqSize(gridID);
   Varray<double> xvals(gridsize), yvals(gridsize);
@@ -164,7 +164,7 @@ remap_nn_reg2d_to_nonreg2d(size_t nx, size_t ny, const Varray<float> &data, int
 }
 
 static void
-remap_nn_reg2d_to_healpix(size_t nx, size_t ny, const Varray<float> &data, int gridID, Varray<float> &array)
+remap_nn_reg2d_to_healpix(size_t nx, size_t ny, Varray<float> const &data, int gridID, Varray<float> &array)
 {
   auto gridID2 = gridID;
   auto gridsize = gridInqSize(gridID2);
@@ -184,7 +184,7 @@ remap_nn_reg2d_to_healpix(size_t nx, size_t ny, const Varray<float> &data, int g
 }
 
 static void
-remap_nn_reg2d(size_t nx, size_t ny, const Varray<float> &data, int gridID, Varray<float> &array)
+remap_nn_reg2d(size_t nx, size_t ny, Varray<float> const &data, int gridID, Varray<float> &array)
 {
   auto gridtype = gridInqType(gridID);
   if (gridtype == GRID_LONLAT || gridtype == GRID_GAUSSIAN)
diff --git a/src/Varrms.cc b/src/Varrms.cc
index 3b63a531b..8b73fdafa 100644
--- a/src/Varrms.cc
+++ b/src/Varrms.cc
@@ -19,7 +19,7 @@
 #include "field_functions.h"
 
 static void
-var_rms(const Varray<double> &w, const FieldVector &field1, const FieldVector &field2, Field &field3)
+var_rms(Varray<double> const &w, FieldVector const &field1, FieldVector const &field2, Field &field3)
 {
   auto is_EQ = fp_is_equal;
   auto grid1 = field1[0].grid;
diff --git a/src/Varsstat.cc b/src/Varsstat.cc
index 336e0aae5..e404d9dbf 100644
--- a/src/Varsstat.cc
+++ b/src/Varsstat.cc
@@ -38,7 +38,7 @@ check_unique_gridsize(int vlistID)
 static void
 set_attributes(const CdoVars &cdoVars1, int vlistID2, int varID2, int operatorID)
 {
-  const auto &var0 = cdoVars1[0];
+  auto const &var0 = cdoVars1[0];
   auto paramIsEqual = true;
   auto name = var0.name;
   auto param = var0.param;
@@ -124,7 +124,7 @@ public:
     check_unique_gridsize(vlistID1);
 
     auto timetype = varList1.vars[0].timeType;
-    for (const auto &var : varList1.vars)
+    for (auto const &var : varList1.vars)
       {
         if (timetype != var.timeType) cdo_abort("Number of timesteps differ!");
       }
diff --git a/src/Verifygrid.cc b/src/Verifygrid.cc
index a8b2173ed..fbc026927 100644
--- a/src/Verifygrid.cc
+++ b/src/Verifygrid.cc
@@ -279,7 +279,7 @@ are_polygon_vertices_arranged_in_clockwise_order(const Varray<Point> &cellCorner
 }
 
 static void
-create_sorted_point_array(size_t gridsize, const Varray<double> &grid_center_lon, const Varray<double> &grid_center_lat,
+create_sorted_point_array(size_t gridsize, Varray<double> const &grid_center_lon, Varray<double> const &grid_center_lat,
                           Varray<double> &center_point_array)
 {
   for (size_t cell_no = 0; cell_no < gridsize; cell_no++)
@@ -339,8 +339,8 @@ print_header(int gridtype, size_t gridsize, size_t nx, int gridno, int numGrids)
 }
 
 static size_t
-get_no_unique_center_points(size_t gridsize, size_t nx, const Varray<double> &grid_center_lon,
-                            const Varray<double> &grid_center_lat)
+get_no_unique_center_points(size_t gridsize, size_t nx, Varray<double> const &grid_center_lon,
+                            Varray<double> const &grid_center_lat)
 {
   (void) nx;
   // For performing the first test, an array of all center point coordinates is built.
@@ -503,8 +503,8 @@ compute_cell_barycenter(size_t numCorners, const Varray<Point3D> &cellCorners3D,
 }
 
 static void
-verify_grid(size_t gridsize, size_t nx, int ncorner, const Varray<double> &grid_center_lon, const Varray<double> &grid_center_lat,
-            const Varray<double> &grid_corner_lon, const Varray<double> &grid_corner_lat)
+verify_grid(size_t gridsize, size_t nx, int ncorner, Varray<double> const &grid_center_lon, Varray<double> const &grid_center_lat,
+            Varray<double> const &grid_corner_lon, Varray<double> const &grid_corner_lat)
 {
   /*
      First, this function performs the following test:
@@ -749,7 +749,7 @@ verify_grid(size_t gridsize, size_t nx, int ncorner, const Varray<double> &grid_
 }
 
 static void
-print_lonlat(int dig, int gridID, size_t gridsize, const Varray<double> &lon, const Varray<double> &lat)
+print_lonlat(int dig, int gridID, size_t gridsize, Varray<double> const &lon, Varray<double> const &lat)
 {
   size_t num_lons_nan = 0;
   for (size_t i = 0; i < gridsize; ++i)
diff --git a/src/Verifyweights.cc b/src/Verifyweights.cc
index 3ddbcc849..22020bcf3 100644
--- a/src/Verifyweights.cc
+++ b/src/Verifyweights.cc
@@ -180,7 +180,7 @@ remapVarsWInit(RemapMethod mapType, int remapOrder, RemapVarsW &rv)
 }
 
 static NormOpt
-remapGetNormOpt(const std::string &normOptStr)
+remapGetNormOpt(std::string const &normOptStr)
 {
   NormOpt normOpt(NormOpt::NONE);
   // clang-format off
@@ -203,7 +203,7 @@ RemapSwitches get_maptype(int ncfileid);
 KnnParams read_knn_params(int ncfileid);
 
 static void
-read_remapgrid_scrip(int ncfileid, const std::string &prefix, bool lgridarea, RemapGridW &grid)
+read_remapgrid_scrip(int ncfileid, std::string const &prefix, bool lgridarea, RemapGridW &grid)
 {
   // Read all variables of the grid
   cdf_read_var_size(ncfileid, (prefix + "_dims").c_str(), 2, grid.dims);
@@ -235,7 +235,7 @@ read_remapweights_scrip(int ncfileid, RemapVarsW &rv)
 }
 
 static RemapSwitches
-readRemapFileScrip(const std::string &remapFile, RemapAttributes &remapAtts, RemapGridW &srcGrid, RemapGridW &tgtGrid,
+readRemapFileScrip(std::string const &remapFile, RemapAttributes &remapAtts, RemapGridW &srcGrid, RemapGridW &tgtGrid,
                    RemapVarsW &rv)
 {
   // The routine reads a NetCDF file to extract remapping info in SCRIP format
@@ -341,7 +341,7 @@ cdf_def_var(int ncfileid, const char *name, nc_type xtype, int ndims, const int
 }
 
 static void
-cdfWriteAttText(int ncfileid, int ncvarid, const char *name, const std::string &text)
+cdfWriteAttText(int ncfileid, int ncvarid, const char *name, std::string const &text)
 {
   if (text.size()) nce(nc_put_att_text(ncfileid, ncvarid, name, text.size(), text.c_str()));
 }
@@ -430,7 +430,7 @@ struct CDFgrid
 };
 
 static CDFgrid
-define_remapgrid_scrip(int ncfileid, const std::string &prefix, nc_type sizetype, bool lgridarea, const RemapGridW &grid)
+define_remapgrid_scrip(int ncfileid, std::string const &prefix, nc_type sizetype, bool lgridarea, const RemapGridW &grid)
 {
   CDFgrid cdfGrid;
 
@@ -530,7 +530,7 @@ remap_set_mapmethod(const RemapSwitches &remapSwitches)
 }
 
 static void
-write_remapfile_scrip(const std::string &remapFile, const RemapAttributes &remapAtts, const RemapSwitches &remapSwitches,
+write_remapfile_scrip(std::string const &remapFile, const RemapAttributes &remapAtts, const RemapSwitches &remapSwitches,
                       RemapGridW &srcGrid, RemapGridW &tgtGrid, RemapVarsW &rv)
 {
   // Writes remap data to a NetCDF file using SCRIP conventions
@@ -627,8 +627,8 @@ write_remapfile_scrip(const std::string &remapFile, const RemapAttributes &remap
 }
 
 static void
-check_areas(size_t n_a, const Varray<double> &area_a, const Varray<double> &area_b, size_t n_s, const Varray<size_t> &col,
-            const Varray<size_t> &row, const Varray<double> &S)
+check_areas(size_t n_a, Varray<double> const &area_a, Varray<double> const &area_b, size_t n_s, const Varray<size_t> &col,
+            const Varray<size_t> &row, Varray<double> const &S)
 {
   if (area_a.size() == 0 || area_b.size() == 0) return;
 
@@ -651,7 +651,7 @@ check_areas(size_t n_a, const Varray<double> &area_a, const Varray<double> &area
 }
 
 static void
-verify_weights(const std::string &remapFile)
+verify_weights(std::string const &remapFile)
 {
   RemapGridW srcGrid, tgtGrid;
   RemapVarsW remapVars;
@@ -664,7 +664,7 @@ verify_weights(const std::string &remapFile)
 }
 
 static void
-write_remap_scrip(const std::string &remapFileIn, const std::string &remapFileOut)
+write_remap_scrip(std::string const &remapFileIn, std::string const &remapFileOut)
 {
   RemapGridW srcGrid, tgtGrid;
   RemapVarsW remapVars;
diff --git a/src/Vertcum.cc b/src/Vertcum.cc
index 8a627442f..99c20b12e 100644
--- a/src/Vertcum.cc
+++ b/src/Vertcum.cc
@@ -19,7 +19,7 @@
 #define IS_SURFACE_LEVEL(zaxisID) (zaxisInqType(zaxisID) == ZAXIS_SURFACE && zaxisInqSize(zaxisID) == 1)
 
 static void
-add_vars_mv(size_t gridsize, double missval, const Varray<double> &var1, const Varray<double> &var2, Varray<double> &var3)
+add_vars_mv(size_t gridsize, double missval, Varray<double> const &var1, Varray<double> const &var2, Varray<double> &var3)
 {
   auto missval1 = missval;
   auto missval2 = missval;
@@ -176,7 +176,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             auto missval = var2.missval;
             auto gridsize = var2.gridsize;
             auto nlevs2 = var2.nlevels;
@@ -201,7 +201,7 @@ public:
 
             if (operatorID == VERTCUMHL && nlevs2 == nlevshl)
               {
-                const auto &var1data = vardata2[varID][nlevs2 - 1];
+                auto const &var1data = vardata2[varID][nlevs2 - 1];
                 for (int levelID = 0; levelID < nlevs2; ++levelID)
                   {
                     auto &var2data = vardata2[varID][levelID];
@@ -218,7 +218,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var2 = varList2.vars[varID];
+            auto const &var2 = varList2.vars[varID];
             auto missval = var2.missval;
             auto gridsize = var2.gridsize;
             auto nlevs2 = var2.nlevels;
diff --git a/src/Vertfillmiss.cc b/src/Vertfillmiss.cc
index d15f56784..801b59cb1 100644
--- a/src/Vertfillmiss.cc
+++ b/src/Vertfillmiss.cc
@@ -53,19 +53,19 @@ private:
     auto pargc = cdo_operator_argc();
     if (pargc)
       {
-        const auto &pargv = cdo_get_oper_argv();
+        auto const &pargv = cdo_get_oper_argv();
 
         KVList kvlist;
         kvlist.name = cdo_module_name();
         if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
         if (Options::cdoVerbose) kvlist.print();
 
-        for (const auto &kv : kvlist)
+        for (auto const &kv : kvlist)
           {
-            const auto &key = kv.key;
+            auto const &key = kv.key;
             if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
             if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-            const auto &value = kv.values[0];
+            auto const &value = kv.values[0];
 
             // clang-format off
             if      (key == "method")   method = convert<FillMethod>(value);
@@ -107,7 +107,7 @@ public:
   void
   fillmiss(int varID)
   {
-    const auto &var = varList1.vars[varID];
+    auto const &var = varList1.vars[varID];
     auto fieldMemType = var.memType;
     auto gridsize = var.gridsize;
     auto numLevels = var.nlevels;
diff --git a/src/Vertintap.cc b/src/Vertintap.cc
index eeb8f2895..163ba0218 100644
--- a/src/Vertintap.cc
+++ b/src/Vertintap.cc
@@ -23,7 +23,7 @@
 #include "vertint_util.h"
 
 static void
-check_range_ps(int stepNum, const Field &psProg)
+check_range_ps(int stepNum, Field const &psProg)
 {
   auto mm = field_min_max(psProg);
   if (mm.min < MIN_PS || mm.max > MAX_PS)
@@ -46,7 +46,7 @@ is_height_axis(int zaxisID)
 
 template <typename T>
 static void
-calc_half_press(size_t gridsize, int numFullLevels, const Varray<T> &fullPress, int numHalfLevels, Varray<T> &halfPress)
+calc_half_press(size_t gridsize, int numFullLevels, Varray<T> const &fullPress, int numHalfLevels, Varray<T> &halfPress)
 {
   for (size_t i = 0; i < gridsize; ++i) halfPress[i] = 0;
 #ifdef _OPENMP
@@ -275,7 +275,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto isHeightAxis = is_height_axis(var.zaxisID);
 
         if (gridInqType(var.gridID) == GRID_SPECTRAL) cdo_abort("Spectral data unsupported!");
@@ -331,7 +331,7 @@ public:
         for (int varID = 0; varID < numVars; ++varID)
           {
             processVars[varID] = false;
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID) varnumMissVals[varID][levelID] = 0;
           }
 
@@ -391,7 +391,7 @@ public:
           {
             if (processVars[varID])
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID > 0 && !interpVars[varID] && var.isConstant) continue;
 
@@ -405,13 +405,13 @@ public:
                         if (varnumMissVals[varID][levelID]) cdo_abort("Missing values unsupported for this operator!");
                       }
 
-                    const auto &levels3D = (var.nlevels == numFullLevels) ? fullPress : halfPress;
-                    const auto &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
+                    auto const &levels3D = (var.nlevels == numFullLevels) ? fullPress : halfPress;
+                    auto const &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
                     vertical_interp_X(levels3D, vardata1[varID], vardata2[varID], vertIndex3D, levels, gridsize);
 
                     if (!extrapolate)
                       {
-                        const auto &numMiss = (var.nlevels == numFullLevels) ? numMiss_FL : numMiss_HL;
+                        auto const &numMiss = (var.nlevels == numFullLevels) ? numMiss_FL : numMiss_HL;
                         varray_copy(numPL, numMiss, varnumMissVals[varID]);
                       }
                   }
diff --git a/src/Vertintgh.cc b/src/Vertintgh.cc
index d04ed1f5b..3247b9f0b 100644
--- a/src/Vertintgh.cc
+++ b/src/Vertintgh.cc
@@ -40,7 +40,7 @@ static int
 create_zaxis_height(Varray<double> &heightLevels)
 {
   int zaxisID = CDI_UNDEFID;
-  const auto &arg1 = cdo_operator_argv(0);
+  auto const &arg1 = cdo_operator_argv(0);
   if (cdo_operator_argc() == 1 && !std::isdigit(arg1[0]))
     {
       auto zfilename = arg1.c_str();
@@ -163,7 +163,7 @@ public:
       {
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             auto stdname = string_to_lower(var.stdname);
             if (stdname == "height" && var.units == "m")
               {
@@ -218,7 +218,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto isHeightAxis = is_height_axis(var.zaxisID);
 
         if (gridInqType(var.gridID) == GRID_SPECTRAL) cdo_abort("Spectral data unsupported!");
@@ -251,7 +251,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         if (interpVars[varID] && var.isConstant) vlistDefVarTimetype(vlistID2, varID, TIME_VARYING);
       }
 
@@ -273,7 +273,7 @@ public:
         for (int varID = 0; varID < numVars; ++varID)
           {
             processVars[varID] = false;
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID) varnumMissVals[varID][levelID] = 0;
           }
 
@@ -317,7 +317,7 @@ public:
           {
             if (processVars[varID])
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (tsID > 0 && !interpVars[varID] && var.isConstant) continue;
 
                 if (interpVars[varID])
@@ -330,8 +330,8 @@ public:
                         if (varnumMissVals[varID][levelID]) cdo_abort("Missing values unsupported for this operator!");
                       }
 
-                    const auto &height3D = (var.nlevels == numFullLevels) ? vardata1[heightID_FL] : vardata1[heightID_HL];
-                    const auto &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
+                    auto const &height3D = (var.nlevels == numFullLevels) ? vardata1[heightID_FL] : vardata1[heightID_HL];
+                    auto const &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
                     vertical_interp_X(height3D, vardata1[varID], vardata2[varID], vertIndex3D, heightLevels, gridsize);
 
                     if (!extrapolate)
diff --git a/src/Vertintml.cc b/src/Vertintml.cc
index eb5958306..377325442 100644
--- a/src/Vertintml.cc
+++ b/src/Vertintml.cc
@@ -26,7 +26,7 @@
 
 /*
 static void
-field_copy_div_2d_to_3d(MemType memType, size_t gridsize, int nlevels, const Field &field2d, Field3D &field3d)
+field_copy_div_2d_to_3d(MemType memType, size_t gridsize, int nlevels, Field const &field2d, Field3D &field3d)
 {
   if (memType == MemType::Float)
     for (size_t i = 0; i < gridsize; ++i) field3d.vec_f[gridsize * nlevels + i] = field2d.vec_f[i] / PlanetGrav;
@@ -36,7 +36,7 @@ field_copy_div_2d_to_3d(MemType memType, size_t gridsize, int nlevels, const Fie
 */
 template <typename T>
 static void
-field_check_sgeopot(const Varray<T> &sgeopot, const T *gheightAtSurface)
+field_check_sgeopot(Varray<T> const &sgeopot, const T *gheightAtSurface)
 {
   auto len = sgeopot.size();
   double sumDiff = 0;
@@ -48,7 +48,7 @@ field_check_sgeopot(const Varray<T> &sgeopot, const T *gheightAtSurface)
 }
 
 static void
-field_check_sgeopot(MemType memType, size_t gridsize, int nlevels, const Field &field2d, const Field3D &field3d)
+field_check_sgeopot(MemType memType, size_t gridsize, int nlevels, Field const &field2d, const Field3D &field3d)
 {
   if (memType == MemType::Float)
     field_check_sgeopot(field2d.vec_f, &field3d.vec_f[gridsize * (nlevels - 1)]);
@@ -57,7 +57,7 @@ field_check_sgeopot(MemType memType, size_t gridsize, int nlevels, const Field &
 }
 
 static void
-vct_to_hybrid_pressure(MemType memType, Field3D &pressure_FL, Field3D &pressure_HL, const Varray<double> &vct, const Field &ps,
+vct_to_hybrid_pressure(MemType memType, Field3D &pressure_FL, Field3D &pressure_HL, Varray<double> const &vct, Field const &ps,
                        long numHybridLevels, long ngp)
 {
   if (memType == MemType::Float)
@@ -80,7 +80,7 @@ invert_vct(Varray<double> &vct)
 
 template <class ForwardIt>
 static void
-check_range(double rmin, double rmax, ForwardIt first, ForwardIt last, const std::string &name)
+check_range(double rmin, double rmax, ForwardIt first, ForwardIt last, std::string const &name)
 {
   const auto [min, max] = std::minmax_element(first, last);
   if (fabs(*max - *min) <= 1.0e-9 || (*min < rmin) || (*max > rmax))
@@ -88,14 +88,14 @@ check_range(double rmin, double rmax, ForwardIt first, ForwardIt last, const std
 }
 
 static void
-check_vct(const Varray<double> &vct, int numHalfLevels)
+check_vct(Varray<double> const &vct, int numHalfLevels)
 {
   check_range(0.0, 50000.0, vct.begin(), vct.begin() + numHalfLevels, "vct A");
   check_range(0.0, 1.0, vct.begin() + numHalfLevels, vct.end(), "vct B");
 }
 
 static void
-check_range_ps(int stepNum, const Field &psProg)
+check_range_ps(int stepNum, Field const &psProg)
 {
   auto mm = field_min_max(psProg);
   if (mm.min < MIN_PS || mm.max > MAX_PS)
@@ -103,7 +103,7 @@ check_range_ps(int stepNum, const Field &psProg)
 }
 
 static void
-check_range_sgeopot(int stepNum, const Field &sgeopot)
+check_range_sgeopot(int stepNum, Field const &sgeopot)
 {
   auto mm = field_min_max(sgeopot);
   if (mm.min < MIN_FIS || mm.max > MAX_FIS)
@@ -296,7 +296,7 @@ pressure_level_interpolation(Varray<double> &pressureLevels, bool useHeightLevel
     {
       if (interpVars[varID])
         {
-          const auto &var1 = varList1.vars[varID];
+          auto const &var1 = varList1.vars[varID];
           if (var1.nlevels == numHalfLevels && varID != varIDs.gheightID) needVertIndexHalf = true;
         }
     }
@@ -370,7 +370,7 @@ pressure_level_interpolation(Varray<double> &pressureLevels, bool useHeightLevel
       for (int fieldID = 0; fieldID < numFields; ++fieldID)
         {
           auto [varID, levelID] = cdo_inq_field(streamID1);
-          const auto &var = varList1.vars[varID];
+          auto const &var = varList1.vars[varID];
 
           if (vctIsInverted && zaxisID_ML != -1 && var.zaxisID == zaxisID_ML) levelID = var.nlevels - 1 - levelID;
 
@@ -416,7 +416,7 @@ pressure_level_interpolation(Varray<double> &pressureLevels, bool useHeightLevel
         {
           if (processVars[varID])
             {
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
 
               if (tsID > 0 && var.isConstant) continue;
 
@@ -447,8 +447,8 @@ pressure_level_interpolation(Varray<double> &pressureLevels, bool useHeightLevel
                     }
                   else
                     {
-                      const auto &levels3D = (var.nlevels == numFullLevels) ? pressure_FL : pressure_HL;
-                      const auto &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
+                      auto const &levels3D = (var.nlevels == numFullLevels) ? pressure_FL : pressure_HL;
+                      auto const &vertIndex3D = (var.nlevels == numFullLevels) ? vertIndex_FL : vertIndex_HL;
                       vertical_interp_X(levels3D, vardata1[varID], vardata2[varID], vertIndex3D, pressureLevels, gridsize);
                     }
 
@@ -555,7 +555,7 @@ height_level_interpolation(Varray<double> &heightLevels, bool extrapolate)
 
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var1 = varList1.vars[varID];
+      auto const &var1 = varList1.vars[varID];
       auto nlevels = var1.nlevels;
 
       if (var1.gridType == GRID_SPECTRAL && zaxis_is_hybrid(var1.zaxisType)) cdo_abort("Spectral data on model level unsupported!");
@@ -644,7 +644,7 @@ height_level_interpolation(Varray<double> &heightLevels, bool extrapolate)
         {
           if (processVars[varID])
             {
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (tsID > 0 && var.isConstant) continue;
 
               if (interpVars[varID])
@@ -657,7 +657,7 @@ height_level_interpolation(Varray<double> &heightLevels, bool extrapolate)
                       if (varnumMissVals[varID][levelID]) cdo_abort("Missing values unsupported for this operator!");
                     }
 
-                  const auto &levels3D = vardata1[varIDs.gheightID];
+                  auto const &levels3D = vardata1[varIDs.gheightID];
                   vertical_interp_X(levels3D, vardata1[varID], vardata2[varID], vertIndex, heightLevels, gridsize);
 
                   if (!extrapolate) varray_copy(numHeightLevels, pnumMissVals, varnumMissVals[varID]);
diff --git a/src/Vertintzs.cc b/src/Vertintzs.cc
index da7c04550..883574b1e 100644
--- a/src/Vertintzs.cc
+++ b/src/Vertintzs.cc
@@ -179,7 +179,7 @@ public:
 
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
         if (gridInqType(var.gridID) == GRID_SPECTRAL) cdo_abort("Spectral data unsupported!");
 
@@ -220,7 +220,7 @@ public:
         for (int varID = 0; varID < nvars; ++varID)
           {
             processVars[varID] = false;
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             for (int levelID = 0; levelID < var.nlevels; ++levelID) varnumMissVals[varID][levelID] = 0;
           }
 
@@ -254,7 +254,7 @@ public:
           {
             if (processVars[varID])
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID > 0 && !interpVars[varID] && var.isConstant) continue;
 
diff --git a/src/Vertstat.cc b/src/Vertstat.cc
index 1d300d56b..f1a3d1f4c 100644
--- a/src/Vertstat.cc
+++ b/src/Vertstat.cc
@@ -72,19 +72,19 @@ vertstat_get_parameter(bool &weights, bool &genbounds)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "weights")   weights = parameter_to_bool(value);
@@ -242,7 +242,7 @@ public:
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
 
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             auto &rsamp1 = stepStat.samp(varID);
             auto &rvar1 = stepStat.var1(varID);
diff --git a/src/Vertwind.cc b/src/Vertwind.cc
index 0391372e5..2e317cbe4 100644
--- a/src/Vertwind.cc
+++ b/src/Vertwind.cc
@@ -116,7 +116,7 @@ public:
     missval_t = varList1.vars[tempID].missval;
     missval_sq = varList1.vars[sqID].missval;
 
-    const auto &varOmega = varList1.vars[omegaID];
+    auto const &varOmega = varList1.vars[omegaID];
     missval_wap = varOmega.missval;
     missval_out = missval_wap;
 
diff --git a/src/Wind.cc b/src/Wind.cc
index 1fdfee87d..ce1c1804d 100644
--- a/src/Wind.cc
+++ b/src/Wind.cc
@@ -154,7 +154,7 @@ public:
     auto nvars = vlistNvars(vlistID2);
     for (int varID = 0; varID < nvars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
         auto varname = string_to_lower(var.name);
         int pnum, pcat, pdis;
         cdiDecodeParam(var.param, &pnum, &pcat, &pdis);
@@ -203,8 +203,8 @@ public:
 
         if (varID1 != -1 && varID2 != -1)
           {
-            const auto &var1 = varList1.vars[varID1];
-            const auto &var2 = varList1.vars[varID2];
+            auto const &var1 = varList1.vars[varID1];
+            auto const &var2 = varList1.vars[varID2];
             gridID1 = var1.gridID;
 
             if (var1.gridType != GRID_GAUSSIAN) cdo_abort("U-wind is not on Gaussian grid!");
@@ -246,8 +246,8 @@ public:
 
         if (varID1 != -1 && varID2 != -1)
           {
-            const auto &var1 = varList1.vars[varID1];
-            const auto &var2 = varList1.vars[varID2];
+            auto const &var1 = varList1.vars[varID1];
+            auto const &var2 = varList1.vars[varID2];
             gridID1 = var2.gridID;
 
             if (var2.gridType != GRID_SPECTRAL) cdo_abort("Vorticity is not on spectral grid!");
@@ -288,8 +288,8 @@ public:
 
         if (varID1 != -1 && varID2 != -1)
           {
-            const auto &var1 = varList1.vars[varID1];
-            const auto &var2 = varList1.vars[varID2];
+            auto const &var1 = varList1.vars[varID1];
+            auto const &var2 = varList1.vars[varID2];
             gridID1 = var2.gridID;
 
             if (var2.gridType != GRID_SPECTRAL) cdo_abort("Vorticity is not on spectral grid!");
@@ -308,7 +308,7 @@ public:
 
     if (varID1 != -1 && varID2 != -1)
       {
-        const auto &var1 = varList1.vars[varID1];
+        auto const &var1 = varList1.vars[varID1];
         nlev = var1.nlevels;
 
         auto gridsize = gridInqSize(gridID1);
diff --git a/src/WindTrans.cc b/src/WindTrans.cc
index b1130bdc2..f4821a74a 100644
--- a/src/WindTrans.cc
+++ b/src/WindTrans.cc
@@ -288,7 +288,7 @@ DestaggerUV()
   int nvars = vlistNvars(vlistID1);
   for (int varID = 0; varID < nvars; ++varID)
     {
-      const auto &var = varList1.vars[varID];
+      auto const &var = varList1.vars[varID];
 
       int pnum, pcat, pdis;
       cdiDecodeParam(var.param, &pnum, &pcat, &pdis);
@@ -446,7 +446,7 @@ DestaggerUV()
           Debug(cdoDebugExt, "Last trial to find a reference grid for destaggered wind.");
           for (int varID = 0; varID < nvars; ++varID)
             {
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
 
               gridID = var.gridID;
               Debug(cdoDebugExt, "Var.id %d has grid nr:%d", varID, gridID);
@@ -504,7 +504,7 @@ DestaggerUV()
         {
           auto [varID, levelID] = cdo_inq_field(streamID1);
 
-          const auto &var = varList1.vars[varID];
+          auto const &var = varList1.vars[varID];
 
           int pnum, pcat, pdis;
           cdiDecodeParam(var.param, &pnum, &pcat, &pdis);
@@ -1206,7 +1206,7 @@ public:
 
     for (int varID = 0; varID < numVars; ++varID)
       {
-        const auto &var = varList1.vars[varID];
+        auto const &var = varList1.vars[varID];
 
         cdiDecodeParam(var.param, &pnum, &pcat, &pdis);
         code = pnum;
@@ -1333,7 +1333,7 @@ public:
                   }
                 else  // This means that it is U or V.
                   {
-                    const auto &var2 = varList2.vars[varID2];
+                    auto const &var2 = varList2.vars[varID2];
                     code2 = var2.code;
                     zaxisID2 = var2.zaxisID;
                     ltype2 = zaxis_to_ltype(zaxisID2);
diff --git a/src/Ydaypctl.cc b/src/Ydaypctl.cc
index 88be7cb74..0449acfd5 100644
--- a/src/Ydaypctl.cc
+++ b/src/Ydaypctl.cc
@@ -137,13 +137,13 @@ public:
             vars1[dayOfYear] = true;
             hsets[dayOfYear].create(numVars, numSteps);
 
-            for (const auto &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
+            for (auto const &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
           }
 
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID2);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID2, field1);
 
@@ -178,7 +178,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -214,7 +214,7 @@ public:
           for (int fieldID = 0; fieldID < maxFields; ++fieldID)
             {
               auto [varID, levelID] = fieldInfoList[fieldID].get();
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (otsID && var.isConstant) continue;
 
               cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Ydaystat.cc b/src/Ydaystat.cc
index e30bb5fec..0fdedc457 100644
--- a/src/Ydaystat.cc
+++ b/src/Ydaystat.cc
@@ -45,19 +45,19 @@ setParameter(void)
   auto pargc = cdo_operator_argc();
   if (pargc)
     {
-      const auto &pargv = cdo_get_oper_argv();
+      auto const &pargv = cdo_get_oper_argv();
 
       KVList kvlist;
       kvlist.name = cdo_module_name();
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           if (key == "yearMode")
             params.yearMode = parameter_to_bool(value);
@@ -208,7 +208,7 @@ public:
             if (rangeNumSets[stepIndex])
               {
                 auto numEntries = dtLists[stepIndex].get_size();
-                const auto &dtInfo = dtLists[stepIndex].get_info();
+                auto const &dtInfo = dtLists[stepIndex].get_info();
                 outyear = std::min(outyear, dtInfo[numEntries - 1].v.date.year);
               }
           }
diff --git a/src/Ydrunpctl.cc b/src/Ydrunpctl.cc
index 7018b13a5..59cf6b690 100644
--- a/src/Ydrunpctl.cc
+++ b/src/Ydrunpctl.cc
@@ -66,12 +66,12 @@ get_parameter()
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "nts") params.nts = parameter_to_int(value);
@@ -230,13 +230,13 @@ public:
             vars2[dayOfYear] = true;
             hsets[dayOfYear].create(numVars, numSteps);
 
-            for (const auto &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
+            for (auto const &var : varList1.vars) hsets[dayOfYear].createVarLevels(var.ID, var.nlevels, var.gridsize);
           }
 
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID2);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID2, field1);
 
@@ -260,7 +260,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -289,7 +289,7 @@ public:
 
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant) continue;
 
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -363,7 +363,7 @@ public:
 
             for (int varID = 0; varID < numVars; ++varID)
               {
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
                 if (var.isConstant) continue;
 
                 for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -418,7 +418,7 @@ public:
           for (int fieldID = 0; fieldID < maxFields; ++fieldID)
             {
               auto [varID, levelID] = fieldInfoList[fieldID].get();
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (otsID && var.isConstant) continue;
 
               cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Ydrunstat.cc b/src/Ydrunstat.cc
index 0c751ccaa..685bd438d 100644
--- a/src/Ydrunstat.cc
+++ b/src/Ydrunstat.cc
@@ -68,7 +68,7 @@ ydstat_update(YdayStats &stats, CdiDateTime vDateTime, const FieldVector2D &vars
   auto numVars = stats.varList.numVars();
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var = stats.varList.vars[varID];
+      auto const &var = stats.varList.vars[varID];
       if (var.timeType == TIME_CONSTANT) continue;
 
       for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -109,7 +109,7 @@ ydstat_finalize(YdayStats &stats, int operfunc)
         auto numVars = stats.varList.numVars();
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = stats.varList.vars[varID];
+            auto const &var = stats.varList.vars[varID];
             if (var.timeType == TIME_CONSTANT) continue;
 
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
@@ -120,7 +120,7 @@ ydstat_finalize(YdayStats &stats, int operfunc)
                 if (lmean) { fieldc_div(rvars1, (double) numSets); }
                 else if (lvarstd)
                   {
-                    const auto &rvars2 = stats.varsData2[dayOfYear][varID][levelID];
+                    auto const &rvars2 = stats.varsData2[dayOfYear][varID][levelID];
                     fieldc_stdvar_func(rvars1, rvars2, numSets, divisor);
                   }
               }
@@ -161,12 +161,12 @@ get_parameter()
       if (kvlist.parse_arguments(pargv) != 0) cdo_abort("Parse error!");
       if (Options::cdoVerbose) kvlist.print();
 
-      for (const auto &kv : kvlist)
+      for (auto const &kv : kvlist)
         {
-          const auto &key = kv.key;
+          auto const &key = kv.key;
           if (kv.nvalues > 1) cdo_abort("Too many values for parameter key >%s<!", key);
           if (kv.nvalues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
-          const auto &value = kv.values[0];
+          auto const &value = kv.values[0];
 
           // clang-format off
           if      (key == "nts") params.nts = parameter_to_int(value);
diff --git a/src/Yearmonstat.cc b/src/Yearmonstat.cc
index 1395321c5..7a049dd02 100644
--- a/src/Yearmonstat.cc
+++ b/src/Yearmonstat.cc
@@ -134,7 +134,7 @@ public:
             for (int fieldID = 0; fieldID < numFields; ++fieldID)
               {
                 auto [varID, levelID] = cdo_inq_field(streamID1);
-                const auto &var = varList1.vars[varID];
+                auto const &var = varList1.vars[varID];
 
                 if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -182,11 +182,11 @@ public:
         auto numVars = varList1.numVars();
         for (int varID = 0; varID < numVars; ++varID)
           {
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             if (var.isConstant) continue;
             for (int levelID = 0; levelID < var.nlevels; ++levelID)
               {
-                const auto &rsamp1 = samp1[varID][levelID];
+                auto const &rsamp1 = samp1[varID][levelID];
                 auto &rvars1 = varsData1[varID][levelID];
                 if (!rsamp1.empty())
                   field2_div(rvars1, rsamp1);
diff --git a/src/Ymoncomp.cc b/src/Ymoncomp.cc
index 6cb9b2579..17b925dab 100644
--- a/src/Ymoncomp.cc
+++ b/src/Ymoncomp.cc
@@ -29,7 +29,7 @@
 #include "process_int.h"
 #include "field_functions.h"
 
-static auto func_comp = [](auto hasMissvals, auto n, auto mv1, auto mv2, auto &v1, const auto &v2, auto binary_operator) {
+static auto func_comp = [](auto hasMissvals, auto n, auto mv1, auto mv2, auto &v1, auto const &v2, auto binary_operator) {
   if (hasMissvals)
     {
       if (std::isnan(mv1) || std::isnan(mv2))
@@ -62,11 +62,11 @@ comp_function(Varray<T1> &v1, const Varray<T2> &v2, double missval1, double miss
 }
 
 static void
-comp_function(Field &f1, const Field &f2, int operFunc)
+comp_function(Field &f1, Field const &f2, int operFunc)
 {
   auto hasMissvals = (f1.numMissVals > 0 || f2.numMissVals > 0);
 
-  auto func = [&](auto &v1, const auto &v2, double mv1, double mv2, size_t size) {
+  auto func = [&](auto &v1, auto const &v2, double mv1, double mv2, size_t size) {
     comp_function(v1, v2, mv1, mv2, size, operFunc, hasMissvals);
   };
   field_operation2(func, f1, f2, f1.missval, f2.missval, f1.size);
diff --git a/src/Ymonpctl.cc b/src/Ymonpctl.cc
index 7da8670cc..8a9967c2e 100644
--- a/src/Ymonpctl.cc
+++ b/src/Ymonpctl.cc
@@ -136,13 +136,13 @@ public:
           {
             varsData1[month] = true;
             hsets[month].create(numVars, numSteps);
-            for (const auto &var : varList1.vars) hsets[month].createVarLevels(var.ID, var.nlevels, var.gridsize);
+            for (auto const &var : varList1.vars) hsets[month].createVarLevels(var.ID, var.nlevels, var.gridsize);
           }
 
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID2);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID2, field1);
 
@@ -177,7 +177,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -213,7 +213,7 @@ public:
           for (int fieldID = 0; fieldID < maxFields; ++fieldID)
             {
               auto [varID, levelID] = fieldInfoList[fieldID].get();
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (otsID && var.isConstant) continue;
 
               cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Yseaspctl.cc b/src/Yseaspctl.cc
index c8e9b19d2..b170da01d 100644
--- a/src/Yseaspctl.cc
+++ b/src/Yseaspctl.cc
@@ -141,13 +141,13 @@ public:
           {
             seasVars[seas] = true;
             hsets[seas].create(numVars, numSteps);
-            for (const auto &var : varList1.vars) hsets[seas].createVarLevels(var.ID, var.nlevels, var.gridsize);
+            for (auto const &var : varList1.vars) hsets[seas].createVarLevels(var.ID, var.nlevels, var.gridsize);
           }
 
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID2);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
             field1.init(var);
             cdo_read_field(streamID2, field1);
 
@@ -181,7 +181,7 @@ public:
         for (int fieldID = 0; fieldID < numFields; ++fieldID)
           {
             auto [varID, levelID] = cdo_inq_field(streamID1);
-            const auto &var = varList1.vars[varID];
+            auto const &var = varList1.vars[varID];
 
             if (tsID == 0) fieldInfoList[fieldID].set(varID, levelID);
 
@@ -217,7 +217,7 @@ public:
           for (int fieldID = 0; fieldID < maxFields; ++fieldID)
             {
               auto [varID, levelID] = fieldInfoList[fieldID].get();
-              const auto &var = varList1.vars[varID];
+              auto const &var = varList1.vars[varID];
               if (otsID && var.isConstant) continue;
 
               cdo_def_field(streamID4, varID, levelID);
diff --git a/src/Zonstat.cc b/src/Zonstat.cc
index 58f4e7f83..a4ed18e62 100644
--- a/src/Zonstat.cc
+++ b/src/Zonstat.cc
@@ -32,7 +32,7 @@
 #include "field_functions.h"
 
 void remap_weights_zonal_mean(int gridID1, int gridID2, Varray2D<size_t> &remapIndices, Varray2D<double> &remapWeights);
-void remap_zonal_mean(const Varray2D<size_t> &remapIndices, const Varray2D<double> &remapWeights, const Field &field1,
+void remap_zonal_mean(const Varray2D<size_t> &remapIndices, const Varray2D<double> &remapWeights, Field const &field1,
                       Field &field2);
 
 template <typename T>
@@ -218,7 +218,7 @@ public:
 
     if (Options::cdoChunkType == CDI_UNDEFID)
       {
-        for (const auto &var : varList1.vars) cdiDefKeyInt(vlistID2, var.ID, CDI_KEY_CHUNKTYPE, CDI_CHUNK_AUTO);
+        for (auto const &var : varList1.vars) cdiDefKeyInt(vlistID2, var.ID, CDI_KEY_CHUNKTYPE, CDI_CHUNK_AUTO);
       }
 
     streamID2 = cdo_open_write(1);
@@ -251,7 +251,7 @@ public:
     while (numFields--)
       {
         auto [varID, levelID] = cdo_inq_field(streamID1);
-        const auto &var1 = varList1.vars[varID];
+        auto const &var1 = varList1.vars[varID];
         field1.init(var1);
         cdo_read_field(streamID1, field1);
         field1.grid = gridID1;
diff --git a/src/after_fctrans.cc b/src/after_fctrans.cc
index 5af6193ff..d3a4cfcb0 100644
--- a/src/after_fctrans.cc
+++ b/src/after_fctrans.cc
@@ -2118,7 +2118,7 @@ fc2gp(const double *restrict trig, const long *restrict ifax, const double *rest
         }
     }
 
-  const auto &wpt = wfc;
+  auto const &wpt = wfc;
 
 #ifdef _OPENMP
 #pragma omp parallel for default(shared)
diff --git a/src/afterburner.h b/src/afterburner.h
index a35bc3711..fc2ca98ed 100644
--- a/src/afterburner.h
+++ b/src/afterburner.h
@@ -225,7 +225,7 @@ static bool afterReadAsync = true;
 
 template <typename... Args>
 void
-afterAbort(const std::string &format, Args const &...args)
+afterAbort(std::string const &format, Args const &...args)
 {
   if (afterReadAsync && afterWorkerThread) afterWorkerThread->wait();
   cdo_abort(format, args...);
diff --git a/src/afterburnerlib.cc b/src/afterburnerlib.cc
index e690b67f1..094e1fbe3 100644
--- a/src/afterburnerlib.cc
+++ b/src/afterburnerlib.cc
@@ -1407,7 +1407,7 @@ after_EchamCompGP(const AfterControl &globs, struct Variable *vars)
 }
 
 static void
-Derivate(double field[], double derilam[], long nlevels, long Waves, long Latitudes, const Varray<double> &derivationFactor)
+Derivate(double field[], double derilam[], long nlevels, long Waves, long Latitudes, Varray<double> const &derivationFactor)
 {
   long i = 0;
   for (long lev = 0; lev < nlevels; lev++)
diff --git a/src/cdo.cc b/src/cdo.cc
index d1360a7ca..042d8bc7b 100644
--- a/src/cdo.cc
+++ b/src/cdo.cc
@@ -58,7 +58,7 @@ extern "C" void streamGrbDefDataScanningMode(int scanmode);
 #endif
 
 static void
-cdo_display_syntax_help(const std::string &help, FILE *p_target)
+cdo_display_syntax_help(std::string const &help, FILE *p_target)
 {
   set_text_color(p_target, BRIGHT, BLUE);
   std::string pad = CLIOptions::pad_size_terminal('=');
@@ -72,7 +72,7 @@ cdo_display_syntax_help(const std::string &help, FILE *p_target)
 }
 
 static void
-print_category(const std::string &p_category, FILE *p_target)
+print_category(std::string const &p_category, FILE *p_target)
 {
   const auto options = CLIOptions::print_options_help(p_category);
   if (!options.empty())
@@ -148,13 +148,13 @@ static void
 get_env_vars()
 {
   CLIOptions::envvar("CDO_TEST")
-      ->add_effect([&](const std::string &envstr) { Options::test = parameter_to_bool(envstr); })
+      ->add_effect([&](std::string const &envstr) { Options::test = parameter_to_bool(envstr); })
       ->describe_argument("true|false")
       ->add_default("false")
       ->add_help("'true' test new features [default: false].");
 
   CLIOptions::envvar("CDO_ASYNC_READ")
-      ->add_effect([&](const std::string &envstr) {
+      ->add_effect([&](std::string const &envstr) {
         Options::CDO_Async_Read = parameter_to_bool(envstr);
         Options::CDO_task = Options::CDO_Async_Read;
       })
@@ -163,22 +163,22 @@ get_env_vars()
       ->add_help("'true' asyncronous read of input files [default: true].");
 
   CLIOptions::envvar("CDO_CORESIZE")
-      ->add_effect([&](const std::string &envstr) { Options::coresize = parameter_to_long(envstr); })
+      ->add_effect([&](std::string const &envstr) { Options::coresize = parameter_to_long(envstr); })
       ->describe_argument("max. core dump size")
       ->add_help("The largest size (in bytes) core file that may be created.");
 
   CLIOptions::envvar("CDO_DOWNLOAD_PATH")
-      ->add_effect([&](const std::string &downloadPath) { DownloadPath = downloadPath; })
+      ->add_effect([&](std::string const &downloadPath) { DownloadPath = downloadPath; })
       ->describe_argument("path")
       ->add_help("Path where CDO can store downloads.");
 
   CLIOptions::envvar("CDO_ICON_GRIDS")
-      ->add_effect([&](const std::string &iconGrid) { IconGrids = iconGrid; })
+      ->add_effect([&](std::string const &iconGrid) { IconGrids = iconGrid; })
       ->describe_argument("path")
       ->add_help("Root directory of the installed ICON grids (e.g. /pool/data/ICON).");
 
   CLIOptions::envvar("CDO_DISABLE_HISTORY")
-      ->add_effect([&](const std::string &envstr) {
+      ->add_effect([&](std::string const &envstr) {
         if (parameter_to_bool(envstr) == true)
           {
             Options::CDO_Reset_History = true;
@@ -189,33 +189,33 @@ get_env_vars()
       ->add_help("'true' disables history attribute.");
 
   CLIOptions::envvar("CDO_RESET_HISTORY")
-      ->add_effect([&](const std::string &envstr) { Options::CDO_Reset_History = parameter_to_bool(envstr); })
+      ->add_effect([&](std::string const &envstr) { Options::CDO_Reset_History = parameter_to_bool(envstr); })
       ->describe_argument("true|false")
       ->add_default("false")
       ->add_help("'true' resets the global history attribute [default: false].");
 
   CLIOptions::envvar("CDO_HISTORY_INFO")
-      ->add_effect([&](const std::string &envstr) { Options::CDO_Append_History = parameter_to_bool(envstr); })
+      ->add_effect([&](std::string const &envstr) { Options::CDO_Append_History = parameter_to_bool(envstr); })
       ->describe_argument("true|false")
       ->add_default("true")
       ->add_help("'false' don't write information to the global history attribute [default: true].");
 
   CLIOptions::envvar("CDO_FILE_SUFFIX")
-      ->add_effect([&](const std::string &envstr) {
+      ->add_effect([&](std::string const &envstr) {
         if (envstr.size()) cdo::FileSuffix = envstr;
       })
       ->describe_argument("suffix")
       ->add_help("Default filename suffix.");
 
   CLIOptions::envvar("CDO_DISABLE_FILE_SUFFIX")
-      ->add_effect([&](const std::string &envstr) {
+      ->add_effect([&](std::string const &envstr) {
         if (parameter_to_bool(envstr)) cdo::FileSuffix = "NULL";
       })
       ->describe_argument("true|false")
       ->add_help("'true' disables file suffix.");
 
   CLIOptions::envvar("CDO_VERSION_INFO")
-      ->add_effect([&](const std::string &envstr) { Options::VersionInfo = parameter_to_bool(envstr); })
+      ->add_effect([&](std::string const &envstr) { Options::VersionInfo = parameter_to_bool(envstr); })
       ->describe_argument("true|false")
       ->add_default("true")
       ->add_help("'false' disables the global NetCDF attribute CDO [default: true].");
@@ -239,7 +239,7 @@ extern "C" void H5dont_atexit(void);
 #endif
 
 static void
-print_operator_attributes(const std::string &argument)
+print_operator_attributes(std::string const &argument)
 {
   ModListOptions local_modListOpt;
   local_modListOpt.parse_request(argument);
@@ -277,7 +277,7 @@ setup_cli_options()
       ->describe_argument("arbitrary|filesOnly|onlyFirst|noOutput|obase")
       ->aborts_program(true)
       ->set_category("Info")
-      ->add_effect([&](const std::string &argument) { print_operator_attributes(argument); })
+      ->add_effect([&](std::string const &argument) { print_operator_attributes(argument); })
       ->add_help("Lists all operators with choosen features or the attributes of given operator(s)",
                  "operator name or a combination of [arbitrary,filesOnly,onlyFirst,noOutput,obase].");
 
@@ -291,7 +291,7 @@ setup_cli_options()
       ->aborts_program(true)
       ->describe_argument("module name")
       ->set_category("Info")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto names = Factory::get_module_operator_names(argument);
         if (names.empty())
           {
@@ -301,7 +301,7 @@ setup_cli_options()
         else
           {
             std::string info_string = "\n" + argument + ":\n";
-            for (const auto &name : names) { info_string += std::string(4, ' ') + name + "\n"; }
+            for (auto const &name : names) { info_string += std::string(4, ' ') + name + "\n"; }
             std::cerr << info_string + "\n";
           }
       })
@@ -313,12 +313,12 @@ setup_cli_options()
       ->add_help("Prints all operators which produce no output.");
   CLIOptions::option("color", "C")
       ->describe_argument("auto|no|all")
-      ->add_effect([&](const std::string &argument) { cdo::evaluate_color_options(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::evaluate_color_options(argument); })
       ->set_category("Output")
       ->add_help("Set behaviour of colorized output messages.");
   CLIOptions::option("help", "h")
       ->describe_argument("operator")
-      ->add_effect([&](const std::string &operator_name) { cdo_print_help(operator_name); })
+      ->add_effect([&](std::string const &operator_name) { cdo_print_help(operator_name); })
       ->on_empty_argument([]() { cdo_usage(stdout); })
       ->aborts_program(true)
       ->set_category("Help")
diff --git a/src/cdo_cdi_wrapper.cc b/src/cdo_cdi_wrapper.cc
index 8702c59b9..9fac42461 100644
--- a/src/cdo_cdi_wrapper.cc
+++ b/src/cdo_cdi_wrapper.cc
@@ -64,7 +64,7 @@ datatype_to_cstr(int datatype)
 }
 
 int
-str_to_datatype(const std::string &datatypeStr)
+str_to_datatype(std::string const &datatypeStr)
 {
   if (datatypeStr.size() > 1)
     {
@@ -161,7 +161,7 @@ namespace cdo
 {
 
 int
-inq_att_int(int cdiID, int varID, const std::string &attname)
+inq_att_int(int cdiID, int varID, std::string const &attname)
 {
   int attint = -1;
   cdiInqAttInt(cdiID, varID, attname.c_str(), 1, &attint);
@@ -169,7 +169,7 @@ inq_att_int(int cdiID, int varID, const std::string &attname)
 }
 
 std::string
-inq_att_string(int cdiID, int varID, const std::string &attname)
+inq_att_string(int cdiID, int varID, std::string const &attname)
 {
   int attlen = cdiInqAttLen(cdiID, varID, attname.c_str());
   std::vector<char> atttxt(1, 0);
diff --git a/src/cdo_cdi_wrapper.h b/src/cdo_cdi_wrapper.h
index d980ab181..fd056f8ad 100644
--- a/src/cdo_cdi_wrapper.h
+++ b/src/cdo_cdi_wrapper.h
@@ -14,7 +14,7 @@ const char *filetype_to_cstr(int filetype);
 // convert a CDI datatype to cstring
 const char *datatype_to_cstr(int datatype);
 
-int str_to_datatype(const std::string &datatypeStr);
+int str_to_datatype(std::string const &datatypeStr);
 
 const char *get_steptype_name(int tsteptype);
 
@@ -35,8 +35,8 @@ size_t cdo_vlist_gridsizemax(int vlistID);
 namespace cdo
 {
 
-int inq_att_int(int cdiID, int varID, const std::string &attname);
-std::string inq_att_string(int cdiID, int varID, const std::string &attname);
+int inq_att_int(int cdiID, int varID, std::string const &attname);
+std::string inq_att_string(int cdiID, int varID, std::string const &attname);
 std::string inq_key_string(int cdiID, int varID, int key);
 
 std::string inq_var_name(int vlistID, int varID);
diff --git a/src/cdo_data.cc b/src/cdo_data.cc
index 9364ac05b..40655632a 100644
--- a/src/cdo_data.cc
+++ b/src/cdo_data.cc
@@ -57,7 +57,7 @@ fill_random(Varray<float> &varray)
 }
 
 void
-fill_sincos(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals)
+fill_sincos(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals)
 {
   auto len = varray.size();
 #ifdef HAVE_OPENMP4
@@ -67,7 +67,7 @@ fill_sincos(Varray<float> &varray, const Varray<double> &xvals, const Varray<dou
 }
 
 void
-fill_coshill(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals)
+fill_coshill(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals)
 {
   auto len = varray.size();
 #ifdef HAVE_OPENMP4
@@ -77,7 +77,7 @@ fill_coshill(Varray<float> &varray, const Varray<double> &xvals, const Varray<do
 }
 
 void
-fill_testfield(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals)
+fill_testfield(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals)
 {
   auto len = varray.size();
 #ifdef HAVE_OPENMP4
diff --git a/src/cdo_data.h b/src/cdo_data.h
index 278d113e3..608277af2 100644
--- a/src/cdo_data.h
+++ b/src/cdo_data.h
@@ -15,9 +15,9 @@ extern const PackedData maskData;
 Varray<float> unpack_data(const PackedData &packedData);
 
 void fill_random(Varray<float> &varray);
-void fill_sincos(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals);
-void fill_coshill(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals);
-void fill_testfield(Varray<float> &varray, const Varray<double> &xvals, const Varray<double> &yvals);
+void fill_sincos(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals);
+void fill_coshill(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals);
+void fill_testfield(Varray<float> &varray, Varray<double> const &xvals, Varray<double> const &yvals);
 
 double std_atm_temperatur(double height);
 double std_atm_pressure(double height);
diff --git a/src/cdo_def_options.cc b/src/cdo_def_options.cc
index 00b992d08..5884f029c 100644
--- a/src/cdo_def_options.cc
+++ b/src/cdo_def_options.cc
@@ -65,7 +65,7 @@ setup_options()
         print_debug_options();
         exit(EXIT_SUCCESS);
       })
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto tokens = split_string(argument, ",");
         if (tokens.empty())
           {
@@ -86,25 +86,25 @@ setup_options()
 
   CLIOptions::option("worker")
       ->describe_argument("num")
-      ->add_effect([&](const std::string &argument) { Options::numStreamWorker = parameter_to_int(argument); })
+      ->add_effect([&](std::string const &argument) { Options::numStreamWorker = parameter_to_int(argument); })
       ->set_category("Multi Threading")
       ->add_help("Number of worker to decode/decompress GRIB records.");
 
   CLIOptions::option("precision")
       ->describe_argument("float_digits[,double_digits]")
-      ->add_effect([&](const std::string &argument) { cdo::set_digits(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_digits(argument); })
       ->set_category("Numeric")
       ->add_help("Precision to use in displaying floating-point data (default: 7,15).");
 
   CLIOptions::option("percentile")
       ->describe_argument("method")
       ->set_category("Numeric")
-      ->add_effect([&](const std::string &argument) { percentile_set_method(argument); })
+      ->add_effect([&](std::string const &argument) { percentile_set_method(argument); })
       ->add_help("Methods: nrank, nist, rtype8, <NumPy method (linear|lower|higher|nearest|...)>");
 
   CLIOptions::option("netcdf_hdr_pad")
       ->describe_argument("nbr")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         int netcdf_hdr_pad = parameter_to_bytes(argument);
         if (netcdf_hdr_pad >= 0) cdo::netcdf_hdr_pad = netcdf_hdr_pad;
       })
@@ -112,12 +112,12 @@ setup_options()
 
   CLIOptions::option("use_fftw")
       ->describe_argument("false|true")
-      ->add_effect([&](const std::string &argument) { Options::Use_FFTW = (int) parameter_to_bool(argument); })
+      ->add_effect([&](std::string const &argument) { Options::Use_FFTW = (int) parameter_to_bool(argument); })
       ->add_help("Sets fftw usage.");
 
   CLIOptions::option("config")
       ->describe_argument("all|all-json|<specific_feature_name>")
-      ->add_effect([&](const std::string &argument) { cdo::features::print_config(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::features::print_config(argument); })
       ->on_empty_argument([&]() { cdo::features::print_argument_options(); })
       ->aborts_program(true)
       ->set_category("Info")
@@ -127,13 +127,13 @@ setup_options()
       ->set_internal(true)
       ->describe_argument("<kdtree|nanoflann|spherepart|full>")
       ->set_category("Search Methods")
-      ->add_effect([&](const std::string &argument) { set_pointsearch_method(argument); })
+      ->add_effect([&](std::string const &argument) { set_pointsearch_method(argument); })
       ->add_help("Sets the point search method.");
 
   CLIOptions::option("gridsearchradius")
       ->describe_argument("degrees[0..180]")
       ->set_category("Search Methods")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto fval = radius_str_to_deg(argument);
         if (fval < 0 || fval > 180) cdo_abort("%s=%g out of bounds (0-180 deg)!", "gridsearchradius", fval);
         cdo_set_search_radius(fval);
@@ -142,7 +142,7 @@ setup_options()
 
   CLIOptions::option("remap_weights")
       ->describe_argument("false|true")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto intarg = parameter_to_bool(argument);
         if (intarg != 0 && intarg != 1) cdo_abort("Unsupported value for option --remap_weights %d [false|true]", intarg);
         Options::REMAP_genweights = intarg;
@@ -156,7 +156,7 @@ setup_options()
   CLIOptions::option("enableexcept")
       ->describe_argument("except")
       ->set_category("Numeric")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto except = cdo::evaluate_except_options(argument);
         if (except < 0) cdo_abort("option --%s: unsupported argument: %s", "enableexcept", argument);
         cdo::set_feenableexcept(except);
@@ -166,7 +166,7 @@ setup_options()
 
   CLIOptions::option("timestat_date")
       ->describe_argument("srcdate")
-      ->add_effect([&](const std::string &argument) { set_timestat_date(argument); })
+      ->add_effect([&](std::string const &argument) { set_timestat_date(argument); })
       ->add_help("Target timestamp (temporal statistics): ", "first, middle, midhigh or last source timestep.");
 
   CLIOptions::option("ignore_time_bounds")
@@ -216,7 +216,7 @@ setup_options()
 
   CLIOptions::option("format", "f")
       ->describe_argument("grb1|grb2|nc1|nc2|nc4|nc4c|nc5|nczarr|srv|ext|ieg")
-      ->add_effect([&](const std::string &argument) { cdo::set_default_filetype(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_default_filetype(argument); })
       ->add_help("Format of the output file.");
 
   CLIOptions::option("history")
@@ -257,14 +257,14 @@ setup_options()
   CLIOptions::option("lazy_grid_load")
       ->set_internal(true)
       ->describe_argument("false|true")
-      ->add_effect([&](const std::string &argument) { Options::lazyGridLoad = parameter_to_bool(argument); })
+      ->add_effect([&](std::string const &argument) { Options::lazyGridLoad = parameter_to_bool(argument); })
       ->add_help("Enable/disable lazy grid load");
 
   // clang-format off
   CLIOptions::option("default_datatype", "b")
       ->describe_argument("nbits")
       ->set_category("Numeric")
-      ->add_effect([&](const std::string &argument) { cdo::set_default_datatype(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_default_datatype(argument); })
       ->add_help("Set the number of bits for the output precision",
                  "    I8|I16|I32|F32|F64     for nc1,nc2,nc4,nc4c,nc5,nczarr;",
                  "    U8|U16|U32             for nc4,nc4c,nc5;",
@@ -278,25 +278,25 @@ setup_options()
 
   CLIOptions::option("grid", "g")
       ->describe_argument("grid")
-      ->add_effect([&](const std::string &argument) { cdo_set_grids(argument); })
+      ->add_effect([&](std::string const &argument) { cdo_set_grids(argument); })
       ->add_help("Set default grid name or file. Available grids: ",
                  "global_<DXY>, zonal_<DY>, r<NX>x<NY>, lon=<LON>/lat=<LAT>, F<XXX>, gme<NI>, hpz<ZOOM>");
 
   CLIOptions::option("institution", "i")
       ->describe_argument("institute_name")
-      ->add_effect([&](const std::string &argument) { define_institution(argument); })
+      ->add_effect([&](std::string const &argument) { define_institution(argument); })
       ->add_help("Sets institution name.");
 
   CLIOptions::option("chunktype", "k")
       ->describe_argument("auto|grid|lines")
       ->set_category("Format Specific")
-      ->add_effect([&](const std::string &argument) { cdo::set_chunktype(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_chunktype(argument); })
       ->add_help("NetCDF4 chunk type (x/y dimension).");
 
   CLIOptions::option("chunksize")
       ->describe_argument("size")
       ->set_category("Format Specific")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         int chunkSize = parameter_to_bytes(argument);
         if (chunkSize >= 0) Options::cdoChunkSize = chunkSize;
       })
@@ -305,7 +305,7 @@ setup_options()
   CLIOptions::option("chunkspec")
       ->describe_argument("spec")
       ->set_category("Format Specific")
-      ->add_effect([&](const std::string &argument) { set_chunkspec_parameter(argument); })
+      ->add_effect([&](std::string const &argument) { set_chunkspec_parameter(argument); })
       ->add_help("NetCDF4 specify chunking for dimensions (x/y/z/t).");
 
   CLIOptions::option("copy_chunkspec")
@@ -322,12 +322,12 @@ setup_options()
 
   CLIOptions::option("zaxis", "l")
       ->describe_argument("zaxis")
-      ->add_effect([&](const std::string &argument) { cdo_set_zaxes(argument); })
+      ->add_effect([&](std::string const &argument) { cdo_set_zaxes(argument); })
       ->add_help("Set default zaxis name or file.");
 
   CLIOptions::option("set_missval", "m")
       ->describe_argument("missval")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto [success, mv] = string_to_floating<double>(argument);
         if (success)
           {
@@ -345,12 +345,12 @@ setup_options()
   CLIOptions::option("varnames", "n")
       ->set_internal(true)
       ->describe_argument("<varname| file>")
-      ->add_effect([&](const std::string &argument) { Options::cdoVarnames = split_string(argument, ","); })
+      ->add_effect([&](std::string const &argument) { Options::cdoVarnames = split_string(argument, ","); })
       ->add_help("Set default varnames or file.");
 
   CLIOptions::option("num_threads", "P")
       ->describe_argument("nthreads")
-      ->add_effect([&](const std::string &argument) { Threading::ompNumUserRequestedThreads = parameter_to_int(argument); })
+      ->add_effect([&](std::string const &argument) { Threading::ompNumUserRequestedThreads = parameter_to_int(argument); })
       ->set_category("Multi Threading")
       ->add_help("Set number of OpenMP threads.");
 
@@ -371,7 +371,7 @@ setup_options()
   CLIOptions::option("seed")
       ->describe_argument("seed")
       ->set_category("Numeric")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         int intarg = parameter_to_int(argument);
         if (intarg < 0) cdo_abort("Unsupported value for option --seed %d [>=0]", intarg);
         Options::Random_Seed = intarg;
@@ -412,7 +412,7 @@ setup_options()
   CLIOptions::option("table", "t")
       ->describe_argument("codetab")
       ->set_category("CGRIBEX")
-      ->add_effect([&](const std::string &argument) { CdoDefault::TableID = cdo::define_table(argument); })
+      ->add_effect([&](std::string const &argument) { CdoDefault::TableID = cdo::define_table(argument); })
       ->add_help("Set GRIB1 default parameter code table name or file (cgribex only).",
                  cdo::predefined_tables(CLIOptions::padding));
 
@@ -456,21 +456,21 @@ setup_options()
 
   CLIOptions::option("filter", "F")
       ->describe_argument("filterspec")
-      ->add_effect([&](const std::string &argument) { cdo::set_filterspec(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_filterspec(argument); })
       ->set_category("Compression")
       ->add_help("NetCDF4 filter specification");
 
   CLIOptions::option("compression_type", "z")
       ->describe_argument("aec|jpeg|zip[_1-9]|zstd[1-19]")
       ->set_category("Compression")
-      ->add_effect([&](const std::string &argument) { cdo::set_compression_type(argument); })
+      ->add_effect([&](std::string const &argument) { cdo::set_compression_type(argument); })
       ->add_help("aec         AEC compression of GRIB2 records", "jpeg        JPEG compression of GRIB2 records",
                  "zip[_1-9]   Deflate compression of NetCDF4 variables", "zstd[_1-19] Zstandard compression of NetCDF4 variables");
 
   CLIOptions::option("nsb")
       ->set_internal(true)
       ->describe_argument("1-23")
-      ->add_effect([&](const std::string &argument) { Options::nsb = parameter_to_int(argument); })
+      ->add_effect([&](std::string const &argument) { Options::nsb = parameter_to_int(argument); })
       ->set_category("Numeric")
       ->add_help("Number of significant bits used for bit-rounding.");
 
@@ -485,7 +485,7 @@ setup_options()
   CLIOptions::option("Dkext")
       ->describe_argument("debLev")
       ->set_category("Hirlam Extension")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto extDebugVal = parameter_to_int(argument);
         if (extDebugVal > 0)
           {
@@ -499,7 +499,7 @@ setup_options()
   CLIOptions::option("outputGribDataScanningMode")
       ->describe_argument("mode")
       ->set_category("Hirlam Extension")
-      ->add_effect([&](const std::string &argument) {
+      ->add_effect([&](std::string const &argument) {
         auto scanningModeValue = parameter_to_int(argument);
         if (cdoDebugExt) printf("scanningModeValue=%d\n", scanningModeValue);
 
diff --git a/src/cdo_exception.h b/src/cdo_exception.h
index 6b858720c..af1058a4b 100644
--- a/src/cdo_exception.h
+++ b/src/cdo_exception.h
@@ -6,7 +6,7 @@
 
 struct CdoException : std::logic_error
 {
-  CdoException(const std::string &p_msg, const std::string &p_file, const std::string &p_line)
+  CdoException(std::string const &p_msg, std::string const &p_file, std::string const &p_line)
       : std::logic_error(p_msg), file(p_file), line(p_line)
   {
   }
diff --git a/src/cdo_features.cc b/src/cdo_features.cc
index d0885fa0b..e96e43c4e 100644
--- a/src/cdo_features.cc
+++ b/src/cdo_features.cc
@@ -370,12 +370,12 @@ print_argument_options()
 {
   fprintf(stdout, "Available config option:\n");
   fprintf(stdout, "\n");
-  for (const auto &entry : configMap)
+  for (auto const &entry : configMap)
     fprintf(stdout, "  %-12s  whether %s is enabled\n", entry.first.c_str(), entry.second.first.c_str());
 }
 
 int
-print_config(const std::string &option)
+print_config(std::string const &option)
 {
   int status = EXIT_SUCCESS;
 
@@ -383,7 +383,7 @@ print_config(const std::string &option)
     {
       std::cout << "{";
       int i = 0;
-      for (const auto &entry : configMap)
+      for (auto const &entry : configMap)
         {
           if (i++) fprintf(stdout, ",");
           std::cout << "\"" << entry.first << "\":\"" << (entry.second.second ? "yes" : "no") << "\"";
@@ -393,7 +393,7 @@ print_config(const std::string &option)
   else
     {
       auto foundOption = false;
-      for (const auto &entry : configMap)
+      for (auto const &entry : configMap)
         {
           if (entry.first == option)
             {
@@ -607,7 +607,7 @@ print_filetypes(FILE *fp)
 
   fprintf(fp, "CDI file types: ");
   set_text_color(fp, BRIGHT, GREEN);
-  for (const auto &[type, name] : fileTypes)
+  for (auto const &[type, name] : fileTypes)
     if (cdiHaveFiletype(type)) fprintf(fp, "%s ", name.c_str());
   reset_text_color(fp);
   fprintf(fp, "\n");
diff --git a/src/cdo_features.h b/src/cdo_features.h
index dd21f9633..dcc010c7b 100644
--- a/src/cdo_features.h
+++ b/src/cdo_features.h
@@ -10,7 +10,7 @@ namespace features
 
 void activate_hdf5_diag();
 
-int print_config(const std::string &option);
+int print_config(std::string const &option);
 void print_features();
 void print_libraries();
 void print_argument_options();
diff --git a/src/cdo_fftw3.cc b/src/cdo_fftw3.cc
index 9bdec59a8..858e2b0d7 100644
--- a/src/cdo_fftw3.cc
+++ b/src/cdo_fftw3.cc
@@ -11,7 +11,7 @@ static std::mutex fftwMutex;
 
 #ifdef HAVE_LIBFFTW3
 void
-fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2)
+fourier2grid(int gridID1, Varray<double> const &array1, Varray<double> &array2)
 {
   auto nlon = gridInqXsize(gridID1);
   auto nlat = gridInqYsize(gridID1);
@@ -65,7 +65,7 @@ fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2)
 }
 
 void
-grid2fourier(int gridID1, const Varray<double> &array1, int gridID2, Varray<double> &array2)
+grid2fourier(int gridID1, Varray<double> const &array1, int gridID2, Varray<double> &array2)
 {
   (void) gridID2;
   auto nlon = gridInqXsize(gridID1);
@@ -141,7 +141,7 @@ filter_fftw(int nts, const std::vector<int> &fmasc, fftw_complex *fft_out, fftw_
 
 #include "cdo_output.h"
 void
-fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2)
+fourier2grid(int gridID1, Varray<double> const &array1, Varray<double> &array2)
 {
   (void) gridID1;
   (void) array1;
@@ -150,7 +150,7 @@ fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2)
 }
 
 void
-grid2fourier(int gridID1, const Varray<double> &array1, int gridID2, Varray<double> &array2)
+grid2fourier(int gridID1, Varray<double> const &array1, int gridID2, Varray<double> &array2)
 {
   (void) gridID1;
   (void) gridID2;
diff --git a/src/cdo_fftw3.h b/src/cdo_fftw3.h
index 4e7a94fc5..c8ada24ba 100644
--- a/src/cdo_fftw3.h
+++ b/src/cdo_fftw3.h
@@ -7,9 +7,9 @@
 
 #include "varray.h"
 
-void fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2);
+void fourier2grid(int gridID1, Varray<double> const &array1, Varray<double> &array2);
 
-void grid2fourier(int gridID1, const Varray<double> &array1, int gridID2, Varray<double> &array2);
+void grid2fourier(int gridID1, Varray<double> const &array1, int gridID2, Varray<double> &array2);
 
 #ifdef HAVE_LIBFFTW3
 #include <fftw3.h>
diff --git a/src/cdo_fill.cc b/src/cdo_fill.cc
index c4eb232f2..2f2a5763f 100644
--- a/src/cdo_fill.cc
+++ b/src/cdo_fill.cc
@@ -14,7 +14,7 @@ cdo_fill_ts(int p_vlistID, Varray2D<double> &p_varData)
 {
   VarList varList(p_vlistID);
   p_varData.resize(varList.numVars());
-  for (const auto &var : varList.vars) { p_varData[var.ID].resize(var.nlevels * var.gridsize); }
+  for (auto const &var : varList.vars) { p_varData[var.ID].resize(var.nlevels * var.gridsize); }
 }
 
 void
@@ -23,7 +23,7 @@ cdo_fill_ts(int p_vlistID, Varray2D<double> &p_varData, Varray2D<size_t> &p_varN
   VarList varList(p_vlistID);
   p_varData.resize(varList.numVars());
   p_varNmiss.resize(varList.numVars());
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       p_varData[var.ID].resize(var.nlevels * var.gridsize);
       p_varNmiss[var.ID].resize(var.nlevels);
diff --git a/src/cdo_getopt.cc b/src/cdo_getopt.cc
index cbde901a0..81f435bca 100644
--- a/src/cdo_getopt.cc
+++ b/src/cdo_getopt.cc
@@ -55,7 +55,7 @@ get_width()
 }
 
 std::string
-CLIOptions::pad_size_terminal(char padWith, const std::string &sourround)
+CLIOptions::pad_size_terminal(char padWith, std::string const &sourround)
 {
   int terminal_width = get_width();
 
@@ -168,19 +168,19 @@ CLIOptions::get_env_vars()
 void
 CLIOptions::print_registry(const std::vector<std::shared_ptr<cdo_option_2>> &p_registry)
 {
-  for (const auto &it : p_registry)
+  for (auto const &it : p_registry)
     {
       if (it->argument.value.size() > 0) fprintf(stderr, "%s = %s\n", it->name.c_str(), it->argument.value.c_str());
     }
 }
 
 std::shared_ptr<cdo_option_2> &
-CLIOptions::envvar(const std::string &p_name)
+CLIOptions::envvar(std::string const &p_name)
 {
   if (envvarMap.find(p_name) == envvarMap.end())
     {
       envvarRegistry.push_back(std::make_shared<cdo_option_2>());
-      const auto &newEnvVar = envvarRegistry.back();
+      auto const &newEnvVar = envvarRegistry.back();
       envvarMap[p_name] = newEnvVar;
       newEnvVar->name = p_name;
     }
@@ -189,7 +189,7 @@ CLIOptions::envvar(const std::string &p_name)
 }
 
 std::shared_ptr<cdo_option_2> &
-CLIOptions::option(const std::string &p_name, const std::string &p_shortForm)
+CLIOptions::option(std::string const &p_name, std::string const &p_shortForm)
 {
   std::string name = "--" + p_name;
   std::string shortForm = p_shortForm;
@@ -217,7 +217,7 @@ std::string
 CLIOptions::print_envvar_help()
 {
   std::stringstream helpString;
-  for (const auto &it : envvarMap)
+  for (auto const &it : envvarMap)
     {
       if (!it.second->isInternal)
         {
@@ -227,14 +227,14 @@ CLIOptions::print_envvar_help()
           if (it.second->hasArgument) helpString << " <" + it.second->argument.description + "> ";
           int spaceLeft = padding - helpString.str().size() + len0;
           if (spaceLeft < 0) spaceLeft = 0;
-          for (const auto &line : it.second->description) { helpString << std::string(spaceLeft, ' ') + line + "\n"; }
+          for (auto const &line : it.second->description) { helpString << std::string(spaceLeft, ' ') + line + "\n"; }
         }
     }
   return helpString.str();
 }
 
 std::string
-CLIOptions::print_options_help(const std::string &p_category)
+CLIOptions::print_options_help(std::string const &p_category)
 {
   std::stringstream help;
   for (auto &iter : optionMap)
@@ -258,7 +258,7 @@ CLIOptions::print_options_help(const std::string &p_category)
               helpString += "\n";
               spaceLeft = padding;
             }
-          for (const auto &line : option->description)
+          for (auto const &line : option->description)
             {
               helpString += std::string(spaceLeft, ' ') + line + "\n";
               spaceLeft = padding;
@@ -273,7 +273,7 @@ CLIOptions::print_options_help(const std::string &p_category)
 #include <algorithm>
 
 cdo_option_2 *
-CLIOptions::option_from_envvar(const std::string &p_envvarName)
+CLIOptions::option_from_envvar(std::string const &p_envvarName)
 {
   if (envvarMap.find(p_envvarName) == envvarMap.end()) { cdo_abort("Error envvar %s does not exist", p_envvarName); }
   std::string ENVVAR_SUFFIX = "CDO_";
@@ -306,7 +306,7 @@ CLIOptions::option_from_envvar(const std::string &p_envvarName)
 void
 CLIOptions::print_available_options()
 {
-  for (const auto &iter : optionMap) { std::cerr << iter.first << std::endl; }
+  for (auto const &iter : optionMap) { std::cerr << iter.first << std::endl; }
   std::cerr << "_---------------------------------_" << std::endl;
   for (auto &iter : optionMap)
     {
diff --git a/src/cdo_getopt.h b/src/cdo_getopt.h
index ff921754b..3108cda6a 100644
--- a/src/cdo_getopt.h
+++ b/src/cdo_getopt.h
@@ -45,7 +45,7 @@ struct cdo_option_2
   std::string category = DEFAULT_CATEGORY;
 
   cdo_option_2 *
-  set_category(const std::string &p_category)
+  set_category(std::string const &p_category)
   {
     category = p_category;
     return this;
@@ -88,14 +88,14 @@ struct cdo_option_2
   }
 
   cdo_option_2 *
-  add_default(const std::string &p_default_value)
+  add_default(std::string const &p_default_value)
   {
     argument.default_value = p_default_value;
     return this;
   }
 
   cdo_option_2 *
-  describe_argument(const std::string &desc)
+  describe_argument(std::string const &desc)
   {
     hasArgument = true;
     argument.description = desc;
@@ -117,7 +117,7 @@ struct cdo_option_2
 
   template <typename... T>
   cdo_option_2 *
-  add_help(const std::string &arg, T... args)
+  add_help(std::string const &arg, T... args)
   {
     add_help(arg);
     add_help(args...);
@@ -144,7 +144,7 @@ struct cdo_option_2
   }
 
   cdo_option_2 *
-  add_env_var(const std::string &p_envVarName)
+  add_env_var(std::string const &p_envVarName)
   {
     linkedEnvironmentVariable = p_envVarName;
     return this;
@@ -186,7 +186,7 @@ public:
   {
     return envvarMap;
   }
-  static std::string pad_size_terminal(char padWith, const std::string &sourround = std::string());
+  static std::string pad_size_terminal(char padWith, std::string const &sourround = std::string());
   const static int EXIT_REQUESTED;
   const static int ABORT_REQUESTED;
   const static int padding;
@@ -196,12 +196,12 @@ public:
   static int
   parse(std::vector<std::string> p_argv);
   static void get_env_vars();
-  static std::shared_ptr<cdo_option_2> &option(const std::string &p_name, const std::string &p_short_form = std::string());
-  static std::shared_ptr<cdo_option_2> &envvar(const std::string &p_name);
-  static cdo_option_2 *option_from_envvar(const std::string &p_envvarName);
+  static std::shared_ptr<cdo_option_2> &option(std::string const &p_name, std::string const &p_short_form = std::string());
+  static std::shared_ptr<cdo_option_2> &envvar(std::string const &p_name);
+  static cdo_option_2 *option_from_envvar(std::string const &p_envvarName);
 
   static void print_available_options();
-  static std::string print_options_help(const std::string &p_category = DEFAULT_CATEGORY);
+  static std::string print_options_help(std::string const &p_category = DEFAULT_CATEGORY);
   static std::string print_envvar_help();
   static void print_registry(const std::vector<std::shared_ptr<cdo_option_2>> &p_registry);
 };
diff --git a/src/cdo_module.cc b/src/cdo_module.cc
index 0e47953d7..ace553af2 100644
--- a/src/cdo_module.cc
+++ b/src/cdo_module.cc
@@ -27,7 +27,7 @@ oper_t::oper_t(const char *_name) : name(_name), help(default_help) {}
 oper_t::oper_t(const char *_name, const CdoHelp &p_help) : name(_name), enter(nullptr), help(p_help) {}
 
 int
-CdoModule::get_id(const std::string &oper) const
+CdoModule::get_id(std::string const &oper) const
 {
   for (size_t i = 0; i < operators.size(); i++)
     {
@@ -84,7 +84,7 @@ CdoModule::get_pos_restriction() const
 }
 
 int
-CdoModule::is_alias(const std::string &subject) const
+CdoModule::is_alias(std::string const &subject) const
 {
   for (size_t i = 0; i < aliases.size(); i++)
     {
@@ -94,7 +94,7 @@ CdoModule::is_alias(const std::string &subject) const
 }
 
 std::vector<oper_t>::const_iterator
-CdoModule::find_operator(const std::string &p_operatorName) const
+CdoModule::find_operator(std::string const &p_operatorName) const
 {
   auto res
       = std::find_if(begin(operators), end(operators), [&p_operatorName](const oper_t &o) { return o.name == p_operatorName; });
@@ -102,7 +102,7 @@ CdoModule::find_operator(const std::string &p_operatorName) const
 }
 
 const CdoHelp &
-CdoModule::get_help(const std::string &p_operatorName) const
+CdoModule::get_help(std::string const &p_operatorName) const
 {
   auto oper_iter = find_operator(p_operatorName);
   if (oper_iter == operators.end()) cdo_abort("Help for %s in module %s not found", p_operatorName, name);
diff --git a/src/cdo_module.h b/src/cdo_module.h
index 2cf067b02..261a9b135 100644
--- a/src/cdo_module.h
+++ b/src/cdo_module.h
@@ -20,7 +20,7 @@
 
 struct Alias
 {
-  Alias(const std::string &_alias, const std::string &_original) : alias(_alias), original(_original) {}
+  Alias(std::string const &_alias, std::string const &_original) : alias(_alias), original(_original) {}
   std::string alias;
   std::string original;
 };
@@ -78,7 +78,7 @@ public:
 
   std::string toString() const;
 
-  int get_id(const std::string &oper) const;
+  int get_id(std::string const &oper) const;
   int get_stream_in_cnt() const;
   int get_stream_out_cnt() const;
   int get_number() const;
@@ -86,10 +86,10 @@ public:
   int get_pos_restriction() const;
 
   // returns the alias id or if not found1
-  int is_alias(const std::string &subject) const;
+  int is_alias(std::string const &subject) const;
 
-  std::vector<oper_t>::const_iterator find_operator(const std::string &p_operatorName) const;
-  const CdoHelp &get_help(const std::string &p_operatorName) const;
+  std::vector<oper_t>::const_iterator find_operator(std::string const &p_operatorName) const;
+  const CdoHelp &get_help(std::string const &p_operatorName) const;
 };
 
 #endif
diff --git a/src/cdo_node_attach_exception.h b/src/cdo_node_attach_exception.h
index 9d22c2350..e33a0bedd 100644
--- a/src/cdo_node_attach_exception.h
+++ b/src/cdo_node_attach_exception.h
@@ -10,11 +10,11 @@
 struct NodeAttachException : public CdoException
 {
   std::vector<std::string>::const_iterator iter;
-  NodeAttachException(std::shared_ptr<Node> p_node, const std::string &p_msg, const std::string &p_file = "?",
-                      const std::string &p_line = "?")
+  NodeAttachException(std::shared_ptr<Node> p_node, std::string const &p_msg, std::string const &p_file = "?",
+                      std::string const &p_line = "?")
       : CdoException(p_msg, p_file, p_line), iter(p_node->iter){};
-  NodeAttachException(std::vector<std::string>::const_iterator p_iter, const std::string &p_msg, const std::string &p_file = "?",
-                      const std::string &p_line = "?")
+  NodeAttachException(std::vector<std::string>::const_iterator p_iter, std::string const &p_msg, std::string const &p_file = "?",
+                      std::string const &p_line = "?")
       : CdoException(p_msg, p_file, p_line), iter(p_iter){};
 };
 
diff --git a/src/cdo_output.cc b/src/cdo_output.cc
index 5c4e70ed0..dba4424ae 100644
--- a/src/cdo_output.cc
+++ b/src/cdo_output.cc
@@ -72,7 +72,7 @@ namespace cdo
 void
 parse_debug_arguments(const std::vector<std::string> &tokens, unsigned &cdoDebugLevel, unsigned &cdiDebugLevel)
 {
-  for (const auto &t : tokens)
+  for (auto const &t : tokens)
     {
       if (t.substr(0, 4).compare("ext=") == 0)
         {
@@ -249,7 +249,7 @@ checkForMissingLib(int filetype)
 }
 
 void
-cdi_open_error(int cdiErrno, const std::string &format, const char *path)
+cdi_open_error(int cdiErrno, std::string const &format, const char *path)
 {
   std::string context = cdo::getContext();
   MpMO::PrintCerr(Red("%s: ") + format + "\n" + std::string(context.size() + 2, ' ') + "%s", context, path,
@@ -267,7 +267,7 @@ cdi_open_error(int cdiErrno, const std::string &format, const char *path)
 }
 
 void
-query_user_exit(const std::string &argument)
+query_user_exit(std::string const &argument)
 {
   // modified code from NCO
 #define USR_RPL_MAX_LNG 10 /* Maximum length for user reply */
@@ -322,6 +322,6 @@ std::string
 cdo_argv_to_string(const std::vector<std::string> &argv)
 {
   std::string s_argv = "";
-  for (const auto &x : argv) { s_argv += x + " "; }
+  for (auto const &x : argv) { s_argv += x + " "; }
   return s_argv;
 }
diff --git a/src/cdo_output.h b/src/cdo_output.h
index a608a28f4..494ac2386 100644
--- a/src/cdo_output.h
+++ b/src/cdo_output.h
@@ -27,7 +27,7 @@ extern unsigned ARGUMENTS;
 extern std::string debug_option_string;
 
 void print_debug_options();
-void query_user_exit(const std::string &argument);
+void query_user_exit(std::string const &argument);
 
 namespace cdo
 {
@@ -41,12 +41,12 @@ void set_exit_function(void (*func)(std::string msg));
 void set_context_function(const char *(*func)(void) );
 }  // namespace cdo
 
-void cdi_open_error(int cdiErrno, const std::string &format, const char *path);
+void cdi_open_error(int cdiErrno, std::string const &format, const char *path);
 std::string cdo_argv_to_string(const std::vector<std::string> &argv);
 
 template <typename... Args>
 void
-cdo_abort(const std::string &format, Args const &...args)
+cdo_abort(std::string const &format, Args const &...args)
 {
   fflush(stdout);
   std::string errmsg = MpMO::PrintCerr(Red("\n%s (Abort): ") + format, cdo::getContext(), args...);
@@ -55,7 +55,7 @@ cdo_abort(const std::string &format, Args const &...args)
 
 template <typename... Args>
 void
-cdo_error(const std::string &format, Args const &...args) noexcept
+cdo_error(std::string const &format, Args const &...args) noexcept
 {
   fflush(stdout);
   MpMO::PrintCerr(Red("\n%s (Abort): ") + format, cdo::getContext(), args...);
@@ -64,7 +64,7 @@ cdo_error(const std::string &format, Args const &...args) noexcept
 
 template <typename... Args>
 void
-cdo_warning(const std::string &format, Args const &...args) noexcept
+cdo_warning(std::string const &format, Args const &...args) noexcept
 {
   if (MpMO::warningsEnabled)
     {
@@ -79,14 +79,14 @@ cdo_warning(const std::string &format, Args const &...args) noexcept
 
 template <typename... Args>
 void
-cdo_verbose(const std::string &format, Args const &...args) noexcept
+cdo_verbose(std::string const &format, Args const &...args) noexcept
 {
   MpMO::PrintCerr(Green("%s: ") + format, cdo::getContext(), args...);
 }
 
 template <typename... Args>
 void
-cdo_print(const std::string &format, Args const &...args) noexcept
+cdo_print(std::string const &format, Args const &...args) noexcept
 {
   if (!MpMO::silentMode) MpMO::Print(Green("%s: ") + format, cdo::getContext(), args...);
 }
diff --git a/src/cdo_query.cc b/src/cdo_query.cc
index f366284e2..b1425e8ca 100644
--- a/src/cdo_query.cc
+++ b/src/cdo_query.cc
@@ -5,7 +5,7 @@
 #include "util_string.h"
 
 static std::vector<int>
-decode_int_parameter(const std::string &param)
+decode_int_parameter(std::string const &param)
 {
   const std::string separator("/to/");
 
@@ -26,7 +26,7 @@ decode_int_parameter(const std::string &param)
 }
 
 static std::vector<size_t>
-decode_cell_parameter(const std::string &param)
+decode_cell_parameter(std::string const &param)
 {
   const std::string separator("/to/");
 
@@ -51,9 +51,9 @@ set_query_parameter(const KVList &kvlist, CdiQuery *query)
 {
   std::string path;
 
-  for (const auto &kv : kvlist)
+  for (auto const &kv : kvlist)
     {
-      const auto &key = kv.key;
+      auto const &key = kv.key;
       int numValues = kv.nvalues;
       if (numValues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
 
@@ -98,7 +98,7 @@ set_query_parameter(const KVList &kvlist, CdiQuery *query)
 }
 
 std::string
-set_query_parameter(const std::string &params, CdiQuery *query)
+set_query_parameter(std::string const &params, CdiQuery *query)
 {
   auto paramsArgv = split_string(params, ",");
 
diff --git a/src/cdo_query.h b/src/cdo_query.h
index 152cccd39..1fb9de5f2 100644
--- a/src/cdo_query.h
+++ b/src/cdo_query.h
@@ -8,6 +8,6 @@
 #include "pmlist.h"
 
 std::string set_query_parameter(const KVList &kvlist, CdiQuery *query);
-std::string set_query_parameter(const std::string &params, CdiQuery *query);
+std::string set_query_parameter(std::string const &params, CdiQuery *query);
 
 #endif
diff --git a/src/cdo_read.cc b/src/cdo_read.cc
index d29f58b8a..7385c638b 100644
--- a/src/cdo_read.cc
+++ b/src/cdo_read.cc
@@ -15,12 +15,12 @@
 #include "varray.h"
 
 int
-cdo_read_timestepmask(const std::string &maskfile, std::vector<bool> &imask)
+cdo_read_timestepmask(std::string const &maskfile, std::vector<bool> &imask)
 {
   auto streamID = stream_open_read_locked(maskfile.c_str());
   auto vlistID = streamInqVlist(streamID);
   VarList varList(vlistID);
-  const auto &var0 = varList.vars[0];
+  auto const &var0 = varList.vars[0];
 
   if (varList.numVars() > 1) cdo_abort("timestepmask %s contains more than one variable!", maskfile);
   if (var0.nlevels > 1) cdo_abort("timestepmask %s has more than one level!", maskfile);
@@ -72,7 +72,7 @@ read_one_field(const char *text, const char *filename, Varray<double> &array)
   auto streamID = stream_open_read_locked(filename);
   auto vlistID = streamInqVlist(streamID);
   VarList varList(vlistID);
-  const auto &var0 = varList.vars[0];
+  auto const &var0 = varList.vars[0];
 
   if (varList.numVars() > 1) cdo_abort("%s file %s contains more than one variable!", text, filename);
   if (var0.nlevels > 1) cdo_abort("%s file %s has more than one level!", text, filename);
diff --git a/src/cdo_settings.cc b/src/cdo_settings.cc
index 49775bd6b..847113608 100644
--- a/src/cdo_settings.cc
+++ b/src/cdo_settings.cc
@@ -46,7 +46,7 @@ namespace cdo
 int netcdf_hdr_pad = 0;
 
 int
-evaluate_except_options(const std::string &arg)
+evaluate_except_options(std::string const &arg)
 {
   int except = -1;
   // clang-format off
@@ -144,7 +144,7 @@ signal_handler(int signo)
 }
 
 void
-set_digits(const std::string &arg)
+set_digits(std::string const &arg)
 {
   const char *carg = arg.c_str();
 
@@ -208,7 +208,7 @@ set_default_filetype(std::string filetypeString)
 #define IsBigendian() (u_byteorder.c[sizeof(long) - 1])
 
 void
-set_default_datatype(const std::string &datatypeString)
+set_default_datatype(std::string const &datatypeString)
 {
   static const union
   {
@@ -309,7 +309,7 @@ set_default_datatype(const std::string &datatypeString)
 }
 
 void
-set_filterspec(const std::string &arg)
+set_filterspec(std::string const &arg)
 {
   if (arg.size() > 0)
     {
@@ -321,7 +321,7 @@ set_filterspec(const std::string &arg)
 }
 
 void
-set_compression_type(const std::string &arg)
+set_compression_type(std::string const &arg)
 {
   size_t len = arg.size();
 
@@ -356,7 +356,7 @@ set_compression_type(const std::string &arg)
 }
 
 void
-set_chunktype(const std::string &arg)
+set_chunktype(std::string const &arg)
 {
   // clang-format off
   if      ("auto"  == arg) Options::cdoChunkType = CDI_CHUNK_AUTO;
@@ -367,7 +367,7 @@ set_chunktype(const std::string &arg)
 }
 
 void
-evaluate_color_options(const std::string &arg)
+evaluate_color_options(std::string const &arg)
 {
   // clang-format off
   if      ("all"  == arg) mpmo_color_set(All);
diff --git a/src/cdo_settings.h b/src/cdo_settings.h
index f89e8d147..70684800c 100644
--- a/src/cdo_settings.h
+++ b/src/cdo_settings.h
@@ -8,7 +8,7 @@ namespace cdo
 
 extern int netcdf_hdr_pad;
 
-int evaluate_except_options(const std::string &arg);
+int evaluate_except_options(std::string const &arg);
 int set_feenableexcept(int excepts);
 
 void set_cdi_options();
@@ -16,14 +16,14 @@ void set_external_proj_func();
 
 void signal_handler(int signo);
 
-void set_digits(const std::string &arg);
+void set_digits(std::string const &arg);
 void set_default_filetype(std::string filetypeString);
-void set_default_datatype(const std::string &datatypeString);
-void set_filterspec(const std::string &arg);
-void set_compression_type(const std::string &arg);
-void set_chunktype(const std::string &arg);
+void set_default_datatype(std::string const &datatypeString);
+void set_filterspec(std::string const &arg);
+void set_compression_type(std::string const &arg);
+void set_chunktype(std::string const &arg);
 
-void evaluate_color_options(const std::string &arg);
+void evaluate_color_options(std::string const &arg);
 
 void setup_openMP(int ompNumUserRequestedThreads);
 
diff --git a/src/cdo_stepstat.h b/src/cdo_stepstat.h
index e73e0282c..93eb5fd11 100644
--- a/src/cdo_stepstat.h
+++ b/src/cdo_stepstat.h
@@ -37,7 +37,7 @@ public:
   }
 
   void
-  add_field_kernel(const Field &field, Field &sampData, Field &varData1, Field &varData2, int numSets)
+  add_field_kernel(Field const &field, Field &sampData, Field &varData1, Field &varData2, int numSets)
   {
     if (numSets == 0)
       {
@@ -75,7 +75,7 @@ public:
   }
 
   void
-  process_kernel(const Field &sampData, Field &varData1, const Field &varData2, int numSets)
+  process_kernel(Field const &sampData, Field &varData1, Field const &varData2, int numSets)
   {
     auto field2_stdvar_func = lstd ? field2_std : field2_var;
     auto fieldc_stdvar_func = lstd ? fieldc_std : fieldc_var;
@@ -164,7 +164,7 @@ public:
   }
 
   void
-  add_field(const Field &field, int levelID, int numSets)
+  add_field(Field const &field, int levelID, int numSets)
   {
     auto &sampData = sampsData[levelID];
     auto &varData1 = varsData1[levelID];
@@ -197,7 +197,7 @@ private:
   FieldVector2D varsData2;
 
   static void
-  set_missval(Field &field, const Field &sampData, int numSets, double vfraction)
+  set_missval(Field &field, Field const &sampData, int numSets, double vfraction)
   {
     auto fieldsize = field.size;
     auto missval = field.missval;
@@ -234,8 +234,8 @@ public:
   Varray<double> &
   samp(int varID, int levelID, int numSets)
   {
-    const auto &sampData = sampsData[varID][levelID];
-    const auto &varData1 = varsData1[varID][levelID];
+    auto const &sampData = sampsData[varID][levelID];
+    auto const &varData1 = varsData1[varID][levelID];
 
     vsamp.resize(varData1.size);
     if (!sampData.empty())
@@ -247,7 +247,7 @@ public:
   }
 
   void
-  add_field(const Field &field, int varID, int levelID, int numSets)
+  add_field(Field const &field, int varID, int levelID, int numSets)
   {
     auto &sampData = sampsData[varID][levelID];
     auto &varData1 = varsData1[varID][levelID];
@@ -259,7 +259,7 @@ public:
   void
   set_missval(int varID, int levelID, int numSets, double vfraction)
   {
-    const auto &sampData = sampsData[varID][levelID];
+    auto const &sampData = sampsData[varID][levelID];
     if (!sampData.empty()) set_missval(varsData2[varID][levelID], sampData, numSets, vfraction);
   }
 
@@ -334,7 +334,7 @@ public:
   }
 
   void
-  add_field(const Field &field, int dim0, int varID, int levelID, int numSets)
+  add_field(Field const &field, int dim0, int varID, int levelID, int numSets)
   {
     auto &sampData = sampsData[dim0][varID][levelID];
     auto &varData1 = varsData1[dim0][varID][levelID];
@@ -354,7 +354,7 @@ const auto write_out_stream = [](CdoStreamID streamID2, const std::vector<FieldI
                                  cdo::StepStat2D &stepStat, int otsID) noexcept {
   cdo_def_timestep(streamID2, otsID);
 
-  for (const auto &fieldInfo : fieldInfoList)
+  for (auto const &fieldInfo : fieldInfoList)
     {
       auto [varID, levelID] = fieldInfo.get();
       if (otsID && varList1.vars[varID].isConstant) continue;
@@ -368,7 +368,7 @@ const auto write_diag_stream = [](CdoStreamID streamID3, const std::vector<Field
                                   cdo::StepStat2D &stepStat, int otsID, int numSets) noexcept {
   cdo_def_timestep(streamID3, otsID);
 
-  for (const auto &fieldInfo : fieldInfoList)
+  for (auto const &fieldInfo : fieldInfoList)
     {
       auto [varID, levelID] = fieldInfo.get();
       if (otsID && varList1.vars[varID].isConstant) continue;
@@ -382,7 +382,7 @@ const auto write_diag_stream = [](CdoStreamID streamID3, const std::vector<Field
 
 const auto fields_process
     = [](const std::vector<FieldInfo> &fieldInfoList, const VarList &varList1, cdo::StepStat2D &stepStat, int numSets) noexcept {
-        for (const auto &fieldInfo : fieldInfoList)
+        for (auto const &fieldInfo : fieldInfoList)
           {
             auto [varID, levelID] = fieldInfo.get();
             if (varList1.vars[varID].isConstant) continue;
@@ -393,7 +393,7 @@ const auto fields_process
 
 const auto fields_set_missval = [](const std::vector<FieldInfo> &fieldInfoList, const VarList &varList1, cdo::StepStat2D &stepStat,
                                    int numSets, double vfraction) noexcept {
-  for (const auto &fieldInfo : fieldInfoList)
+  for (auto const &fieldInfo : fieldInfoList)
     {
       auto [varID, levelID] = fieldInfo.get();
       if (varList1.vars[varID].isConstant) continue;
@@ -404,7 +404,7 @@ const auto fields_set_missval = [](const std::vector<FieldInfo> &fieldInfoList,
 
 const auto fields_process_3D = [](int dim0, const std::vector<FieldInfo> &fieldInfoList, const VarList &varList1,
                                   cdo::StepStat3D &stepStat, int numSets) noexcept {
-  for (const auto &fieldInfo : fieldInfoList)
+  for (auto const &fieldInfo : fieldInfoList)
     {
       auto [varID, levelID] = fieldInfo.get();
       if (varList1.vars[varID].isConstant) continue;
diff --git a/src/cdo_syntax_error.cc b/src/cdo_syntax_error.cc
index f1499abcb..41e20364b 100644
--- a/src/cdo_syntax_error.cc
+++ b/src/cdo_syntax_error.cc
@@ -3,8 +3,8 @@
 #include "cdo_syntax_error.h"
 #include "mpmo_color.h"
 
-InternalCdoSyntaxError::InternalCdoSyntaxError(std::vector<std::string>::const_iterator p_iter, const std::string &p_msg,
-                                               const std::string &p_file, const std::string &p_line)
+InternalCdoSyntaxError::InternalCdoSyntaxError(std::vector<std::string>::const_iterator p_iter, std::string const &p_msg,
+                                               std::string const &p_file, std::string const &p_line)
     : CdoException(p_msg, p_file, p_line), iter(p_iter)
 {
 }
diff --git a/src/cdo_syntax_error.h b/src/cdo_syntax_error.h
index 00766f492..543829f41 100644
--- a/src/cdo_syntax_error.h
+++ b/src/cdo_syntax_error.h
@@ -9,8 +9,8 @@ struct InternalCdoSyntaxError : CdoException
 {
   std::vector<std::string>::const_iterator iter;
   std::string message;
-  InternalCdoSyntaxError(std::vector<std::string>::const_iterator p_iter, const std::string &p_msg, const std::string &p_file = "?",
-                         const std::string &p_line = "?");
+  InternalCdoSyntaxError(std::vector<std::string>::const_iterator p_iter, std::string const &p_msg, std::string const &p_file = "?",
+                         std::string const &p_line = "?");
 };
 
 struct CdoSyntaxError : InternalCdoSyntaxError
diff --git a/src/cdo_timer.h b/src/cdo_timer.h
index 6c1f320f1..fc4820c2c 100644
--- a/src/cdo_timer.h
+++ b/src/cdo_timer.h
@@ -92,7 +92,7 @@ public:
   {
     if (timerNeedInit) timer_init();
   }
-  explicit iTimer(const std::string &_name) : name(_name)
+  explicit iTimer(std::string const &_name) : name(_name)
   {
     if (timerNeedInit) timer_init();
   }
diff --git a/src/cdo_varlist.cc b/src/cdo_varlist.cc
index 4bf83cfc8..17d70a911 100644
--- a/src/cdo_varlist.cc
+++ b/src/cdo_varlist.cc
@@ -93,7 +93,7 @@ void
 VarList::set_num_const_vars(const CdoVars &cdoVars)
 {
   m_numConstVars = 0;
-  for (const auto &var : cdoVars)
+  for (auto const &var : cdoVars)
     {
       if (var.timeType == TIME_CONSTANT) m_numConstVars++;
     }
@@ -103,7 +103,7 @@ void
 VarList::set_num_varying_vars(const CdoVars &cdoVars)
 {
   m_numVaryingVars = 0;
-  for (const auto &var : cdoVars)
+  for (auto const &var : cdoVars)
     {
       if (var.timeType == TIME_VARYING) m_numVaryingVars++;
     }
@@ -212,7 +212,7 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
 
   if (mapFlag == MapFlag::Right)
     {
-      for (const auto &var2 : varList2.vars)
+      for (auto const &var2 : varList2.vars)
         {
           int varID1;
           for (varID1 = 0; varID1 < numVars1; ++varID1)
@@ -225,7 +225,7 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
     }
   else
     {
-      for (const auto &var1 : varList1.vars)
+      for (auto const &var1 : varList1.vars)
         {
           auto numVars2 = varList2.numVars();
           int varID2;
@@ -247,8 +247,8 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
   if (Options::cdoVerbose)
     for (int varID1 = 0; varID1 < numVars1; ++varID1)
       {
-        const auto &var1 = varList1.vars[varID1];
-        const auto &it = mapOfVarIDs.find(varID1);
+        auto const &var1 = varList1.vars[varID1];
+        auto const &it = mapOfVarIDs.find(varID1);
         if (it != mapOfVarIDs.end())
           cdo_print("Variable %d:%s mapped to %d:%s", varID1, var1.name, it->second, varList2.vars[it->second].name);
       }
@@ -269,8 +269,8 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
     {
       auto varID1 = it->first;
       auto varID2 = it->second;
-      const auto &var1 = varList1.vars[varID1];
-      const auto &var2 = varList2.vars[varID2];
+      auto const &var1 = varList1.vars[varID1];
+      auto const &var2 = varList2.vars[varID2];
 
       if (cmpFlag & CmpVarList::GridSize)
         {
@@ -292,7 +292,7 @@ varList_get_psvarid(const VarList &varList, int zaxisID)
   auto psname = cdo::inq_key_string(zaxisID, CDI_GLOBAL, CDI_KEY_PSNAME);
   if (psname.size())
     {
-      for (const auto &var : varList.vars)
+      for (auto const &var : varList.vars)
         {
           if (var.name == psname) return var.ID;
         }
@@ -375,8 +375,8 @@ varList_compare(const VarList &varList1, const VarList &varList2, int cmpFlag)
 
   for (int varID = 0; varID < numVars; ++varID)
     {
-      const auto &var1 = varList1.vars[varID];
-      const auto &var2 = varList2.vars[varID];
+      auto const &var1 = varList1.vars[varID];
+      auto const &var2 = varList2.vars[varID];
       if (numVars > 1)
         {
           if (cmpFlag & CmpVarList::Name)
diff --git a/src/cdo_vlist.cc b/src/cdo_vlist.cc
index 1740c3ed8..4cdcfaa9c 100644
--- a/src/cdo_vlist.cc
+++ b/src/cdo_vlist.cc
@@ -488,7 +488,7 @@ vlist_get_first_fourier_grid(int vlistID)
 }
 
 void
-cdo_check_missval(double missval, const std::string &varname)
+cdo_check_missval(double missval, std::string const &varname)
 {
   if (fp_is_equal(0.0, missval) || fp_is_equal(1.0, missval))
     {
diff --git a/src/cdo_vlist.h b/src/cdo_vlist.h
index 792282d36..23ea12d6d 100644
--- a/src/cdo_vlist.h
+++ b/src/cdo_vlist.h
@@ -23,7 +23,7 @@ int vlist_get_first_gaussian_grid(int vlistID);
 int vlist_get_first_spectral_grid(int vlistID);
 int vlist_get_first_fourier_grid(int vlistID);
 
-void cdo_check_missval(double missval, const std::string &varname);
+void cdo_check_missval(double missval, std::string const &varname);
 
 void vlist_unpack(int vlistID);
 
diff --git a/src/cdo_zaxis.cc b/src/cdo_zaxis.cc
index 9f43f085d..049b60cc0 100644
--- a/src/cdo_zaxis.cc
+++ b/src/cdo_zaxis.cc
@@ -86,11 +86,11 @@ zaxis_read_data(const std::vector<KVMap> &kvmap, ZaxisDesciption &zaxis, size_t
       if (!kvmap[ik].isValid) continue;
 
       auto kv = kvmap[ik].kv;
-      const auto &key = kv->key;
+      auto const &key = kv->key;
       size_t nvalues = kv->nvalues;
       if (nvalues == 0) continue;
-      const auto &values = kv->values;
-      const auto &value = kv->values[0];
+      auto const &values = kv->values;
+      auto const &value = kv->values[0];
 
       // clang-format off
       if (key == "zaxistype")
@@ -172,17 +172,17 @@ zaxis_read_attributes(size_t natts, const std::vector<KVMap> &kvmap, int zaxisID
       if (!kvmap[ik].isValid) continue;
 
       const auto kv = kvmap[ik].kv;
-      const auto &key = kv->key;
+      auto const &key = kv->key;
       size_t nvalues = kv->nvalues;
       if (nvalues == 0) continue;
-      const auto &values = kv->values;
-      const auto &value = kv->values[0];
+      auto const &values = kv->values;
+      auto const &value = kv->values[0];
 
       if (ik == natts)
         attkey0 = key.c_str();
       else
         {
-          for (const auto &reservedKey : reservedKeys)
+          for (auto const &reservedKey : reservedKeys)
             if (key == reservedKey)
               cdo_abort("Found reserved keyword >%s< in attribute names! Check name or position of >%s<.", key, attkey0);
         }
@@ -250,7 +250,7 @@ zaxis_from_file(FILE *zfp, const char *filename)
 }
 
 static void
-gen_zaxis_height(ZaxisDesciption &zaxis, const std::string &zaxisname)
+gen_zaxis_height(ZaxisDesciption &zaxis, std::string const &zaxisname)
 {
   int zaxistype = ZAXIS_HEIGHT;
 
@@ -281,7 +281,7 @@ gen_zaxis_height(ZaxisDesciption &zaxis, const std::string &zaxisname)
 }
 
 int
-zaxis_from_name(const std::string &zaxisname)
+zaxis_from_name(std::string const &zaxisname)
 {
   int zaxisID = CDI_UNDEFID;
 
@@ -373,16 +373,16 @@ cdo_define_zaxis(const char *pzaxisfile)
 }
 
 int
-cdo_define_zaxis(const std::string &zaxisfile)
+cdo_define_zaxis(std::string const &zaxisfile)
 {
   return cdo_define_zaxis(zaxisfile.c_str());
 }
 
 void
-cdo_set_zaxes(const std::string &zaxisarg)
+cdo_set_zaxes(std::string const &zaxisarg)
 {
   auto zaxisNames = split_string(zaxisarg, ",");
-  for (const auto &zaxisName : zaxisNames) cdo_define_zaxis(zaxisName);
+  for (auto const &zaxisName : zaxisNames) cdo_define_zaxis(zaxisName);
 }
 
 static int
@@ -417,7 +417,7 @@ zaxis_to_ltype(int zaxisID)
 }
 
 void
-gen_layer_bounds(int nlev, const Varray<double> &levels, Varray<double> &lbounds, Varray<double> &ubounds)
+gen_layer_bounds(int nlev, Varray<double> const &levels, Varray<double> &lbounds, Varray<double> &ubounds)
 {
   if (nlev == 1)
     {
diff --git a/src/cdo_zaxis.h b/src/cdo_zaxis.h
index da6e140fe..cc5a39d92 100644
--- a/src/cdo_zaxis.h
+++ b/src/cdo_zaxis.h
@@ -5,15 +5,15 @@
 #include "varray.h"
 #include "cdi.h"
 
-int cdo_define_zaxis(const std::string &zaxisfile);
-void cdo_set_zaxes(const std::string &zaxisarg);
-int zaxis_from_name(const std::string &zaxisname);
+int cdo_define_zaxis(std::string const &zaxisfile);
+void cdo_set_zaxes(std::string const &zaxisarg);
+int zaxis_from_name(std::string const &zaxisname);
 int zaxis_from_file(FILE *zfp, const char *filename);
 int zaxis_to_ltype(int zaxisID);
 double cdo_zaxis_inq_level(int zaxisID, int levelID);
 int cdo_zaxis_inq_levels(int zaxisID, double *levels);
 
-void gen_layer_bounds(int nlev, const Varray<double> &levels, Varray<double> &lbounds, Varray<double> &ubounds);
+void gen_layer_bounds(int nlev, Varray<double> const &levels, Varray<double> &lbounds, Varray<double> &ubounds);
 int get_layer_thickness(bool useWeights, bool genBounds, int index, int zaxisID, int nlev, Varray<double> &thickness,
                         Varray<double> &weights);
 
diff --git a/src/cellsearch_reg2d.cc b/src/cellsearch_reg2d.cc
index 91099d7b8..d57e534d4 100644
--- a/src/cellsearch_reg2d.cc
+++ b/src/cellsearch_reg2d.cc
@@ -9,7 +9,7 @@
 #include "cellsearch_reg2d.h"
 
 void
-grid_boundbox_reg2d(size_t nx, size_t ny, const Varray<double> &cornerLonsReg2d, const Varray<double> &cornerLatsReg2d,
+grid_boundbox_reg2d(size_t nx, size_t ny, Varray<double> const &cornerLonsReg2d, Varray<double> const &cornerLatsReg2d,
                     double *gridBoundBox)
 {
   gridBoundBox[0] = cornerLatsReg2d[0];
@@ -23,7 +23,7 @@ grid_boundbox_reg2d(size_t nx, size_t ny, const Varray<double> &cornerLonsReg2d,
   gridBoundBox[3] = cornerLonsReg2d[nx];
 }
 
-bool rect_grid_search2(long &imin, long &imax, double xmin, double xmax, long nxm, const Varray<double> &xm);
+bool rect_grid_search2(long &imin, long &imax, double xmin, double xmax, long nxm, Varray<double> const &xm);
 
 static long
 set_srch_indices(size_t numSearchCells, long nx, long imin, long imax, long jmin, long jmax, Varray<size_t> &srchIndices)
@@ -46,14 +46,14 @@ check_lon_bounds(double offset, double lonMin, double lonMax, double &boundLon1,
 }
 /*
 static void
-debug_message(const char *txt, long imin, long imax, long jmin, long jmax, const Varray<double> &srcCornersLons)
+debug_message(const char *txt, long imin, long imax, long jmin, long jmax, Varray<double> const &srcCornersLons)
 {
   printf("%s:  lonMin=%g lonMax=%g  iMin=%ld iMax=%ld  jMin=%ld jMax %ld  numCells=%ld\n", txt, RAD2DEG * srcCornersLons[imin],
          RAD2DEG * srcCornersLons[imax + 1], imin, imax, jmin, jmax, (jmax - jmin + 1) * (imax - imin + 1));
 }
 */
 static size_t
-get_search_cells_reg2d(long nx, long ny, const Varray<double> &srcCornersLats, const Varray<double> &srcCornersLons,
+get_search_cells_reg2d(long nx, long ny, Varray<double> const &srcCornersLats, Varray<double> const &srcCornersLons,
                        const double *tgtCellBoundBox, Varray<size_t> &srchIndices)
 {
   auto debug{ false };
diff --git a/src/cellsearch_reg2d.h b/src/cellsearch_reg2d.h
index 673a73c68..97e4cf322 100644
--- a/src/cellsearch_reg2d.h
+++ b/src/cellsearch_reg2d.h
@@ -11,13 +11,13 @@
 #include "cellsearch_utils.h"
 #include "varray.h"
 
-void grid_boundbox_reg2d(size_t nx, size_t ny, const Varray<double> &cornerLonsReg2d, const Varray<double> &cornerLatsReg2d,
+void grid_boundbox_reg2d(size_t nx, size_t ny, Varray<double> const &cornerLonsReg2d, Varray<double> const &cornerLatsReg2d,
                          double *gridBoundBox);
 
 class CellsearchReg2d
 {
 public:
-  CellsearchReg2d(const Varray<double> &cornerLonsReg2d, const Varray<double> &cornerLatsReg2d, const CellsearchParams &params)
+  CellsearchReg2d(Varray<double> const &cornerLonsReg2d, Varray<double> const &cornerLatsReg2d, const CellsearchParams &params)
   {
     m_nx = params.dims[0];
     m_ny = params.dims[1];
@@ -28,7 +28,7 @@ public:
   size_t do_cellsearch(bool isReg2dCell, const GridCell &gridCell, Varray<size_t> &searchIndices);
 
   void
-  create(const Varray<double> &cornerLonsReg2d, const Varray<double> &cornerLatsReg2d)
+  create(Varray<double> const &cornerLonsReg2d, Varray<double> const &cornerLatsReg2d)
   {
     auto nxp1 = m_nx + 1;
     auto nyp1 = m_ny + 1;
diff --git a/src/cellsearch_spherepart.h b/src/cellsearch_spherepart.h
index 9315937e4..da3f43936 100644
--- a/src/cellsearch_spherepart.h
+++ b/src/cellsearch_spherepart.h
@@ -23,7 +23,7 @@ extern "C"
 class CellsearchSpherepart : public CellsearchStrategy
 {
 public:
-  CellsearchSpherepart(size_t numCells, size_t numCorners, const Varray<double> &cornerLons, const Varray<double> &cornerLats,
+  CellsearchSpherepart(size_t numCells, size_t numCorners, Varray<double> const &cornerLons, Varray<double> const &cornerLats,
                        const CellsearchParams &params)
       : m_params(params)
   {
@@ -38,7 +38,7 @@ public:
   size_t
   do_cellsearch(bool isReg2dCell, const GridCell &gridCell, Varray<size_t> &searchIndices)
   {
-    const auto &yacGridCell = gridCell.yacGridCell;
+    auto const &yacGridCell = gridCell.yacGridCell;
     size_t numCorners = yacGridCell.num_corners;
     bounding_circle bndCircle;
     auto xyz = yacGridCell.coordinates_xyz;
@@ -74,7 +74,7 @@ private:
   const CellsearchParams &m_params;
 
   void
-  create(size_t numCells, size_t numCorners, const Varray<double> &cornerLons, const Varray<double> &cornerLats)
+  create(size_t numCells, size_t numCorners, Varray<double> const &cornerLons, Varray<double> const &cornerLats)
   {
     Varray<enum yac_edge_type> edgeTypes(numCorners, YAC_GREAT_CIRCLE_EDGE);
     Varray<yac_grid_cell> cells(Threading::ompNumMaxThreads);
diff --git a/src/convert_units.cc b/src/convert_units.cc
index ce01df2b6..539028a7d 100644
--- a/src/convert_units.cc
+++ b/src/convert_units.cc
@@ -130,7 +130,7 @@ convert_destroy()
 namespace cdo
 {
 void
-convert_units(void **ut_converter, bool *changeunits, char *units, char *unitsOld, const std::string &name)
+convert_units(void **ut_converter, bool *changeunits, char *units, char *unitsOld, std::string const &name)
 {
   (void) ut_converter;  // removes wrong warning, caused by ifdef
 
diff --git a/src/convert_units.h b/src/convert_units.h
index d77daee21..994969711 100644
--- a/src/convert_units.h
+++ b/src/convert_units.h
@@ -27,6 +27,6 @@ void convert_destroy();
 
 namespace cdo
 {
-void convert_units(void **ut_converter, bool *changeunits, char *units, char *units_old, const std::string &name);
+void convert_units(void **ut_converter, bool *changeunits, char *units, char *units_old, std::string const &name);
 }
 #endif  // CONVERT_UNITS_H
diff --git a/src/custom_modules.cc b/src/custom_modules.cc
index 6896d3e20..90d37d079 100644
--- a/src/custom_modules.cc
+++ b/src/custom_modules.cc
@@ -4,7 +4,7 @@
   @param folder_path custom modules folder
 */
 void
-load_custom_modules(const std::string &folder_path)
+load_custom_modules(std::string const &folder_path)
 {
   DIR *dir = opendir(folder_path.c_str());
   std::string file_path;
@@ -32,7 +32,7 @@ load_custom_modules(const std::string &folder_path)
  * @param module file path
  */
 void
-load_custom_module(const std::string &file_path)
+load_custom_module(std::string const &file_path)
 {
   void (*init_custom_module)();
   void *lib_handle = dlopen(file_path.c_str(), RTLD_LAZY);
diff --git a/src/datetime.cc b/src/datetime.cc
index 58620b45f..81a62e415 100644
--- a/src/datetime.cc
+++ b/src/datetime.cc
@@ -36,7 +36,7 @@ time_units_cstr(TimeUnits timeUnit)
 }
 
 void
-set_timestat_date(const std::string &p_optarg)
+set_timestat_date(std::string const &p_optarg)
 {
   TimeStat timestatdate = TimeStat::UNDEF;
 
@@ -257,7 +257,7 @@ adjust_month_and_year(int &month, int &year)
 }
 
 double
-delta_time_step_0(int tsID, int calendar, const CdiDateTime &vDateTime, JulianDate &julianDate0, double &deltat1)
+delta_time_step_0(int tsID, int calendar, CdiDateTime const &vDateTime, JulianDate &julianDate0, double &deltat1)
 {
   double zj = 0.0;
 
@@ -316,7 +316,7 @@ get_time_increment(double jdelta, CdiDate vDate0, CdiDate vDate1)
 }
 
 void
-check_time_increment(int tsID, int calendar, const CdiDateTime &vDateTime, CheckTimeIncr &checkTimeIncr)
+check_time_increment(int tsID, int calendar, CdiDateTime const &vDateTime, CheckTimeIncr &checkTimeIncr)
 {
   auto julianDate = julianDate_encode(calendar, vDateTime);
 
@@ -374,7 +374,7 @@ decode_day_of_year(const CdiDate &date)
 }
 
 int
-decode_hour_of_year(const CdiDateTime &cdiDateTime, int maxHours)
+decode_hour_of_year(CdiDateTime const &cdiDateTime, int maxHours)
 {
   int year, month, day;
   int hour, minute, second, ms;
@@ -392,7 +392,7 @@ decode_hour_of_year(const CdiDateTime &cdiDateTime, int maxHours)
 }
 
 int
-decode_hour_of_day(const CdiDateTime &cdiDateTime, int maxHours)
+decode_hour_of_day(CdiDateTime const &cdiDateTime, int maxHours)
 {
   int year, month, day;
   int hour, minute, second, ms;
@@ -409,7 +409,7 @@ decode_hour_of_day(const CdiDateTime &cdiDateTime, int maxHours)
 }
 
 int
-decode_minute_of_day(const CdiDateTime &cdiDateTime, int maxMinutes)
+decode_minute_of_day(CdiDateTime const &cdiDateTime, int maxMinutes)
 {
   int year, month, day;
   int hour, minute, second, ms;
@@ -437,7 +437,7 @@ set_date_time(CdiDateTime &datetime1, CdiDateTime datetime2)
 }
 
 static void
-get_timeunits(const std::string &unitsStr, int &incrPeriod, int &incrUnits, int &timeUnits)
+get_timeunits(std::string const &unitsStr, int &incrPeriod, int &incrUnits, int &timeUnits)
 {
   // clang-format off
   static std::unordered_map<std::string, std::pair<int, int>> unitsMap
@@ -449,7 +449,7 @@ get_timeunits(const std::string &unitsStr, int &incrPeriod, int &incrUnits, int
           { "years",   {    12, TUNIT_YEAR } } };
   // clang-format on
 
-  for (const auto &entry : unitsMap)
+  for (auto const &entry : unitsMap)
     {
       if (entry.first.starts_with(unitsStr))
         {
@@ -472,7 +472,7 @@ get_timeunits(const std::string &unitsStr, int &incrPeriod, int &incrUnits, int
 }
 
 CdiDate
-decode_datestring(const std::string &dateString)
+decode_datestring(std::string const &dateString)
 {
   if (std::strchr(dateString.c_str() + 1, '-'))
     {
@@ -484,7 +484,7 @@ decode_datestring(const std::string &dateString)
 }
 
 CdiTime
-decode_timestring(const std::string &timeString)
+decode_timestring(std::string const &timeString)
 {
   if (std::strchr(timeString.c_str(), ':'))
     {
@@ -499,7 +499,7 @@ decode_timestring(const std::string &timeString)
 }
 
 void
-decode_timeunits(const std::string &timeUnitsString, int &incrPeriod, int &incrUnits, int &timeUnits)
+decode_timeunits(std::string const &timeUnitsString, int &incrPeriod, int &incrUnits, int &timeUnits)
 {
   incrPeriod = 0;
   incrUnits = 0;
diff --git a/src/datetime.h b/src/datetime.h
index dada6825e..e19184ec7 100644
--- a/src/datetime.h
+++ b/src/datetime.h
@@ -111,31 +111,31 @@ private:
 };
 
 CdiDateTime datetime_avg(int calendar, int ndates, const std::vector<CdiDateTime> &cdiDateTimes);
-void set_timestat_date(const std::string &p_optarg);
+void set_timestat_date(std::string const &p_optarg);
 
 void adjust_month_and_year(int &month, int &year);
 
-double delta_time_step_0(int tsID, int calendar, const CdiDateTime &vDateTime, JulianDate &juldate0, double &deltat1);
+double delta_time_step_0(int tsID, int calendar, CdiDateTime const &vDateTime, JulianDate &juldate0, double &deltat1);
 
 TimeIncrement get_time_increment(double jdelta, CdiDate vDate0, CdiDate vDate1);
 
-void check_time_increment(int tsID, int calendar, const CdiDateTime &vDateTime, CheckTimeIncr &checkTimeIncr);
+void check_time_increment(int tsID, int calendar, CdiDateTime const &vDateTime, CheckTimeIncr &checkTimeIncr);
 
 int decode_month(const CdiDate &date);
 int decode_month_and_day(const CdiDate &date);
 
 int decode_day_of_year(const CdiDate &date);
-int decode_hour_of_year(const CdiDateTime &cdiDateTime, int maxHours);
-int decode_hour_of_day(const CdiDateTime &cdiDateTime, int maxHours);
-int decode_minute_of_day(const CdiDateTime &cdiDateTime, int maxMinutes);
+int decode_hour_of_year(CdiDateTime const &cdiDateTime, int maxHours);
+int decode_hour_of_day(CdiDateTime const &cdiDateTime, int maxHours);
+int decode_minute_of_day(CdiDateTime const &cdiDateTime, int maxMinutes);
 
 void set_date_time(CdiDateTime &datetime1, CdiDateTime datetime2);
 
 const char *time_units_cstr(TimeUnits timeUnit);
 
-CdiDate decode_datestring(const std::string &dateString);
-CdiTime decode_timestring(const std::string &timeString);
-void decode_timeunits(const std::string &timeUnitsString, int &incrPeriod, int &incrUnits, int &timeUnits);
+CdiDate decode_datestring(std::string const &dateString);
+CdiTime decode_timestring(std::string const &timeString);
+void decode_timeunits(std::string const &timeUnitsString, int &incrPeriod, int &incrUnits, int &timeUnits);
 
 int day_of_year(int calendar, int64_t date);
 
diff --git a/src/dcw_reader.cc b/src/dcw_reader.cc
index ab21d4b45..2cdd5f2ea 100644
--- a/src/dcw_reader.cc
+++ b/src/dcw_reader.cc
@@ -161,7 +161,7 @@ dcw_load_lists(DCW_Lists &dcw_lists)
 }
 
 static int
-dcw_find_country(const std::string &code, const std::vector<DCW_Country> &list)
+dcw_find_country(std::string const &code, const std::vector<DCW_Country> &list)
 {
   int low = 0, high = (int) list.size() - 1;
 
@@ -184,7 +184,7 @@ dcw_find_country(const std::string &code, const std::vector<DCW_Country> &list)
 }
 
 static int
-dcw_find_state(const std::string &code, const std::vector<DCW_State> &list)
+dcw_find_state(std::string const &code, const std::vector<DCW_State> &list)
 {
   auto country = code.substr(0, 2);
   auto state = code.substr(2);
@@ -199,7 +199,7 @@ dcw_find_state(const std::string &code, const std::vector<DCW_State> &list)
 
 #ifdef HAVE_LIBNETCDF
 static int
-nc_get_minmax(int ncid, const std::string &name, double &minval, double &maxval)
+nc_get_minmax(int ncid, std::string const &name, double &minval, double &maxval)
 {
   int varid;
   if (nc_inq_varid(ncid, name.c_str(), &varid)) return 1;
@@ -332,7 +332,7 @@ nc_get_data(int ncid, const char *name, std::vector<double> &data)
 */
 #ifdef HAVE_LIBNETCDF
 static int
-nc_get_lonlat(int ncid, const std::string &xname, const std::string &yname, std::vector<double> &x, std::vector<double> &y)
+nc_get_lonlat(int ncid, std::string const &xname, std::string const &yname, std::vector<double> &x, std::vector<double> &y)
 {
   int xvarid;
   double xscale, xmin;
diff --git a/src/ecacore.cc b/src/ecacore.cc
index fe15d3b35..e71e3eb97 100644
--- a/src/ecacore.cc
+++ b/src/ecacore.cc
@@ -64,7 +64,7 @@ eca1(const ECA_REQUEST_1 &request)
   auto ovlistID = vlistCreate();
 
   VarList varList1(ivlistID);
-  const auto &varFirst = varList1.vars[FIRST_VAR_ID];
+  auto const &varFirst = varList1.vars[FIRST_VAR_ID];
   auto gridID = varFirst.gridID;
   auto zaxisID = varFirst.zaxisID;
   auto missval = varFirst.missval;
@@ -245,7 +245,7 @@ eca1(const ECA_REQUEST_1 &request)
                   if (request.var1.f2 == &vfarnum2)
                     {
                       auto &array1 = field3.vec_d;
-                      const auto &array2 = var12[levelID].vec_d;
+                      auto const &array2 = var12[levelID].vec_d;
                       auto missval2 = field2.missval;
 
                       auto len = field1.size;
@@ -285,7 +285,7 @@ eca1(const ECA_REQUEST_1 &request)
               else
                 {
                   auto &array1 = var13[levelID].vec_d;
-                  const auto &array2 = var12[levelID].vec_d;
+                  auto const &array2 = var12[levelID].vec_d;
                   auto missval2 = field2.missval;
                   auto len = field1.size;
 
@@ -380,8 +380,8 @@ eca2(const ECA_REQUEST_2 &request)
 
   VarList varList1(ivlistID1);
   VarList varList2(ivlistID2);
-  const auto &var1First = varList1.vars[FIRST_VAR_ID];
-  const auto &var2First = varList2.vars[FIRST_VAR_ID];
+  auto const &var1First = varList1.vars[FIRST_VAR_ID];
+  auto const &var2First = varList2.vars[FIRST_VAR_ID];
 
   varList_compare(varList1, varList2);
 
@@ -588,7 +588,7 @@ eca2(const ECA_REQUEST_2 &request)
                   if (request.var1.f4 == &vfarnum2)
                     {
                       auto &array1 = field3.vec_d;
-                      const auto &array2 = var14[levelID].vec_d;
+                      auto const &array2 = var14[levelID].vec_d;
                       auto missvaltemp = field1.missval;
 
                       auto len = field1.size;
@@ -627,7 +627,7 @@ eca2(const ECA_REQUEST_2 &request)
               if (numFields == 0) { request.var1.f5(var15[levelID], var14[levelID], request.var1.f5arg); }
               else
                 {
-                  const auto &array2 = var14[levelID].vec_d;
+                  auto const &array2 = var14[levelID].vec_d;
                   auto &array1 = var15[levelID].vec_d;
                   auto len = field1.size;
                   auto missvaltemp = field1.missval;
@@ -734,7 +734,7 @@ eca3(const ECA_REQUEST_3 &request)
 
   VarList varList1(ivlistID1);
   VarList varList2(ivlistID2);
-  const auto &var1First = varList1.vars[FIRST_VAR_ID];
+  auto const &var1First = varList1.vars[FIRST_VAR_ID];
 
   varList_compare(varList1, varList2);
 
@@ -886,7 +886,7 @@ eca3(const ECA_REQUEST_3 &request)
 
 // check for non missval values
 static bool
-fldhvs(const FieldVector &fieldVector, size_t nlevels)
+fldhvs(FieldVector const &fieldVector, size_t nlevels)
 {
   for (size_t level = 0; level < nlevels; level++)
     {
@@ -918,8 +918,8 @@ eca4(const ECA_REQUEST_4 &request)
 
   VarList varList1(ivlistID1);
   VarList varList2(ivlistID2);
-  const auto &var1First = varList1.vars[FIRST_VAR_ID];
-  const auto &var2First = varList2.vars[FIRST_VAR_ID];
+  auto const &var1First = varList1.vars[FIRST_VAR_ID];
+  auto const &var2First = varList2.vars[FIRST_VAR_ID];
 
   auto gridID = var1First.gridID;
   if (var1First.gridsize != var2First.gridsize) cdo_abort("Grid sizes of the input fields do not match!");
diff --git a/src/ecacore.h b/src/ecacore.h
index d566b7f37..77a84f5d9 100644
--- a/src/ecacore.h
+++ b/src/ecacore.h
@@ -20,8 +20,8 @@ enum ECA_EPILOG
 };
 
 using ECA_FUNC_1 = void (*)(Field &, double);
-using ECA_FUNC_2 = void (*)(Field &, const Field &);
-using ECA_FUNC_3 = void (*)(Field &, const Field &, double);
+using ECA_FUNC_2 = void (*)(Field &, Field const &);
+using ECA_FUNC_3 = void (*)(Field &, Field const &, double);
 
 /**
  * Structure describing a processing request of the form
diff --git a/src/ecautil.cc b/src/ecautil.cc
index f69f80fba..e7bfff10c 100644
--- a/src/ecautil.cc
+++ b/src/ecautil.cc
@@ -43,12 +43,12 @@
  * @param mode   the counting mode, must be an exact mathematical integer
  */
 static void
-count(Field &field1, const Field &field2, double mode)
+count(Field &field1, Field const &field2, double mode)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -128,12 +128,12 @@ count(Field &field1, const Field &field2, double mode)
  * @param compare the comparator
  */
 static void
-selcomp(Field &field1, const Field &field2, int (*compare)(double, double))
+selcomp(Field &field1, Field const &field2, int (*compare)(double, double))
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -231,30 +231,30 @@ ne(double a, double b)
 }
 
 void
-vfarnum(Field &field1, const Field &field2)
+vfarnum(Field &field1, Field const &field2)
 {
   count(field1, field2, 0.0);
 }
 
 void
-vfarnum2(Field &field1, const Field &field2)
+vfarnum2(Field &field1, Field const &field2)
 {
   count(field1, field2, 1.0);
 }
 
 void
-vfarnum3(Field &field1, const Field &field2, double n)
+vfarnum3(Field &field1, Field const &field2, double n)
 {
   count(field1, field2, n);
 }
 
 void
-vfarsel(Field &field1, const Field &field2)
+vfarsel(Field &field1, Field const &field2)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different gridsize (%s)", __func__);
@@ -274,37 +274,37 @@ vfarsel(Field &field1, const Field &field2)
 }
 
 void
-vfarselle(Field &field1, const Field &field2)
+vfarselle(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, le);
 }
 
 void
-vfarsellt(Field &field1, const Field &field2)
+vfarsellt(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, lt);
 }
 
 void
-vfarselge(Field &field1, const Field &field2)
+vfarselge(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, ge);
 }
 
 void
-vfarselgt(Field &field1, const Field &field2)
+vfarselgt(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, gt);
 }
 
 void
-vfarseleq(Field &field1, const Field &field2)
+vfarseleq(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, eq);
 }
 
 void
-vfarselne(Field &field1, const Field &field2)
+vfarselne(Field &field1, Field const &field2)
 {
   selcomp(field1, field2, ne);
 }
@@ -500,7 +500,7 @@ compute_gsl(int nlevels, size_t gridsize, std::vector<double> &yvals, double mis
 
 void
 write_gsl_stream(CdoStreamID ostreamID, int otaxisID, int otsID, int ovarID1, int ovarID2, int ivlistID1, int first_var_id,
-                 FieldVector &gslDuration, FieldVector &gslFirstDay, const CdiDateTime &vDateTime, int nlevels)
+                 FieldVector &gslDuration, FieldVector &gslFirstDay, CdiDateTime const &vDateTime, int nlevels)
 {
   (void) ivlistID1;
   (void) first_var_id;
diff --git a/src/ecautil.h b/src/ecautil.h
index b72a5d108..6350764e6 100644
--- a/src/ecautil.h
+++ b/src/ecautil.h
@@ -34,7 +34,7 @@ unsigned long day_of_year(int date);
  * @param field1 the 1st input field, also holds the result
  * @param field2 the 2nd input field
  */
-void vfarnum(Field &field1, const Field &field2);
+void vfarnum(Field &field1, Field const &field2);
 
 /**
  * Counts the number of consecutive nonumMissValsing values in a field.
@@ -50,7 +50,7 @@ void vfarnum(Field &field1, const Field &field2);
  * @param field1 the 1st input field, also holds the result
  * @param field2 the 2nd input field
  */
-void vfarnum2(Field &field1, const Field &field2);
+void vfarnum2(Field &field1, Field const &field2);
 
 /**
  * Counts the number of values in series of at least n consecutive
@@ -68,7 +68,7 @@ void vfarnum2(Field &field1, const Field &field2);
  * @param n      the number of consecutive values, must be an exact
  *               mathematical integer
  */
-void vfarnum3(Field &field1, const Field &field2, double n);
+void vfarnum3(Field &field1, Field const &field2, double n);
 
 /**
  * Selects field elements according to a given mask. The result of
@@ -83,7 +83,7 @@ void vfarnum3(Field &field1, const Field &field2, double n);
  * @param field1  the input field, also holds the result
  * @param field2  the mask
  */
-void vfarsel(Field &field1, const Field &field2);
+void vfarsel(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are less than or equal to the
@@ -99,7 +99,7 @@ void vfarsel(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarselle(Field &field1, const Field &field2);
+void vfarselle(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are less than the
@@ -115,7 +115,7 @@ void vfarselle(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarsellt(Field &field1, const Field &field2);
+void vfarsellt(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are greater than or equal to
@@ -131,7 +131,7 @@ void vfarsellt(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarselge(Field &field1, const Field &field2);
+void vfarselge(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are greater than the
@@ -147,7 +147,7 @@ void vfarselge(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarselgt(Field &field1, const Field &field2);
+void vfarselgt(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are equal to the
@@ -163,7 +163,7 @@ void vfarselgt(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarseleq(Field &field1, const Field &field2);
+void vfarseleq(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are not equal to the
@@ -179,7 +179,7 @@ void vfarseleq(Field &field1, const Field &field2);
  * @param field1 the input field, also holds the result
  * @param field2 the reference field
  */
-void vfarselne(Field &field1, const Field &field2);
+void vfarselne(Field &field1, Field const &field2);
 
 /**
  * Selects all field elements that are less than or equal to a
@@ -328,5 +328,5 @@ void define_mid_of_time(int frequency, int taxisID, int year, int month, int Max
  * Write GSL related fields to an output stream
  */
 void write_gsl_stream(CdoStreamID ostreamID, int otaxisID, int otsID, int ovarID1, int ovarID2, int ivlistID1, int first_var_id,
-                      FieldVector &gslDuration, FieldVector &gslFirstDay, const CdiDateTime &vDateTime, int nlevels);
+                      FieldVector &gslDuration, FieldVector &gslFirstDay, CdiDateTime const &vDateTime, int nlevels);
 #endif /*ECAUTIL_H_*/
diff --git a/src/expr.cc b/src/expr.cc
index fee474360..5d422c108 100644
--- a/src/expr.cc
+++ b/src/expr.cc
@@ -231,7 +231,7 @@ node_delete(nodeType *p)
 }
 
 static int
-get_funcID(const std::string &fun)
+get_funcID(std::string const &fun)
 {
   constexpr int funcTableSize = sizeof(funcSymbolTable) / sizeof(funcSymbolTable[0]);
   for (int funcID = 0; funcID < funcTableSize; funcID++)
@@ -812,7 +812,7 @@ ex_fun_var(int init, int funcID, nodeType *p1)
               field.weightv.resize(ngp);
             }
 
-          auto exprfunc = (double (*)(const Field &)) funcEntry.func;
+          auto exprfunc = (double (*)(Field const &)) funcEntry.func;
           for (size_t k = 0; k < nlev; ++k)
             {
               fld_field_init(field, numMissVals, missval, ngp, p1data + k * ngp, p1->param.weight);
@@ -824,7 +824,7 @@ ex_fun_var(int init, int funcID, nodeType *p1)
           Field field1, field2;
           field1.resize(ngp);
           field2.resize(nlat);
-          auto exprfunc = (void (*)(const Field &, Field &)) funcEntry.func;
+          auto exprfunc = (void (*)(Field const &, Field &)) funcEntry.func;
           for (size_t k = 0; k < nlev; ++k)
             {
               fld_field_init(field1, numMissVals, missval, ngp, &p1data[k * ngp], nullptr);
@@ -839,7 +839,7 @@ ex_fun_var(int init, int funcID, nodeType *p1)
           Field field;
           field.resize(nlev);
           if (funcflag == 1) vert_weights(p1->param.zaxisID, nlev, field.weightv);
-          auto exprfunc = (double (*)(const Field &)) funcEntry.func;
+          auto exprfunc = (double (*)(Field const &)) funcEntry.func;
           for (size_t i = 0; i < ngp; ++i)
             {
               for (size_t k = 0; k < nlev; ++k) field.vec_d[k] = p1data[k * ngp + i];
@@ -1163,7 +1163,7 @@ ex_remap(int init, int funcID, nodeType *p1, nodeType *p2)
           Field field1, field2;
           field1.resize(ngp);
           field2.resize(ngp2);
-          auto exprfunc = (void (*)(const Field &, Field &)) funcEntry.func;
+          auto exprfunc = (void (*)(Field const &, Field &)) funcEntry.func;
           for (size_t k = 0; k < nlev; ++k)
             {
               fld_field_init(field1, numMissVals, missval, ngp, &p1data[k * ngp], nullptr);
@@ -1183,7 +1183,7 @@ ex_remap(int init, int funcID, nodeType *p1, nodeType *p2)
 }
 
 static size_t
-get_levidx(size_t nlev, const double *data, double value, const std::string &funcname)
+get_levidx(size_t nlev, const double *data, double value, std::string const &funcname)
 {
   size_t levidx;
 
@@ -1195,7 +1195,7 @@ get_levidx(size_t nlev, const double *data, double value, const std::string &fun
 }
 
 static void
-get_levidxrange(size_t nlev, const double *data, double value1, double value2, const std::string &funcname, size_t &levidx1,
+get_levidxrange(size_t nlev, const double *data, double value1, double value2, std::string const &funcname, size_t &levidx1,
                 size_t &levidx2)
 {
   long n = nlev;
@@ -1811,7 +1811,7 @@ exNode(nodeType *p, ParseParamType &parseArg)
 */
 
 static int
-param_search_name(int nparam, const std::vector<ParamEntry> &params, const std::string &name)
+param_search_name(int nparam, const std::vector<ParamEntry> &params, std::string const &name)
 {
   for (int varID = 0; varID < nparam; ++varID)
     {
@@ -1822,7 +1822,7 @@ param_search_name(int nparam, const std::vector<ParamEntry> &params, const std::
 }
 
 static int
-param_search_name_size(int nparam, std::vector<ParamEntry> &params, const std::string &name, size_t ngp, size_t nlev)
+param_search_name_size(int nparam, std::vector<ParamEntry> &params, std::string const &name, size_t ngp, size_t nlev)
 {
   for (int varID = 0; varID < nparam; ++varID)
     {
@@ -1841,7 +1841,7 @@ param_search_name_size(int nparam, std::vector<ParamEntry> &params, const std::s
 }
 
 static void
-param_print(const std::string &vname, const ParamEntry &param, long tsID)
+param_print(std::string const &vname, const ParamEntry &param, long tsID)
 {
   constexpr size_t maxout = 100;
   const auto data = param.data;
@@ -1861,7 +1861,7 @@ param_print(const std::string &vname, const ParamEntry &param, long tsID)
 }
 
 static void
-add_new_constant(const std::string &varname, ParseParamType &parseArg, std::vector<ParamEntry> &params, const ParamEntry &param)
+add_new_constant(std::string const &varname, ParseParamType &parseArg, std::vector<ParamEntry> &params, const ParamEntry &param)
 {
   auto varID = parseArg.numParams;
   if (varID >= parseArg.maxParams) cdo_abort("Too many parameter (limit=%d)", parseArg.maxParams);
@@ -1879,7 +1879,7 @@ add_new_constant(const std::string &varname, ParseParamType &parseArg, std::vect
 }
 
 static void
-add_new_param(const std::string &varname, ParseParamType &parseArg, std::vector<ParamEntry> &params, const ParamEntry &param)
+add_new_param(std::string const &varname, ParseParamType &parseArg, std::vector<ParamEntry> &params, const ParamEntry &param)
 {
   auto varID = parseArg.numParams;
   if (varID >= parseArg.maxParams) cdo_abort("Too many parameter (limit=%d)", parseArg.maxParams);
@@ -1900,8 +1900,8 @@ expr_run_cmd(nodeType *p, ParseParamType &parseArg)
   auto init = parseArg.init;
   auto &params = parseArg.params;
 
-  const auto &cmdName = p->cmd().cmdName;
-  const auto &varName = p->cmd().varName;
+  auto const &cmdName = p->cmd().cmdName;
+  auto const &varName = p->cmd().varName;
   if (parseArg.debug) cdo_print("\tstatement\t\t%s(%s)", cmdName, varName);
 
   auto varID = param_search_name(parseArg.numParams, params, varName);
@@ -1927,7 +1927,7 @@ expr_run_con(nodeType *p, const ParseParamType &parseArg)
 }
 
 static int
-expr_run_var_grid(const std::string &vnm, int coord, ParseParamType &parseArg)
+expr_run_var_grid(std::string const &vnm, int coord, ParseParamType &parseArg)
 {
   auto &params = parseArg.params;
 
@@ -1940,8 +1940,8 @@ expr_run_var_grid(const std::string &vnm, int coord, ParseParamType &parseArg)
 
   auto coordID = params_get_coord_ID(parseArg, coord, params[varID].gridID);
   parseArg.coords[coordID].needed = true;
-  const auto &units = parseArg.coords[coordID].units;
-  const auto &longname = parseArg.coords[coordID].longname;
+  auto const &units = parseArg.coords[coordID].units;
+  auto const &longname = parseArg.coords[coordID].longname;
 
   params[nvarID].isValid = true;
   params[nvarID].coord = coord;
@@ -1962,7 +1962,7 @@ expr_run_var_grid(const std::string &vnm, int coord, ParseParamType &parseArg)
 }
 
 static int
-expr_run_var_zaxis(const std::string &vnm, int coord, ParseParamType &parseArg)
+expr_run_var_zaxis(std::string const &vnm, int coord, ParseParamType &parseArg)
 {
   auto &params = parseArg.params;
 
@@ -1975,8 +1975,8 @@ expr_run_var_zaxis(const std::string &vnm, int coord, ParseParamType &parseArg)
 
   auto coordID = params_get_coord_ID(parseArg, coord, params[varID].zaxisID);
   parseArg.coords[coordID].needed = true;
-  const auto &units = parseArg.coords[coordID].units;
-  const auto &longname = parseArg.coords[coordID].longname;
+  auto const &units = parseArg.coords[coordID].units;
+  auto const &longname = parseArg.coords[coordID].longname;
 
   params[nvarID].isValid = true;
   params[nvarID].coord = coord;
@@ -1999,9 +1999,9 @@ static nodeType *
 expr_run_var(nodeType *p, ParseParamType &parseArg)
 {
   auto init = parseArg.init;
-  const auto &params = parseArg.params;
+  auto const &params = parseArg.params;
 
-  const auto &vnm = p->var().name;
+  auto const &vnm = p->var().name;
   auto varID = param_search_name(parseArg.numParams, params, vnm);
   if (varID == -1 && init)
     {
@@ -2054,7 +2054,7 @@ expr_run_fun2(nodeType *p, ParseParamType &parseArg)
   auto init = parseArg.init;
 
   auto funcID = get_funcID(p->fun().name);
-  const auto &funcEntry = funcSymbolTable[funcID];
+  auto const &funcEntry = funcSymbolTable[funcID];
 
   auto fnode1 = expr_run(p->fun().op[0], parseArg);
   auto fnode2 = expr_run(p->fun().op[1], parseArg);
@@ -2073,7 +2073,7 @@ expr_run_fun3(nodeType *p, ParseParamType &parseArg)
   auto init = parseArg.init;
 
   auto funcID = get_funcID(p->fun().name);
-  const auto &funcEntry = funcSymbolTable[funcID];
+  auto const &funcEntry = funcSymbolTable[funcID];
 
   auto fnode1 = expr_run(p->fun().op[0], parseArg);
   auto fnode2 = expr_run(p->fun().op[1], parseArg);
@@ -2089,7 +2089,7 @@ static nodeType *
 expr_run_fun(nodeType *p, ParseParamType &parseArg)
 {
   auto init = parseArg.init;
-  const auto &params = parseArg.params;
+  auto const &params = parseArg.params;
 
   auto funcID = get_funcID(p->fun().name);
   auto &funcEntry = funcSymbolTable[funcID];
@@ -2145,7 +2145,7 @@ expr_run_opr(nodeType *p, ParseParamType &parseArg)
       {
         auto rnode = expr_run(p->opr().op[1], parseArg);
 
-        const auto &varname2 = p->opr().op[0]->var().name;
+        auto const &varname2 = p->opr().op[0]->var().name;
 
         auto isVar = (rnode && rnode->type == NodeEnum::typeVar && rnode->param.ngp > 0 && rnode->param.nlev > 0);
         if (parseArg.debug)
diff --git a/src/expr.h b/src/expr.h
index eb4a9b679..4fc3b42a3 100644
--- a/src/expr.h
+++ b/src/expr.h
@@ -77,7 +77,7 @@ struct funNodeType
   int nops;                           // number of operands
   std::vector<struct nodeType *> op;  // operands
 
-  funNodeType(const std::string &fname, int _nops, va_list args) : name(fname), nops(_nops)
+  funNodeType(std::string const &fname, int _nops, va_list args) : name(fname), nops(_nops)
   {
     op.resize(nops);
     for (int i = 0; i < nops; i++) op[i] = va_arg(args, nodeType *);
diff --git a/src/expr_fun.cc b/src/expr_fun.cc
index 0cd20390c..0114c73ca 100644
--- a/src/expr_fun.cc
+++ b/src/expr_fun.cc
@@ -14,7 +14,7 @@
 #include "expr_yacc.hh"
 
 // clang-format off
-auto expr_func_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &vIn, auto &vOut, auto binary_operator)
+auto expr_func_con_var = [](auto hasMV, auto n, auto mv, auto cVal, auto const &vIn, auto &vOut, auto binary_operator)
 {
   if (hasMV)
     {
@@ -38,7 +38,7 @@ auto expr_func_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &
     }
 };
 
-auto expr_mul_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &vIn, auto &vOut)
+auto expr_mul_con_var = [](auto hasMV, auto n, auto mv, auto cVal, auto const &vIn, auto &vOut)
 {
   if (hasMV)
     {
@@ -62,7 +62,7 @@ auto expr_mul_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &v
     }
 };
 
-auto expr_div_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &vIn, auto &vOut)
+auto expr_div_con_var = [](auto hasMV, auto n, auto mv, auto cVal, auto const &vIn, auto &vOut)
 {
   if (hasMV)
     {
@@ -86,7 +86,7 @@ auto expr_div_con_var = [](auto hasMV, auto n, auto mv, auto cVal, const auto &v
     }
 };
 
-auto expr_func_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto cVal, auto &vOut, auto binary_operator)
+auto expr_func_var_con = [](auto hasMV, auto n, auto mv, auto const &vIn, auto cVal, auto &vOut, auto binary_operator)
 {
   if (hasMV)
     {
@@ -110,7 +110,7 @@ auto expr_func_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto c
     }
 };
 
-auto expr_mul_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto cVal, auto &vOut)
+auto expr_mul_var_con = [](auto hasMV, auto n, auto mv, auto const &vIn, auto cVal, auto &vOut)
 {
   if (hasMV)
     {
@@ -134,7 +134,7 @@ auto expr_mul_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto cV
     }
 };
 
-auto expr_div_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto cVal, auto &vOut)
+auto expr_div_var_con = [](auto hasMV, auto n, auto mv, auto const &vIn, auto cVal, auto &vOut)
 {
   if (hasMV)
     {
@@ -158,7 +158,7 @@ auto expr_div_var_con = [](auto hasMV, auto n, auto mv, const auto &vIn, auto cV
     }
 };
 
-auto expr_func_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, const auto &vIn1, const auto &vIn2, auto &vOut, auto binary_operator)
+auto expr_func_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, auto const &vIn1, auto const &vIn2, auto &vOut, auto binary_operator)
 {
   if (hasMV)
     {
@@ -182,7 +182,7 @@ auto expr_func_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, const auto &
     }
 };
 
-auto expr_mul_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, const auto &vIn1, const auto &vIn2, auto &vOut)
+auto expr_mul_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, auto const &vIn1, auto const &vIn2, auto &vOut)
 {
   if (hasMV)
     {
@@ -212,7 +212,7 @@ auto expr_mul_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, const auto &v
     }
 };
 
-auto expr_div_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, const auto &vIn1, const auto &vIn2, auto &vOut)
+auto expr_div_var_var = [](auto hasMV, auto n, auto mv1, auto mv2, auto const &vIn1, auto const &vIn2, auto &vOut)
 {
   if (hasMV)
     {
diff --git a/src/factory.cc b/src/factory.cc
index 5f85c285f..0c18b1cde 100644
--- a/src/factory.cc
+++ b/src/factory.cc
@@ -16,7 +16,7 @@
 namespace Factory
 {
 std::string
-err_msg_oper_not_found(const std::string &operatorName)
+err_msg_oper_not_found(std::string const &operatorName)
 {
   // Checking if the operatorname is an existing file name
   auto fp = std::fopen(operatorName.c_str(), "r");
@@ -67,13 +67,13 @@ get()
 }
 
 OperatorMap::iterator
-find(const std::string &p_operName)
+find(std::string const &p_operName)
 {
   return find(p_operName, [&p_operName]() { cdo_abort("Operator >%s< not found!", p_operName); });
 }
 
 OperatorMap::iterator
-find(const std::string &p_operName, std::function<void()> p_onError)
+find(std::string const &p_operName, std::function<void()> p_onError)
 {
   auto &operator_map = get();
   auto it = operator_map.find(p_operName);
@@ -90,7 +90,7 @@ exists(const std::string arg)
 }
 
 const CdoModule &
-get_module(const std::string &p_operName)
+get_module(std::string const &p_operName)
 {
   auto it = find(p_operName);
   return it->second.module;
@@ -102,7 +102,7 @@ get_module(const OperatorMap::iterator &it)
 }
 
 ModuleConstructor
-get_constructor(const std::string &p_operName)
+get_constructor(std::string const &p_operName)
 {
   auto it = find(p_operName);
   return it->second.constructor;
@@ -115,7 +115,7 @@ get_constructor(const OperatorMap::iterator it)
 }
 
 const CdoHelp &
-get_help(const std::string &p_operName)
+get_help(std::string const &p_operName)
 {
   auto it = find(p_operName, [&p_operName]() { cdo_abort("%s", err_msg_oper_not_found(p_operName)); });
   return get_help(it);
@@ -169,7 +169,7 @@ similar(const char *a, const char *b, unsigned long alen, unsigned long blen)
  * Wrapper function for #similar() to parse c++ strings to c strings
  */
 static bool
-similar(const std::string &original, const std::string &other)
+similar(std::string const &original, std::string const &other)
 {
   return (similar(original.c_str(), other.c_str(), original.size(), other.size()));
 }
@@ -181,7 +181,7 @@ similar(const std::string &original, const std::string &other)
  * with a max length of 75 characters
  */
 std::string
-find_similar_operators(const std::string &operatorName)
+find_similar_operators(std::string const &operatorName)
 {
   std::string found_similar_operators = "";
   size_t lines = 1;
@@ -190,7 +190,7 @@ find_similar_operators(const std::string &operatorName)
   if (operatorName != "")
     {
       // Searching for similar operator names in operator to module map
-      for (const auto &str : Factory::get())
+      for (auto const &str : Factory::get())
         {
           if (similar(string_to_lower(operatorName), str.first))
             {
@@ -221,7 +221,7 @@ get_sorted_operator_name_list()
 
   auto &factory = Factory::get();
 
-  for (const auto &factory_entry : factory)
+  for (auto const &factory_entry : factory)
     {
       auto &module = factory_entry.second.module;
       if (module.mode == 1) { names.push_back(factory_entry.first); }
@@ -233,7 +233,7 @@ get_sorted_operator_name_list()
 }
 
 std::string
-get_original(const std::string &operator_name)
+get_original(std::string const &operator_name)
 {
   auto module = Factory::get_module(operator_name);
   auto index = module.is_alias(operator_name);
@@ -250,13 +250,13 @@ get_original(const std::string &operator_name)
  */
 
 OperatorMap::iterator
-find_module(const std::string &operator_name)
+find_module(std::string const &operator_name)
 {
   return Factory::find(operator_name);
 }
 
 std::vector<std::string>
-get_module_operator_names(const std::string &module_name)
+get_module_operator_names(std::string const &module_name)
 {
 
   std::vector<std::string> operator_names;
diff --git a/src/factory.h b/src/factory.h
index 9eb4803e0..27bdd6f7e 100644
--- a/src/factory.h
+++ b/src/factory.h
@@ -20,7 +20,7 @@
 namespace Factory
 {
 // string -> pair(CdoModule,std::function)
-typedef std::function<std::shared_ptr<Process>(int, const std::string &, const std::vector<std::string> &)> ModuleConstructor;
+typedef std::function<std::shared_ptr<Process>(int, std::string const &, const std::vector<std::string> &)> ModuleConstructor;
 
 struct FactoryEntry
 {
@@ -36,30 +36,30 @@ struct FactoryEntry
 
 typedef std::map<std::string, FactoryEntry> OperatorMap;
 
-std::string err_msg_oper_not_found(const std::string &operatorname);
+std::string err_msg_oper_not_found(std::string const &operatorname);
 
-std::string find_similar_operators(const std::string &operatorName);
+std::string find_similar_operators(std::string const &operatorName);
 
-std::vector<std::string> get_module_operator_names(const std::string &module_name);
+std::vector<std::string> get_module_operator_names(std::string const &module_name);
 
-std::string get_original(const std::string &operatorName);
+std::string get_original(std::string const &operatorName);
 
 std::vector<std::string> get_sorted_operator_name_list();
 
 bool exists(const std::string arg);
 OperatorMap &get();  // Factory::get()
 
-OperatorMap::iterator find_module(const std::string &operatorName);
-OperatorMap::iterator find(const std::string &p_opername);
-OperatorMap::iterator find(const std::string &p_opername, std::function<void()> p_onError);
+OperatorMap::iterator find_module(std::string const &operatorName);
+OperatorMap::iterator find(std::string const &p_opername);
+OperatorMap::iterator find(std::string const &p_opername, std::function<void()> p_onError);
 
-const CdoModule &get_module(const std::string &p_operName);
+const CdoModule &get_module(std::string const &p_operName);
 const CdoModule &get_module(const OperatorMap::iterator &it);
 
-ModuleConstructor get_constructor(const std::string &p_operName);
+ModuleConstructor get_constructor(std::string const &p_operName);
 ModuleConstructor get_constructor(const OperatorMap::iterator it);
 
-const CdoHelp &get_help(const std::string &p_operName);
+const CdoHelp &get_help(std::string const &p_operName);
 const CdoHelp &get_help(OperatorMap::iterator p_it);
 };  // namespace Factory
 
@@ -70,14 +70,14 @@ struct RegisterEntry
   create_constructor(const CdoModule &mod)
   {
     return
-        [&mod](int p_ID, const std::string &p_operName, const std::vector<std::string> &p_operatorArguments) -> std::shared_ptr<T> {
+        [&mod](int p_ID, std::string const &p_operName, const std::vector<std::string> &p_operatorArguments) -> std::shared_ptr<T> {
           Debug(FACTORY, "Creating process via factory function, %d = ID, %s = name, %s = mod_name", p_ID, p_operName, mod.name);
           auto new_process = std::make_shared<T>(p_ID, p_operName, p_operatorArguments, mod);
           return new_process;
         };
   }
   void
-  register_operator(const CdoModule &mod, const std::string &p_oper_name, ArgumentHandler &arghandler)
+  register_operator(const CdoModule &mod, std::string const &p_oper_name, ArgumentHandler &arghandler)
   {
     Factory::get().insert(std::make_pair(p_oper_name, Factory::FactoryEntry(mod, create_constructor(mod), arghandler)));
   }
diff --git a/src/field.cc b/src/field.cc
index 51a7a229c..5a55b47d4 100644
--- a/src/field.cc
+++ b/src/field.cc
@@ -110,19 +110,19 @@ field_fill(Field &field, double value)
 }
 
 void
-field_ncopy(size_t n, const Field &fieldIn, Field &fieldOut)
+field_ncopy(size_t n, Field const &fieldIn, Field &fieldOut)
 {
   if (n > fieldIn.size) cdo_abort("Source field to small (%s)", __func__);
   if (n > fieldOut.size) cdo_abort("Target field to small (%s)", __func__);
 
   fieldOut.numMissVals = fieldIn.numMissVals;
 
-  auto func = [&](const auto &v1, auto &v2) { varray_copy(n, v1, v2); };
+  auto func = [&](auto const &v1, auto &v2) { varray_copy(n, v1, v2); };
   field_operation2(func, fieldIn, fieldOut);
 }
 
 void
-field_copy(const Field &fieldIn, Field &fieldOut)
+field_copy(Field const &fieldIn, Field &fieldOut)
 {
   field_ncopy(fieldIn.size, fieldIn, fieldOut);
 }
@@ -152,7 +152,7 @@ field_add(Field &field1, const Field3D &field2, int levelID)
 {
   auto size = field1.gridsize * field1.nwpv;
   auto offset = levelID * size;
-  auto func = [&](auto &v1, const auto &v2) {
+  auto func = [&](auto &v1, auto const &v2) {
     for (size_t i = 0; i < size; ++i) v1[i] += v2[offset + i];
   };
   field_operation2(func, field1, field2);
@@ -187,9 +187,9 @@ public:
 };
 
 size_t
-field_num_NANs(const Field &field)
+field_num_NANs(Field const &field)
 {
-  auto func = [&](const auto &v, auto n) {
+  auto func = [&](auto const &v, auto n) {
     size_t numNANs = 0;
 #ifdef HAVE_OPENMP4
 #pragma omp parallel for simd if (n > cdoMinLoopSize) default(shared) schedule(static) reduction(+ : numNANs)
@@ -203,140 +203,140 @@ field_num_NANs(const Field &field)
 size_t
 field_num_mv(Field &field)
 {
-  auto func = [](const auto &v, auto n, auto mv) { return varray_num_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n, auto mv) { return varray_num_mv(n, v, mv); };
   field.numMissVals = field_operation(func, field, field.size, field.missval);
   return field.numMissVals;
 }
 
 MinMax
-field_min_max(const Field &field)
+field_min_max(Field const &field)
 {
-  auto func = [](const auto &v) { return varray_min_max(v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_min_max_mv(n, v, mv); };
+  auto func = [](auto const &v) { return varray_min_max(v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_min_max_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field);
 }
 
 double
-field_min(const Field &field)
+field_min(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_min(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_min_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_min(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_min_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_max(const Field &field)
+field_max(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_max(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_max_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_max(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_max_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_range(const Field &field)
+field_range(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_range(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_range_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_range(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_range_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_sum(const Field &field)
+field_sum(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_sum(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_sum_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_sum(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_sum_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_mean(const Field &field)
+field_mean(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_mean(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_mean_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_mean(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_mean_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_meanw(const Field &field)
+field_meanw(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean(n, v, w, mv); };
-  auto func_mv = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean_mv(n, v, w, mv); };
+  auto func = [](auto const &v, auto n, auto mv, auto const &w) { return varray_weighted_mean(n, v, w, mv); };
+  auto func_mv = [](auto const &v, auto n, auto mv, auto const &w) { return varray_weighted_mean_mv(n, v, w, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval, field.weightv)
                            : field_operation(func, field, field.size, field.missval, field.weightv);
 }
 
 double
-field_avg(const Field &field)
+field_avg(Field const &field)
 {
-  auto func = [](const auto &v, auto n) { return varray_mean(n, v); };
-  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_avg_mv(n, v, mv); };
+  auto func = [](auto const &v, auto n) { return varray_mean(n, v); };
+  auto func_mv = [](auto const &v, auto n, auto mv) { return varray_avg_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
-field_avgw(const Field &field)
+field_avgw(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean(n, v, w, mv); };
-  auto func_mv = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_avg_mv(n, v, w, mv); };
+  auto func = [](auto const &v, auto n, auto mv, auto const &w) { return varray_weighted_mean(n, v, w, mv); };
+  auto func_mv = [](auto const &v, auto n, auto mv, auto const &w) { return varray_weighted_avg_mv(n, v, w, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval, field.weightv)
                            : field_operation(func, field, field.size, field.missval, field.weightv);
 }
 
 double
-field_var(const Field &field)
+field_var(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_var(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_var(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_var1(const Field &field)
+field_var1(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_var_1(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_var_1(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_skew(const Field &field)
+field_skew(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_skew(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_skew(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_kurt(const Field &field)
+field_kurt(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_kurt(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_kurt(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_median(const Field &field)
+field_median(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_median(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_median(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_count(const Field &field)
+field_count(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_count(n, v, numMissVals, mv); };
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv) { return varray_count(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
-field_varw(const Field &field)
+field_varw(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv, const auto &w) {
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv, auto const &w) {
     return varray_weighted_var(n, v, w, numMissVals, mv);
   };
   return field_operation(func, field, field.size, field.numMissVals, field.missval, field.weightv);
 }
 
 double
-field_var1w(const Field &field)
+field_var1w(Field const &field)
 {
-  auto func = [](const auto &v, auto n, auto numMissVals, auto mv, const auto &w) {
+  auto func = [](auto const &v, auto n, auto numMissVals, auto mv, auto const &w) {
     return varray_weighted_var_1(n, v, w, numMissVals, mv);
   };
   return field_operation(func, field, field.size, field.numMissVals, field.missval, field.weightv);
@@ -351,31 +351,31 @@ var_to_std(double rvar, double missval)
 }
 
 double
-field_std(const Field &field)
+field_std(Field const &field)
 {
   return var_to_std(field_var(field), field.missval);
 }
 
 double
-field_std1(const Field &field)
+field_std1(Field const &field)
 {
   return var_to_std(field_var1(field), field.missval);
 }
 
 double
-field_stdw(const Field &field)
+field_stdw(Field const &field)
 {
   return var_to_std(field_varw(field), field.missval);
 }
 
 double
-field_std1w(const Field &field)
+field_std1w(Field const &field)
 {
   return var_to_std(field_var1w(field), field.missval);
 }
 
 void
-field_rms(const Field &field, const Field &field2, Field &field3)
+field_rms(Field const &field, Field const &field2, Field &field3)
 {
   size_t rnumMissVals = 0;
   auto grid1 = field.grid;
@@ -386,7 +386,7 @@ field_rms(const Field &field, const Field &field2, Field &field3)
   const auto array2 = field2.vec_d.data();
   auto missval1 = field.missval;
   auto missval2 = field2.missval;
-  const auto &w = field.weightv;
+  auto const &w = field.weightv;
   auto rsum = 0.0, rsumw = 0.0;
   auto is_NE = fp_is_not_equal;
   auto is_EQ = fp_is_equal;
@@ -493,7 +493,7 @@ field_rank(Field &field)
 }
 
 double
-field_function(const Field &field, int function)
+field_function(Field const &field, int function)
 {
   // clang-format off
   switch (function)
diff --git a/src/field.h b/src/field.h
index efde597f4..c2fa4dc5c 100644
--- a/src/field.h
+++ b/src/field.h
@@ -174,18 +174,18 @@ using FieldVector3D = std::vector<FieldVector2D>;
 using Field3DVector = std::vector<Field3D>;
 
 void field_fill(Field &field, double value);
-void field_ncopy(size_t n, const Field &fieldIn, Field &fieldOut);
-void field_copy(const Field &fieldIn, Field &fieldOut);
+void field_ncopy(size_t n, Field const &fieldIn, Field &fieldOut);
+void field_copy(Field const &fieldIn, Field &fieldOut);
 void field_copy(const Field3D &fieldIn, Field3D &fieldOut);
 void field_copy(const Field3D &fieldIn, int levelID, Field &fieldOut);
 void field_add(Field &field1, const Field3D &field2, int levelID);
-size_t field_num_NANs(const Field &field);
+size_t field_num_NANs(Field const &field);
 size_t field_num_mv(Field &field);
-MinMax field_min_max(const Field &field);
+MinMax field_min_max(Field const &field);
 
 template <class UnaryOperation>
 void
-field_transform(const Field &fieldIn, Field &fieldOut, UnaryOperation unary_op)
+field_transform(Field const &fieldIn, Field &fieldOut, UnaryOperation unary_op)
 {
   if (fieldIn.memType == MemType::Float && fieldOut.memType == MemType::Float)
     varray_transform(fieldIn.vec_f, fieldOut.vec_f, unary_op);
diff --git a/src/field2.cc b/src/field2.cc
index 1f271594d..8f10cc98c 100644
--- a/src/field2.cc
+++ b/src/field2.cc
@@ -82,7 +82,7 @@ varray2_arith(Varray<T1> &v1, const Varray<T2> &v2, size_t n, FUNC func)
   for (size_t i = 0; i < n; ++i) { v1[i] = func(v1[i], v2[i]); }
 }
 
-auto varray2_func = [](auto &v1, const auto &v2, size_t n, auto arith_func) { varray2_arith(v1, v2, n, arith_func); };
+auto varray2_func = [](auto &v1, auto const &v2, size_t n, auto arith_func) { varray2_arith(v1, v2, n, arith_func); };
 
 template <typename T1, typename T2, typename FUNC>
 static void
@@ -113,13 +113,13 @@ varray2_arith_mv(Varray<T1> &v1, const Varray<T2> &v2, size_t n, double missval1
     }
 }
 
-auto varray2_func_mv = [](auto &v1, const auto &v2, size_t n, double mv1, double mv2, auto arith_mv_func) {
+auto varray2_func_mv = [](auto &v1, auto const &v2, size_t n, double mv1, double mv2, auto arith_mv_func) {
   varray2_arith_mv(v1, v2, n, mv1, mv2, arith_mv_func);
 };
 
 // init valid values
 void
-field2_vinit(Field &field1, const Field &field2)
+field2_vinit(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -129,7 +129,7 @@ field2_vinit(Field &field1, const Field &field2)
 
 // increment valid values
 void
-field2_vincr(Field &field1, const Field &field2)
+field2_vincr(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -147,7 +147,7 @@ field2_vinit(Varray<T1> &v1, const Varray<T2> &v2, size_t len, double mv, int vi
 }
 
 void
-field2_vinit(Field &field1, const Field &field2, int vinit)
+field2_vinit(Field &field1, Field const &field2, int vinit)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
   /*
@@ -156,7 +156,7 @@ field2_vinit(Field &field1, const Field &field2, int vinit)
     for (size_t i = 0; i < n; ++i) v1[i] = (fp_is_equal(v2[i], missval)) ? 0 : vinit;
   };
   */
-  auto func = [&](auto &v1, const auto &v2, size_t n, double mv) { field2_vinit(v1, v2, n, mv, vinit); };
+  auto func = [&](auto &v1, auto const &v2, size_t n, double mv) { field2_vinit(v1, v2, n, mv, vinit); };
   field_operation2(func, field1, field2, field2.size, field2.missval);
 
   field1.numMissVals = field2.numMissVals;
@@ -173,18 +173,18 @@ field2_vincr(Varray<T1> &v1, const Varray<T2> &v2, size_t len, double mv, int vi
 }
 
 void
-field2_vincr(Field &field1, const Field &field2, int vincr)
+field2_vincr(Field &field1, Field const &field2, int vincr)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
-  auto func = [&](auto &v1, const auto &v2, size_t n, double mv) { field2_vincr(v1, v2, n, mv, vincr); };
+  auto func = [&](auto &v1, auto const &v2, size_t n, double mv) { field2_vincr(v1, v2, n, mv, vincr); };
   field_operation2(func, field1, field2, field2.size, field2.missval);
 
   field1.numMissVals = field2.numMissVals;
 }
 
 void
-field2_add(Field &field1, const Field &field2)
+field2_add(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -197,7 +197,7 @@ field2_add(Field &field1, const Field &field2)
 }
 
 void
-field2_sum(Field &field1, const Field &field2)
+field2_sum(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -210,12 +210,12 @@ field2_sum(Field &field1, const Field &field2)
 }
 
 void
-field2_sumw(Field &field1, const Field &field2, double w)
+field2_sumw(Field &field1, Field const &field2, double w)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -253,12 +253,12 @@ field2_sumw(Field &field1, const Field &field2, double w)
  * change anything (they do not start a non-period by setting occurrence to zero).
  */
 void
-field2_sumtr(Field &occur, const Field &field, double refval)
+field2_sumtr(Field &occur, Field const &field, double refval)
 {
   auto omissval = occur.missval;
   auto fmissval = field.missval;
   auto &oarray = occur.vec_d;
-  const auto &farray = field.vec_d;
+  auto const &farray = field.vec_d;
 
   auto len = occur.size;
   if (len != field.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -293,7 +293,7 @@ field2_sumtr(Field &occur, const Field &field, double refval)
 }
 
 void
-field2_sumq(Field &field1, const Field &field2)
+field2_sumq(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -306,19 +306,19 @@ field2_sumq(Field &field1, const Field &field2)
 }
 
 void
-field2_sumsumq(Field &field1, Field &field2, const Field &field3)
+field2_sumsumq(Field &field1, Field &field2, Field const &field3)
 {
   field2_sumq(field2, field3);
   field2_sum(field1, field3);
 }
 
 void
-field2_sumqw(Field &field1, const Field &field2, double w)
+field2_sumqw(Field &field1, Field const &field2, double w)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -349,7 +349,7 @@ field2_sumqw(Field &field1, const Field &field2, double w)
 }
 
 void
-field2_sub(Field &field1, const Field &field2)
+field2_sub(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -362,7 +362,7 @@ field2_sub(Field &field1, const Field &field2)
 }
 
 void
-field2_mul(Field &field1, const Field &field2)
+field2_mul(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -375,7 +375,7 @@ field2_mul(Field &field1, const Field &field2)
 }
 
 void
-field2_div(Field &field1, const Field &field2)
+field2_div(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -386,14 +386,14 @@ field2_div(Field &field1, const Field &field2)
     }
   else
     {
-      auto func = [](auto &v1, const auto &v2, size_t n, double mv) { varray2_div(v1, v2, n, mv); };
+      auto func = [](auto &v1, auto const &v2, size_t n, double mv) { varray2_div(v1, v2, n, mv); };
       field_operation2(func, field1, field2, field1.size, field1.missval);
       field_num_mv(field1);
     }
 }
 
 void
-field2_atan2(Field &field1, const Field &field2)
+field2_atan2(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -402,7 +402,7 @@ field2_atan2(Field &field1, const Field &field2)
 }
 
 void
-field2_set_miss(Field &field1, const Field &field2)
+field2_set_miss(Field &field1, Field const &field2)
 {
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -411,7 +411,7 @@ field2_set_miss(Field &field1, const Field &field2)
     {
       auto missval1 = field1.missval;
       auto &array1 = field1.vec_d;
-      const auto &array2 = field2.vec_d;
+      auto const &array2 = field2.vec_d;
 
       for (size_t i = 0; i < len; ++i) array1[i] = fp_is_equal(array1[i], missval1) ? array2[i] : array1[i];
 
@@ -420,7 +420,7 @@ field2_set_miss(Field &field1, const Field &field2)
 }
 
 void
-field2_min(Field &field1, const Field &field2)
+field2_min(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -433,7 +433,7 @@ field2_min(Field &field1, const Field &field2)
 }
 
 void
-field2_max(Field &field1, const Field &field2)
+field2_max(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
@@ -446,7 +446,7 @@ field2_max(Field &field1, const Field &field2)
 }
 
 void
-field2_maxmin(Field &field1, Field &field2, const Field &field3)
+field2_maxmin(Field &field1, Field &field2, Field const &field3)
 {
   field2_min(field2, field3);
   field2_max(field1, field3);
@@ -459,7 +459,7 @@ auto field2_set_index = [](auto &v1, auto &v2, auto v3, auto idx) {
 
 template <typename T>
 void
-field2_minidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field &field2, const Varray<T> &v3, int idx)
+field2_minidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field &field2, Varray<T> const &v3, int idx)
 {
   T missval3 = mv3;
   auto missval1 = field1.missval;
@@ -491,17 +491,17 @@ field2_minidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field
 }
 
 void
-field2_minidx(Field &field1, Field &field2, const Field &field3, int idx)
+field2_minidx(Field &field1, Field &field2, Field const &field3, int idx)
 {
   if (field1.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
   if (field2.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
-  auto func = [&](const auto &v3) { field2_minidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
+  auto func = [&](auto const &v3) { field2_minidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
   field_operation(func, field3);
 }
 
 template <typename T>
 void
-field2_maxidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field &field2, const Varray<T> &v3, int idx)
+field2_maxidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field &field2, Varray<T> const &v3, int idx)
 {
   T missval3 = mv3;
   auto missval1 = field1.missval;
@@ -533,11 +533,11 @@ field2_maxidx(size_t numMissVals3, size_t len, double mv3, Field &field1, Field
 }
 
 void
-field2_maxidx(Field &field1, Field &field2, const Field &field3, int idx)
+field2_maxidx(Field &field1, Field &field2, Field const &field3, int idx)
 {
   if (field1.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
   if (field2.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
-  auto func = [&](const auto &v3) { field2_maxidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
+  auto func = [&](auto const &v3) { field2_maxidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
   field_operation(func, field3);
 }
 
@@ -569,13 +569,13 @@ field_set_numMissVals(size_t len, Varray<double> &v, double missval)
 }
 
 void
-field2_var(Field &field1, const Field &field2, const Field &field3, int divisor)
+field2_var(Field &field1, Field const &field2, Field const &field3, int divisor)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
-  const auto &array3 = field3.vec_d;
+  auto const &array2 = field2.vec_d;
+  auto const &array3 = field3.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -605,7 +605,7 @@ field2_var(Field &field1, const Field &field2, const Field &field3, int divisor)
 }
 
 void
-field2_std(Field &field1, const Field &field2, const Field &field3, int divisor)
+field2_std(Field &field1, Field const &field2, Field const &field3, int divisor)
 {
   auto missval1 = field1.missval;
   auto &array1 = field1.vec_d;
@@ -627,13 +627,13 @@ field2_std(Field &field1, const Field &field2, const Field &field3, int divisor)
 }
 
 void
-fieldc_var(Field &field1, const Field &field2, int numSets, int divisor)
+fieldc_var(Field &field1, Field const &field2, int numSets, int divisor)
 {
   auto nsetx = numSets - divisor;
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -666,7 +666,7 @@ fieldc_var(Field &field1, const Field &field2, int numSets, int divisor)
 }
 
 void
-fieldc_std(Field &field1, const Field &field2, int numSets, int divisor)
+fieldc_std(Field &field1, Field const &field2, int numSets, int divisor)
 {
   auto missval1 = field1.missval;
   auto &array1 = field1.vec_d;
@@ -689,12 +689,12 @@ fieldc_std(Field &field1, const Field &field2, int numSets, int divisor)
 }
 
 void
-field2_moq(Field &field1, const Field &field2)
+field2_moq(Field &field1, Field const &field2)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -716,12 +716,12 @@ field2_moq(Field &field1, const Field &field2)
 }
 
 void
-field2_moqw(Field &field1, const Field &field2, double w)
+field2_moqw(Field &field1, Field const &field2, double w)
 {
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
@@ -784,13 +784,13 @@ varray_count(Varray<T> &v, size_t len)
 }
 
 void
-field2_count(Field &field1, const Field &field2)
+field2_count(Field &field1, Field const &field2)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
   if (field1.numMissVals || field2.numMissVals)
     {
-      auto func = [](auto &v1, const auto &v2, size_t n, double mv1, double mv2) { varray2_count_mv(v1, v2, n, mv1, mv2); };
+      auto func = [](auto &v1, auto const &v2, size_t n, double mv1, double mv2) { varray2_count_mv(v1, v2, n, mv1, mv2); };
       field_operation2(func, field1, field2, field1.size, field1.missval, field2.missval);
       field_num_mv(field1);
     }
@@ -802,7 +802,7 @@ field2_count(Field &field1, const Field &field2)
 }
 
 void
-field2_function(Field &field1, const Field &field2, int function)
+field2_function(Field &field1, Field const &field2, int function)
 {
   // clang-format off
   switch (function)
diff --git a/src/field2_complex.cc b/src/field2_complex.cc
index e811ce5b9..c91a19d78 100644
--- a/src/field2_complex.cc
+++ b/src/field2_complex.cc
@@ -12,13 +12,13 @@
 #include "cdo_output.h"
 
 static void
-field2_add_complex(Field &field1, const Field &field2)
+field2_add_complex(Field &field1, Field const &field2)
 {
   auto is_EQ = fp_is_equal;
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   if (field1.nwpv != 2) cdo_abort("Field1 is not complex!");
   if (field2.nwpv != 2) cdo_abort("Field2 is not complex!");
@@ -34,13 +34,13 @@ field2_add_complex(Field &field1, const Field &field2)
 }
 
 static void
-field2_sub_complex(Field &field1, const Field &field2)
+field2_sub_complex(Field &field1, Field const &field2)
 {
   auto is_EQ = fp_is_equal;
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   if (field1.nwpv != 2) cdo_abort("Field1 is not complex!");
   if (field2.nwpv != 2) cdo_abort("Field2 is not complex!");
@@ -56,13 +56,13 @@ field2_sub_complex(Field &field1, const Field &field2)
 }
 
 static void
-field2_mul_complex(Field &field1, const Field &field2)
+field2_mul_complex(Field &field1, Field const &field2)
 {
   auto is_EQ = fp_is_equal;
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   if (field1.nwpv != 2) cdo_abort("Field1 is not complex!");
   if (field2.nwpv != 2) cdo_abort("Field2 is not complex!");
@@ -81,13 +81,13 @@ field2_mul_complex(Field &field1, const Field &field2)
 }
 
 static void
-field2_div_complex(Field &field1, const Field &field2)
+field2_div_complex(Field &field1, Field const &field2)
 {
   auto is_EQ = fp_is_equal;
   auto missval1 = field1.missval;
   auto missval2 = field2.missval;
   auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
+  auto const &array2 = field2.vec_d;
 
   if (field1.nwpv != 2) cdo_abort("Field1 is not complex!");
   if (field2.nwpv != 2) cdo_abort("Field2 is not complex!");
@@ -107,7 +107,7 @@ field2_div_complex(Field &field1, const Field &field2)
 }
 
 void
-field2_function_complex(Field &field1, const Field &field2, int function)
+field2_function_complex(Field &field1, Field const &field2, int function)
 {
   // clang-format off
   switch (function)
diff --git a/src/field_functions.h b/src/field_functions.h
index a4db6fd18..b6bf9b0fa 100644
--- a/src/field_functions.h
+++ b/src/field_functions.h
@@ -75,28 +75,28 @@ void field1Dlevels_init(FieldVector &field1D, const VarList &varList);
 void field1Dlevels_init(FieldVector &field1D, const VarList &varList, int ptype);
 
 // field.cc
-double field_function(const Field &field, int function);
-
-double field_min(const Field &field);
-double field_range(const Field &field);
-double field_max(const Field &field);
-double field_sum(const Field &field);
-double field_mean(const Field &field);
-double field_meanw(const Field &field);
-double field_avg(const Field &field);
-double field_avgw(const Field &field);
-double field_std(const Field &field);
-double field_std1(const Field &field);
-double field_var(const Field &field);
-double field_var1(const Field &field);
-double field_stdw(const Field &field);
-double field_std1w(const Field &field);
-double field_varw(const Field &field);
-double field_var1w(const Field &field);
-double field_skew(const Field &field);
-double field_kurt(const Field &field);
-double field_median(const Field &field);
-double field_count(const Field &field);
+double field_function(Field const &field, int function);
+
+double field_min(Field const &field);
+double field_range(Field const &field);
+double field_max(Field const &field);
+double field_sum(Field const &field);
+double field_mean(Field const &field);
+double field_meanw(Field const &field);
+double field_avg(Field const &field);
+double field_avgw(Field const &field);
+double field_std(Field const &field);
+double field_std1(Field const &field);
+double field_var(Field const &field);
+double field_var1(Field const &field);
+double field_stdw(Field const &field);
+double field_std1w(Field const &field);
+double field_varw(Field const &field);
+double field_var1w(Field const &field);
+double field_skew(Field const &field);
+double field_kurt(Field const &field);
+double field_median(Field const &field);
+double field_count(Field const &field);
 
 // ENS validation
 double field_rank(Field &field);
@@ -104,27 +104,27 @@ double field_rank(Field &field);
 double field_pctl(Field &field, double pn);
 
 // field_zonal.cc
-void zonal_function(const Field &field1, Field &field2, int function);
-void zonal_min(const Field &field1, Field &field2);
-void zonal_max(const Field &field1, Field &field2);
-void zonal_range(const Field &field1, Field &field2);
-void zonal_sum(const Field &field1, Field &field2);
-void zonal_avg(const Field &field1, Field &field2);
-void zonal_mean(const Field &field1, Field &field2);
-void zonal_std(const Field &field1, Field &field2);
-void zonal_std1(const Field &field1, Field &field2);
-void zonal_var(const Field &field1, Field &field2);
-void zonal_var1(const Field &field1, Field &field2);
-void zonal_skew(const Field &field1, Field &field2);
-void zonal_kurt(const Field &field1, Field &field2);
-void zonal_median(const Field &field1, Field &field2);
-void zonal_pctl(const Field &field1, Field &field2, double pn);
+void zonal_function(Field const &field1, Field &field2, int function);
+void zonal_min(Field const &field1, Field &field2);
+void zonal_max(Field const &field1, Field &field2);
+void zonal_range(Field const &field1, Field &field2);
+void zonal_sum(Field const &field1, Field &field2);
+void zonal_avg(Field const &field1, Field &field2);
+void zonal_mean(Field const &field1, Field &field2);
+void zonal_std(Field const &field1, Field &field2);
+void zonal_std1(Field const &field1, Field &field2);
+void zonal_var(Field const &field1, Field &field2);
+void zonal_var1(Field const &field1, Field &field2);
+void zonal_skew(Field const &field1, Field &field2);
+void zonal_kurt(Field const &field1, Field &field2);
+void zonal_median(Field const &field1, Field &field2);
+void zonal_pctl(Field const &field1, Field &field2, double pn);
 
 // field_meridional.cc
-void meridional_function(const Field &field1, Field &field2, int function);
-void meridional_pctl(const Field &field1, Field &field2, double pn);
+void meridional_function(Field const &field1, Field &field2, int function);
+void meridional_pctl(Field const &field1, Field &field2, double pn);
 
-void field_rms(const Field &field1, const Field &field2, Field &field3);
+void field_rms(Field const &field1, Field const &field2, Field &field3);
 
 // fieldc.cc
 void fieldc_function(Field &field, double rconst, int function);
@@ -141,40 +141,40 @@ void fieldc_mod(Field &field, double divisor);
 void fieldc_function_complex(Field &field, const double rconstcplx[2], int function);
 
 // field2.cc
-void field2_function(Field &field1, const Field &field2, int function);
-
-void field2_add(Field &field1, const Field &field2);
-void field2_sum(Field &field1, const Field &field2);
-void field2_sub(Field &field1, const Field &field2);
-void field2_mul(Field &field1, const Field &field2);
-void field2_div(Field &field1, const Field &field2);
-void field2_min(Field &field1, const Field &field2);
-void field2_max(Field &field1, const Field &field2);
-void field2_atan2(Field &field1, const Field &field2);
-
-void field2_sumq(Field &field1, const Field &field2);
-void field2_sumw(Field &field1, const Field &field2, double w);
-void field2_sumqw(Field &field1, const Field &field2, double w);
-void field2_sumtr(Field &field1, const Field &field2, double refval);
-void field2_vinit(Field &field1, const Field &field2);
-void field2_vincr(Field &field1, const Field &field2);
-void field2_vinit(Field &field1, const Field &field2, int vinit);
-void field2_vincr(Field &field1, const Field &field2, int vincr);
-
-void field2_sumsumq(Field &field1, Field &field2, const Field &field3);
-void field2_maxmin(Field &field1, Field &field2, const Field &field3);
-void field2_minidx(Field &field1, Field &field2, const Field &field3, int idx);
-void field2_maxidx(Field &field1, Field &field2, const Field &field3, int idx);
-void field2_var(Field &field1, const Field &field2, const Field &field3, int divisor);
-void field2_std(Field &field1, const Field &field2, const Field &field3, int divisor);
-void fieldc_var(Field &field1, const Field &field2, int numSets, int divisor);
-void fieldc_std(Field &field1, const Field &field2, int numSets, int divisor);
-void field2_moq(Field &field1, const Field &field2);
-void field2_moqw(Field &field1, const Field &field2, double w);
-
-void field2_count(Field &field1, const Field &field2);
+void field2_function(Field &field1, Field const &field2, int function);
+
+void field2_add(Field &field1, Field const &field2);
+void field2_sum(Field &field1, Field const &field2);
+void field2_sub(Field &field1, Field const &field2);
+void field2_mul(Field &field1, Field const &field2);
+void field2_div(Field &field1, Field const &field2);
+void field2_min(Field &field1, Field const &field2);
+void field2_max(Field &field1, Field const &field2);
+void field2_atan2(Field &field1, Field const &field2);
+
+void field2_sumq(Field &field1, Field const &field2);
+void field2_sumw(Field &field1, Field const &field2, double w);
+void field2_sumqw(Field &field1, Field const &field2, double w);
+void field2_sumtr(Field &field1, Field const &field2, double refval);
+void field2_vinit(Field &field1, Field const &field2);
+void field2_vincr(Field &field1, Field const &field2);
+void field2_vinit(Field &field1, Field const &field2, int vinit);
+void field2_vincr(Field &field1, Field const &field2, int vincr);
+
+void field2_sumsumq(Field &field1, Field &field2, Field const &field3);
+void field2_maxmin(Field &field1, Field &field2, Field const &field3);
+void field2_minidx(Field &field1, Field &field2, Field const &field3, int idx);
+void field2_maxidx(Field &field1, Field &field2, Field const &field3, int idx);
+void field2_var(Field &field1, Field const &field2, Field const &field3, int divisor);
+void field2_std(Field &field1, Field const &field2, Field const &field3, int divisor);
+void fieldc_var(Field &field1, Field const &field2, int numSets, int divisor);
+void fieldc_std(Field &field1, Field const &field2, int numSets, int divisor);
+void field2_moq(Field &field1, Field const &field2);
+void field2_moqw(Field &field1, Field const &field2, double w);
+
+void field2_count(Field &field1, Field const &field2);
 
 // field2_complex.cc
-void field2_function_complex(Field &field1, const Field &field2, int function);
+void field2_function_complex(Field &field1, Field const &field2, int function);
 
 #endif /* FIELD_FUNCTIONS_H */
diff --git a/src/field_memory.cc b/src/field_memory.cc
index 6de4f594f..f25e780db 100644
--- a/src/field_memory.cc
+++ b/src/field_memory.cc
@@ -17,7 +17,7 @@ field2D_init_kernel(FieldVector2D &field2D, const VarList &varList, int ptype, b
   auto numVars = varList.numVars();
   field2D.resize(numVars);
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       auto gridSize = var.gridsize;
       auto size = gridSize * var.nwpv;
@@ -89,7 +89,7 @@ field1Dvars_init_kernel(FieldVector &field1D, const VarList &varList, int ptype,
   auto numVars = varList.numVars();
   field1D.resize(numVars);
 
-  for (const auto &var : varList.vars)
+  for (auto const &var : varList.vars)
     {
       auto gridSize = var.gridsize;
       auto size = gridSize * var.nwpv;
@@ -148,7 +148,7 @@ field1Dlevels_init_kernel(FieldVector &field1D, const VarList &varList, int ptyp
 {
   auto allocateData = (ptype & FIELD_VEC);
 
-  const auto &var = varList.vars[0];
+  auto const &var = varList.vars[0];
   auto gridSize = var.gridsize;
   auto size = gridSize * var.nwpv;
   auto numLevels = var.nlevels;
diff --git a/src/field_meridional.cc b/src/field_meridional.cc
index 06d03927f..c76829e09 100644
--- a/src/field_meridional.cc
+++ b/src/field_meridional.cc
@@ -11,22 +11,22 @@
 #include "field_functions.h"
 #include "cdo_output.h"
 
-using funcType1 = double(size_t, const Varray<double> &);
-using funcTypeMV1 = double(size_t, const Varray<double> &, double);
-using funcType2 = double(size_t, const Varray<double> &, const Varray<double> &, double);
-using funcTypeMV2 = double(size_t, const Varray<double> &, const Varray<double> &, double);
-using funcType3 = double(size_t, const Varray<double> &, const Varray<double> &, size_t, double);
-using funcType4 = double(size_t, const Varray<double> &, size_t, double);
+using funcType1 = double(size_t, Varray<double> const &);
+using funcTypeMV1 = double(size_t, Varray<double> const &, double);
+using funcType2 = double(size_t, Varray<double> const &, Varray<double> const &, double);
+using funcTypeMV2 = double(size_t, Varray<double> const &, Varray<double> const &, double);
+using funcType3 = double(size_t, Varray<double> const &, Varray<double> const &, size_t, double);
+using funcType4 = double(size_t, Varray<double> const &, size_t, double);
 
 template <typename T>
 static void
-varray_copy_meridional(size_t i, size_t nx, size_t ny, const Varray<T> &v1, Varray<double> &v2)
+varray_copy_meridional(size_t i, size_t nx, size_t ny, Varray<T> const &v1, Varray<double> &v2)
 {
   for (size_t j = 0; j < ny; ++j) v2[j] = v1[j * nx + i];
 }
 
 static void
-meridional_kernel_1(const Field &field1, Field &field2, funcType1 func, funcTypeMV1 funcMV)
+meridional_kernel_1(Field const &field1, Field &field2, funcType1 func, funcTypeMV1 funcMV)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -38,7 +38,7 @@ meridional_kernel_1(const Field &field1, Field &field2, funcType1 func, funcType
 
   for (size_t i = 0; i < nx; ++i)
     {
-      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](auto const &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = numMissVals ? funcMV(ny, v, missval) : func(ny, v);
@@ -50,7 +50,7 @@ meridional_kernel_1(const Field &field1, Field &field2, funcType1 func, funcType
 }
 
 static void
-meridional_kernel_2(const Field &field1, Field &field2, funcType2 func, funcTypeMV2 funcMV)
+meridional_kernel_2(Field const &field1, Field &field2, funcType2 func, funcTypeMV2 funcMV)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -63,7 +63,7 @@ meridional_kernel_2(const Field &field1, Field &field2, funcType2 func, funcType
   for (size_t i = 0; i < nx; ++i)
     {
       varray_copy_meridional(i, nx, ny, field1.weightv, w);
-      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](auto const &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = numMissVals ? funcMV(ny, v, w, missval) : func(ny, v, w, missval);
@@ -75,7 +75,7 @@ meridional_kernel_2(const Field &field1, Field &field2, funcType2 func, funcType
 }
 
 static void
-meridional_kernel_3(const Field &field1, Field &field2, funcType3 func)
+meridional_kernel_3(Field const &field1, Field &field2, funcType3 func)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -88,7 +88,7 @@ meridional_kernel_3(const Field &field1, Field &field2, funcType3 func)
   for (size_t i = 0; i < nx; ++i)
     {
       varray_copy_meridional(i, nx, ny, field1.weightv, w);
-      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](auto const &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = func(ny, v, w, numMissVals, missval);
@@ -100,7 +100,7 @@ meridional_kernel_3(const Field &field1, Field &field2, funcType3 func)
 }
 
 static void
-meridional_kernel_4(const Field &field1, Field &field2, funcType4 func)
+meridional_kernel_4(Field const &field1, Field &field2, funcType4 func)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -112,7 +112,7 @@ meridional_kernel_4(const Field &field1, Field &field2, funcType4 func)
 
   for (size_t i = 0; i < nx; ++i)
     {
-      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](auto const &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto numMissval = ny - varray_count(ny, v, numMissVals, missval);
@@ -125,55 +125,55 @@ meridional_kernel_4(const Field &field1, Field &field2, funcType4 func)
 }
 
 static void
-meridional_min(const Field &field1, Field &field2)
+meridional_min(Field const &field1, Field &field2)
 {
   meridional_kernel_1(field1, field2, varray_min, varray_min_mv);
 }
 
 static void
-meridional_max(const Field &field1, Field &field2)
+meridional_max(Field const &field1, Field &field2)
 {
   meridional_kernel_1(field1, field2, varray_max, varray_max_mv);
 }
 
 static void
-meridional_range(const Field &field1, Field &field2)
+meridional_range(Field const &field1, Field &field2)
 {
   meridional_kernel_1(field1, field2, varray_range, varray_range_mv);
 }
 
 static void
-meridional_sum(const Field &field1, Field &field2)
+meridional_sum(Field const &field1, Field &field2)
 {
   meridional_kernel_1(field1, field2, varray_sum, varray_sum_mv);
 }
 
 static void
-meridional_meanw(const Field &field1, Field &field2)
+meridional_meanw(Field const &field1, Field &field2)
 {
   meridional_kernel_2(field1, field2, varray_weighted_mean, varray_weighted_mean_mv);
 }
 
 static void
-meridional_avgw(const Field &field1, Field &field2)
+meridional_avgw(Field const &field1, Field &field2)
 {
   meridional_kernel_2(field1, field2, varray_weighted_mean, varray_weighted_avg_mv);
 }
 
 static void
-meridional_varw(const Field &field1, Field &field2)
+meridional_varw(Field const &field1, Field &field2)
 {
   meridional_kernel_3(field1, field2, varray_weighted_var);
 }
 
 static void
-meridional_var1w(const Field &field1, Field &field2)
+meridional_var1w(Field const &field1, Field &field2)
 {
   meridional_kernel_3(field1, field2, varray_weighted_var_1);
 }
 
 static void
-meridional_stdw(const Field &field1, Field &field2)
+meridional_stdw(Field const &field1, Field &field2)
 {
   size_t rnumMissVals = 0;
   auto missval = field1.missval;
@@ -193,7 +193,7 @@ meridional_stdw(const Field &field1, Field &field2)
 }
 
 static void
-meridional_std1w(const Field &field1, Field &field2)
+meridional_std1w(Field const &field1, Field &field2)
 {
   size_t rnumMissVals = 0;
   auto missval = field1.missval;
@@ -213,25 +213,25 @@ meridional_std1w(const Field &field1, Field &field2)
 }
 
 static void
-meridional_skew(const Field &field1, Field &field2)
+meridional_skew(Field const &field1, Field &field2)
 {
   meridional_kernel_4(field1, field2, varray_skew);
 }
 
 static void
-meridional_kurt(const Field &field1, Field &field2)
+meridional_kurt(Field const &field1, Field &field2)
 {
   meridional_kernel_4(field1, field2, varray_kurt);
 }
 
 static void
-meridional_median(const Field &field1, Field &field2)
+meridional_median(Field const &field1, Field &field2)
 {
   meridional_kernel_4(field1, field2, varray_median);
 }
 
 void
-meridional_pctl(const Field &field1, Field &field2, double pn)
+meridional_pctl(Field const &field1, Field &field2, double pn)
 {
   size_t rnumMissVals = 0;
   auto missval = field1.missval;
@@ -266,7 +266,7 @@ meridional_pctl(const Field &field1, Field &field2, double pn)
         {
           if (ny > 0)
             {
-              auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+              auto func_copy_meridional = [&](auto const &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
               field_operation(func_copy_meridional, field1);
 
               field2.vec_d[i] = percentile(v.data(), ny, pn);
@@ -283,7 +283,7 @@ meridional_pctl(const Field &field1, Field &field2, double pn)
 }
 
 void
-meridional_function(const Field &field1, Field &field2, int function)
+meridional_function(Field const &field1, Field &field2, int function)
 {
   // clang-format off
   switch (function)
diff --git a/src/field_trend.cc b/src/field_trend.cc
index e2cac1fd3..9155952d0 100644
--- a/src/field_trend.cc
+++ b/src/field_trend.cc
@@ -5,7 +5,7 @@
 
 template <typename T>
 static void
-calc_trend_sum(FieldVector3D &work, bool hasMissvals, size_t len, const Varray<T> &varray, double mv, double zj, int varID,
+calc_trend_sum(FieldVector3D &work, bool hasMissvals, size_t len, Varray<T> const &varray, double mv, double zj, int varID,
                int levelID)
 {
   T missval = mv;
@@ -50,16 +50,16 @@ calc_trend_sum(FieldVector3D &work, bool hasMissvals, size_t len, const Varray<T
 }
 
 void
-calc_trend_sum(FieldVector3D &work, const Field &field, double zj, int varID, int levelID)
+calc_trend_sum(FieldVector3D &work, Field const &field, double zj, int varID, int levelID)
 {
   auto hasMissvals = (field.numMissVals > 0);
-  auto func = [&](const auto &v) { calc_trend_sum(work, hasMissvals, field.size, v, field.missval, zj, varID, levelID); };
+  auto func = [&](auto const &v) { calc_trend_sum(work, hasMissvals, field.size, v, field.missval, zj, varID, levelID); };
   field_operation(func, field);
 }
 
 template <typename T>
 static void
-sub_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<double> &v3, size_t len, double mv)
+sub_trend(double zj, Varray<T> &v1, Varray<double> const &v2, Varray<double> const &v3, size_t len, double mv)
 {
   auto missval1 = mv;
   auto missval2 = mv;
@@ -79,7 +79,7 @@ sub_trend(double zj, Varray<T> &v1, const Varray<double> &v2, const Varray<doubl
 }
 
 void
-sub_trend(double zj, Field &field1, const Field &field2, const Field &field3)
+sub_trend(double zj, Field &field1, Field const &field2, Field const &field3)
 {
   auto func = [&](auto &v1) { sub_trend(zj, v1, field2.vec_d, field3.vec_d, field1.size, field1.missval); };
   field_operation(func, field1);
@@ -92,11 +92,11 @@ calc_trend_param(const FieldVector3D &work, Field &paramA, Field &paramB, int va
   auto missval1 = paramA.missval;
   auto missval2 = paramA.missval;
 
-  const auto &sumj = work[0][varID][levelID].vec_d;
-  const auto &sumjj = work[1][varID][levelID].vec_d;
-  const auto &sumjx = work[2][varID][levelID].vec_d;
-  const auto &sumx = work[3][varID][levelID].vec_d;
-  const auto &zn = work[4][varID][levelID].vec_d;
+  auto const &sumj = work[0][varID][levelID].vec_d;
+  auto const &sumjj = work[1][varID][levelID].vec_d;
+  auto const &sumjx = work[2][varID][levelID].vec_d;
+  auto const &sumx = work[3][varID][levelID].vec_d;
+  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]));
diff --git a/src/field_trend.h b/src/field_trend.h
index 72cea72f9..c614d37c7 100644
--- a/src/field_trend.h
+++ b/src/field_trend.h
@@ -9,8 +9,8 @@
 
 #include "field.h"
 
-void calc_trend_sum(FieldVector3D &work, const Field &field, double zj, int varID, int levelID);
-void sub_trend(double zj, Field &field1, const Field &field2, const Field &field3);
+void calc_trend_sum(FieldVector3D &work, Field const &field, double zj, int varID, int levelID);
+void sub_trend(double zj, Field &field1, Field const &field2, Field const &field3);
 void calc_trend_param(const FieldVector3D &work, Field &field2, Field &field3, int varID, int levelID);
 
 #endif
diff --git a/src/field_vinterp.cc b/src/field_vinterp.cc
index faaa2804b..aa0fd869e 100644
--- a/src/field_vinterp.cc
+++ b/src/field_vinterp.cc
@@ -57,7 +57,7 @@ vertical_interp_Z(size_t nlevels, Field3D &fullLevel, Field3D &halfLevel, Field3
 
 void
 vertical_interp_X(const Field3D &levels3D, const Field3D &field1, Field3D &field2, const std::vector<int> &vertIndex3D,
-                  const Varray<double> &levels2, size_t gridsize)
+                  Varray<double> const &levels2, size_t gridsize)
 {
   auto numLevels2 = levels2.size();
   auto missval = field1.missval;
diff --git a/src/field_vinterp.h b/src/field_vinterp.h
index 7c0416b34..aa09657d2 100644
--- a/src/field_vinterp.h
+++ b/src/field_vinterp.h
@@ -22,6 +22,6 @@ void vertical_interp_Z(size_t nlevels, Field3D &full_level, Field3D &half_level,
                        Field &sgeopot, std::vector<int> &vertIndex, Varray<double> &plev, size_t gridsize);
 
 void vertical_interp_X(const Field3D &levels3D, const Field3D &field1, Field3D &field2, const std::vector<int> &vertIndex3D,
-                       const Varray<double> &levels2, size_t gridsize);
+                       Varray<double> const &levels2, size_t gridsize);
 
 #endif
diff --git a/src/field_zonal.cc b/src/field_zonal.cc
index e039f2bc6..0c491c412 100644
--- a/src/field_zonal.cc
+++ b/src/field_zonal.cc
@@ -16,15 +16,15 @@
 
 template <typename T>
 static void
-varray_copy_zonal(size_t offset, size_t nx, const Varray<T> &v1, Varray<double> &v2)
+varray_copy_zonal(size_t offset, size_t nx, Varray<T> const &v1, Varray<double> &v2)
 {
   std::copy(v1.begin() + offset, v1.begin() + offset + nx, v2.begin());
 }
 
 static void
-copy_latitude_row(size_t offset, size_t nx, const Field &field1, Varray<double> &v)
+copy_latitude_row(size_t offset, size_t nx, Field const &field1, Varray<double> &v)
 {
-  auto func = [&](const auto &v1) { varray_copy_zonal(offset, nx, v1, v); };
+  auto func = [&](auto const &v1) { varray_copy_zonal(offset, nx, v1, v); };
   field_operation(func, field1);
 }
 
@@ -42,12 +42,12 @@ fill_reduced_points(int gridID, size_t ny, std::vector<int> &reducedPoints, std:
   return nx;
 }
 
-using funcType = double(size_t, const Varray<double> &);
-using funcTypeMV = double(size_t, const Varray<double> &, double);
-using funcTypeNmissMV = double(size_t, const Varray<double> &, size_t, double);
+using funcType = double(size_t, Varray<double> const &);
+using funcTypeMV = double(size_t, Varray<double> const &, double);
+using funcTypeNmissMV = double(size_t, Varray<double> const &, size_t, double);
 
 static void
-zonal_kernel_1(const Field &field1, Field &field2, funcTypeNmissMV funcNmissMV)
+zonal_kernel_1(Field const &field1, Field &field2, funcTypeNmissMV funcNmissMV)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -76,7 +76,7 @@ zonal_kernel_1(const Field &field1, Field &field2, funcTypeNmissMV funcNmissMV)
 }
 
 static void
-zonal_kernel_2(const Field &field1, Field &field2, funcType func, funcTypeMV funcMV)
+zonal_kernel_2(Field const &field1, Field &field2, funcType func, funcTypeMV funcMV)
 {
   size_t rnumMissVals = 0;
   auto numMissVals = field1.numMissVals;
@@ -104,55 +104,55 @@ zonal_kernel_2(const Field &field1, Field &field2, funcType func, funcTypeMV fun
 }
 
 void
-zonal_min(const Field &field1, Field &field2)
+zonal_min(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_min, varray_min_mv);
 }
 
 void
-zonal_max(const Field &field1, Field &field2)
+zonal_max(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_max, varray_max_mv);
 }
 
 void
-zonal_range(const Field &field1, Field &field2)
+zonal_range(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_range, varray_range_mv);
 }
 
 void
-zonal_sum(const Field &field1, Field &field2)
+zonal_sum(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_sum, varray_sum_mv);
 }
 
 void
-zonal_mean(const Field &field1, Field &field2)
+zonal_mean(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_mean, varray_mean_mv);
 }
 
 void
-zonal_avg(const Field &field1, Field &field2)
+zonal_avg(Field const &field1, Field &field2)
 {
   zonal_kernel_2(field1, field2, varray_mean, varray_avg_mv);
 }
 
 void
-zonal_var(const Field &field1, Field &field2)
+zonal_var(Field const &field1, Field &field2)
 {
   zonal_kernel_1(field1, field2, varray_var);
 }
 
 void
-zonal_var1(const Field &field1, Field &field2)
+zonal_var1(Field const &field1, Field &field2)
 {
   zonal_kernel_1(field1, field2, varray_var_1);
 }
 
 void
-zonal_std(const Field &field1, Field &field2)
+zonal_std(Field const &field1, Field &field2)
 {
   size_t rnumMissVals = 0;
   auto missval = field2.missval;
@@ -171,7 +171,7 @@ zonal_std(const Field &field1, Field &field2)
 }
 
 void
-zonal_std1(const Field &field1, Field &field2)
+zonal_std1(Field const &field1, Field &field2)
 {
   size_t rnumMissVals = 0;
   auto missval = field2.missval;
@@ -190,25 +190,25 @@ zonal_std1(const Field &field1, Field &field2)
 }
 
 void
-zonal_skew(const Field &field1, Field &field2)
+zonal_skew(Field const &field1, Field &field2)
 {
   zonal_kernel_1(field1, field2, varray_skew);
 }
 
 void
-zonal_kurt(const Field &field1, Field &field2)
+zonal_kurt(Field const &field1, Field &field2)
 {
   zonal_kernel_1(field1, field2, varray_kurt);
 }
 
 void
-zonal_median(const Field &field1, Field &field2)
+zonal_median(Field const &field1, Field &field2)
 {
   zonal_kernel_1(field1, field2, varray_median);
 }
 
 void
-zonal_pctl(const Field &field1, Field &field2, double pn)
+zonal_pctl(Field const &field1, Field &field2, double pn)
 {
   size_t rnumMissVals = 0;
   auto missval = field2.missval;
@@ -261,7 +261,7 @@ zonal_pctl(const Field &field1, Field &field2, double pn)
 }
 
 void
-zonal_function(const Field &field1, Field &field2, int function)
+zonal_function(Field const &field1, Field &field2, int function)
 {
   // clang-format off
   switch (function)
diff --git a/src/fileStream.cc b/src/fileStream.cc
index 43e5f3812..845932f3d 100644
--- a/src/fileStream.cc
+++ b/src/fileStream.cc
@@ -29,7 +29,7 @@ bool FileStream::TimerEnabled = false;
 static auto inputFileTypeIsNetCDF4 = false;
 #endif
 
-FileStream::FileStream(const std::string &p_fileName) : m_filename(p_fileName)
+FileStream::FileStream(std::string const &p_fileName) : m_filename(p_fileName)
 {
   m_name = p_fileName;
   m_fileID = CDI_UNDEFID;
diff --git a/src/fileStream.h b/src/fileStream.h
index db9e781a0..b9cffbcee 100644
--- a/src/fileStream.h
+++ b/src/fileStream.h
@@ -8,7 +8,7 @@ class FileStream : public CdoStream
 {
 public:
   // Constructors
-  explicit FileStream(const std::string &p_fileStream);
+  explicit FileStream(std::string const &p_fileStream);
   // ---
 
   // CdoStream Interface functions
diff --git a/src/fill_1d.cc b/src/fill_1d.cc
index 7d207af05..7699d0f26 100644
--- a/src/fill_1d.cc
+++ b/src/fill_1d.cc
@@ -11,7 +11,7 @@
 #include "interpol.h"
 
 FillMethod
-string_to_fillmethod(const std::string &methodStr)
+string_to_fillmethod(std::string const &methodStr)
 {
   // clang-format off
   if      (methodStr == "nearest")  return FillMethod::Nearest;
@@ -24,7 +24,7 @@ string_to_fillmethod(const std::string &methodStr)
 }
 
 static void
-nearest_neighbour_with_lowest_delta(const Varray<double> &xValues, Varray<double> &yValues, int firstIndex, int lastIndex,
+nearest_neighbour_with_lowest_delta(Varray<double> const &xValues, Varray<double> &yValues, int firstIndex, int lastIndex,
                                     int limit)
 {
   auto startIndex = firstIndex + 1;
@@ -41,7 +41,7 @@ nearest_neighbour_with_lowest_delta(const Varray<double> &xValues, Varray<double
 constexpr int UndefIndex = -1;
 
 void
-fill_1d_nearest(int numValues, const Varray<double> &timeValues, Varray<double> &dataValues, double missval, int limit, int maxGaps)
+fill_1d_nearest(int numValues, Varray<double> const &timeValues, Varray<double> &dataValues, double missval, int limit, int maxGaps)
 {
   int numGaps = 0;
   int firstIndex = UndefIndex;
@@ -97,7 +97,7 @@ fill_1d_nearest(int numValues, const Varray<double> &timeValues, Varray<double>
 }
 
 static void
-fill_linear(const Varray<double> &xValues, Varray<double> &yValues, int firstIndex, int lastIndex, int limit)
+fill_linear(Varray<double> const &xValues, Varray<double> &yValues, int firstIndex, int lastIndex, int limit)
 {
   auto startIndex = firstIndex + 1;
   auto endIndex = (limit > 0) ? std::min(lastIndex, startIndex + limit) : lastIndex;
@@ -108,7 +108,7 @@ fill_linear(const Varray<double> &xValues, Varray<double> &yValues, int firstInd
 }
 
 void
-fill_1d_linear(int numValues, const Varray<double> &timeValues, Varray<double> &dataValues, double missval, int limit, int maxGaps)
+fill_1d_linear(int numValues, Varray<double> const &timeValues, Varray<double> &dataValues, double missval, int limit, int maxGaps)
 {
   int numGaps = 0;
   int firstIndex = UndefIndex;
diff --git a/src/fill_1d.h b/src/fill_1d.h
index 1d273655d..1210a9618 100644
--- a/src/fill_1d.h
+++ b/src/fill_1d.h
@@ -18,11 +18,11 @@ enum struct FillMethod
   Backward
 };
 
-FillMethod string_to_fillmethod(const std::string &methodStr);
+FillMethod string_to_fillmethod(std::string const &methodStr);
 
-void fill_1d_nearest(int numValues, const Varray<double> &timeValues, Varray<double> &dataValues, double missval, int limit,
+void fill_1d_nearest(int numValues, Varray<double> const &timeValues, Varray<double> &dataValues, double missval, int limit,
                      int maxGaps);
-void fill_1d_linear(int numValues, const Varray<double> &timeValues, Varray<double> &dataValues, double missval, int limit,
+void fill_1d_linear(int numValues, Varray<double> const &timeValues, Varray<double> &dataValues, double missval, int limit,
                     int maxGaps);
 void fill_1d_forward(int numValues, Varray<double> &dataValues, double missval, int limit, int maxGaps);
 void fill_1d_backward(int numValues, Varray<double> &dataValues, double missval, int limit, int maxGaps);
diff --git a/src/grid_cellsearch.cc b/src/grid_cellsearch.cc
index 9b40e631d..279869a7c 100644
--- a/src/grid_cellsearch.cc
+++ b/src/grid_cellsearch.cc
@@ -31,8 +31,8 @@ grid_cellsearch_create_unstruct(GridCellsearch &gcs, const RemapGrid &remapGrid)
 {
   auto numCells = remapGrid.size;
   auto numCorners = remapGrid.numCorners;
-  const auto &cornerLons = remapGrid.cornerLons;
-  const auto &cornerLats = remapGrid.cornerLats;
+  auto const &cornerLons = remapGrid.cornerLons;
+  auto const &cornerLats = remapGrid.cornerLats;
 
   gcs.method = cellSearchMethod;
 
diff --git a/src/grid_from_name.cc b/src/grid_from_name.cc
index c4fa67614..4fa537de9 100644
--- a/src/grid_from_name.cc
+++ b/src/grid_from_name.cc
@@ -19,7 +19,7 @@ size_t gen_icosphere_coords(int subdivisions, bool withBounds, std::vector<doubl
                             std::vector<double> &xbounds, std::vector<double> &ybounds);
 
 static void
-generate_grid_icosphere(GridDesciption &grid, const std::string &gridname)
+generate_grid_icosphere(GridDesciption &grid, std::string const &gridname)
 {
   int gridtype = GRID_UNSTRUCTURED;
 
@@ -47,7 +47,7 @@ generate_grid_icosphere(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_zonal(GridDesciption &grid, const std::string &gridname, double inc, double lon1, double lon2, double lat1,
+generate_grid_zonal(GridDesciption &grid, std::string const &gridname, double inc, double lon1, double lon2, double lat1,
                     double lat2)
 {
   int gridtype = GRID_LONLAT;
@@ -93,7 +93,7 @@ generate_grid_zonal(GridDesciption &grid, const std::string &gridname, double in
 }
 
 static void
-generate_grid_lonlat(GridDesciption &grid, const std::string &gridname, double inc, double lon1, double lon2, double lat1,
+generate_grid_lonlat(GridDesciption &grid, std::string const &gridname, double inc, double lon1, double lon2, double lat1,
                      double lat2)
 {
   int gridtype = GRID_LONLAT;
@@ -200,7 +200,7 @@ generate_grid_lonlat(GridDesciption &grid, const std::string &gridname, double i
 }
 
 static void
-generate_grid_dcw(GridDesciption &grid, const std::string &gridname, double inc)
+generate_grid_dcw(GridDesciption &grid, std::string const &gridname, double inc)
 {
   auto param1 = gridname.c_str();
   auto param2 = std::strstr(param1, "_");
@@ -242,7 +242,7 @@ generate_grid_dcw(GridDesciption &grid, const std::string &gridname, double inc)
 }
 
 static void
-generate_grid_gme(GridDesciption &grid, const std::string &gridname)
+generate_grid_gme(GridDesciption &grid, std::string const &gridname)
 {
   if (gridname.size())
     {
@@ -264,7 +264,7 @@ generate_grid_gme(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_healpix(GridDesciption &grid, const std::string &gridname, bool isZoom = false)
+generate_grid_healpix(GridDesciption &grid, std::string const &gridname, bool isZoom = false)
 {
   if (gridname.size())
     {
@@ -319,7 +319,7 @@ gaussian_latitudes_in_degrees(std::vector<double> &lats, std::vector<double> &la
 }
 
 static void
-generate_grid_gea(GridDesciption &grid, const std::string &gridname)
+generate_grid_gea(GridDesciption &grid, std::string const &gridname)
 {
   char endChar = '?';
   double dx = 0.0;
@@ -390,7 +390,7 @@ generate_grid_gea(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_zonal(GridDesciption &grid, const std::string &gridname)
+generate_grid_zonal(GridDesciption &grid, std::string const &gridname)
 {
   char endChar = '?';
   int intVal = 0;
@@ -455,7 +455,7 @@ generate_grid_zonal(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_reg2d(GridDesciption &grid, const std::string &gridname)
+generate_grid_reg2d(GridDesciption &grid, std::string const &gridname)
 {
   char endChar = '?';
   char sepChar = '?';
@@ -473,7 +473,7 @@ generate_grid_reg2d(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_point(GridDesciption &grid, const std::string &gridname)
+generate_grid_point(GridDesciption &grid, std::string const &gridname)
 {
   char endChar = '?';
   char sepChar = '?';
@@ -493,7 +493,7 @@ generate_grid_point(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_generic(GridDesciption &grid, const std::string &gridname)
+generate_grid_generic(GridDesciption &grid, std::string const &gridname)
 {
   char endChar = '?';
   char sepChar = '?';
@@ -581,7 +581,7 @@ generate_grid_gaussian(GridDesciption &grid, std::string gridname)
 }
 
 static void
-generate_grid_gaussian_full(GridDesciption &grid, const std::string &gridname)
+generate_grid_gaussian_full(GridDesciption &grid, std::string const &gridname)
 {
   if (gridname.size())
     {
@@ -637,7 +637,7 @@ generate_grid_gaussian_full(GridDesciption &grid, const std::string &gridname)
 }
 
 static void
-generate_grid_gaussian_o(GridDesciption &grid, const std::string &gridname)
+generate_grid_gaussian_o(GridDesciption &grid, std::string const &gridname)
 {
   // FXXX - full (regular) Gaussian grid with XXX latitude lines between the pole and equator
   int intVal = 0;
@@ -678,7 +678,7 @@ generate_grid_gaussian_o(GridDesciption &grid, const std::string &gridname)
 }
 
 int
-grid_from_name(const std::string &gridname)
+grid_from_name(std::string const &gridname)
 {
   int gridID = CDI_UNDEFID;
   if (gridname.size() < 2) return gridID;
diff --git a/src/grid_icosphere.cc b/src/grid_icosphere.cc
index 00caeb9ee..2b5855226 100644
--- a/src/grid_icosphere.cc
+++ b/src/grid_icosphere.cc
@@ -92,7 +92,7 @@ subdivide(VertexList &vertices, const TriangleList &triangles)
   TriangleList result(4 * n);
   for (size_t i = 0; i < n; ++i)
     {
-      const auto &each = triangles[i];
+      auto const &each = triangles[i];
       for (int edge = 0; edge < 3; edge++) { mid[edge] = vertex_for_edge(lookup, vertices, each[edge], each[(edge + 1) % 3]); }
 
       result[i * 4 + 0] = { each[0], mid[0], mid[2] };
@@ -139,7 +139,7 @@ gen_icosphere_coords(int subdivisions, bool withBounds, std::vector<double> &xva
 #endif
   for (size_t i = 0; i < numCells; ++i)
     {
-      const auto &t = triangles[i];
+      auto const &t = triangles[i];
       auto center = circum_center_mean(vertices[t[0]], vertices[t[1]], vertices[t[2]]);
       xvals[i] = center.longitude();
       yvals[i] = center.latitude();
diff --git a/src/grid_pointsearch.cc b/src/grid_pointsearch.cc
index 4e03db32c..715ac8e82 100644
--- a/src/grid_pointsearch.cc
+++ b/src/grid_pointsearch.cc
@@ -19,7 +19,7 @@
 UnstructMethod unstructMethod(UnstructMethod::undefined);
 
 void
-set_pointsearch_method(const std::string &methodStr)
+set_pointsearch_method(std::string const &methodStr)
 {
   // clang-format off
   if      (methodStr == "kdtree")     unstructMethod = UnstructMethod::kdtree;
@@ -56,7 +56,7 @@ grid_pointsearch_create_reg2d(GridPointsearch &gps, const RemapGrid &remapGrid)
 }
 
 static void
-pointsearch_create_unstruct(GridPointsearch &gps, const Varray<double> &lons, const Varray<double> &lats)
+pointsearch_create_unstruct(GridPointsearch &gps, Varray<double> const &lons, Varray<double> const &lats)
 {
   auto numPoints = lons.size();
   if (numPoints == 0) return;
@@ -106,7 +106,7 @@ grid_pointsearch_create(GridPointsearch &gps, const RemapGrid &remapGrid)
 }
 
 void
-grid_pointsearch_create_unstruct(GridPointsearch &gps, const Varray<double> &lons, const Varray<double> &lats, bool useBoundBox)
+grid_pointsearch_create_unstruct(GridPointsearch &gps, Varray<double> const &lons, Varray<double> const &lats, bool useBoundBox)
 {
   auto &params = gps.params;
   params.dims[0] = lons.size();
@@ -117,7 +117,7 @@ grid_pointsearch_create_unstruct(GridPointsearch &gps, const Varray<double> &lon
 }
 
 static size_t
-llindex_in_quad(size_t nx, size_t ny, size_t index, const PointLonLat &pointLL, const double *centerLons, const double *centerLats,
+llindex_in_quad(size_t nx, size_t ny, size_t index, PointLonLat const &pointLL, const double *centerLons, const double *centerLats,
                 bool isCyclic)
 {
   if (index != GPS_NOT_FOUND)
@@ -140,7 +140,7 @@ llindex_in_quad(size_t nx, size_t ny, size_t index, const PointLonLat &pointLL,
 }
 
 size_t
-grid_pointsearch_nearest(GridPointsearch &gps, const PointLonLat &pointLL, size_t *index, double *dist)
+grid_pointsearch_nearest(GridPointsearch &gps, PointLonLat const &pointLL, size_t *index, double *dist)
 {
   auto numIndices = gps.unstruct.search_nearest(pointLL, index, dist);
   if (numIndices > 0)
@@ -156,7 +156,7 @@ grid_pointsearch_nearest(GridPointsearch &gps, const PointLonLat &pointLL, size_
 }
 
 static void
-select_points_in_cell(GridPointsearch &gps, const PointLonLat &pointLL, size_t *indices, double *dist, size_t &numIndices)
+select_points_in_cell(GridPointsearch &gps, PointLonLat const &pointLL, size_t *indices, double *dist, size_t &numIndices)
 {
   auto maxIndices = numIndices;
   numIndices = 0;
@@ -174,7 +174,7 @@ select_points_in_cell(GridPointsearch &gps, const PointLonLat &pointLL, size_t *
 }
 
 size_t
-grid_pointsearch_qnearest(GridPointsearch &gps, const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist)
+grid_pointsearch_qnearest(GridPointsearch &gps, PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist)
 {
   auto numIndices = gps.unstruct.search_qnearest(pointLL, nnn, indices, dist);
 
diff --git a/src/grid_pointsearch.h b/src/grid_pointsearch.h
index f56b15b14..03d2f8daa 100644
--- a/src/grid_pointsearch.h
+++ b/src/grid_pointsearch.h
@@ -56,16 +56,16 @@ public:
 };
 
 
-void set_pointsearch_method(const std::string &methodStr);
+void set_pointsearch_method(std::string const &methodStr);
 
-void grid_search_point_unstruct(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData);
-void grid_search_point_smooth(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData);
+void grid_search_point_unstruct(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData);
+void grid_search_point_smooth(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData);
 
-void grid_pointsearch_create_unstruct(GridPointsearch &gps, const Varray<double> &lons, const Varray<double> &lats,
+void grid_pointsearch_create_unstruct(GridPointsearch &gps, Varray<double> const &lons, Varray<double> const &lats,
                                       bool useBoundBox = false);
 void grid_pointsearch_create(GridPointsearch &gps, const RemapGrid &remapGrid);
-size_t grid_pointsearch_nearest(GridPointsearch &gps, const PointLonLat &pointLL, size_t *index, double *dist);
-size_t grid_pointsearch_qnearest(GridPointsearch &gps, const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist);
+size_t grid_pointsearch_nearest(GridPointsearch &gps, PointLonLat const &pointLL, size_t *index, double *dist);
+size_t grid_pointsearch_qnearest(GridPointsearch &gps, PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist);
 
 struct SquareCorners
 {
diff --git a/src/grid_read.cc b/src/grid_read.cc
index a3ed9bcb3..28d116af5 100644
--- a/src/grid_read.cc
+++ b/src/grid_read.cc
@@ -32,11 +32,11 @@ grid_read_data(size_t ikv, size_t nkv, const std::vector<KVMap> &kvmap, GridDesc
       if (!kvmap[ik].isValid) continue;
 
       const auto kv = kvmap[ik].kv;
-      const auto &key = kv->key;
+      auto const &key = kv->key;
       size_t nvalues = kv->nvalues;
       if (nvalues == 0) continue;
-      const auto &values = kv->values;
-      const auto &value = kv->values[0];
+      auto const &values = kv->values;
+      auto const &value = kv->values[0];
 
       // clang-format off
       if (key == "gridtype")
@@ -255,11 +255,11 @@ grid_read_mapping(size_t igmap, size_t nkv, const std::vector<KVMap> &kvmap, int
       if (!kvmap[ik].isValid) continue;
 
       const auto kv = kvmap[ik].kv;
-      const auto &key = kv->key;
+      auto const &key = kv->key;
       size_t nvalues = kv->nvalues;
       if (nvalues == 0) continue;
-      const auto &values = kv->values;
-      const auto &value = kv->values[0];
+      auto const &values = kv->values;
+      auto const &value = kv->values[0];
 
       if (key == "grid_mapping")
         {
diff --git a/src/griddes.cc b/src/griddes.cc
index 2050cc5b5..35f792c34 100644
--- a/src/griddes.cc
+++ b/src/griddes.cc
@@ -296,7 +296,7 @@ gridFromMPAS(const char *filename)
       int latVertexID = -1, lonVertexID = -1, verticesOnCellID = -1;
       for (int varID = 0; varID < varList.numVars(); ++varID)
         {
-          const auto &var = varList.vars[varID];
+          auto const &var = varList.vars[varID];
           // clang-format off
           if      (var.name == "latCell")   latCellID = varID;
           else if (var.name == "lonCell")   lonCellID = varID;
@@ -519,14 +519,14 @@ cdo_define_grid(const char *pgridfile)
 }
 
 int
-cdo_define_grid(const std::string &gridfile)
+cdo_define_grid(std::string const &gridfile)
 {
   return cdo_define_grid(gridfile.c_str());
 }
 
 void
-cdo_set_grids(const std::string &gridarg)
+cdo_set_grids(std::string const &gridarg)
 {
   auto gridNames = split_string(gridarg, ",");
-  for (const auto &gridName : gridNames) cdo_define_grid(gridName);
+  for (auto const &gridName : gridNames) cdo_define_grid(gridName);
 }
diff --git a/src/griddes.h b/src/griddes.h
index c08c0fd85..3b0f98b96 100644
--- a/src/griddes.h
+++ b/src/griddes.h
@@ -76,17 +76,17 @@ int grid_define(GridDesciption &grid);
 
 int grid_from_nc_file(const char *gridfile);
 int grid_from_h5_file(const char *gridfile);
-int grid_from_name(const std::string &gridname);
+int grid_from_name(std::string const &gridname);
 
 void write_nc_grid(const char *gridfile, int gridID, int *imask);
 
-int cdo_define_grid(const std::string &gridfile);
+int cdo_define_grid(std::string const &gridfile);
 
 int grid_read(FILE *gfp, const char *dname);  // TODO: Find better place for this
 
 int cdo_cdf_openread(const char *filename);
 void cdo_cdf_close(int nc_file_id);
-void cdo_set_grids(const std::string &gridarg);
+void cdo_set_grids(std::string const &gridarg);
 
 void gaussian_latitudes_in_degrees(std::vector<double> &lats, std::vector<double> &lat_bounds, size_t nlat);
 
diff --git a/src/hetaeta.cc b/src/hetaeta.cc
index 838699807..1d41b48a8 100644
--- a/src/hetaeta.cc
+++ b/src/hetaeta.cc
@@ -32,7 +32,7 @@ static FILE *fpold, *fpnew;
 #endif
 
 static long
-int_index(long n, const Varray<double> &x1, const double x2)
+int_index(long n, Varray<double> const &x1, const double x2)
 {
   long k;
   long klo = 0;
@@ -70,11 +70,11 @@ esat(double temperature)
 
 template <typename T>
 static void
-hetaeta_sc(bool ltq, int lpsmod, long ij, long ngp, long nlev1, long nlev2, long nvars, const Varray<double> &af1,
-           const Varray<double> &bf1, const Varray<double> &etah2, const Varray<double> &af2, const Varray<double> &bf2,
-           const Varray<double> &w1, const Varray<double> &w2, const Varray<long> &jl1, const Varray<long> &jl2, const double *ah1,
-           const double *bh1, const Varray<double> &ps1, double epsm1i, const Varray<T> &q1, const Varray<T> &t1,
-           const Varray<double> &fis1, const Varray<double> &fis2, Varray<double> &ps2, const double *ah2, const double *bh2,
+hetaeta_sc(bool ltq, int lpsmod, long ij, long ngp, long nlev1, long nlev2, long nvars, Varray<double> const &af1,
+           Varray<double> const &bf1, Varray<double> const &etah2, Varray<double> const &af2, Varray<double> const &bf2,
+           Varray<double> const &w1, Varray<double> const &w2, const Varray<long> &jl1, const Varray<long> &jl2, const double *ah1,
+           const double *bh1, Varray<double> const &ps1, double epsm1i, Varray<T> const &q1, Varray<T> const &t1,
+           Varray<double> const &fis1, Varray<double> const &fis2, Varray<double> &ps2, const double *ah2, const double *bh2,
            const Varray2D<T> &vars1, Varray2D<T> &vars2, Varray<T> &t2, Varray<T> &q2, Varray<double> &tscor, Varray<double> &pscor,
            Varray<double> &secor, long jblt, Varray<double> &ph1, Varray<double> &lnph1, Varray<double> &fi1, Varray<double> &pf1,
            Varray<double> &lnpf1, Varray<double> &tv1, Varray<double> &theta1, Varray<double> &rh1, Varray<double> &zvar,
@@ -408,9 +408,9 @@ hetaeta_sc(bool ltq, int lpsmod, long ij, long ngp, long nlev1, long nlev2, long
 
 template <typename T>
 void
-hetaeta(bool ltq, int ngp, const Vmask &imiss, int nlev1, const double *ah1, const double *bh1, const Varray<double> &fis1,
-        const Varray<double> &ps1, const Varray<T> &t1, const Varray<T> &q1, int nlev2, const double *ah2, const double *bh2,
-        const Varray<double> &fis2, Varray<double> &ps2, Varray<T> &t2, Varray<T> &q2, int nvars, const Varray2D<T> &vars1,
+hetaeta(bool ltq, int ngp, Vmask const &imiss, int nlev1, const double *ah1, const double *bh1, Varray<double> const &fis1,
+        Varray<double> const &ps1, Varray<T> const &t1, Varray<T> const &q1, int nlev2, const double *ah2, const double *bh2,
+        Varray<double> const &fis2, Varray<double> &ps2, Varray<T> &t2, Varray<T> &q2, int nvars, const Varray2D<T> &vars1,
         Varray2D<T> &vars2, Varray<double> &tscor, Varray<double> &pscor, Varray<double> &secor)
 {
   long jlev = 0;
@@ -562,14 +562,14 @@ hetaeta(bool ltq, int ngp, const Vmask &imiss, int nlev1, const double *ah1, con
 }
 
 // Explicit instantiation
-template void hetaeta(bool ltq, int ngp, const Vmask &imiss, int nlev1, const double *ah1, const double *bh1,
-                      const Varray<double> &fis1, const Varray<double> &ps1, const Varray<float> &t1, const Varray<float> &q1,
-                      int nlev2, const double *ah2, const double *bh2, const Varray<double> &fis2, Varray<double> &ps2,
+template void hetaeta(bool ltq, int ngp, Vmask const &imiss, int nlev1, const double *ah1, const double *bh1,
+                      Varray<double> const &fis1, Varray<double> const &ps1, Varray<float> const &t1, Varray<float> const &q1,
+                      int nlev2, const double *ah2, const double *bh2, Varray<double> const &fis2, Varray<double> &ps2,
                       Varray<float> &t2, Varray<float> &q2, int nvars, const Varray2D<float> &vars1, Varray2D<float> &vars2,
                       Varray<double> &scor, Varray<double> &pscor, Varray<double> &secor);
-template void hetaeta(bool ltq, int ngp, const Vmask &imiss, int nlev1, const double *ah1, const double *bh1,
-                      const Varray<double> &fis1, const Varray<double> &ps1, const Varray<double> &t1, const Varray<double> &q1,
-                      int nlev2, const double *ah2, const double *bh2, const Varray<double> &fis2, Varray<double> &ps2,
+template void hetaeta(bool ltq, int ngp, Vmask const &imiss, int nlev1, const double *ah1, const double *bh1,
+                      Varray<double> const &fis1, Varray<double> const &ps1, Varray<double> const &t1, Varray<double> const &q1,
+                      int nlev2, const double *ah2, const double *bh2, Varray<double> const &fis2, Varray<double> &ps2,
                       Varray<double> &t2, Varray<double> &q2, int nvars, const Varray2D<double> &vars1, Varray2D<double> &vars2,
                       Varray<double> &scor, Varray<double> &pscor, Varray<double> &secor);
 
diff --git a/src/hetaeta.h b/src/hetaeta.h
index a7847c58e..079175452 100644
--- a/src/hetaeta.h
+++ b/src/hetaeta.h
@@ -4,9 +4,9 @@
 #include "varray.h"
 
 template <typename T>
-void hetaeta(bool ltq, int ngp, const Vmask &imiss, int nlev1, const double *ah1, const double *bh1,
-             const Varray<double> &fis1, const Varray<double> &ps1, const Varray<T> &t1, const Varray<T> &q1, int nlev2,
-             const double *ah2, const double *bh2, const Varray<double> &fis2, Varray<double> &ps2, Varray<T> &t2, Varray<T> &q2,
+void hetaeta(bool ltq, int ngp, Vmask const &imiss, int nlev1, const double *ah1, const double *bh1,
+             Varray<double> const &fis1, Varray<double> const &ps1, Varray<T> const &t1, Varray<T> const &q1, int nlev2,
+             const double *ah2, const double *bh2, Varray<double> const &fis2, Varray<double> &ps2, Varray<T> &t2, Varray<T> &q2,
              int nvars, const Varray2D<T> &vars1, Varray2D<T> &vars2, Varray<double> &scor, Varray<double> &pscor,
              Varray<double> &secor);
 
diff --git a/src/institution.cc b/src/institution.cc
index b23914a10..99bfc0e02 100644
--- a/src/institution.cc
+++ b/src/institution.cc
@@ -13,7 +13,7 @@
 #include "cdo_default_values.h"
 
 static int
-read_institution(const std::string &filename)
+read_institution(std::string const &filename)
 {
   int lnr = 0;
   int nvar = 0, maxvar = 4;
@@ -57,7 +57,7 @@ read_institution(const std::string &filename)
 }
 
 void
-define_institution(const std::string &instString)
+define_institution(std::string const &instString)
 {
   int instID = read_institution(instString);
 
diff --git a/src/institution.h b/src/institution.h
index 3c27a3163..f4a2bd534 100644
--- a/src/institution.h
+++ b/src/institution.h
@@ -3,6 +3,6 @@
 
 #include <string>
 
-void define_institution(const std::string &instString);
+void define_institution(std::string const &instString);
 
 #endif
diff --git a/src/interpol.cc b/src/interpol.cc
index 0300238d7..93c20f6e3 100644
--- a/src/interpol.cc
+++ b/src/interpol.cc
@@ -29,7 +29,7 @@
 * @param x      the element to find a position for
 */
 static long
-find_element(double x, long nelem, const Varray<double> &v)
+find_element(double x, long nelem, Varray<double> const &v)
 {
   long ii;
   long mid = 0;
@@ -87,8 +87,8 @@ find_element(double x, long nelem, const Varray<double> &v)
 }
 
 bool
-rect_grid_search(size_t &ii, size_t &jj, double x, double y, size_t nxm, size_t nym, const Varray<double> &xm,
-                 const Varray<double> &ym)
+rect_grid_search(size_t &ii, size_t &jj, double x, double y, size_t nxm, size_t nym, Varray<double> const &xm,
+                 Varray<double> const &ym)
 {
   constexpr double rtol = 1.e-12;
   auto pointFound{ false };
@@ -108,7 +108,7 @@ rect_grid_search(size_t &ii, size_t &jj, double x, double y, size_t nxm, size_t
 }
 
 bool
-rect_grid_search2(long &imin, long &imax, double xmin, double xmax, long nxm, const Varray<double> &xm)
+rect_grid_search2(long &imin, long &imax, double xmin, double xmax, long nxm, Varray<double> const &xm)
 {
   auto pointFound{ false };
   imin = nxm;
@@ -159,7 +159,7 @@ rect_grid_search2(long &imin, long &imax, double xmin, double xmax, long nxm, co
 }
 /*
 double
-intlinarr2p(long nxm, long nym, double **fieldm, const Varray<double> &xm, const Varray<double> &ym, double x, double y)
+intlinarr2p(long nxm, long nym, double **fieldm, Varray<double> const &xm, Varray<double> const &ym, double x, double y)
 {
   long ii, jj;
   double value = 0;
@@ -184,15 +184,15 @@ intlinarr2p(long nxm, long nym, double **fieldm, const Varray<double> &xm, const
 
 template <typename T>
 static inline T
-bilinear_remap(const Varray<T> &srcArray, const double (&wgt)[4], const size_t (&ind)[4])
+bilinear_remap(Varray<T> const &srcArray, const double (&wgt)[4], const size_t (&ind)[4])
 {
   return srcArray[ind[0]] * wgt[0] + srcArray[ind[1]] * wgt[1] + srcArray[ind[2]] * wgt[2] + srcArray[ind[3]] * wgt[3];
 }
 
 template <typename T1, typename T2>
 static void
-intlinarr2(double mv, int lonIsCircular, size_t nxm, size_t nym, const Varray<T1> &varray1, const Varray<double> &xm,
-           const Varray<double> &ym, size_t gridsize2, Varray<T2> &varray2, const Varray<double> &x, const Varray<double> &y)
+intlinarr2(double mv, int lonIsCircular, size_t nxm, size_t nym, const Varray<T1> &varray1, Varray<double> const &xm,
+           Varray<double> const &ym, size_t gridsize2, Varray<T2> &varray2, Varray<double> const &x, Varray<double> const &y)
 {
   T1 missval = mv;
   auto nlon1 = nxm;
@@ -262,7 +262,7 @@ intlinarr(long nxm, double *ym, double *xm, int nx, double *y, double *x)
 }
 
 void
-intgrid_bil(const Field &field1, Field &field2)
+intgrid_bil(Field const &field1, Field &field2)
 {
   auto gridID1 = field1.grid;
   auto gridID2 = field2.grid;
diff --git a/src/interpol.h b/src/interpol.h
index 72a07a571..4da0ce066 100644
--- a/src/interpol.h
+++ b/src/interpol.h
@@ -11,10 +11,10 @@
 
 class Field;
 
-void interpolate(const Field &field1, Field &field2);
-void intgrid_bil(const Field &field1, Field &field2);
-void intgrid_1nn(const Field &field1, Field &field2);
-void intgrid_knn(const KnnParams &knnParams, const Field &field1, Field &field2);
+void interpolate(Field const &field1, Field &field2);
+void intgrid_bil(Field const &field1, Field &field2);
+void intgrid_1nn(Field const &field1, Field &field2);
+void intgrid_knn(KnnParams const &knnParams, Field const &field1, Field &field2);
 
 constexpr double
 intlin(double x, double y1, double x1, double y2, double x2)
diff --git a/src/knndata.cc b/src/knndata.cc
index a056a6a71..1759b509d 100644
--- a/src/knndata.cc
+++ b/src/knndata.cc
@@ -17,7 +17,7 @@ weightingMethod_to_string(WeightingMethod method)
 }
 
 WeightingMethod
-string_to_weightingMethod(const std::string &methodStr)
+string_to_weightingMethod(std::string const &methodStr)
 {
   if (methodStr == "avg") return WeightingMethod::arithmeticAverage;
   if (methodStr == "dist") return WeightingMethod::distanceWeighted;
@@ -31,7 +31,7 @@ string_to_weightingMethod(const std::string &methodStr)
 }
 
 void
-KnnData::apply_mask(const Vmask &gridMask)
+KnnData::apply_mask(Vmask const &gridMask)
 {
   size_t n = 0;
   for (size_t i = 0; i < m_numNeighbors; ++i)
diff --git a/src/knndata.h b/src/knndata.h
index 9f4f55632..450acc202 100644
--- a/src/knndata.h
+++ b/src/knndata.h
@@ -30,7 +30,7 @@ enum struct WeightingMethod
 };
 
 std::string weightingMethod_to_string(WeightingMethod method);
-WeightingMethod string_to_weightingMethod(const std::string &methodStr);
+WeightingMethod string_to_weightingMethod(std::string const &methodStr);
 
 struct KnnParams
 {
@@ -60,7 +60,7 @@ private:
   double m_weight0{ 1.0 };
   double m_weightR{ 1.0 };
 
-  void apply_mask(const Vmask &gridMask);
+  void apply_mask(Vmask const &gridMask);
 
   size_t compute_weights_avg();
   size_t compute_weights_dist();
@@ -183,7 +183,7 @@ public:
   }
 
   size_t
-  compute_weights(const Vmask &gridMask)
+  compute_weights(Vmask const &gridMask)
   {
     // Compute weights if grid mask is false, eliminate those points
     apply_mask(gridMask);
@@ -192,7 +192,7 @@ public:
 
   template <typename T>
   double
-  array_weights_sum(const Varray<T> &array) const
+  array_weights_sum(Varray<T> const &array) const
   {
     double sum = 0.0;
     for (size_t i = 0; i < m_numNeighbors; ++i) sum += array[m_indices[i]] * m_dist[i];
diff --git a/src/module_info.cc b/src/module_info.cc
index 63285a065..620245ea7 100644
--- a/src/module_info.cc
+++ b/src/module_info.cc
@@ -12,7 +12,7 @@
 typedef std::function<bool(const CdoModule &mod)> ModuleQuery;
 
 bool
-ModListOptions::requested(const std::string &name)
+ModListOptions::requested(std::string const &name)
 {
   return opt[name];
 }
@@ -25,7 +25,7 @@ ModListOptions::mod_info_requested()
 }
 
 bool
-ModListOptions::parse_request(const std::string &requestString)
+ModListOptions::parse_request(std::string const &requestString)
 {
   auto all = true;
   const auto splitString = split_string(requestString, ",");
@@ -128,7 +128,7 @@ create_help_sections(const CdoHelp &p_help)
     }
 
   std::map<std::string, std::pair<std::string, std::vector<std::string>>> oper_syn_map;
-  for (const auto &op : operators)
+  for (auto const &op : operators)
     {
       std::string syn = "";
       auto it = oper_synopsis.find(op.first);
@@ -146,20 +146,20 @@ create_help_sections(const CdoHelp &p_help)
 }
 
 std::string
-get_operator_description(const std::string &p_current_op_name, const CdoHelp &p_help)
+get_operator_description(std::string const &p_current_op_name, const CdoHelp &p_help)
 {
   std::string description = "";
   if (p_help.empty()) return description;
 
   // search for operator section
 
-  auto it = std::find_if(begin(p_help), end(p_help), [&](const auto &l) { return l.find("OPERATORS") != std::string::npos; });
+  auto it = std::find_if(begin(p_help), end(p_help), [&](auto const &l) { return l.find("OPERATORS") != std::string::npos; });
   // if no operator section is found
   if (it == end(p_help))
     {
       std::string name_section = std::string(p_help[0]);
       it = std::find_if(begin(p_help), end(p_help),
-                        [&](const auto &l) { return l.find("    " + p_current_op_name) != std::string::npos; });
+                        [&](auto const &l) { return l.find("    " + p_current_op_name) != std::string::npos; });
 
       if (it != end(p_help))
         {
@@ -170,7 +170,7 @@ get_operator_description(const std::string &p_current_op_name, const CdoHelp &p_
   else
     {
       it = std::find_if(++it, end(p_help),
-                        [&](const auto &l) { return l.find("    " + p_current_op_name + " ") != std::string::npos; });
+                        [&](auto const &l) { return l.find("    " + p_current_op_name + " ") != std::string::npos; });
       if (it != p_help.end())
         {
           std::string line = std::string(*it);
@@ -189,7 +189,7 @@ get_operator_description(const std::string &p_current_op_name, const CdoHelp &p_
 
 // helper function for setting the spacing in operator_print_list
 static std::string
-get_spacing_for(int p_space, const std::string &str)
+get_spacing_for(int p_space, std::string const &str)
 {
   std::string spacing = "";
   for (int i = str.size(); i <= p_space; ++i) spacing += " ";
@@ -228,7 +228,7 @@ operator_print_list(std::function<bool(const CdoModule &)> selectionCriteria)
       if (selectionCriteria(current_module)) { output_list.push_back(operatorGetShortInfoString(current_op_name, current_module)); }
     }
   // print generated output list
-  for (const std::string &str : output_list) { std::cout << str << std::endl; }
+  for (std::string const &str : output_list) { std::cout << str << std::endl; }
 }
 
 void
@@ -289,7 +289,7 @@ operatorPrintAll(void)
   std::vector<std::string> sorted_operator_names = Factory::get_sorted_operator_name_list();
 
   std::cout << tab;
-  for (const auto &operatorName : sorted_operator_names)
+  for (auto const &operatorName : sorted_operator_names)
     {
       if (number_of_chars > 85)
         {
@@ -332,11 +332,11 @@ operator_print_list(bool print_no_output)
       output_list[out_list_idx] += get_spacing_for(90, output_list[out_list_idx]) + in_out_info;
     }
   // print generated output list
-  for (const std::string &str : output_list) { std::cout << str << std::endl; }
+  for (std::string const &str : output_list) { std::cout << str << std::endl; }
 }
 
 void
-cdo_print_help(const std::string &p_operator_name)
+cdo_print_help(std::string const &p_operator_name)
 {
   auto it
       = Factory::find(p_operator_name, [&p_operator_name]() { cdo_abort("%s", Factory::err_msg_oper_not_found(p_operator_name)); });
diff --git a/src/module_info.h b/src/module_info.h
index d117e831f..aba83d6c4 100644
--- a/src/module_info.h
+++ b/src/module_info.h
@@ -20,17 +20,17 @@ struct ModListOptions
   std::map<const std::string, int> opt
       = { { s_obase, false }, { s_arbIn, false }, { s_filesOnly, false }, { s_onlyFirst, false }, { s_noOutput, false } };
 
-  bool requested(const std::string &name);
+  bool requested(std::string const &name);
   bool mod_info_requested();
-  bool parse_request(const std::string &requestString);
+  bool parse_request(std::string const &requestString);
 };
 
-std::string get_operator_description(const std::string &p_current_op_name, const std::vector<std::string> &p_help);
+std::string get_operator_description(std::string const &p_current_op_name, const std::vector<std::string> &p_help);
 void operator_print_list(ModListOptions &p_modListOpt);
 std::pair<std::map<std::string, std::vector<std::string>>, std::map<std::string, std::pair<std::string, std::vector<std::string>>>>
 create_help_sections(const CdoHelp &p_help);
 
 void cdo_print_help(const char **help);
-void cdo_print_help(const std::string &help);
+void cdo_print_help(std::string const &help);
 void cdo_print_help(const CdoHelp &p_help);
 #endif
diff --git a/src/mpmo.cc b/src/mpmo.cc
index 221c8eb32..ab4636830 100644
--- a/src/mpmo.cc
+++ b/src/mpmo.cc
@@ -27,7 +27,7 @@ Debug_(const char *p_file, const char *p_func, int p_line, const char *context,
  * is permanently increased!
  */
 std::string
-get_padding(const std::string &debug_scope_string, int &p_padding_width)
+get_padding(std::string const &debug_scope_string, int &p_padding_width)
 {
   int len = debug_scope_string.size();
   while (p_padding_width - len <= 0) { p_padding_width += 5; }
diff --git a/src/mpmo.h b/src/mpmo.h
index 0f45216d0..e226a25d5 100644
--- a/src/mpmo.h
+++ b/src/mpmo.h
@@ -53,7 +53,7 @@ Argument(std::basic_string<T> const &value) noexcept
 
 template <typename... Args>
 void
-Print(const std::string &format, Args const &...args) noexcept
+Print(std::string const &format, Args const &...args) noexcept
 {
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wformat-nonliteral"
@@ -64,7 +64,7 @@ Print(const std::string &format, Args const &...args) noexcept
 
 template <typename... Args>
 std::string
-PrintCerr(const std::string &format, Args const &...args)
+PrintCerr(std::string const &format, Args const &...args)
 {
   int cx;
   cx = snprintf(nullptr, 0, format.c_str(), Argument(args)...);
@@ -82,7 +82,7 @@ void Debug_(const char *p_file, const char *p_func, int p_line, const char *cont
 
 template <typename... Args>
 void
-Debug_(const char *p_file, const char *p_func, int p_line, const char *context, int p_debugScope, const std::string &format,
+Debug_(const char *p_file, const char *p_func, int p_line, const char *context, int p_debugScope, std::string const &format,
        Args const &...args)
 {
 #pragma GCC diagnostic push
@@ -97,14 +97,14 @@ Debug_(const char *p_file, const char *p_func, int p_line, const char *context,
 
 template <typename... Args>
 void
-Debug_(const char *p_file, const char *p_func, int p_line, const char *context, const std::string &format, Args const &...args)
+Debug_(const char *p_file, const char *p_func, int p_line, const char *context, std::string const &format, Args const &...args)
 {
   Debug_(p_file, p_func, p_line, context, DebugLevel, format, args...);
 }
 
 template <typename... Args>
 void
-Error_(const char *caller, const std::string &format, Args const &...args) noexcept
+Error_(const char *caller, std::string const &format, Args const &...args) noexcept
 {
   PrintCerr(Red("Error:") + "(%s)" + format, caller, Argument(args)...);
   if (exitOnError) exit(EXIT_FAILURE);
@@ -114,14 +114,14 @@ void Verbose_(std::function<void()> p_function) noexcept;
 
 template <typename... Args>
 void
-Verbose_(const std::string &format, Args const &...args) noexcept
+Verbose_(std::string const &format, Args const &...args) noexcept
 {
   if (verbose) PrintCerr(format, Argument(args)...);
 }
 
 template <typename... Args>
 void
-Warning_(const char *caller, const std::string &format, Args const &...args) noexcept
+Warning_(const char *caller, std::string const &format, Args const &...args) noexcept
 {
   (void) caller;  // quell warning if WITH_CALLER_NAME is not defined
   if (warningsEnabled)
@@ -137,7 +137,7 @@ Warning_(const char *caller, const std::string &format, Args const &...args) noe
 
 template <typename... Args>
 [[noreturn]] void
-SysError_(const char *func, const std::string &format, Args const &...args) noexcept
+SysError_(const char *func, std::string const &format, Args const &...args) noexcept
 {
   int saved_errno = errno;
   PrintCerr(Red("SysError: %s ") + format, func, Argument(args)...);
diff --git a/src/node.cc b/src/node.cc
index edc976c7c..fa02e1b47 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -2,7 +2,7 @@
 #include "cdo_output.h"
 #include "cdo_node_attach_exception.h"
 
-Node::Node(std::vector<std::string>::const_iterator p_iter, const std::string &p_oper, const std::string &args,
+Node::Node(std::vector<std::string>::const_iterator p_iter, std::string const &p_oper, std::string const &args,
            module_constraints p_constraints)
     : iter(p_iter), oper(p_oper), arguments(args), constraints(p_constraints), type(OPERATOR)
 {
@@ -27,7 +27,7 @@ Node::Node(int p_ncid, NodeType p_type)
 {
 }
 
-Node::Node(const std::string &p_operName, const std::string &p_args, module_constraints p_constraints)
+Node::Node(std::string const &p_operName, std::string const &p_args, module_constraints p_constraints)
     : oper(p_operName), arguments(p_args), constraints(p_constraints), type(OPERATOR)
 {
 }
diff --git a/src/node.h b/src/node.h
index 3e49b05d3..b35c77d5d 100644
--- a/src/node.h
+++ b/src/node.h
@@ -32,9 +32,9 @@ public:
   module_constraints constraints;
   std::vector<std::shared_ptr<Node>> children = {};
 
-  Node(std::vector<std::string>::const_iterator p_iter, const std::string &p_operName, const std::string &p_args,
+  Node(std::vector<std::string>::const_iterator p_iter, std::string const &p_operName, std::string const &p_args,
        module_constraints p_constraints);
-  Node(const std::string &p_operName, const std::string &p_args, module_constraints p_constraints);
+  Node(std::string const &p_operName, std::string const &p_args, module_constraints p_constraints);
   Node(std::vector<std::string>::const_iterator p_iter, NodeType nodeType);
   Node(std::string p_filename, NodeType nodeType);
   Node(int ncid, NodeType type);
diff --git a/src/oper_args.cc b/src/oper_args.cc
index bd2b06bac..f4aa10268 100644
--- a/src/oper_args.cc
+++ b/src/oper_args.cc
@@ -35,7 +35,7 @@ ArgumentHandler::parse(const std::vector<std::string> &argv)
       return -1;
     }
 
-  for (const std::string &arg : argv)
+  for (std::string const &arg : argv)
     {
       auto current = keyValuePairs.end();
       equalPos = arg.find('=');
@@ -72,19 +72,19 @@ ArgumentHandler::parse(const std::vector<std::string> &argv)
 }
 
 OperArg
-optional(const std::string &key, std::function<std::any(const std::string)> p_func, std::string mut_exclusive)
+optional(std::string const &key, std::function<std::any(const std::string)> p_func, std::string mut_exclusive)
 {
   return OperArg(key, p_func, { mut_exclusive });
 }
 
 OperArg
-optional(const std::string &key, std::function<std::any(const std::string)> p_func, const std::vector<std::string> &mut_exclusive)
+optional(std::string const &key, std::function<std::any(const std::string)> p_func, const std::vector<std::string> &mut_exclusive)
 {
   return OperArg(key, p_func, mut_exclusive);
 }
 
 OperArg
-required(const std::string &key, std::function<std::any(const std::string)> p_func, std::string mut_exclusive)
+required(std::string const &key, std::function<std::any(const std::string)> p_func, std::string mut_exclusive)
 {
   auto operarg = OperArg(key, p_func, { mut_exclusive });
   operarg.required = true;
@@ -92,7 +92,7 @@ required(const std::string &key, std::function<std::any(const std::string)> p_fu
 }
 
 OperArg
-required(const std::string &key, std::function<std::any(const std::string)> p_func, const std::vector<std::string> &mut_exclusive)
+required(std::string const &key, std::function<std::any(const std::string)> p_func, const std::vector<std::string> &mut_exclusive)
 {
   auto operarg = OperArg(key, p_func, mut_exclusive);
   operarg.required = true;
diff --git a/src/oper_args.h b/src/oper_args.h
index 7088d0aa5..9288448f4 100644
--- a/src/oper_args.h
+++ b/src/oper_args.h
@@ -12,7 +12,7 @@
 class OperArg
 {
 public:
-  OperArg(const std::string &p_key, std::function<std::any(const std::string)> p_func,
+  OperArg(std::string const &p_key, std::function<std::any(const std::string)> p_func,
           const std::vector<std::string> &p_exclusive_with)
       : key(p_key), func([p_func](const std::string l_key) { return p_func(l_key); }), exclusive_with(p_exclusive_with)
   {
@@ -54,7 +54,7 @@ public:
   // Templates
   template <typename T>
   bool
-  get(const std::string &key, T &value)
+  get(std::string const &key, T &value)
   {
 
     Debug(false, "getting arg %s", key);
@@ -74,7 +74,7 @@ public:
 
   template <class T, template <class, class Allocator = std::allocator<T>> class V>
   bool
-  get(const std::string &key, V<T> &values)
+  get(std::string const &key, V<T> &values)
   {
 
     Debug(false, "getting arg %s", key);
diff --git a/src/param_conversion.cc b/src/param_conversion.cc
index 60a9fcc2e..d5057ad7a 100644
--- a/src/param_conversion.cc
+++ b/src/param_conversion.cc
@@ -45,7 +45,7 @@ parameter_error(const char *name, const char *cstring, const char *endptr)
 }
 
 long
-parameter_to_bytes(const std::string &string)
+parameter_to_bytes(std::string const &string)
 {
   char *endptr = nullptr;
   auto numBytes = strtoimax(string.c_str(), &endptr, 10);
@@ -125,8 +125,8 @@ parameter_to_intlist(const char *const cstring)
   return ival;
 }
 
-const std::string &
-parameter_to_word(const std::string &string)
+std::string const &
+parameter_to_word(std::string const &string)
 {
   auto len = string.size();
 
@@ -142,7 +142,7 @@ parameter_to_word(const std::string &string)
 }
 
 bool
-parameter_to_bool(const std::string &string)
+parameter_to_bool(std::string const &string)
 {
   auto lstring = string_to_lower(string);
 
@@ -155,37 +155,37 @@ parameter_to_bool(const std::string &string)
 }
 
 double
-parameter_to_double(const std::string &string)
+parameter_to_double(std::string const &string)
 {
   return parameter_to_double(string.c_str());
 }
 
 int
-parameter_to_int(const std::string &string)
+parameter_to_int(std::string const &string)
 {
   return parameter_to_int(string.c_str());
 }
 
 long
-parameter_to_long(const std::string &string)
+parameter_to_long(std::string const &string)
 {
   return parameter_to_long(string.c_str());
 }
 
 size_t
-parameter_to_size_t(const std::string &string)
+parameter_to_size_t(std::string const &string)
 {
   return parameter_to_size_t(string.c_str());
 }
 
 int
-parameter_to_intlist(const std::string &string)
+parameter_to_intlist(std::string const &string)
 {
   return parameter_to_intlist(string.c_str());
 }
 
 double
-radius_str_to_meter(const std::string &string)
+radius_str_to_meter(std::string const &string)
 {
   char *endptr = nullptr;
   auto radius = strtod(string.c_str(), &endptr);
@@ -204,7 +204,7 @@ radius_str_to_meter(const std::string &string)
 }
 
 double
-radius_str_to_deg(const std::string &string)
+radius_str_to_deg(std::string const &string)
 {
   char *endptr = nullptr;
   auto radius = strtod(string.c_str(), &endptr);
@@ -238,7 +238,7 @@ string_to_param(const char *const paramstr)
 }
 
 int
-string_to_param(const std::string &paramstr)
+string_to_param(std::string const &paramstr)
 {
   return string_to_param(paramstr.c_str());
 }
@@ -267,7 +267,7 @@ param_to_string(int param)
 /* time/date/season converisons */
 /* =================================================================================== */
 void
-season_to_months(const std::string &season, int *imonths)
+season_to_months(std::string const &season, int *imonths)
 {
   const char *const smons = "JFMAMJJASONDJFMAMJJASOND";
   const int imons[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
@@ -296,7 +296,7 @@ season_to_months(const std::string &season, int *imonths)
 }
 
 double
-datestr_to_double(const std::string &datestr, int opt)
+datestr_to_double(std::string const &datestr, int opt)
 {
   for (size_t i = 0, n = datestr.size(); i < n; ++i)
     {
@@ -345,7 +345,7 @@ cdo_argv_to_intarr(const std::vector<std::string> &argv)
 {
   std::vector<int> v;
 
-  for (const auto &argument : argv)
+  for (auto const &argument : argv)
     {
       int first, last, inc;
       split_intstring(argument, first, last, inc);
@@ -368,7 +368,7 @@ cdo_argv_to_fltarr(const std::vector<std::string> &argv)
 {
   std::vector<double> v;
 
-  for (const auto &argument : argv)
+  for (auto const &argument : argv)
     {
       auto len = (int) argument.size();
       int i;
@@ -427,7 +427,7 @@ split_intstring(const char *const intstr, int &first, int &last, int &inc)
 }
 
 void
-split_intstring(const std::string &intstr, int &first, int &last, int &inc)
+split_intstring(std::string const &intstr, int &first, int &last, int &inc)
 {
   split_intstring(intstr.c_str(), first, last, inc);
 }
@@ -464,56 +464,56 @@ split_fltstring(const char *const intstr, double &first, double &last, double &i
 }
 
 void
-split_fltstring(const std::string &fltstr, double &first, double &last, double &inc)
+split_fltstring(std::string const &fltstr, double &first, double &last, double &inc)
 {
   split_fltstring(fltstr.c_str(), first, last, inc);
 }
 
 template <>
 int
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_int(str_value.c_str());
 }
 
 template <>
 double
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_double(str_value.c_str());
 }
 
 template <>
 bool
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_bool(str_value);
 }
 
 template <>
 long
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_long(str_value.c_str());
 }
 
 template <>
 size_t
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_size_t(str_value.c_str());
 }
 
 template <>
 std::string
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   return parameter_to_word(str_value.c_str());
 }
 
 template <>
 FillMethod
-convert(const std::string &str_value)
+convert(std::string const &str_value)
 {
   auto fillMethod = string_to_fillmethod(parameter_to_word(str_value));
 
diff --git a/src/param_conversion.h b/src/param_conversion.h
index 88603e5e4..270ec4da8 100644
--- a/src/param_conversion.h
+++ b/src/param_conversion.h
@@ -4,7 +4,7 @@
 #include <string>
 #include <vector>
 
-long parameter_to_bytes(const std::string &string);
+long parameter_to_bytes(std::string const &string);
 
 const char *parameter_to_word(const char *cstring);
 double parameter_to_double(const char *cstring);
@@ -13,33 +13,33 @@ long parameter_to_long(const char *cstring);
 size_t parameter_to_size_t(const char *cstring);
 int parameter_to_intlist(const char *cstring);
 
-const std::string &parameter_to_word(const std::string &string);
-double parameter_to_double(const std::string &string);
-bool parameter_to_bool(const std::string &string);
-int parameter_to_int(const std::string &string);
-long parameter_to_long(const std::string &string);
-size_t parameter_to_size_t(const std::string &string);
-int parameter_to_intlist(const std::string &string);
+std::string const &parameter_to_word(std::string const &string);
+double parameter_to_double(std::string const &string);
+bool parameter_to_bool(std::string const &string);
+int parameter_to_int(std::string const &string);
+long parameter_to_long(std::string const &string);
+size_t parameter_to_size_t(std::string const &string);
+int parameter_to_intlist(std::string const &string);
 
-double radius_str_to_meter(const std::string &string);
-double radius_str_to_deg(const std::string &string);
+double radius_str_to_meter(std::string const &string);
+double radius_str_to_deg(std::string const &string);
 
-int string_to_param(const std::string &paramstr);
+int string_to_param(std::string const &paramstr);
 std::string param_to_string(int param);
 
 /* time/date/season converisons */
 /* =================================================================================== */
-void season_to_months(const std::string &season, int *imonths);
-double datestr_to_double(const std::string &datestr, int opt);
+void season_to_months(std::string const &season, int *imonths);
+double datestr_to_double(std::string const &datestr, int opt);
 
 /* argv conversions */
 std::vector<int> cdo_argv_to_intarr(const std::vector<std::string> &argv);
 std::vector<double> cdo_argv_to_fltarr(const std::vector<std::string> &argv);
 
-void split_intstring(const std::string &intstr, int &first, int &last, int &inc);
-void split_fltstring(const std::string &fltstr, double &first, double &last, double &inc);
+void split_intstring(std::string const &intstr, int &first, int &last, int &inc);
+void split_fltstring(std::string const &fltstr, double &first, double &last, double &inc);
 
 template <typename T>
-T convert(const std::string &str_value);
+T convert(std::string const &str_value);
 
 #endif
diff --git a/src/parse_literals.cc b/src/parse_literals.cc
index 3621ec121..d66ef064e 100644
--- a/src/parse_literals.cc
+++ b/src/parse_literals.cc
@@ -14,7 +14,7 @@
 #include "parse_literals.h"
 
 int
-literal_get_datatype(const std::string &literal)
+literal_get_datatype(std::string const &literal)
 {
   if (!literal.empty())
     {
@@ -73,7 +73,7 @@ literals_find_datatype(int n, const std::vector<std::string> &literals)
 }
 
 int
-literal_to_int(const std::string &literal)
+literal_to_int(std::string const &literal)
 {
   int ival = INT_MAX;
 
@@ -87,7 +87,7 @@ literal_to_int(const std::string &literal)
 }
 
 double
-literal_to_double(const std::string &literal)
+literal_to_double(std::string const &literal)
 {
   double dval = DBL_MAX;
 
diff --git a/src/parse_literals.h b/src/parse_literals.h
index d7bf28390..4b7dfaeba 100644
--- a/src/parse_literals.h
+++ b/src/parse_literals.h
@@ -5,8 +5,8 @@
 #include <string>
 
 int literals_find_datatype(int n, const std::vector<std::string> &literals);
-int literal_get_datatype(const std::string &literal);
-int literal_to_int(const std::string &literal);
-double literal_to_double(const std::string &literal);
+int literal_get_datatype(std::string const &literal);
+int literal_to_int(std::string const &literal);
+double literal_to_double(std::string const &literal);
 
 #endif
diff --git a/src/parser.cc b/src/parser.cc
index d25e103ab..4f9cd9f06 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -28,7 +28,7 @@ namespace Util
 {
 
 void
-extract_name_and_argument(const std::string &command, std::string &operatorName, std::string &operatorArgument)
+extract_name_and_argument(std::string const &command, std::string &operatorName, std::string &operatorArgument)
 {
   constexpr char delimiter = ',';
 
@@ -52,7 +52,7 @@ tab()
 }
 
 std::vector<std::string>
-generate_tokens(const std::string &p_oper)
+generate_tokens(std::string const &p_oper)
 {
   std::vector<std::string> result = {};
 
@@ -184,7 +184,7 @@ public:
   void
   pop()
   {
-    const auto &node = stack.back();
+    auto const &node = stack.back();
     debug_parser("poping node: %s", node->oper);
     if (node->constraints.streamInCnt == -1) { cntVariableInputs--; }
     debug_parser("poping node: %s", node->oper);
@@ -397,7 +397,7 @@ handle_sub_group_end(ARGV_ITERATOR &p_cur_arg, PARSER_STACK &p_parser_stack)
     {
       // passing on all root to roots of next parser in case of variable input operators, apply and too many brackets
       // This also allows to ignore double brackets e.g -merge [ [ -topo -topo ] ]
-      for (const auto &node : finished_group.get_roots()) { cur_parser.add_root(node); }
+      for (auto const &node : finished_group.get_roots()) { cur_parser.add_root(node); }
     }
   else
     {
diff --git a/src/parser.h b/src/parser.h
index 20d215fde..089aa5722 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -75,17 +75,17 @@ std::vector<std::shared_ptr<Node>> _parse(std::vector<std::string> p_argv);
 
 namespace Util
 {
-void extract_name_and_argument(const std::string &command, std::string &operatorName, std::string &operatorArgument);
+void extract_name_and_argument(std::string const &command, std::string &operatorName, std::string &operatorArgument);
 
 std::string result_to_string(std::vector<std::shared_ptr<Node>> p_roots, std::string p_text = "returning: ");
 
 std::string build_err_msg(std::vector<std::string> &p_argv, const std::vector<std::string>::const_iterator &iter,
-                          const std::string &prompt, int cdo_abort_prompt_spacing = 10);
+                          std::string const &prompt, int cdo_abort_prompt_spacing = 10);
 }  // namespace Util
 
 struct MissingOutFileException : public std::invalid_argument
 {
-  explicit MissingOutFileException(const std::string &p_msg) : std::invalid_argument(p_msg) {}
+  explicit MissingOutFileException(std::string const &p_msg) : std::invalid_argument(p_msg) {}
 };
 
 }  // namespace Parser
diff --git a/src/percentiles.cc b/src/percentiles.cc
index b28b56f16..2fd9db8e2 100644
--- a/src/percentiles.cc
+++ b/src/percentiles.cc
@@ -274,7 +274,7 @@ set_numpy_method(NumpyMethod npMethod)
 }
 
 void
-percentile_set_method(const std::string &methodStr)
+percentile_set_method(std::string const &methodStr)
 {
   auto methodName = string_to_lower(methodStr);
 
diff --git a/src/percentiles.h b/src/percentiles.h
index 3b5db4e00..e6860e9f0 100644
--- a/src/percentiles.h
+++ b/src/percentiles.h
@@ -9,7 +9,7 @@
 
 #include <string>
 
-void percentile_set_method(const std::string &methodstr);
+void percentile_set_method(std::string const &methodstr);
 
 template <typename T>
 double percentile(T *array, size_t len, double pn);
diff --git a/src/percentiles_hist.cc b/src/percentiles_hist.cc
index ca410d8c1..8705ee1de 100644
--- a/src/percentiles_hist.cc
+++ b/src/percentiles_hist.cc
@@ -304,7 +304,7 @@ def_bounds(size_t nhists, std::vector<HistogramEntry> &hists, const Varray<T1> &
 }
 
 void
-HistogramSet::defVarLevelBounds(int varID, int levelID, const Field &field1, const Field &field2)
+HistogramSet::defVarLevelBounds(int varID, int levelID, Field const &field1, Field const &field2)
 {
   if (varID < 0 || varID >= nvars) cdo_abort("Illegal argument: varID %d is undefined (%s)", varID, __func__);
 
@@ -319,13 +319,13 @@ HistogramSet::defVarLevelBounds(int varID, int levelID, const Field &field1, con
   float mv1 = (float) field1.missval;
   float mv2 = (float) field2.missval;
 
-  auto func = [&](const auto &v1, const auto &v2) { def_bounds(nhists, hists, v1, v2, mv1, mv2); };
+  auto func = [&](auto const &v1, auto const &v2) { def_bounds(nhists, hists, v1, v2, mv1, mv2); };
   field_operation2(func, field1, field2);
 }
 
 template <typename T>
 static int
-histAddVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, const Varray<T> &v, size_t numMissVals, double missval)
+histAddVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, Varray<T> const &v, size_t numMissVals, double missval)
 {
   T mv = missval;
   assert(!v.empty());
@@ -346,7 +346,7 @@ histAddVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, const V
 
 template <typename T>
 static int
-histSubVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, const Varray<T> &v, size_t numMissVals, double missval)
+histSubVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, Varray<T> const &v, size_t numMissVals, double missval)
 {
   T mv = missval;
   assert(!v.empty());
@@ -366,7 +366,7 @@ histSubVarLevelValues(size_t nhists, std::vector<HistogramEntry> &hists, const V
 }
 
 int
-HistogramSet::addVarLevelValues(int varID, int levelID, const Field &field)
+HistogramSet::addVarLevelValues(int varID, int levelID, Field const &field)
 {
   if (varID < 0 || varID >= nvars) cdo_abort("Illegal argument: varID %d is undefined (%s)", varID, __func__);
 
@@ -390,7 +390,7 @@ HistogramSet::addVarLevelValues(int varID, int levelID, const Field &field)
 }
 
 int
-HistogramSet::subVarLevelValues(int varID, int levelID, const Field &field)
+HistogramSet::subVarLevelValues(int varID, int levelID, Field const &field)
 {
   if (varID < 0 || varID >= nvars) cdo_abort("Illegal argument: varID %d is undefined (%s)", varID, __func__);
 
@@ -466,7 +466,7 @@ HistogramSet::getVarLevelPercentiles(Field &field, int varID, int levelID, doubl
   auto nhists = this->var_nhists[varID];
   if (nhists != gridInqSize(field.grid)) cdo_abort("Grids are different (%s)", __func__);
 
-  const auto &hists = this->histograms[varID][levelID];
+  auto const &hists = this->histograms[varID][levelID];
 
   auto func = [&](auto &v, double mv) { return calcPercentile(nhists, hists, p, v, mv); };
   field.numMissVals = field_operation(func, field, field.missval);
diff --git a/src/percentiles_hist.h b/src/percentiles_hist.h
index a63c023d9..4f9a444c5 100644
--- a/src/percentiles_hist.h
+++ b/src/percentiles_hist.h
@@ -78,9 +78,9 @@ public:
   }
 
   void createVarLevels(int varID, int nlevels, size_t nhists);
-  void defVarLevelBounds(int varID, int levelID, const Field &field1, const Field &field2);
-  int addVarLevelValues(int varID, int levelID, const Field &field);
-  int subVarLevelValues(int varID, int levelID, const Field &field);
+  void defVarLevelBounds(int varID, int levelID, Field const &field1, Field const &field2);
+  int addVarLevelValues(int varID, int levelID, Field const &field);
+  int subVarLevelValues(int varID, int levelID, Field const &field);
   void getVarLevelPercentiles(Field &field, int varID, int levelID, double p);
   // void reset(int varID, int levelID); // unused
 };
diff --git a/src/pmlist.cc b/src/pmlist.cc
index 74013b0c5..7dc364667 100644
--- a/src/pmlist.cc
+++ b/src/pmlist.cc
@@ -26,7 +26,7 @@ keyValuesPrint(FILE *fp, const KeyValues &keyValues)
 void
 KVList::print(FILE *fp) const
 {
-  for (const auto &keyValues : *this) keyValuesPrint(fp, keyValues);
+  for (auto const &keyValues : *this) keyValuesPrint(fp, keyValues);
 }
 
 int
@@ -79,9 +79,9 @@ KVList::parse_arguments(const std::vector<std::string> &argv)
 }
 
 const KeyValues *
-KVList::search(const std::string &key) const
+KVList::search(std::string const &key) const
 {
-  for (const auto &kv : *this)
+  for (auto const &kv : *this)
     {
       if (kv.key == key) return &kv;
     }
@@ -90,7 +90,7 @@ KVList::search(const std::string &key) const
 }
 
 const std::string
-KVList::get_first_value(const std::string &key, const std::string &replacer)
+KVList::get_first_value(std::string const &key, std::string const &replacer)
 {
   auto kv = this->search(key);
   if (kv && kv->nvalues > 0) return kv->values[0];
@@ -98,7 +98,7 @@ KVList::get_first_value(const std::string &key, const std::string &replacer)
 }
 
 void
-KVList::append(const std::string &key, const std::vector<std::string> &values, int nvalues)
+KVList::append(std::string const &key, const std::vector<std::string> &values, int nvalues)
 {
   KeyValues kv;
   kv.key = key;
@@ -110,7 +110,7 @@ KVList::append(const std::string &key, const std::vector<std::string> &values, i
 
 // Remove only one list item
 void
-KVList::remove(const std::string &inkey)
+KVList::remove(std::string const &inkey)
 {
   std::list<KeyValues>::iterator i;
   for (i = this->begin(); i != this->end(); ++i)
@@ -119,11 +119,11 @@ KVList::remove(const std::string &inkey)
 }
 
 const KVList *
-PMList::searchKVListVentry(const std::string &key, const std::string &value, const std::vector<std::string> &entry)
+PMList::searchKVListVentry(std::string const &key, std::string const &value, const std::vector<std::string> &entry)
 {
-  for (const auto &kvlist : *this)
+  for (auto const &kvlist : *this)
     {
-      for (const auto &s : entry)
+      for (auto const &s : entry)
         if (kvlist.name == s)
           {
             auto kv = kvlist.search(key);
@@ -137,9 +137,9 @@ PMList::searchKVListVentry(const std::string &key, const std::string &value, con
 const KVList *
 PMList::getKVListVentry(const std::vector<std::string> &entry)
 {
-  for (const auto &kvlist : *this)
+  for (auto const &kvlist : *this)
     {
-      for (const auto &s : entry)
+      for (auto const &s : entry)
         if (kvlist.name == s) return &kvlist;
     }
 
@@ -226,7 +226,7 @@ parse_namelist(PMList &pmlist, NamelistParser &parser, char *buf, bool cdocmor)
 
   for (unsigned long it = 0; it < ntok; ++it)
     {
-      const auto &t = tokens[it];
+      auto const &t = tokens[it];
       // printf("Token %u", it+1);
       if (t.type == NamelistType::OBJECT)
         {
@@ -234,7 +234,7 @@ parse_namelist(PMList &pmlist, NamelistParser &parser, char *buf, bool cdocmor)
           if (it + 1 < ntok && tokens[it + 1].type == NamelistType::WORD)
             {
               it++;
-              const auto &t2 = tokens[it];
+              auto const &t2 = tokens[it];
               std::snprintf(name, sizeof(name), "%.*s", (int) (t2.end - t2.start), buf + t2.start);
               name[sizeof(name) - 1] = 0;
             }
@@ -330,7 +330,7 @@ PMList::read_namelist(FILE *fp, const char *name)
 void
 PMList::print(FILE *fp)
 {
-  for (const auto &kvlist : *this)
+  for (auto const &kvlist : *this)
     {
       fprintf(fp, "\nFound %s list with %zu key/values: \n", kvlist.name.c_str(), kvlist.size());
       kvlist.print(fp);
diff --git a/src/pmlist.h b/src/pmlist.h
index bf40f0994..56787c4fd 100644
--- a/src/pmlist.h
+++ b/src/pmlist.h
@@ -35,10 +35,10 @@ public:
 
   void print(FILE *fp = stderr) const;
   int parse_arguments(const std::vector<std::string> &argv);
-  const KeyValues *search(const std::string &key) const;
-  void remove(const std::string &inkey);
-  void append(const std::string &key, const std::vector<std::string> &values, int nvalues);
-  const std::string get_first_value(const std::string &key, const std::string &replacer);
+  const KeyValues *search(std::string const &key) const;
+  void remove(std::string const &inkey);
+  void append(std::string const &key, const std::vector<std::string> &values, int nvalues);
+  const std::string get_first_value(std::string const &key, std::string const &replacer);
 };
 
 // clang-format off
@@ -50,7 +50,7 @@ PMList : public std::list<KVList>
 // clang-format on
 {
 public:
-  const KVList *searchKVListVentry(const std::string &key, const std::string &value, const std::vector<std::string> &entry);
+  const KVList *searchKVListVentry(std::string const &key, std::string const &value, const std::vector<std::string> &entry);
   const KVList *getKVListVentry(const std::vector<std::string> &entry);
   void print(FILE *fp = stderr);
   void read_namelist(FILE *fp, const char *name);
diff --git a/src/pointsearch_full.h b/src/pointsearch_full.h
index e7f661e54..caa7142ac 100644
--- a/src/pointsearch_full.h
+++ b/src/pointsearch_full.h
@@ -20,14 +20,14 @@
 class PointsearchFull : public PointsearchStrategy
 {
 public:
-  PointsearchFull(const Varray<double> &lons, const Varray<double> &lats, const PointsearchParams &params) : m_params{ params }
+  PointsearchFull(Varray<double> const &lons, Varray<double> const &lats, const PointsearchParams &params) : m_params{ params }
   {
     create(lons, lats);
   }
   ~PointsearchFull() {}
 
   size_t
-  search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) override
+  search_nearest(PointLonLat const &pointLL, size_t *index, double *dist) override
   {
     if (m_pointsXYZ == nullptr) return 0;
 
@@ -59,7 +59,7 @@ public:
   }
 
   size_t
-  search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist) override
+  search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist) override
   {
     (void) pointLL;
     (void) nnn;
@@ -86,7 +86,7 @@ private:
   const PointsearchParams &m_params;
 
   void
-  create(const Varray<double> &lons, const Varray<double> &lats)
+  create(Varray<double> const &lons, Varray<double> const &lats)
   {
     auto n = lons.size();
     m_pointsXYZ = std::make_unique<double[][3]>(n);
diff --git a/src/pointsearch_healpix.h b/src/pointsearch_healpix.h
index 59462247a..8751201b7 100644
--- a/src/pointsearch_healpix.h
+++ b/src/pointsearch_healpix.h
@@ -22,7 +22,7 @@ public:
 
   /* not used because result differ from search() and unstruct::search()
   void
-  search_1nn(const PointLonLat &pointLL, knnDataType &knnData, double searchRadius)
+  search_1nn(PointLonLat const &pointLL, knnDataType &knnData, double searchRadius)
   {
     size_t index = (size_t) hp_lonlat_to_index(m_hpParams, pointLL.get_lon(), pointLL.get_lat());
 
@@ -37,7 +37,7 @@ public:
    */
 
   void
-  search(const PointLonLat &pointLL, KnnData &knnData, double searchRadius)
+  search(PointLonLat const &pointLL, KnnData &knnData, double searchRadius)
   {
     auto index = hp_lonlat_to_index(m_hpParams, pointLL.get_lon(), pointLL.get_lat());
 
@@ -72,7 +72,7 @@ private:
   HpParams m_hpParams;
 
   void
-  store_distance_healpix(double searchRadius, const PointLonLat &pointLL, KnnData &knnData, size_t numIndices, size_t *indices,
+  store_distance_healpix(double searchRadius, PointLonLat const &pointLL, KnnData &knnData, size_t numIndices, size_t *indices,
                          double *lons, double *lats)
   {
     double tgtCoord[3];
diff --git a/src/pointsearch_kdtree.h b/src/pointsearch_kdtree.h
index 498abbc69..98240edb1 100644
--- a/src/pointsearch_kdtree.h
+++ b/src/pointsearch_kdtree.h
@@ -20,7 +20,7 @@
 class PointsearchKDtree : public PointsearchStrategy
 {
 public:
-  PointsearchKDtree(const Varray<double> &lons, const Varray<double> &lats, const PointsearchParams &params) : m_params{ params }
+  PointsearchKDtree(Varray<double> const &lons, Varray<double> const &lats, const PointsearchParams &params) : m_params{ params }
   {
     create(lons, lats);
   }
@@ -30,7 +30,7 @@ public:
   }
 
   size_t
-  search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) override
+  search_nearest(PointLonLat const &pointLL, size_t *index, double *dist) override
   {
     if (m_kdtree == nullptr) return 0;
 
@@ -56,7 +56,7 @@ public:
   }
 
   size_t
-  search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist) override
+  search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist) override
   {
     size_t numIndices = 0;
 
@@ -101,7 +101,7 @@ private:
   const PointsearchParams &m_params;
 
   void
-  create(const Varray<double> &lons, const Varray<double> &lats)
+  create(Varray<double> const &lons, Varray<double> const &lats)
   {
     auto n = lons.size();
     std::vector<kd_point> pointlist(n);
diff --git a/src/pointsearch_nanoflann.h b/src/pointsearch_nanoflann.h
index d2563e369..23cbd19cb 100644
--- a/src/pointsearch_nanoflann.h
+++ b/src/pointsearch_nanoflann.h
@@ -69,14 +69,14 @@ using nfTree_t
 class PointsearchNanoflann : public PointsearchStrategy
 {
 public:
-  PointsearchNanoflann(const Varray<double> &lons, const Varray<double> &lats, const PointsearchParams &params) : m_params(params)
+  PointsearchNanoflann(Varray<double> const &lons, Varray<double> const &lats, const PointsearchParams &params) : m_params(params)
   {
     create(lons, lats);
   }
   ~PointsearchNanoflann() {}
 
   size_t
-  search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) override
+  search_nearest(PointLonLat const &pointLL, size_t *index, double *dist) override
   {
     if (m_nfTree == nullptr) return 0;
 
@@ -108,7 +108,7 @@ public:
   }
 
   size_t
-  search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist) override
+  search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist) override
   {
     size_t numIndices = 0;
 
@@ -137,7 +137,7 @@ private:
   const PointsearchParams &m_params;
 
   void
-  create(const Varray<double> &lons, const Varray<double> &lats)
+  create(Varray<double> const &lons, Varray<double> const &lats)
   {
     auto n = lons.size();
     m_pointCloud = std::make_unique<PointCloud<double>>();
diff --git a/src/pointsearch_reg2d.h b/src/pointsearch_reg2d.h
index 55fd37781..5bd0b5929 100644
--- a/src/pointsearch_reg2d.h
+++ b/src/pointsearch_reg2d.h
@@ -14,13 +14,13 @@
 #include "grid_convert.h"
 #include "varray.h"
 
-bool rect_grid_search(size_t &ii, size_t &jj, double x, double y, size_t nxm, size_t nym, const Varray<double> &xm,
-                      const Varray<double> &ym);
+bool rect_grid_search(size_t &ii, size_t &jj, double x, double y, size_t nxm, size_t nym, Varray<double> const &xm,
+                      Varray<double> const &ym);
 
 class PointsearchReg2d
 {
 public:
-  PointsearchReg2d(const Varray<double> &lons, const Varray<double> &lats, const PointsearchParams &params)
+  PointsearchReg2d(Varray<double> const &lons, Varray<double> const &lats, const PointsearchParams &params)
   {
     m_nx = params.dims[0];
     m_ny = params.dims[1];
@@ -29,7 +29,7 @@ public:
   ~PointsearchReg2d() {}
 
   void
-  create(const Varray<double> &lons, const Varray<double> &lats, bool isCyclic)
+  create(Varray<double> const &lons, Varray<double> const &lats, bool isCyclic)
   {
     auto nxm = isCyclic ? m_nx + 1 : m_nx;
 
diff --git a/src/pointsearch_spherepart.h b/src/pointsearch_spherepart.h
index c3ea40eec..9808a1316 100644
--- a/src/pointsearch_spherepart.h
+++ b/src/pointsearch_spherepart.h
@@ -22,7 +22,7 @@ extern "C"
 class PointsearchSpherepart : public PointsearchStrategy
 {
 public:
-  PointsearchSpherepart(const Varray<double> &lons, const Varray<double> &lats, const PointsearchParams &params) : m_params(params)
+  PointsearchSpherepart(Varray<double> const &lons, Varray<double> const &lats, const PointsearchParams &params) : m_params(params)
   {
     create(lons, lats);
   }
@@ -32,7 +32,7 @@ public:
   }
 
   size_t
-  search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) override
+  search_nearest(PointLonLat const &pointLL, size_t *index, double *dist) override
   {
     if (m_yacPointSearch == nullptr) return 0;
 
@@ -72,7 +72,7 @@ public:
   }
 
   size_t
-  search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *indices, double *dist) override
+  search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *indices, double *dist) override
   {
     size_t numIndices = 0;
 
@@ -128,7 +128,7 @@ private:
   const PointsearchParams &m_params;
 
   void
-  create(const Varray<double> &lons, const Varray<double> &lats)
+  create(Varray<double> const &lons, Varray<double> const &lats)
   {
     auto n = lons.size();
     m_pointsXYZ = std::make_unique<double[][3]>(n);
diff --git a/src/pointsearch_unstruct.h b/src/pointsearch_unstruct.h
index 1155133d1..277ee4eb2 100644
--- a/src/pointsearch_unstruct.h
+++ b/src/pointsearch_unstruct.h
@@ -25,8 +25,8 @@ class PointsearchStrategy
 {
 public:
   virtual ~PointsearchStrategy() = default;
-  virtual size_t search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) = 0;
-  virtual size_t search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *index, double *dist) = 0;
+  virtual size_t search_nearest(PointLonLat const &pointLL, size_t *index, double *dist) = 0;
+  virtual size_t search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *index, double *dist) = 0;
 };
 
 class PointsearchUnstruct
@@ -54,7 +54,7 @@ public:
   }
 
   size_t
-  search_nearest(const PointLonLat &pointLL, size_t *index, double *dist)
+  search_nearest(PointLonLat const &pointLL, size_t *index, double *dist)
   {
     if (m_strategy) { return m_strategy->search_nearest(pointLL, index, dist); }
     fprintf(stderr, "PointsearchUnstruct::search_nearest: PointsearchStrategy not initialized!\n");
@@ -62,7 +62,7 @@ public:
   }
 
   size_t
-  search_qnearest(const PointLonLat &pointLL, size_t nnn, size_t *index, double *dist)
+  search_qnearest(PointLonLat const &pointLL, size_t nnn, size_t *index, double *dist)
   {
     if (m_strategy) { return m_strategy->search_qnearest(pointLL, nnn, index, dist); }
     fprintf(stderr, "PointsearchUnstruct::search_qnearest: PointsearchStrategy not initialized!\n");
diff --git a/src/printinfo.cc b/src/printinfo.cc
index c818f68e4..13e17dbc8 100644
--- a/src/printinfo.cc
+++ b/src/printinfo.cc
@@ -476,7 +476,7 @@ print_grid_info(int vlistID)
 }
 
 static void
-printZaxisBoundsInfo(int zaxisID, int dig, int levelsize, double zinc, const std::string &zunits)
+printZaxisBoundsInfo(int zaxisID, int dig, int levelsize, double zinc, std::string const &zunits)
 {
   auto level1 = zaxisInqLbound(zaxisID, 0);
   auto level2 = zaxisInqUbound(zaxisID, 0);
@@ -520,8 +520,8 @@ zaxisTypeIsSingleLayer(int zaxistype)
 }
 
 static void
-printZaxisLevelInfo(int levelsize, int zaxisID, int zaxistype, double &zinc, int dig, const std::string &zname,
-                    const std::string &zunits)
+printZaxisLevelInfo(int levelsize, int zaxisID, int zaxistype, double &zinc, int dig, std::string const &zname,
+                    std::string const &zunits)
 {
   Varray<double> levels(levelsize);
   zaxisInqLevels(zaxisID, levels.data());
diff --git a/src/process.cc b/src/process.cc
index d3555a61f..03d8742b9 100644
--- a/src/process.cc
+++ b/src/process.cc
@@ -53,7 +53,7 @@ set_process_num(int p_num)
 }
 
 std::string
-Process::replace_alias(const std::string &p_calledBy, const CdoModule &p_module)
+Process::replace_alias(std::string const &p_calledBy, const CdoModule &p_module)
 {
   std::string originalName = p_calledBy;
   int aliasID = p_module.is_alias(p_calledBy);
@@ -61,7 +61,7 @@ Process::replace_alias(const std::string &p_calledBy, const CdoModule &p_module)
   return originalName;
 }
 
-Process::Process(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments,
+Process::Process(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments,
                  const CdoModule &p_module)
     : arguments(p_module.arguments), m_ID(p_ID), m_module(p_module), m_oargv(p_arguments)
 {
@@ -86,7 +86,7 @@ Process::get_stream_cnt_out()
 }
 
 void
-Process::def_prompt(const std::string &name)
+Process::def_prompt(std::string const &name)
 {
   if (m_ID == 0)
     std::snprintf(prompt, sizeof(prompt), "%s    %s", cdo::progname, name.c_str());
@@ -118,7 +118,7 @@ Process::get_operator_id()
 }
 
 void
-Process::add_file_in_stream(const std::string &file)
+Process::add_file_in_stream(std::string const &file)
 {
   inputStreams.push_back(std::make_shared<FileStream>(file));
   m_streamCnt++;
@@ -134,20 +134,20 @@ Process::add_mem_in_stream(int ncid)
 }
 
 void
-Process::add_mem_out_stream(const int &ncid)
+Process::add_mem_out_stream(int const &ncid)
 {
   outputStreams.push_back(std::make_shared<MemoryStream>(ncid));
   m_streamCnt++;
 }
 void
-Process::add_mem_out_stream(const int &ncid, const int &file_id)
+Process::add_mem_out_stream(int const &ncid, int const &file_id)
 {
   outputStreams.push_back(std::make_shared<MemoryStream>(ncid, file_id));
   m_streamCnt++;
 }
 
 void
-Process::add_file_out_stream(const std::string &file)
+Process::add_file_out_stream(std::string const &file)
 {
   if (file[0] == '-') { cdo_abort("Missing output file. Found an operator instead of filename: %s", file); }
   outputStreams.push_back(std::make_shared<FileStream>(file));
@@ -245,7 +245,7 @@ Process::start_thread()
 bool
 Process::has_out_stream(CdoStreamID p_streamID)
 {
-  for (const auto &streamID : outputStreams)
+  for (auto const &streamID : outputStreams)
     {
       if (streamID == p_streamID) return true;
     }
@@ -255,7 +255,7 @@ Process::has_out_stream(CdoStreamID p_streamID)
 bool
 Process::has_in_stream(CdoStreamID p_streamID)
 {
-  for (const auto &streamID : inputStreams)
+  for (auto const &streamID : inputStreams)
     {
       if (streamID == p_streamID) return true;
     }
@@ -324,7 +324,7 @@ Process::create_output()
 }
 
 CdoStreamID
-Process::open_write(const std::string &p_filename, int filetype)
+Process::open_write(std::string const &p_filename, int filetype)
 {
   if (filetype == CDI_UNDEFID) filetype = cdo_filetype();
 
@@ -342,12 +342,12 @@ Process::open_write(const std::string &p_filename, int filetype)
 }
 
 void
-Process::set_obase(const std::string &obase)
+Process::set_obase(std::string const &obase)
 {
   m_obase = obase;
 }  // TODO into cc
 
-const std::string &
+std::string const &
 Process::get_obase()
 {
   return m_obase;
diff --git a/src/process.h b/src/process.h
index 2ffd187ba..bfc6c840f 100644
--- a/src/process.h
+++ b/src/process.h
@@ -68,7 +68,7 @@ public:
 #endif
 
   /* Member Functions  */
-  Process(int p_ID, const std::string &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module);
+  Process(int p_ID, std::string const &p_operatorName, const std::vector<std::string> &p_arguments, const CdoModule &p_module);
   virtual ~Process() {Debug(PROCESS,"destruction of %s",operatorName);}
 
   pthread_t start_thread();
@@ -78,7 +78,7 @@ public:
 
   std::tuple<int, int> create_output();
 
-  CdoStreamID open_write(const std::string &p_filename, int filetype = CDI_UNDEFID);
+  CdoStreamID open_write(std::string const &p_filename, int filetype = CDI_UNDEFID);
   void
   parse_arguments()
   {
@@ -87,7 +87,7 @@ public:
 
   template <typename T>
   void
-  get_argument(const std::string &key, T &destination)
+  get_argument(std::string const &key, T &destination)
   {
     arguments.get(key, destination);
   }
@@ -111,15 +111,15 @@ public:
   /**
    * Adds and creates a new file pstream to the in streams
    */
-  void add_file_in_stream(const std::string &file);
+  void add_file_in_stream(std::string const &file);
   /**
    * Adds and creates a new file pstream to the out streams
    */
-  void add_file_out_stream(const std::string &file);
+  void add_file_out_stream(std::string const &file);
   /**
    * Adds ands creates a memory stream to the out streams vector*/
-  void add_mem_out_stream(const int &ncid);
-  void add_mem_out_stream(const int &ncid, const int &file_id);
+  void add_mem_out_stream(int const &ncid);
+  void add_mem_out_stream(int const &ncid, int const &file_id);
   /**
    * Adds a already created memory region to the process as input
    */
@@ -149,15 +149,15 @@ public:
   size_t get_oper_argc();
   std::string get_argv(int idx);
 
-  const std::string &get_obase();
-  void set_obase(const std::string &obase);
+  std::string const &get_obase();
+  void set_obase(std::string const &obase);
 
   int get_id();
 
   void close_streams();
 
-  std::string replace_alias(const std::string &p_calledBy, const CdoModule &p_module);
-  void def_prompt(const std::string &name);
+  std::string replace_alias(std::string const &p_calledBy, const CdoModule &p_module);
+  void def_prompt(std::string const &name);
 
   void cdo_initialize();
   void cdo_finish(void);
diff --git a/src/processManager.cc b/src/processManager.cc
index 900e7a50e..c5cf2a9f8 100644
--- a/src/processManager.cc
+++ b/src/processManager.cc
@@ -136,7 +136,7 @@ ProcessManager::buildProcessTree(std::vector<std::shared_ptr<Node>> roots)
     }
   else if (node->numOut() > 0)
     {
-      for (const auto &n : roots)
+      for (auto const &n : roots)
         {
           Debug(PROCESS, "adding out files to %s", node->oper);
           Debug(PROCESS, "node type = %d", n->type);
@@ -144,7 +144,7 @@ ProcessManager::buildProcessTree(std::vector<std::shared_ptr<Node>> roots)
         }
     }
 
-  for (const auto &c : node->children) { handle_child_construction(first_process, c); }
+  for (auto const &c : node->children) { handle_child_construction(first_process, c); }
 
   set_process_num(m_processes.size());
 }
@@ -210,7 +210,7 @@ ProcessManager::clear_processes()
 }
 
 const std::shared_ptr<Process>
-ProcessManager::create_process(const std::string &operatorName, const std::vector<std::string> &arguments)
+ProcessManager::create_process(std::string const &operatorName, const std::vector<std::string> &arguments)
 {
   std::shared_ptr<Process> new_process;
   if ((m_numProcesses + 1) >= MAX_PROCESS) { cdo_abort("Limit of %d processes reached!", MAX_PROCESS); }
diff --git a/src/processManager.h b/src/processManager.h
index 6d2e53f38..5d4c0a5d1 100644
--- a/src/processManager.h
+++ b/src/processManager.h
@@ -39,7 +39,7 @@ private:
   int m_numProcesses = 0;
   int m_numProcessesActive = 0;
 
-  const std::shared_ptr<Process> create_process(const std::string &operatorName, const std::vector<std::string> &arguments);
+  const std::shared_ptr<Process> create_process(std::string const &operatorName, const std::vector<std::string> &arguments);
   void handle_child_construction(std::shared_ptr<Process> &parent, const std::shared_ptr<Node> &child);
 
 public:
diff --git a/src/process_int.cc b/src/process_int.cc
index b394a2311..bd447125d 100644
--- a/src/process_int.cc
+++ b/src/process_int.cc
@@ -75,7 +75,7 @@ cdo_operator_argc(void)
   return localProcess->get_oper_argc();
 }
 
-const std::string &
+std::string const &
 cdo_operator_argv(size_t idx)
 {
   auto argc = localProcess->get_oper_argc();
diff --git a/src/process_int.h b/src/process_int.h
index abc62bb4a..f6b1811b4 100644
--- a/src/process_int.h
+++ b/src/process_int.h
@@ -17,7 +17,7 @@ bool cdo_assert_files_only();
 bool cdo_stream_is_pipe(CdoStreamID streamID);
 bool this_is_the_only_process();
 bool data_is_unchanged();
-const std::string &cdo_operator_argv(size_t p_idx);
+std::string const &cdo_operator_argv(size_t p_idx);
 const std::vector<std::string> &cdo_get_oper_argv();
 std::string cdo_get_obase();
 const char *cdo_get_stream_name(int p_streamIndex);
diff --git a/src/region.cc b/src/region.cc
index 899f47d0e..a7712d8ff 100644
--- a/src/region.cc
+++ b/src/region.cc
@@ -15,7 +15,7 @@
 #include "region.h"
 
 static int
-read_coords(size_t segmentNo, Varray<double> &xvals, Varray<double> &yvals, const std::string &polyfile, std::ifstream &file)
+read_coords(size_t segmentNo, Varray<double> &xvals, Varray<double> &yvals, std::string const &polyfile, std::ifstream &file)
 {
   auto maxVals = xvals.size();
 
@@ -62,7 +62,7 @@ read_coords(size_t segmentNo, Varray<double> &xvals, Varray<double> &yvals, cons
 }
 
 void
-read_regions_from_file(const std::string &filename, Regions &regions)
+read_regions_from_file(std::string const &filename, Regions &regions)
 {
   std::ifstream file(filename);
   if (!file.is_open()) cdo_abort("Open failed on: %s\n", filename);
diff --git a/src/region.h b/src/region.h
index 5891fa6e6..9a29304a5 100644
--- a/src/region.h
+++ b/src/region.h
@@ -19,7 +19,7 @@ struct Regions
   size_t numSegments = 0;
 };
 
-void read_regions_from_file(const std::string &filename, Regions &regions);
+void read_regions_from_file(std::string const &filename, Regions &regions);
 void read_regions_from_dcw(const char *codeNames, Regions &regions);
 
 #endif  //  REGION_H
diff --git a/src/remap.h b/src/remap.h
index ba9ca82c9..3e876477c 100644
--- a/src/remap.h
+++ b/src/remap.h
@@ -63,7 +63,7 @@ RemapType
 #define REMAP_MAX_ITER 3
 #define REMAP_GENWEIGHTS 5
 
-int remap_check_mask_indices(const size_t (&indices)[4], const Vmask &mask);
+int remap_check_mask_indices(const size_t (&indices)[4], Vmask const &mask);
 
 void remap_set_int(int remapvar, int value);
 
@@ -73,49 +73,49 @@ void remap_grid_free(RemapGrid &grid, bool removeMask = true);
 void remap_grid_alloc(RemapMethod mapType, RemapGrid &grid);
 void remap_search_init(RemapMethod mapType, RemapSearch &search, RemapGrid &srcGrid, RemapGrid &tgtGrid);
 
-void remap_search_points(RemapSearch &rsearch, const PointLonLat &pointLL, KnnData &knnData);
-int remap_search_square(RemapSearch &rsearch, const PointLonLat &pointLL, SquareCorners &squareCorners);
+void remap_search_points(RemapSearch &rsearch, PointLonLat const &pointLL, KnnData &knnData);
+int remap_search_square(RemapSearch &rsearch, PointLonLat const &pointLL, SquareCorners &squareCorners);
 
 void remap_bilinear_weights(RemapSearch &rsearch, RemapVars &rv);
 void remap_bicubic_weights(RemapSearch &rsearch, RemapVars &rv);
-void remap_knn_weights(const KnnParams &knnParams, RemapSearch &rsearch, RemapVars &rv);
+void remap_knn_weights(KnnParams const &knnParams, RemapSearch &rsearch, RemapVars &rv);
 void remap_conserv_weights(RemapSearch &rsearch, RemapVars &rv);
 
-void remap_bilinear(RemapSearch &rsearch, const Field &field1, Field &field2);
-void remap_bicubic(RemapSearch &rsearch, const Field &field1, Field &field2);
-void remap_knn(const KnnParams &knnParams, RemapSearch &rsearch, const Field &field1, Field &field2);
-void remap_conserv(NormOpt normOpt, RemapSearch &rsearch, const Field &field1, Field &field2);
+void remap_bilinear(RemapSearch &rsearch, Field const &field1, Field &field2);
+void remap_bicubic(RemapSearch &rsearch, Field const &field1, Field &field2);
+void remap_knn(KnnParams const &knnParams, RemapSearch &rsearch, Field const &field1, Field &field2);
+void remap_conserv(NormOpt normOpt, RemapSearch &rsearch, Field const &field1, Field &field2);
 
 namespace remap
 {
 
 template <typename T>
-void gradients(const Varray<T> &array, RemapGrid &grid, const Vmask &mask, RemapGradients &gradients);
-void gradients(const Field &field, RemapGrid &grid, RemapGradients &gradients);
+void gradients(Varray<T> const &array, RemapGrid &grid, Vmask const &mask, RemapGradients &gradients);
+void gradients(Field const &field, RemapGrid &grid, RemapGradients &gradients);
 
-void stat(int remapOrder, RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv, const Field &field1, const Field &field2);
+void stat(int remapOrder, RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv, Field const &field1, Field const &field2);
 
 };  // namespace remap
 
-void remap_write_data_scrip(const std::string &weightsfile, const KnnParams &knnParams, const RemapSwitches &remapSwitches,
+void remap_write_data_scrip(std::string const &weightsfile, KnnParams const &knnParams, const RemapSwitches &remapSwitches,
                             RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv);
-RemapSwitches remap_read_data_scrip(const std::string &weightsfile, int gridID1, int gridID2, RemapGrid &srcGrid,
+RemapSwitches remap_read_data_scrip(std::string const &weightsfile, int gridID1, int gridID2, RemapGrid &srcGrid,
                                     RemapGrid &tgtGrid, RemapVars &rv, KnnParams &knnParams);
 
 int grid_search_square_reg2d_NN(size_t nx, size_t ny, size_t *nbrIndices, double *nbrDistance, double plat, double plon,
-                                const Varray<double> &src_center_lat, const Varray<double> &src_center_lon);
+                                Varray<double> const &src_center_lat, Varray<double> const &src_center_lon);
 
 int grid_search_square_reg2d(RemapGrid *srcGrid, SquareCorners &squareCorners, double plat, double plon);
 
-std::pair<double, double> remap_find_weights(const PointLonLat &pointLL, const SquareCorners &squareCorners);
+std::pair<double, double> remap_find_weights(PointLonLat const &pointLL, const SquareCorners &squareCorners);
 
 PointLonLat remapgrid_get_lonlat(const RemapGrid *grid, size_t index);
 
-void remap_check_area(size_t grid_size, const Varray<double> &cell_area, const char *name);
+void remap_check_area(size_t grid_size, Varray<double> const &cell_area, const char *name);
 
 template <typename T>
-void remap_set_mask(const Varray<T> &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
+void remap_set_mask(Varray<T> const &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
 
-void remap_set_mask(const Field &field1, size_t gridsize, size_t numMissVals, double missval, Vmask &imask);
+void remap_set_mask(Field const &field1, size_t gridsize, size_t numMissVals, double missval, Vmask &imask);
 
 #endif /* REMAP_H */
diff --git a/src/remap_bicubic.cc b/src/remap_bicubic.cc
index 0dca581f0..f57690210 100644
--- a/src/remap_bicubic.cc
+++ b/src/remap_bicubic.cc
@@ -48,7 +48,7 @@ bicubic_set_weights(double xfrac, double yfrac, double (&weights)[4][4])
   // clang-format on
 }
 
-int num_src_points(const Vmask &mask, const size_t (&indices)[4], double (&lats)[4]);
+int num_src_points(Vmask const &mask, const size_t (&indices)[4], double (&lats)[4]);
 
 static void
 renormalize_weights(const double (&lats)[4], double (&weights)[4][4])
@@ -221,11 +221,11 @@ remap_bicubic_weights(RemapSearch &rsearch, RemapVars &rv)
 // -----------------------------------------------------------------------
 template <typename T>
 static T
-bicubic_remap(const Varray<T> &srcArray, const double (&wgt)[4][4], const size_t (&ind)[4], const RemapGradients &gradients)
+bicubic_remap(Varray<T> const &srcArray, const double (&wgt)[4][4], const size_t (&ind)[4], const RemapGradients &gradients)
 {
-  const auto &glat = gradients.lat;
-  const auto &glon = gradients.lon;
-  const auto &glatlon = gradients.latLon;
+  auto const &glat = gradients.lat;
+  auto const &glon = gradients.lon;
+  auto const &glatlon = gradients.latLon;
 
   double tgtPoint = 0.0;
   for (int i = 0; i < 4; ++i)
@@ -323,8 +323,8 @@ remap_bicubic(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissva
 }  // remap_bicubic
 
 void
-remap_bicubic(RemapSearch &remapSearch, const Field &field1, Field &field2)
+remap_bicubic(RemapSearch &remapSearch, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_bicubic(v1, v2, field1.missval, field1.numMissVals, remapSearch); };
+  auto func = [&](auto const &v1, auto &v2) { remap_bicubic(v1, v2, field1.missval, field1.numMissVals, remapSearch); };
   field_operation2(func, field1, field2);
 }
diff --git a/src/remap_bilinear.cc b/src/remap_bilinear.cc
index ad68d1d44..4985eadc4 100644
--- a/src/remap_bilinear.cc
+++ b/src/remap_bilinear.cc
@@ -27,13 +27,13 @@ limit_dphi_bounds(double &dphi)
 }
 
 std::pair<double, double>
-remap_find_weights(const PointLonLat &pointLL, const SquareCorners &squareCorners)
+remap_find_weights(PointLonLat const &pointLL, const SquareCorners &squareCorners)
 {
   constexpr double converge = 1.0e-10;  // Convergence criterion
   extern long RemapMaxIteration;
 
-  const auto &lons = squareCorners.lons;
-  const auto &lats = squareCorners.lats;
+  auto const &lons = squareCorners.lons;
+  auto const &lats = squareCorners.lats;
 
   // Iterate to find xfrac,yfrac for bilinear approximation
 
@@ -100,7 +100,7 @@ bilinear_set_weights(double xfrac, double yfrac, double (&weights)[4])
 }
 
 int
-num_src_points(const Vmask &mask, const size_t (&indices)[4], double (&lats)[4])
+num_src_points(Vmask const &mask, const size_t (&indices)[4], double (&lats)[4])
 {
   int num = 4;
 
@@ -191,7 +191,7 @@ bilinear_warning()
 }
 
 static void
-remap_bilinear_weights_regular(RemapSearch &rsearch, const Vmask &srcGridMask, const PointLonLat &pointLL, double &tgtCellFrac,
+remap_bilinear_weights_regular(RemapSearch &rsearch, Vmask const &srcGridMask, PointLonLat const &pointLL, double &tgtCellFrac,
                                size_t tgtCellIndex, std::vector<WeightLinks> &weightLinks)
 {
   SquareCorners squareCorners;
@@ -236,7 +236,7 @@ remap_bilinear_weights_regular(RemapSearch &rsearch, const Vmask &srcGridMask, c
 }
 
 static void
-remap_bilinear_weights_healpix(const RemapSearch &rsearch, const Vmask &srcGridMask, const PointLonLat &pointLL,
+remap_bilinear_weights_healpix(const RemapSearch &rsearch, Vmask const &srcGridMask, PointLonLat const &pointLL,
                                double &tgtCellFrac, size_t tgtCellIndex, std::vector<WeightLinks> &weightLinks)
 {
   double weights[4];  // bilinear weights for four corners
@@ -315,14 +315,14 @@ remap_bilinear_weights(RemapSearch &rsearch, RemapVars &rv)
 
 template <typename T>
 static inline T
-bilinear_remap(const Varray<T> &srcArray, const double (&wgt)[4], const size_t (&ind)[4])
+bilinear_remap(Varray<T> const &srcArray, const double (&wgt)[4], const size_t (&ind)[4])
 {
   return srcArray[ind[0]] * wgt[0] + srcArray[ind[1]] * wgt[1] + srcArray[ind[2]] * wgt[2] + srcArray[ind[3]] * wgt[3];
 }
 
 template <typename T1, typename T2>
 static void
-remap_bilinear_regular(RemapSearch &rsearch, const Varray<T1> &srcArray, const Vmask &srcGridMask, const PointLonLat &pointLL,
+remap_bilinear_regular(RemapSearch &rsearch, const Varray<T1> &srcArray, Vmask const &srcGridMask, PointLonLat const &pointLL,
                        T2 &tgtValue)
 {
   SquareCorners squareCorners;
@@ -367,7 +367,7 @@ remap_bilinear_regular(RemapSearch &rsearch, const Varray<T1> &srcArray, const V
 
 template <typename T1, typename T2>
 static void
-remap_bilinear_healpix(const RemapSearch &rsearch, const Varray<T1> &srcArray, const Vmask &srcGridMask, const PointLonLat &pointLL,
+remap_bilinear_healpix(const RemapSearch &rsearch, const Varray<T1> &srcArray, Vmask const &srcGridMask, PointLonLat const &pointLL,
                        T2 &tgtValue)
 {
   double weights[4];  // bilinear weights for four corners
@@ -442,8 +442,8 @@ remap_bilinear(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissv
 }  // remap_bilinear
 
 void
-remap_bilinear(RemapSearch &remapSearch, const Field &field1, Field &field2)
+remap_bilinear(RemapSearch &remapSearch, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_bilinear(v1, v2, field1.missval, field1.numMissVals, remapSearch); };
+  auto func = [&](auto const &v1, auto &v2) { remap_bilinear(v1, v2, field1.missval, field1.numMissVals, remapSearch); };
   field_operation2(func, field1, field2);
 }
diff --git a/src/remap_conserv.cc b/src/remap_conserv.cc
index 7f045eeec..379656b7b 100644
--- a/src/remap_conserv.cc
+++ b/src/remap_conserv.cc
@@ -123,8 +123,8 @@ gridcell_free_yac(const GridCell &gridCell)
 }
 
 static int
-get_lonlat_circle_index(RemapGridType remapGridType, size_t gridsize, size_t numCorners, const Varray<double> &clon,
-                        const Varray<double> &clat)
+get_lonlat_circle_index(RemapGridType remapGridType, size_t gridsize, size_t numCorners, Varray<double> const &clon,
+                        Varray<double> const &clat)
 {
   int lonlatCircleIndex = -1;
 
@@ -169,8 +169,8 @@ get_lonlat_circle_index(const RemapGrid *remapGrid)
 {
   auto gridsize = remapGrid->size;
   auto numCorners = remapGrid->numCorners;
-  const auto &clon = remapGrid->cornerLons;
-  const auto &clat = remapGrid->cornerLats;
+  auto const &clon = remapGrid->cornerLons;
+  auto const &clat = remapGrid->cornerLats;
   return get_lonlat_circle_index(remapGrid->type, gridsize, numCorners, clon, clat);
 }
 
@@ -183,7 +183,7 @@ normalize_weights(RemapGrid *tgtGrid, RemapVars &rv)
 
   if (rv.normOpt == NormOpt::DESTAREA)
     {
-      const auto &cellArea = tgtGrid->cellArea;
+      auto const &cellArea = tgtGrid->cellArea;
 #ifdef _OPENMP
 #pragma omp parallel for default(shared) schedule(static)
 #endif
@@ -196,7 +196,7 @@ normalize_weights(RemapGrid *tgtGrid, RemapVars &rv)
     }
   else if (rv.normOpt == NormOpt::FRACAREA)
     {
-      const auto &cellFrac = tgtGrid->cellFrac;
+      auto const &cellFrac = tgtGrid->cellFrac;
 #ifdef _OPENMP
 #pragma omp parallel for default(shared) schedule(static)
 #endif
@@ -301,8 +301,8 @@ reg2d_bound_box(RemapGrid *remapGrid, double *gridBoundBox)
 {
   auto nx = remapGrid->dims[0];
   auto ny = remapGrid->dims[1];
-  const auto &reg2d_corner_lon = remapGrid->reg2d_corner_lon;
-  const auto &reg2d_corner_lat = remapGrid->reg2d_corner_lat;
+  auto const &reg2d_corner_lon = remapGrid->reg2d_corner_lon;
+  auto const &reg2d_corner_lat = remapGrid->reg2d_corner_lat;
 
   gridBoundBox[0] = reg2d_corner_lat[0];
   gridBoundBox[1] = reg2d_corner_lat[ny];
@@ -317,14 +317,14 @@ reg2d_bound_box(RemapGrid *remapGrid, double *gridBoundBox)
 */
 
 static void
-scale_cellfrac(size_t numCells, Varray<double> &cellFrac, const Varray<double> &cellArea)
+scale_cellfrac(size_t numCells, Varray<double> &cellFrac, Varray<double> const &cellArea)
 {
   for (size_t i = 0; i < numCells; ++i)
     if (is_not_equal(cellArea[i], 0)) cellFrac[i] /= cellArea[i];
 }
 
 static void
-vec_index_weights(Varray<double> &vec, size_t numWeights, const Varray<double> &weights, const Varray<size_t> &indices)
+vec_index_weights(Varray<double> &vec, size_t numWeights, Varray<double> const &weights, const Varray<size_t> &indices)
 {
   for (size_t i = 0; i < numWeights; ++i)
     {
@@ -375,7 +375,7 @@ remove_invalid_weights(size_t gridSize, size_t numWeights, Varray<double> &weigh
 }
 
 static size_t
-remove_unmask_weights(const Vmask &gridMask, size_t numWeights, Varray<double> &weights, Varray<size_t> &indices)
+remove_unmask_weights(Vmask const &gridMask, size_t numWeights, Varray<double> &weights, Varray<size_t> &indices)
 {
   size_t n = 0;
   for (size_t i = 0; i < numWeights; ++i)
@@ -599,7 +599,7 @@ remap_conserv_weights(RemapSearch &remapSearch, RemapVars &rv)
 
 template <typename T>
 static double
-conserv_remap(const Varray<T> &srcArray, size_t numWeights, const Varray<double> &weights, const Varray<size_t> &srcIndices)
+conserv_remap(Varray<T> const &srcArray, size_t numWeights, Varray<double> const &weights, const Varray<size_t> &srcIndices)
 {
   double tgtPoint = 0.0;
   for (size_t i = 0; i < numWeights; ++i) tgtPoint += srcArray[srcIndices[i]] * weights[i];
@@ -773,15 +773,15 @@ remap_conserv(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissva
 }  // remap_conserv
 
 void
-remap_conserv(NormOpt normOpt, RemapSearch &remapSearch, const Field &field1, Field &field2)
+remap_conserv(NormOpt normOpt, RemapSearch &remapSearch, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_conserv(v1, v2, field1.missval, field1.numMissVals, normOpt, remapSearch); };
+  auto func = [&](auto const &v1, auto &v2) { remap_conserv(v1, v2, field1.missval, field1.numMissVals, normOpt, remapSearch); };
   field_operation2(func, field1, field2);
 }
 
 template <typename T>
 static size_t
-remove_missing_weights(const Varray<T> &srcArray, T missval, size_t numWeights, Varray<double> &partialWeights,
+remove_missing_weights(Varray<T> const &srcArray, T missval, size_t numWeights, Varray<double> &partialWeights,
                        Varray<size_t> &indices)
 {
   size_t n = 0;
@@ -812,7 +812,7 @@ latitude_area(double latMin, double latMax)
 }
 
 static void
-calc_remap_indices(size_t gridsize1, size_t nv1, const Varray<double> &ybounds1, size_t ysize2, const Varray<double> &ybounds2,
+calc_remap_indices(size_t gridsize1, size_t nv1, Varray<double> const &ybounds1, size_t ysize2, Varray<double> const &ybounds2,
                    Varray2D<size_t> &remapIndices)
 {
   constexpr double scaleFactor = 1000000000.0;
@@ -992,8 +992,8 @@ remap_zonal_mean(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMis
 }
 
 void
-remap_zonal_mean(const Varray2D<size_t> &remapIndices, const Varray2D<double> &remapWeights, const Field &field1, Field &field2)
+remap_zonal_mean(const Varray2D<size_t> &remapIndices, const Varray2D<double> &remapWeights, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_zonal_mean(v1, v2, field1.missval, remapIndices, remapWeights); };
+  auto func = [&](auto const &v1, auto &v2) { remap_zonal_mean(v1, v2, field1.missval, remapIndices, remapWeights); };
   field_operation2(func, field1, field2);
 }
diff --git a/src/remap_gradients.cc b/src/remap_gradients.cc
index 7c48eda56..6a453f460 100644
--- a/src/remap_gradients.cc
+++ b/src/remap_gradients.cc
@@ -14,7 +14,7 @@ namespace remap
 
 template <typename T>
 void
-gradients(const Varray<T> &array, RemapGrid &grid, const Vmask &mask, RemapGradients &gradients)
+gradients(Varray<T> const &array, RemapGrid &grid, Vmask const &mask, RemapGradients &gradients)
 {
   if (grid.rank != 2) cdo_abort("Internal problem (remap_gradients), grid rank = %d!", grid.rank);
 
@@ -180,11 +180,11 @@ gradients(const Varray<T> &array, RemapGrid &grid, const Vmask &mask, RemapGradi
 }  // remap_gradients
 
 // Explicit instantiation
-template void gradients(const Varray<float> &array, RemapGrid &grid, const Vmask &mask, RemapGradients &gradients);
-template void gradients(const Varray<double> &array, RemapGrid &grid, const Vmask &mask, RemapGradients &gradients);
+template void gradients(Varray<float> const &array, RemapGrid &grid, Vmask const &mask, RemapGradients &gradients);
+template void gradients(Varray<double> const &array, RemapGrid &grid, Vmask const &mask, RemapGradients &gradients);
 
 void
-gradients(const Field &field, RemapGrid &grid, RemapGradients &gradients)
+gradients(Field const &field, RemapGrid &grid, RemapGradients &gradients)
 {
   auto len = grid.size;
   Vmask mask(len);
@@ -193,7 +193,7 @@ gradients(const Field &field, RemapGrid &grid, RemapGradients &gradients)
 #endif
   for (size_t i = 0; i < len; ++i) mask[i] = (grid.mask[i] > 0);
 
-  auto func = [&](const auto &v) { remap::gradients(v, grid, mask, gradients); };
+  auto func = [&](auto const &v) { remap::gradients(v, grid, mask, gradients); };
   field_operation(func, field);
 }
 
diff --git a/src/remap_knn.cc b/src/remap_knn.cc
index 80f3b1ea5..f82cb88fa 100644
--- a/src/remap_knn.cc
+++ b/src/remap_knn.cc
@@ -19,7 +19,7 @@
 // This routine computes the weights for a k-nearest-neighbor interpolation
 // -----------------------------------------------------------------------
 void
-remap_knn_weights(const KnnParams &knnParams, RemapSearch &rsearch, RemapVars &rv)
+remap_knn_weights(KnnParams const &knnParams, RemapSearch &rsearch, RemapVars &rv)
 {
   auto srcGrid = rsearch.srcGrid;
   auto tgtGrid = rsearch.tgtGrid;
@@ -96,7 +96,7 @@ remap_knn_weights(const KnnParams &knnParams, RemapSearch &rsearch, RemapVars &r
 // -----------------------------------------------------------------------
 template <typename T1, typename T2>
 static void
-remap_knn(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissval, size_t numMissVals, const KnnParams &knnParams,
+remap_knn(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissval, size_t numMissVals, KnnParams const &knnParams,
           RemapSearch &rsearch)
 {
   T1 missval = srcMissval;
@@ -153,16 +153,16 @@ remap_knn(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissval, s
 }  // remap_knn
 
 void
-remap_knn(const KnnParams &knnParams, RemapSearch &remapSearch, const Field &field1, Field &field2)
+remap_knn(KnnParams const &knnParams, RemapSearch &remapSearch, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_knn(v1, v2, field1.missval, field1.numMissVals, knnParams, remapSearch); };
+  auto func = [&](auto const &v1, auto &v2) { remap_knn(v1, v2, field1.missval, field1.numMissVals, knnParams, remapSearch); };
   field_operation2(func, field1, field2);
 }
 
 template <typename T1, typename T2>
 void
 intgrid_knn(const Varray<T1> &srcArray, Varray<T2> &tgtArray, int gridID1, int gridID2, double srcMissval, size_t numMissVals,
-            const KnnParams &knnParams)
+            KnnParams const &knnParams)
 {
   auto mapType = RemapMethod::KNN;
 
@@ -180,9 +180,9 @@ intgrid_knn(const Varray<T1> &srcArray, Varray<T2> &tgtArray, int gridID1, int g
 }  // intgrid_knn
 
 void
-intgrid_knn(const KnnParams &knnParams, const Field &field1, Field &field2)
+intgrid_knn(KnnParams const &knnParams, Field const &field1, Field &field2)
 {
-  auto func = [&](const auto &v1, auto &v2) {
+  auto func = [&](auto const &v1, auto &v2) {
     intgrid_knn(v1, v2, field1.grid, field2.grid, field1.missval, field1.numMissVals, knnParams);
   };
   field_operation2(func, field1, field2);
@@ -191,7 +191,7 @@ intgrid_knn(const KnnParams &knnParams, const Field &field1, Field &field2)
 }
 
 void
-intgrid_1nn(const Field &field1, Field &field2)
+intgrid_1nn(Field const &field1, Field &field2)
 {
   KnnParams knnParams;
   knnParams.k = 1;
diff --git a/src/remap_point_search.cc b/src/remap_point_search.cc
index d15d665dc..188353fea 100644
--- a/src/remap_point_search.cc
+++ b/src/remap_point_search.cc
@@ -11,7 +11,7 @@
 #include "cdo_output.h"
 
 static void
-grid_search_point_healpix(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData)
+grid_search_point_healpix(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData)
 {
   /*
     Input variables:
@@ -36,7 +36,7 @@ grid_search_point_healpix(GridPointsearch &gps, const PointLonLat &pointLL, KnnD
 
 // This routine finds the closest numNeighbor points to a search point and computes a distance to each of the neighbors
 static void
-grid_search_point_reg2d(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData)
+grid_search_point_reg2d(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData)
 {
   /*
     Input variables:
@@ -56,8 +56,8 @@ grid_search_point_reg2d(GridPointsearch &gps, const PointLonLat &pointLL, KnnDat
   knnData.init_indices();
   knnData.init_dist();
 
-  const auto &lons = gps.reg2d->m_lonsReg2d;
-  const auto &lats = gps.reg2d->m_latsReg2d;
+  auto const &lons = gps.reg2d->m_lonsReg2d;
+  auto const &lats = gps.reg2d->m_latsReg2d;
 
   auto &params = gps.params;
   long nx = params.dims[0];
@@ -94,7 +94,7 @@ grid_search_point_reg2d(GridPointsearch &gps, const PointLonLat &pointLL, KnnDat
 }
 
 void
-grid_search_point_unstruct(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData)
+grid_search_point_unstruct(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData)
 {
   /*
     Input variables:
@@ -143,7 +143,7 @@ grid_search_point_unstruct(GridPointsearch &gps, const PointLonLat &pointLL, Knn
 }
 
 void
-grid_search_point_smooth(GridPointsearch &gps, const PointLonLat &pointLL, KnnData &knnData)
+grid_search_point_smooth(GridPointsearch &gps, PointLonLat const &pointLL, KnnData &knnData)
 {
   /*
     Input variables:
@@ -203,7 +203,7 @@ grid_search_point_smooth(GridPointsearch &gps, const PointLonLat &pointLL, KnnDa
 }
 
 void
-remap_search_points(RemapSearch &rsearch, const PointLonLat &pointLL, KnnData &knnData)
+remap_search_points(RemapSearch &rsearch, PointLonLat const &pointLL, KnnData &knnData)
 {
   // clang-format off
   if      (rsearch.srcGrid->type == RemapGridType::Reg2D)   grid_search_point_reg2d(rsearch.gps, pointLL, knnData);
@@ -308,7 +308,7 @@ point_in_quad(bool isCyclic, size_t nx, size_t ny, size_t i, size_t j, SquareCor
 }
 
 static int
-grid_search_square_curv2d(GridPointsearch &gps, RemapGrid *rgrid, SquareCorners &squareCorners, const PointLonLat &pointLL)
+grid_search_square_curv2d(GridPointsearch &gps, RemapGrid *rgrid, SquareCorners &squareCorners, PointLonLat const &pointLL)
 {
   /*
     Input variables:
@@ -373,7 +373,7 @@ grid_search_square_curv2d(GridPointsearch &gps, RemapGrid *rgrid, SquareCorners
 }
 
 int
-remap_search_square(RemapSearch &rsearch, const PointLonLat &pointLL, SquareCorners &squareCorners)
+remap_search_square(RemapSearch &rsearch, PointLonLat const &pointLL, SquareCorners &squareCorners)
 {
   if (rsearch.srcGrid->type == RemapGridType::Reg2D)
     return grid_search_square_reg2d(rsearch.srcGrid, squareCorners, pointLL.get_lat(), pointLL.get_lon());
diff --git a/src/remap_scrip_io.cc b/src/remap_scrip_io.cc
index 1ab4c89bc..6991f27fd 100644
--- a/src/remap_scrip_io.cc
+++ b/src/remap_scrip_io.cc
@@ -229,7 +229,7 @@ inq_dimlen(int ncId, const char *name)
 #endif
 
 void
-remap_write_data_scrip(const std::string &weightsfile, const KnnParams &knnParams, const RemapSwitches &remapSwitches,
+remap_write_data_scrip(std::string const &weightsfile, KnnParams const &knnParams, const RemapSwitches &remapSwitches,
                        RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv)
 {
   // Writes remap data to a NetCDF file using SCRIP conventions
@@ -590,7 +590,7 @@ get_maptype(int ncId)
 #endif
 
 RemapSwitches
-remap_read_data_scrip(const std::string &weightsfile, int gridID1, int gridID2, RemapGrid &srcGrid, RemapGrid &tgtGrid,
+remap_read_data_scrip(std::string const &weightsfile, int gridID1, int gridID2, RemapGrid &srcGrid, RemapGrid &tgtGrid,
                       RemapVars &rv, KnnParams &knnParams)
 {
   RemapSwitches remapSwitches;
diff --git a/src/remap_search_reg2d.cc b/src/remap_search_reg2d.cc
index 98841ef72..2d3a506db 100644
--- a/src/remap_search_reg2d.cc
+++ b/src/remap_search_reg2d.cc
@@ -30,7 +30,7 @@ nbr_indices_and_distance(int &searchResult, size_t index, double &distMin, doubl
 
 int
 grid_search_square_reg2d_NN(size_t nx, size_t ny, size_t *nbrIndices, double *nbrDistance, double plat, double plon,
-                            const Varray<double> &lats, const Varray<double> &lons)
+                            Varray<double> const &lats, Varray<double> const &lons)
 {
   // nbrIndices and nbrDistance must have memory for four values!
   int searchResult = 0;
diff --git a/src/remap_stat.cc b/src/remap_stat.cc
index 1ab8091d8..ca622d484 100644
--- a/src/remap_stat.cc
+++ b/src/remap_stat.cc
@@ -100,9 +100,9 @@ namespace remap
 {
 
 void
-stat(int remapOrder, RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv, const Field &field1, const Field &field2)
+stat(int remapOrder, RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv, Field const &field1, Field const &field2)
 {
-  auto func = [&](const auto &v1, const auto &v2, double mv1) { remap_stat(v1, v2, mv1, remapOrder, srcGrid, tgtGrid, rv); };
+  auto func = [&](auto const &v1, auto const &v2, double mv1) { remap_stat(v1, v2, mv1, remapOrder, srcGrid, tgtGrid, rv); };
   field_operation2(func, field1, field2, field1.missval);
 }
 
diff --git a/src/remap_store_link.cc b/src/remap_store_link.cc
index 3d02d7a9a..f61088fd2 100644
--- a/src/remap_store_link.cc
+++ b/src/remap_store_link.cc
@@ -24,16 +24,16 @@ is_sorted_list(size_t n, const size_t *list)
 static int
 qcompare_index(const void *a, const void *b)
 {
-  const auto &x = static_cast<const IndexWeight *>(a)->index;
-  const auto &y = static_cast<const IndexWeight *>(b)->index;
+  auto const &x = static_cast<const IndexWeight *>(a)->index;
+  auto const &y = static_cast<const IndexWeight *>(b)->index;
   return (x < y) ? -1 : (x > y);
 }
 
 static int
 qcompare_index4(const void *a, const void *b)
 {
-  const auto &x = static_cast<const IndexWeight4 *>(a)->index;
-  const auto &y = static_cast<const IndexWeight4 *>(b)->index;
+  auto const &x = static_cast<const IndexWeight4 *>(a)->index;
+  auto const &y = static_cast<const IndexWeight4 *>(b)->index;
   return (x < y) ? -1 : (x > y);
 }
 
diff --git a/src/remap_utils.cc b/src/remap_utils.cc
index c31a125d6..d1154c957 100644
--- a/src/remap_utils.cc
+++ b/src/remap_utils.cc
@@ -13,7 +13,7 @@
 
 void
 remap_print_info(int operfunc, bool remap_genweights, const RemapGrid &srcGrid, const RemapGrid &tgtGrid, size_t numMissVals,
-                 const KnnParams &knnParams)
+                 KnnParams const &knnParams)
 {
   std::string outStr;
   // clang-format off
@@ -51,7 +51,7 @@ remap_print_info(int operfunc, bool remap_genweights, const RemapGrid &srcGrid,
 }
 
 void
-remap_print_warning(const std::string &remapWeightsFile, int operfunc, const RemapGrid &srcGrid, size_t numMissVals)
+remap_print_warning(std::string const &remapWeightsFile, int operfunc, const RemapGrid &srcGrid, size_t numMissVals)
 {
   (void) operfunc;
 
@@ -257,7 +257,7 @@ remap_get_normOpt(void)
 }
 
 void
-remap_gen_weights(RemapMethod mapType, const KnnParams &knnParams, RemapType &remap)
+remap_gen_weights(RemapMethod mapType, KnnParams const &knnParams, RemapType &remap)
 {
   // clang-format off
   if      (mapType == RemapMethod::BILINEAR) remap_bilinear_weights(remap.search, remap.vars);
diff --git a/src/remap_utils.h b/src/remap_utils.h
index dafee5be9..9a7ebfd70 100644
--- a/src/remap_utils.h
+++ b/src/remap_utils.h
@@ -47,8 +47,8 @@ remap_func_is_dist(int operfunc)
 }
 
 void remap_print_info(int operfunc, bool remap_genweights, const RemapGrid &srcGrid, const RemapGrid &tgtGrid, size_t numMissVals,
-                      const KnnParams &knnParams);
-void remap_print_warning(const std::string &remapWeightsFile, int operfunc, const RemapGrid &srcGrid, size_t numMissVals);
+                      KnnParams const &knnParams);
+void remap_print_warning(std::string const &remapWeightsFile, int operfunc, const RemapGrid &srcGrid, size_t numMissVals);
 
 RemapDefaults remap_get_params();
 void remap_set_params(const RemapDefaults &remapDefaults);
@@ -57,7 +57,7 @@ RemapSwitches remap_operfunc_to_maptype(int operfunc);
 
 NormOpt remap_get_normOpt(void);
 
-void remap_gen_weights(RemapMethod mapType, const KnnParams &knnParams, RemapType &remap);
+void remap_gen_weights(RemapMethod mapType, KnnParams const &knnParams, RemapType &remap);
 
 std::vector<bool> remap_set_grids(int vlistID, const VarList &varList);
 
diff --git a/src/remap_vars.cc b/src/remap_vars.cc
index c155eb06e..0cc2ad3c8 100644
--- a/src/remap_vars.cc
+++ b/src/remap_vars.cc
@@ -22,13 +22,13 @@
 
 template <typename T1, typename T2>
 static void
-remap_first_order(Varray<T2> &tgtArray, const RemapVars &rv, const Varray<T1> &srcArray)
+remap_first_order(Varray<T2> &tgtArray, RemapVars const &rv, const Varray<T1> &srcArray)
 {
   auto numLinks = rv.numLinks;
   auto numWeights = rv.numWeights;
-  const auto &weights = rv.weights;
-  const auto &tgtIndices = rv.tgtCellIndices;
-  const auto &srcIndices = rv.srcCellIndices;
+  auto const &weights = rv.weights;
+  auto const &tgtIndices = rv.tgtCellIndices;
+  auto const &srcIndices = rv.srcCellIndices;
   auto numLinksPerValue = rv.numLinksPerValue;
 
   if (numLinksPerValue > 0 && numWeights == 1)
@@ -104,8 +104,8 @@ remap_first_order(Varray<T2> &tgtArray, const RemapVars &rv, const Varray<T1> &s
     {
       if (numWeights == 1 && rv.linksOffset.size() > 0 && rv.linksPerValue.size() > 0)
         {
-          const auto &linksOffset = rv.linksOffset;
-          const auto &linksPerValue = rv.linksPerValue;
+          auto const &linksOffset = rv.linksOffset;
+          auto const &linksPerValue = rv.linksPerValue;
           auto tgtGridSize = tgtArray.size();
 #ifdef _OPENMP
 #pragma omp parallel for if (tgtGridSize > cdoMinLoopSize) default(shared) schedule(static)
@@ -131,17 +131,17 @@ remap_first_order(Varray<T2> &tgtArray, const RemapVars &rv, const Varray<T1> &s
 
 template <typename T1, typename T2>
 static void
-remap_second_order(Varray<T2> &tgtArray, const RemapVars &rv, const Varray<T1> &srcArray, RemapGradients &gradients)
+remap_second_order(Varray<T2> &tgtArray, RemapVars const &rv, const Varray<T1> &srcArray, RemapGradients &gradients)
 {
-  const auto &grad1 = gradients.lat;
-  const auto &grad2 = gradients.lon;
-  const auto &grad3 = gradients.latLon;
+  auto const &grad1 = gradients.lat;
+  auto const &grad2 = gradients.lon;
+  auto const &grad3 = gradients.latLon;
 
   auto numLinks = rv.numLinks;
   auto numWeights = rv.numWeights;
-  const auto &weights = rv.weights;
-  const auto &tgtIndices = rv.tgtCellIndices;
-  const auto &srcIndices = rv.srcCellIndices;
+  auto const &weights = rv.weights;
+  auto const &tgtIndices = rv.tgtCellIndices;
+  auto const &srcIndices = rv.srcCellIndices;
   auto numLinksPerValue = rv.numLinksPerValue;
 
   if (numWeights == 3)
@@ -191,7 +191,7 @@ remap_second_order(Varray<T2> &tgtArray, const RemapVars &rv, const Varray<T1> &
 
 template <typename T1, typename T2>
 static void
-remap(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, const RemapVars &rv,
+remap(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, RemapVars const &rv,
       RemapGradients &gradients)
 {
   T2 missval = tgtMissval;
@@ -238,9 +238,9 @@ remap(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_
 }
 
 void
-remap_field(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1, RemapGradients &gradients)
+remap_field(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1, RemapGradients &gradients)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap(v1, v2, missval, gridsize2, rv, gradients); };
+  auto func = [&](auto const &v1, auto &v2) { remap(v1, v2, missval, gridsize2, rv, gradients); };
   field_operation2(func, field1, field2);
 }
 
@@ -282,7 +282,7 @@ binary_search_int(const Varray<size_t> &array, size_t len, size_t value)
 
 template <typename T1, typename T2>
 static void
-remap_laf(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, const RemapVars &rv)
+remap_laf(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, RemapVars const &rv)
 {
   T2 missval = tgtMissval;
   /*
@@ -294,9 +294,9 @@ remap_laf(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, s
   */
   auto numLinks = rv.numLinks;
   auto numWeights = rv.numWeights;             // num of weights used in remapping
-  const auto &weights = rv.weights;            // remapping weights for each link
-  const auto &tgtIndices = rv.tgtCellIndices;  // target indices for each link
-  const auto &srcIndices = rv.srcCellIndices;  // source indices for each link
+  auto const &weights = rv.weights;            // remapping weights for each link
+  auto const &tgtIndices = rv.tgtCellIndices;  // target indices for each link
+  auto const &srcIndices = rv.srcCellIndices;  // source indices for each link
 
   ranges::fill(tgtArray, missval);
 
@@ -391,22 +391,22 @@ remap_laf(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, s
 }
 
 void
-remap_laf(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1)
+remap_laf(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_laf(v1, v2, missval, gridsize2, rv); };
+  auto func = [&](auto const &v1, auto &v2) { remap_laf(v1, v2, missval, gridsize2, rv); };
   field_operation2(func, field1, field2);
 }
 
 template <typename T1, typename T2>
 static void
-remap_avg(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, const RemapVars &rv)
+remap_avg(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_t tgtSize, RemapVars const &rv)
 {
   T2 missval = tgtMissval;
   auto numLinks = rv.numLinks;
   auto numWeights = rv.numWeights;             // num of weights used in remapping
-  const auto &weights = rv.weights;            // remapping weights for each link
-  const auto &tgtIndices = rv.tgtCellIndices;  // target indices for each link
-  const auto &srcIndices = rv.srcCellIndices;  // source indices for each link
+  auto const &weights = rv.weights;            // remapping weights for each link
+  auto const &tgtIndices = rv.tgtCellIndices;  // target indices for each link
+  auto const &srcIndices = rv.srcCellIndices;  // source indices for each link
 
   /*
   for (size_t n = 0; n < tgtSize; ++n) tgtArray[n] = missval;
@@ -490,9 +490,9 @@ remap_avg(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, s
 }
 
 void
-remap_avg(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1)
+remap_avg(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1)
 {
-  auto func = [&](const auto &v1, auto &v2) { remap_avg(v1, v2, missval, gridsize2, rv); };
+  auto func = [&](auto const &v1, auto &v2) { remap_avg(v1, v2, missval, gridsize2, rv); };
   field_operation2(func, field1, field2);
 }
 
@@ -515,14 +515,14 @@ remap_vars_free(RemapVars &rv)
 }
 
 void
-remap_vars_check_weights(const RemapVars &rv)
+remap_vars_check_weights(RemapVars const &rv)
 {
   auto numLinks = rv.numLinks;
   auto numWeights = rv.numWeights;
   auto normOpt = rv.normOpt;
-  const auto &srcIndices = rv.srcCellIndices;
-  const auto &tgtIndices = rv.tgtCellIndices;
-  const auto &weights = rv.weights;
+  auto const &srcIndices = rv.srcCellIndices;
+  auto const &tgtIndices = rv.tgtCellIndices;
+  auto const &weights = rv.weights;
 
   for (size_t n = 0; n < numLinks; ++n)
     {
diff --git a/src/remap_vars.h b/src/remap_vars.h
index 67f40c460..150a48252 100644
--- a/src/remap_vars.h
+++ b/src/remap_vars.h
@@ -73,12 +73,12 @@ struct RemapVars
   Varray<double> weights;         // map weights for each link [maxLinks*numWeights]
 };
 
-void remap_field(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1,
+void remap_field(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1,
                  RemapGradients &gradients);
-void remap_laf(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1);
-void remap_avg(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1);
+void remap_laf(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1);
+void remap_avg(Field &field2, double missval, size_t gridsize2, RemapVars const &rv, Field const &field1);
 void remap_vars_init(RemapMethod mapType, int remapOrder, RemapVars &rv);
 void remap_vars_free(RemapVars &rv);
-void remap_vars_check_weights(const RemapVars &rv);
+void remap_vars_check_weights(RemapVars const &rv);
 
 #endif /* REMAP_VARS_H */
diff --git a/src/remaplib.cc b/src/remaplib.cc
index 00d310dcb..af4fe30df 100644
--- a/src/remaplib.cc
+++ b/src/remaplib.cc
@@ -30,7 +30,7 @@ print_healpix_warning_and_abort(void)
 }
 
 int
-remap_check_mask_indices(const size_t (&indices)[4], const Vmask &mask)
+remap_check_mask_indices(const size_t (&indices)[4], Vmask const &mask)
 {
   int searchResult = 1;
   if (mask.size() > 0)
@@ -183,7 +183,7 @@ grid_check_lat_borders_rad(size_t n, Varray<double> &ybounds)
 }
 
 static void
-convert_bounds_reg2d(size_t n, const Varray<double> &boundsIn, Varray<double> &boundsOut)
+convert_bounds_reg2d(size_t n, Varray<double> const &boundsIn, Varray<double> &boundsOut)
 {
   auto lrev = (boundsIn[0] > boundsIn[2 * n - 1]);
   if (boundsIn[0] > boundsIn[1]) lrev = !lrev;
@@ -595,7 +595,7 @@ remap_init_grids(RemapMethod mapType, bool doExtrapolate, int gridID1, RemapGrid
 /*****************************************************************************/
 
 void
-remap_check_area(size_t gridSize, const Varray<double> &cell_area, const char *name)
+remap_check_area(size_t gridSize, Varray<double> const &cell_area, const char *name)
 {
   for (size_t i = 0; i < gridSize; ++i)
     {
@@ -605,7 +605,7 @@ remap_check_area(size_t gridSize, const Varray<double> &cell_area, const char *n
 
 template <typename T>
 void
-remap_set_mask(const Varray<T> &v, size_t len, size_t numMissVals, double mv, Vmask &mask)
+remap_set_mask(Varray<T> const &v, size_t len, size_t numMissVals, double mv, Vmask &mask)
 {
   mask.resize(len);
 
@@ -637,12 +637,12 @@ remap_set_mask(const Varray<T> &v, size_t len, size_t numMissVals, double mv, Vm
 }
 
 // Explicit instantiation
-template void remap_set_mask(const Varray<float> &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
-template void remap_set_mask(const Varray<double> &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
+template void remap_set_mask(Varray<float> const &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
+template void remap_set_mask(Varray<double> const &v, size_t gridsize, size_t numMissVals, double mv, Vmask &mask);
 
 void
-remap_set_mask(const Field &field1, size_t gridsize, size_t numMissVals, double missval, Vmask &imask)
+remap_set_mask(Field const &field1, size_t gridsize, size_t numMissVals, double missval, Vmask &imask)
 {
-  auto func = [&](const auto &v) { remap_set_mask(v, gridsize, numMissVals, missval, imask); };
+  auto func = [&](auto const &v) { remap_set_mask(v, gridsize, numMissVals, missval, imask); };
   field_operation(func, field1);
 }
diff --git a/src/sellist.cc b/src/sellist.cc
index de182fde2..6e6adcae3 100644
--- a/src/sellist.cc
+++ b/src/sellist.cc
@@ -22,7 +22,7 @@ SelectInfo::init(const KVList &kvlist)
   selList.resize(kvlist.size());
 
   int i = 0;
-  for (const auto &kv : kvlist)
+  for (auto const &kv : kvlist)
     {
       auto &e = selList[i];
       e.type = SelType::UNDEF;
@@ -32,17 +32,17 @@ SelectInfo::init(const KVList &kvlist)
       for (int k = 0; k < kv.nvalues; ++k) e.values[k] = kv.values[k];
 #ifdef SELDEBUG
       printf("%s =", e.key.c_str());
-      for (const auto &value : e.values) printf(" '%s'", value.c_str());
+      for (auto const &value : e.values) printf(" '%s'", value.c_str());
       printf("\n");
 #endif
       ++i;
     }
 
 #ifdef SELDEBUG
-  for (const auto &e : selList)
+  for (auto const &e : selList)
     {
       printf("%s =", e.key.c_str());
-      for (const auto &value : e.values) printf(" '%s'", value.c_str());
+      for (auto const &value : e.values) printf(" '%s'", value.c_str());
       printf("\n");
     }
 #endif
@@ -51,12 +51,12 @@ SelectInfo::init(const KVList &kvlist)
 void
 SelectInfo::verify() const
 {
-  for (const auto &e : selList)
+  for (auto const &e : selList)
     if (e.type == SelType::UNDEF) cdo_abort("Unsupported selection keyword: '%s'!", e.key);
 }
 
 int
-selinfo_add(SelectInfo &selInfo, const std::string &description, const std::string &name, SelType type)
+selinfo_add(SelectInfo &selInfo, std::string const &description, std::string const &name, SelType type)
 {
   auto &selList = selInfo.selList;
   int listIdx = -1;
@@ -147,15 +147,15 @@ SelectInfo::nvalues(int listIdx) const
 }
 
 void
-selinfo_check_flag(const SelectInfo &selInfo, int listIdx)
+selinfo_check_flag(SelectInfo const &selInfo, int listIdx)
 {
-  const auto &selList = selInfo.selList;
+  auto const &selList = selInfo.selList;
   if (!selInfo.isValidListIdx(listIdx)) return;
 
   auto nvalues = selInfo.nvalues(listIdx);
   if (nvalues)
     {
-      const auto &e = selList[listIdx];
+      auto const &e = selList[listIdx];
       for (int i = 0; i < nvalues; ++i)
         if (!e.flag[i]) switch (e.type)
             {
@@ -168,15 +168,15 @@ selinfo_check_flag(const SelectInfo &selInfo, int listIdx)
 }
 
 void
-selinfo_check_range_flag(const SelectInfo &selInfo, int listIdx)
+selinfo_check_range_flag(SelectInfo const &selInfo, int listIdx)
 {
-  const auto &selList = selInfo.selList;
+  auto const &selList = selInfo.selList;
   if (!selInfo.isValidListIdx(listIdx)) return;
 
   auto nvalues = selInfo.nvalues(listIdx);
   if (nvalues == 2)
     {
-      const auto &e = selList[listIdx];
+      auto const &e = selList[listIdx];
       if (!e.flag[0] && e.type == SelType::FLT) cdo_warning("%s %g to %g not found!", e.description, e.dvalues[0], e.dvalues[1]);
     }
 }
@@ -379,15 +379,15 @@ selinfo_def_flag(SelectInfo &selInfo, int listIdx, int valIdx, bool flag)
 }
 
 void
-selinfo_get_val(const SelectInfo &selInfo, int listIdx, int valIdx, void *val)
+selinfo_get_val(SelectInfo const &selInfo, int listIdx, int valIdx, void *val)
 {
-  const auto &selList = selInfo.selList;
+  auto const &selList = selInfo.selList;
   if (!selInfo.isValidListIdx(listIdx)) return;
 
   auto nvalues = selInfo.nvalues(listIdx);
   if (nvalues && valIdx >= 0 && valIdx < nvalues)
     {
-      const auto &e = selList[listIdx];
+      auto const &e = selList[listIdx];
       switch (e.type)
         {
         case SelType::INT: *static_cast<int *>(val) = e.ivalues[valIdx]; break;
@@ -438,7 +438,7 @@ SelectInfo::print() const
       printf("Num  Name             Type  Size  Entries\n");
       for (int listIdx = 0, n = selList.size(); listIdx < n; ++listIdx)
         {
-          const auto &e = selList[listIdx];
+          auto const &e = selList[listIdx];
           printf("%3d  %-16s %4d  %4d ", listIdx + 1, e.key.c_str(), (int) e.type, e.nvalues);
           auto numValues = e.nvalues;
           if (numValues > 12) numValues = 11;
diff --git a/src/sellist.h b/src/sellist.h
index c3b7b35db..2b12d1562 100644
--- a/src/sellist.h
+++ b/src/sellist.h
@@ -71,16 +71,16 @@ public:
 #define SELINFO_GET_VAL(name, valIdx, val) selinfo_get_val(selInfo, listIdx_##name, valIdx, val)
 #define SELINFO_DEF_VAL(name, valIdx, val) selinfo_def_val(selInfo, listIdx_##name, valIdx, val)
 
-int selinfo_add(SelectInfo &selInfo, const std::string &description, const std::string &name, SelType type);
-void selinfo_check_flag(const SelectInfo &selInfo, int listIdx);
-void selinfo_check_range_flag(const SelectInfo &selInfo, int listIdx);
+int selinfo_add(SelectInfo &selInfo, std::string const &description, std::string const &name, SelType type);
+void selinfo_check_flag(SelectInfo const &selInfo, int listIdx);
+void selinfo_check_range_flag(SelectInfo const &selInfo, int listIdx);
 bool selinfo_check(SelectInfo &selInfo, int listIdx, void *par);
 bool selinfo_check_index(SelectInfo &selInfo, int listIdx, int par, int maxValues);
 bool selinfo_check_date(SelectInfo &selInfo, int listIdx, const char *par);
 bool selinfo_check_season(SelectInfo &selInfo, int listIdx, int month);
 bool selinfo_check_range(SelectInfo &selInfo, int listIdx, double value);
 void selinfo_def_flag(SelectInfo &selInfo, int listIdx, int valIdx, bool flag);
-void selinfo_get_val(const SelectInfo &selInfo, int listIdx, int valIdx, void *val);
+void selinfo_get_val(SelectInfo const &selInfo, int listIdx, int valIdx, void *val);
 void selinfo_def_val(SelectInfo &selInfo, int listIdx, int valIdx, void *val);
 
 #endif
diff --git a/src/specspace.cc b/src/specspace.cc
index 790d7f3ce..f7cff7469 100644
--- a/src/specspace.cc
+++ b/src/specspace.cc
@@ -13,9 +13,9 @@
 #include <mpim_grid.h>
 
 void
-grid2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+grid2spec(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
-  const auto &fcTrans = spTrans.fcTrans;
+  auto const &fcTrans = spTrans.fcTrans;
   long nlev = 1;
   long ntr = gridInqTrunc(gridIDout);
   long nlon = gridInqXsize(gridIDin);
@@ -34,9 +34,9 @@ grid2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &
 }
 
 void
-spec2grid(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+spec2grid(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
-  const auto &fcTrans = spTrans.fcTrans;
+  auto const &fcTrans = spTrans.fcTrans;
   long nlev = 1;
   long ntr = gridInqTrunc(gridIDin);
   long nlon = gridInqXsize(gridIDout);
@@ -55,7 +55,7 @@ spec2grid(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &
 }
 
 void
-four2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+four2spec(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
   (void) gridIDin;
   long nlev = 1;
@@ -68,7 +68,7 @@ four2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &
 }
 
 void
-spec2four(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+spec2four(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
   long nlev = 1;
   long ntr = gridInqTrunc(gridIDin);
@@ -81,7 +81,7 @@ spec2four(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &
 }
 
 void
-four2grid(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+four2grid(const FC_Transformation &fcTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
   long nlev = 1;
   long ntr = gridInqTrunc(gridIDin);
@@ -97,7 +97,7 @@ four2grid(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &
 }
 
 void
-grid2four(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+grid2four(const FC_Transformation &fcTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
   long nlev = 1;
   long ntr = gridInqTrunc(gridIDout);
@@ -113,7 +113,7 @@ grid2four(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &
 }
 
 void
-spec2spec(int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut)
+spec2spec(int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut)
 {
   long ntrIn = gridInqTrunc(gridIDin);
   long ntrOut = gridInqTrunc(gridIDout);
@@ -122,7 +122,7 @@ spec2spec(int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<dou
 }
 
 void
-speccut(int gridIDin, const Varray<double> &arrayIn, Varray<double> &arrayOut, const Varray<int> &waves)
+speccut(int gridIDin, Varray<double> const &arrayIn, Varray<double> &arrayOut, const Varray<int> &waves)
 {
   long ntr = gridInqTrunc(gridIDin);
 
@@ -130,7 +130,7 @@ speccut(int gridIDin, const Varray<double> &arrayIn, Varray<double> &arrayOut, c
 }
 
 void
-trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, const Varray<double> &gu, const Varray<double> &gv,
+trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, Varray<double> const &gu, Varray<double> const &gv,
             int gridID2, Varray<double> &sd, Varray<double> &svo)
 {
   if (gridInqType(gridID1) != GRID_GAUSSIAN)
@@ -139,7 +139,7 @@ trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, const Varr
   if (gridInqType(gridID2) != GRID_SPECTRAL)
     cdo_abort("unexpected grid2 type: %s instead of spectral", gridNamePtr(gridInqType(gridID2)));
 
-  const auto &fcTrans = spTrans.fcTrans;
+  auto const &fcTrans = spTrans.fcTrans;
   long ntr = gridInqTrunc(gridID2);
   long nlon = gridInqXsize(gridID1);
   long nlat = gridInqYsize(gridID1);
@@ -167,15 +167,15 @@ trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, const Varr
 }
 
 void
-trans_dv2uv(const SP_Transformation &spTrans, const DV_Transformation &dvTrans, long nlev, int gridID1, const Varray<double> &sd,
-            const Varray<double> &svo, int gridID2, Varray<double> &gu, Varray<double> &gv)
+trans_dv2uv(const SP_Transformation &spTrans, const DV_Transformation &dvTrans, long nlev, int gridID1, Varray<double> const &sd,
+            Varray<double> const &svo, int gridID2, Varray<double> &gu, Varray<double> &gv)
 {
   if (gridInqType(gridID1) != GRID_SPECTRAL)
     cdo_warning("unexpected grid1 type: %s instead of spectral", gridNamePtr(gridInqType(gridID1)));
   if (gridInqType(gridID2) != GRID_GAUSSIAN)
     cdo_warning("unexpected grid2 type: %s instead of Gaussian", gridNamePtr(gridInqType(gridID2)));
 
-  const auto &fcTrans = spTrans.fcTrans;
+  auto const &fcTrans = spTrans.fcTrans;
   long ntr = gridInqTrunc(gridID1);
   long nlon = gridInqXsize(gridID2);
   long nlat = gridInqYsize(gridID2);
diff --git a/src/specspace.h b/src/specspace.h
index 741472c09..f362f4cd6 100644
--- a/src/specspace.h
+++ b/src/specspace.h
@@ -177,27 +177,27 @@ public:
 
 void dv2ps(const double *div, double *pot, long nlev, long ntr);
 
-void trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, const Varray<double> &gu, const Varray<double> &gv,
+void trans_uv2dv(const SP_Transformation &spTrans, long nlev, int gridID1, Varray<double> const &gu, Varray<double> const &gv,
                  int gridID2, Varray<double> &sd, Varray<double> &svo);
 
 void trans_dv2uv(const SP_Transformation &spTrans, const DV_Transformation &dvTrans, long nlev, int gridID1,
-                 const Varray<double> &sd, const Varray<double> &svo, int gridID2, Varray<double> &gu, Varray<double> &gv);
+                 Varray<double> const &sd, Varray<double> const &svo, int gridID2, Varray<double> &gu, Varray<double> &gv);
 
-void grid2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void grid2spec(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
-void spec2grid(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void spec2grid(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
-void four2spec(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void four2spec(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
-void spec2four(const SP_Transformation &spTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void spec2four(const SP_Transformation &spTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
-void four2grid(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void four2grid(const FC_Transformation &fcTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
-void grid2four(const FC_Transformation &fcTrans, int gridIDin, const Varray<double> &arrayIn, int gridIDout,
+void grid2four(const FC_Transformation &fcTrans, int gridIDin, Varray<double> const &arrayIn, int gridIDout,
                Varray<double> &arrayOut);
 
-void spec2spec(int gridIDin, const Varray<double> &arrayIn, int gridIDout, Varray<double> &arrayOut);
-void speccut(int gridIDin, const Varray<double> &arrayIn, Varray<double> &arrayOut, const Varray<int> &waves);
+void spec2spec(int gridIDin, Varray<double> const &arrayIn, int gridIDout, Varray<double> &arrayOut);
+void speccut(int gridIDin, Varray<double> const &arrayIn, Varray<double> &arrayOut, const Varray<int> &waves);
 
 void spcut(const double *arrayIn, double *arrayOut, long ntr, const int *waves);
 
diff --git a/src/stdnametable.cc b/src/stdnametable.cc
index 1c4ae853e..a668ffc45 100644
--- a/src/stdnametable.cc
+++ b/src/stdnametable.cc
@@ -75,7 +75,7 @@ var_units(int varid)
 }
 
 int
-stdname_to_echamcode(const std::string &stdname)
+stdname_to_echamcode(std::string const &stdname)
 {
   int code = -1;
 
diff --git a/src/stdnametable.h b/src/stdnametable.h
index 8c7f8ec04..e2f1e2ffc 100644
--- a/src/stdnametable.h
+++ b/src/stdnametable.h
@@ -30,7 +30,7 @@ const char *var_name(int varid);
 const char *var_stdname(int varid);
 const char *var_units(int varid);
 
-int stdname_to_echamcode(const std::string &stdname);
+int stdname_to_echamcode(std::string const &stdname);
 
 struct gribcode_t
 {
diff --git a/src/table.cc b/src/table.cc
index 7c48d2be3..a4d631395 100644
--- a/src/table.cc
+++ b/src/table.cc
@@ -17,7 +17,7 @@ namespace cdo
 {
 
 int
-define_table(const std::string &tablearg)
+define_table(std::string const &tablearg)
 {
   auto tablename = tablearg.c_str();
 
@@ -25,7 +25,7 @@ define_table(const std::string &tablearg)
 
   if (tableID == CDI_UNDEFID)
     {
-      const auto &tablepath = getenv_string("CD_TABLEPATH");
+      auto const &tablepath = getenv_string("CD_TABLEPATH");
       if (tablepath.size())
         {
           std::string tablefile = tablepath + "/" + tablename;
diff --git a/src/table.h b/src/table.h
index 07d53b8da..0d9a15478 100644
--- a/src/table.h
+++ b/src/table.h
@@ -6,7 +6,7 @@
 namespace cdo
 {
 
-int define_table(const std::string &tablearg);
+int define_table(std::string const &tablearg);
 std::string predefined_tables(int p_padding);
 
 }  // namespace cdo
diff --git a/src/util_date.h b/src/util_date.h
index 5949763b2..a835ddfe2 100644
--- a/src/util_date.h
+++ b/src/util_date.h
@@ -18,7 +18,7 @@ enum
 #define SET_DATE(dtstr, date, time) (snprintf(dtstr, sizeof(dtstr), "%*ld%*d", CMP_DATE - 6, (long) date, 6, time))
 
 inline bool
-date_is_neq(const CdiDateTime &dateTime1, const CdiDateTime &dateTime2, int compareDate)
+date_is_neq(CdiDateTime const &dateTime1, CdiDateTime const &dateTime2, int compareDate)
 {
   char dateStr1[CMP_DATE + 1], dateStr2[CMP_DATE + 1];
   SET_DATE(dateStr1, cdiDate_get(dateTime1.date), cdiTime_get(dateTime1.time));
diff --git a/src/util_files.cc b/src/util_files.cc
index 2dd07f22c..d265ed117 100644
--- a/src/util_files.cc
+++ b/src/util_files.cc
@@ -13,7 +13,7 @@
 #include "cdo_default_values.h"
 
 bool
-FileUtils::file_exists(const std::string &fileName)
+FileUtils::file_exists(std::string const &fileName)
 {
   /*
   auto isZarr = (fileName.starts_with("file://") && fileName.find("zarr", 6) != std::string::npos);
@@ -38,7 +38,7 @@ FileUtils::file_exists(const std::string &fileName)
 }
 
 bool
-FileUtils::user_file_overwrite(const std::string &fileName)
+FileUtils::user_file_overwrite(std::string const &fileName)
 {
   auto status = false;
 
@@ -76,7 +76,7 @@ FileUtils::size(const char *filename)
 }
 
 static std::string
-gen_filesuffix(int filetype, const std::string &referenceName, int vlistID)
+gen_filesuffix(int filetype, std::string const &referenceName, int vlistID)
 {
   std::string suffix;
   auto foundSuffix = false;
@@ -140,7 +140,7 @@ gen_filesuffix(int filetype, const std::string &referenceName, int vlistID)
 }
 
 std::string
-FileUtils::gen_suffix(int filetype, int vlistID, const std::string &referenceName)
+FileUtils::gen_suffix(int filetype, int vlistID, std::string const &referenceName)
 {
   std::string suffix;
   if (cdo::FileSuffix != "NULL")
diff --git a/src/util_files.h b/src/util_files.h
index ec7773bfb..1b0f3cc6b 100644
--- a/src/util_files.h
+++ b/src/util_files.h
@@ -6,10 +6,10 @@
 
 namespace FileUtils
 {
-bool file_exists(const std::string &fileName);
-bool user_file_overwrite(const std::string &fileName);
+bool file_exists(std::string const &fileName);
+bool user_file_overwrite(std::string const &fileName);
 off_t size(const char *filename);
-std::string gen_suffix(int filetype, int vlistID, const std::string &refenceName);
+std::string gen_suffix(int filetype, int vlistID, std::string const &refenceName);
 }  // namespace FileUtils
 
 #endif
diff --git a/src/util_string.cc b/src/util_string.cc
index 463c4f8a8..bda781a8f 100644
--- a/src/util_string.cc
+++ b/src/util_string.cc
@@ -79,7 +79,7 @@ split_args(std::string operatorArguments)
 }
 
 std::string
-getenv_string(const std::string &envVar)
+getenv_string(std::string const &envVar)
 {
   std::string envString;
   auto envCstring = getenv(envVar.c_str());
@@ -88,7 +88,7 @@ getenv_string(const std::string &envVar)
 }
 
 std::vector<std::string>
-split_string(const std::string &str, const std::string &delimiter)
+split_string(std::string const &str, std::string const &delimiter)
 {
   std::regex regex(delimiter);
   return { std::sregex_token_iterator(str.begin(), str.end(), regex, -1), std::sregex_token_iterator() };
@@ -191,7 +191,7 @@ calendar_to_cstr(int calendar)
 }
 
 bool
-string_is_float(const std::string &str)
+string_is_float(std::string const &str)
 {
   if (str.empty() || std::isspace(str[0])) return 0;
 
@@ -201,7 +201,7 @@ string_is_float(const std::string &str)
 }
 
 bool
-string_is_int(const std::string &str)
+string_is_int(std::string const &str)
 {
   if (str.empty() || std::isspace(str[0])) return 0;
 
@@ -218,11 +218,11 @@ string_is_int(const std::string &str)
  * list is returned with the result boolean.
  **/
 std::tuple<bool, std::vector<std::string>>
-tokenize_comma_seperated_int_list(const std::string &args)
+tokenize_comma_seperated_int_list(std::string const &args)
 {
   auto tokens = split_string(args, ",");
   bool res = true;
-  for (const auto &t : tokens)
+  for (auto const &t : tokens)
     {
       if (!string_is_int(t))
         {
diff --git a/src/util_string.h b/src/util_string.h
index 878dc06de..2fd4362f9 100644
--- a/src/util_string.h
+++ b/src/util_string.h
@@ -22,9 +22,9 @@
 std::vector<std::string> get_operator_argv(std::string operatorArguments);
 std::vector<std::string> split_args(std::string operatorArguments);
 
-std::string getenv_string(const std::string &envVar);
+std::string getenv_string(std::string const &envVar);
 
-std::vector<std::string> split_string(const std::string &str, const std::string &regex_str);
+std::vector<std::string> split_string(std::string const &str, std::string const &regex_str);
 
 std::string string_to_upper(std::string str);
 std::string string_to_lower(std::string str);
@@ -38,15 +38,15 @@ const char *calendar_to_cstr(int calendar);
 
 std::string get_scientific(double p_float_string);
 
-bool string_is_float(const std::string &str);
-bool string_is_int(const std::string &str);
+bool string_is_float(std::string const &str);
+bool string_is_int(std::string const &str);
 void cstr_replace_char(char *str_in, char orig_char, char rep_char);
 
-std::tuple<bool, std::vector<std::string>> tokenize_comma_seperated_int_list(const std::string &args);
+std::tuple<bool, std::vector<std::string>> tokenize_comma_seperated_int_list(std::string const &args);
 
 template <typename... Args>
 std::string
-string_format(const std::string &format, Args... args)
+string_format(std::string const &format, Args... args)
 {
   auto size_s = std::snprintf(nullptr, 0, format.c_str(), args...) + 1;  // Extra space for '\0'
   if (size_s <= 0) { throw std::runtime_error("Error during formatting."); }
@@ -57,14 +57,14 @@ string_format(const std::string &format, Args... args)
 }
 
 inline bool
-string_contains(const std::string &s, unsigned char ch)
+string_contains(std::string const &s, unsigned char ch)
 {
   return (s.find(ch) != std::string::npos);
 }
 
 template <typename Precission>
 Precission
-string_to_number(const std::string &str)
+string_to_number(std::string const &str)
 {
   static_assert(std::is_arithmetic<Precission>::value, "Only arithmetic types allowed");
   if (str.empty()) { throw std::invalid_argument("Error, conversion of " + str + " not possible, string empty"); }
@@ -78,7 +78,7 @@ string_to_number(const std::string &str)
 
 template <typename Precission>
 std::tuple<bool, Precission>
-string_to_integral(const std::string &str)
+string_to_integral(std::string const &str)
 {
   static_assert(std::is_integral<Precission>::value, "Only integral number types allowed");
   Precission number;
@@ -94,7 +94,7 @@ string_to_integral(const std::string &str)
 
 template <typename Precission>
 std::tuple<bool, Precission>
-string_to_floating(const std::string &str)
+string_to_floating(std::string const &str)
 {
   static_assert(std::is_floating_point<Precission>::value, "Only floating point number types allowed");
   Precission number;
diff --git a/src/util_wildcards.cc b/src/util_wildcards.cc
index 5b26adea2..c08ae1d86 100644
--- a/src/util_wildcards.cc
+++ b/src/util_wildcards.cc
@@ -242,7 +242,7 @@ wildcardmatch(const char *w, const char *s)
 #endif
 
 int
-wildcardmatch(const std::string &pattern, const std::string &string)
+wildcardmatch(std::string const &pattern, std::string const &string)
 {
   return wildcardmatch(pattern.c_str(), string.c_str());
 }
diff --git a/src/util_wildcards.h b/src/util_wildcards.h
index 76caaa04c..d2d8fdcb1 100644
--- a/src/util_wildcards.h
+++ b/src/util_wildcards.h
@@ -17,6 +17,6 @@ std::vector<std::string> expand_path_names(std::vector<std::string> argv);
 std::vector<std::string> expand_wild_cards(std::vector<std::string> argv);
 
 int wildcardmatch(const char *w, const char *s);
-int wildcardmatch(const std::string &w, const std::string &s);
+int wildcardmatch(std::string const &w, std::string const &s);
 
 #endif
diff --git a/src/varray.cc b/src/varray.cc
index 32ecab6e7..c277f43c0 100644
--- a/src/varray.cc
+++ b/src/varray.cc
@@ -59,18 +59,18 @@ template MinMax varray_min_max_mv(size_t len, const double *array, double missva
 
 template <typename T>
 MinMax
-varray_min_max_mv(size_t len, const Varray<T> &v, double missval)
+varray_min_max_mv(size_t len, Varray<T> const &v, double missval)
 {
   return varray_min_max_mv(len, v.data(), missval);
 }
 
 // Explicit instantiation
-template MinMax varray_min_max_mv(size_t len, const Varray<float> &v, double missval);
-template MinMax varray_min_max_mv(size_t len, const Varray<double> &v, double missval);
+template MinMax varray_min_max_mv(size_t len, Varray<float> const &v, double missval);
+template MinMax varray_min_max_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 MinMaxSum
-varray_min_max_sum(const Varray<T> &v, size_t len, const MinMaxSum &mms)
+varray_min_max_sum(Varray<T> const &v, size_t len, const MinMaxSum &mms)
 {
   auto f_minmaxsum = [](auto val, auto &vmin, auto &vmax, auto &vsum) {
     vmin = min_value(vmin, val);
@@ -105,12 +105,12 @@ varray_min_max_sum(const Varray<T> &v, size_t len, const MinMaxSum &mms)
 }
 
 // Explicit instantiation
-template MinMaxSum varray_min_max_sum(const Varray<float> &v, size_t len, const MinMaxSum &mms);
-template MinMaxSum varray_min_max_sum(const Varray<double> &v, size_t len, const MinMaxSum &mms);
+template MinMaxSum varray_min_max_sum(Varray<float> const &v, size_t len, const MinMaxSum &mms);
+template MinMaxSum varray_min_max_sum(Varray<double> const &v, size_t len, const MinMaxSum &mms);
 
 template <typename T>
 MinMaxSum
-varray_min_max_sum_mv(const Varray<T> &v, size_t len, const MinMaxSum &mms, double missval)
+varray_min_max_sum_mv(Varray<T> const &v, size_t len, const MinMaxSum &mms, double missval)
 {
   auto f_minmaxsum_mv = [](auto val, auto mv, auto &vmin, auto &vmax, auto &vsum, auto &nvals, auto is_NE) {
     if (is_NE(val, mv))
@@ -156,12 +156,12 @@ varray_min_max_sum_mv(const Varray<T> &v, size_t len, const MinMaxSum &mms, doub
 }
 
 // Explicit instantiation
-template MinMaxSum varray_min_max_sum_mv(const Varray<float> &v, size_t len, const MinMaxSum &mms, double missval);
-template MinMaxSum varray_min_max_sum_mv(const Varray<double> &v, size_t len, const MinMaxSum &mms, double missval);
+template MinMaxSum varray_min_max_sum_mv(Varray<float> const &v, size_t len, const MinMaxSum &mms, double missval);
+template MinMaxSum varray_min_max_sum_mv(Varray<double> const &v, size_t len, const MinMaxSum &mms, double missval);
 
 template <typename T>
 MinMaxMean
-varray_min_max_mean(const Varray<T> &v, size_t len)
+varray_min_max_mean(Varray<T> const &v, size_t len)
 {
   auto mms = varray_min_max_sum(v, len, MinMaxSum());
   auto rmean = (len != 0) ? mms.sum / static_cast<double>(len) : 0.0;
@@ -169,12 +169,12 @@ varray_min_max_mean(const Varray<T> &v, size_t len)
 }
 
 // Explicit instantiation
-template MinMaxMean varray_min_max_mean(const Varray<float> &v, size_t len);
-template MinMaxMean varray_min_max_mean(const Varray<double> &v, size_t len);
+template MinMaxMean varray_min_max_mean(Varray<float> const &v, size_t len);
+template MinMaxMean varray_min_max_mean(Varray<double> const &v, size_t len);
 
 template <typename T>
 MinMaxMean
-varray_min_max_mean_mv(const Varray<T> &v, size_t len, T missval)
+varray_min_max_mean_mv(Varray<T> const &v, size_t len, T missval)
 {
   auto mms = varray_min_max_sum_mv(v, len, MinMaxSum(), missval);
   auto rmean = (mms.n != 0) ? mms.sum / static_cast<double>(mms.n) : missval;
@@ -182,12 +182,12 @@ varray_min_max_mean_mv(const Varray<T> &v, size_t len, T missval)
 }
 
 // Explicit instantiation
-template MinMaxMean varray_min_max_mean_mv(const Varray<float> &v, size_t len, float missval);
-template MinMaxMean varray_min_max_mean_mv(const Varray<double> &v, size_t len, double missval);
+template MinMaxMean varray_min_max_mean_mv(Varray<float> const &v, size_t len, float missval);
+template MinMaxMean varray_min_max_mean_mv(Varray<double> const &v, size_t len, double missval);
 
 template <typename T>
 MinMax
-array_min_max_mask(const T *const array, size_t len, const Vmask &mask)
+array_min_max_mask(const T *const array, size_t len, Vmask const &mask)
 {
   T rmin = std::numeric_limits<T>::max();
   T rmax = -std::numeric_limits<T>::max();
@@ -216,8 +216,8 @@ array_min_max_mask(const T *const array, size_t len, const Vmask &mask)
 }
 
 // Explicit instantiation
-template MinMax array_min_max_mask(const float *const array, size_t len, const Vmask &mask);
-template MinMax array_min_max_mask(const double *const array, size_t len, const Vmask &mask);
+template MinMax array_min_max_mask(const float *const array, size_t len, Vmask const &mask);
+template MinMax array_min_max_mask(const double *const array, size_t len, Vmask const &mask);
 
 void
 array_add_array(size_t len, double *array1, const double *array2)
@@ -272,7 +272,7 @@ template size_t array_num_mv(size_t len, const double *array, double missval);
 
 template <typename T>
 size_t
-varray_num_mv(size_t len, const Varray<T> &v, double mv)
+varray_num_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -295,8 +295,8 @@ varray_num_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template size_t varray_num_mv(size_t len, const Varray<float> &v, double missval);
-template size_t varray_num_mv(size_t len, const Varray<double> &v, double missval);
+template size_t varray_num_mv(size_t len, Varray<float> const &v, double missval);
+template size_t varray_num_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 MinMax
@@ -325,18 +325,18 @@ template MinMax varray_min_max(size_t len, const double *array);
 
 template <typename T>
 MinMax
-varray_min_max(size_t len, const Varray<T> &v)
+varray_min_max(size_t len, Varray<T> const &v)
 {
   return varray_min_max(len, v.data());
 }
 
 // Explicit instantiation
-template MinMax varray_min_max(size_t len, const Varray<float> &v);
-template MinMax varray_min_max(size_t len, const Varray<double> &v);
+template MinMax varray_min_max(size_t len, Varray<float> const &v);
+template MinMax varray_min_max(size_t len, Varray<double> const &v);
 
 template <typename T>
 MinMax
-varray_min_max(const Varray<T> &v)
+varray_min_max(Varray<T> const &v)
 {
   T vmin = std::numeric_limits<T>::max();
   T vmax = -std::numeric_limits<T>::max();
@@ -357,12 +357,12 @@ varray_min_max(const Varray<T> &v)
 }
 
 // Explicit instantiation
-template MinMax varray_min_max(const Varray<float> &v);
-template MinMax varray_min_max(const Varray<double> &v);
+template MinMax varray_min_max(Varray<float> const &v);
+template MinMax varray_min_max(Varray<double> const &v);
 
 template <typename T>
 T
-varray_min(size_t len, const Varray<T> &v)
+varray_min(size_t len, Varray<T> const &v)
 {
   assert(len > 0);
   assert(v.size() > 0);
@@ -388,12 +388,12 @@ varray_min(size_t len, const Varray<T> &v)
 }
 
 // Explicit instantiation
-template float varray_min(size_t len, const Varray<float> &v);
-template double varray_min(size_t len, const Varray<double> &v);
+template float varray_min(size_t len, Varray<float> const &v);
+template double varray_min(size_t len, Varray<double> const &v);
 
 template <typename T>
 T
-varray_max(size_t len, const Varray<T> &v)
+varray_max(size_t len, Varray<T> const &v)
 {
   assert(len > 0);
   assert(v.size() > 0);
@@ -419,12 +419,12 @@ varray_max(size_t len, const Varray<T> &v)
 }
 
 // Explicit instantiation
-template float varray_max(size_t len, const Varray<float> &v);
-template double varray_max(size_t len, const Varray<double> &v);
+template float varray_max(size_t len, Varray<float> const &v);
+template double varray_max(size_t len, Varray<double> const &v);
 
 template <typename T>
 T
-varray_range(size_t len, const Varray<T> &v)
+varray_range(size_t len, Varray<T> const &v)
 {
   assert(len > 0);
   assert(v.size() > 0);
@@ -459,12 +459,12 @@ varray_range(size_t len, const Varray<T> &v)
 }
 
 // Explicit instantiation
-template float varray_range(size_t len, const Varray<float> &v);
-template double varray_range(size_t len, const Varray<double> &v);
+template float varray_range(size_t len, Varray<float> const &v);
+template double varray_range(size_t len, Varray<double> const &v);
 
 template <typename T>
 T
-varray_min_mv(size_t len, const Varray<T> &v, double mv)
+varray_min_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -527,12 +527,12 @@ varray_min_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template float varray_min_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_min_mv(size_t len, const Varray<double> &v, double missval);
+template float varray_min_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_min_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 T
-varray_max_mv(size_t len, const Varray<T> &v, double mv)
+varray_max_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -595,12 +595,12 @@ varray_max_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template float varray_max_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_max_mv(size_t len, const Varray<double> &v, double missval);
+template float varray_max_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_max_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 T
-varray_range_mv(size_t len, const Varray<T> &v, double mv)
+varray_range_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -666,8 +666,8 @@ varray_range_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template float varray_range_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_range_mv(size_t len, const Varray<double> &v, double missval);
+template float varray_range_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_range_mv(size_t len, Varray<double> const &v, double missval);
 
 double
 array_sum(size_t len, const double *array)
@@ -680,7 +680,7 @@ array_sum(size_t len, const double *array)
 
 template <typename T>
 double
-varray_sum(size_t len, const Varray<T> &v)
+varray_sum(size_t len, Varray<T> const &v)
 {
   // assert(len > 0); // failed in remapcon
   assert(v.size() > 0);
@@ -706,12 +706,12 @@ varray_sum(size_t len, const Varray<T> &v)
 }
 
 // Explicit instantiation
-template double varray_sum(size_t len, const Varray<float> &v);
-template double varray_sum(size_t len, const Varray<double> &v);
+template double varray_sum(size_t len, Varray<float> const &v);
+template double varray_sum(size_t len, Varray<double> const &v);
 
 template <typename T>
 double
-varray_sum_mv(size_t len, const Varray<T> &v, double mv)
+varray_sum_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -779,12 +779,12 @@ varray_sum_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template double varray_sum_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_sum_mv(size_t len, const Varray<double> &v, double missval);
+template double varray_sum_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_sum_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 double
-varray_mean(size_t len, const Varray<T> &v)
+varray_mean(size_t len, Varray<T> const &v)
 {
   assert(len > 0);
   assert(v.size() > 0);
@@ -796,12 +796,12 @@ varray_mean(size_t len, const Varray<T> &v)
 }
 
 // Explicit instantiation
-template double varray_mean(size_t len, const Varray<float> &v);
-template double varray_mean(size_t len, const Varray<double> &v);
+template double varray_mean(size_t len, Varray<float> const &v);
+template double varray_mean(size_t len, Varray<double> const &v);
 
 template <typename T>
 double
-varray_mean_mv(size_t len, const Varray<T> &v, double mv)
+varray_mean_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -825,12 +825,12 @@ varray_mean_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template double varray_mean_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_mean_mv(size_t len, const Varray<double> &v, double missval);
+template double varray_mean_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_mean_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 double
-varray_weighted_mean(size_t len, const Varray<T> &v, const Varray<double> &w, double mv)
+varray_weighted_mean(size_t len, Varray<T> const &v, Varray<double> const &w, double mv)
 {
   T missval = mv;
 
@@ -868,12 +868,12 @@ varray_weighted_mean(size_t len, const Varray<T> &v, const Varray<double> &w, do
 }
 
 // Explicit instantiation
-template double varray_weighted_mean(size_t len, const Varray<float> &v, const Varray<double> &w, double missval);
-template double varray_weighted_mean(size_t len, const Varray<double> &v, const Varray<double> &w, double missval);
+template double varray_weighted_mean(size_t len, Varray<float> const &v, Varray<double> const &w, double missval);
+template double varray_weighted_mean(size_t len, Varray<double> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
 double
-varray_weighted_mean_mv(size_t len, const Varray<T> &v, const Varray<double> &w, double mv)
+varray_weighted_mean_mv(size_t len, Varray<T> const &v, Varray<double> const &w, double mv)
 {
   T missval = mv;
 
@@ -947,12 +947,12 @@ varray_weighted_mean_mv(size_t len, const Varray<T> &v, const Varray<double> &w,
 }
 
 // Explicit instantiation
-template double varray_weighted_mean_mv(size_t len, const Varray<float> &v, const Varray<double> &w, double missval);
-template double varray_weighted_mean_mv(size_t len, const Varray<double> &v, const Varray<double> &w, double missval);
+template double varray_weighted_mean_mv(size_t len, Varray<float> const &v, Varray<double> const &w, double missval);
+template double varray_weighted_mean_mv(size_t len, Varray<double> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
 double
-varray_avg_mv(size_t len, const Varray<T> &v, double mv)
+varray_avg_mv(size_t len, Varray<T> const &v, double mv)
 {
   T missval = mv;
 
@@ -974,12 +974,12 @@ varray_avg_mv(size_t len, const Varray<T> &v, double mv)
 }
 
 // Explicit instantiation
-template double varray_avg_mv(size_t len, const Varray<float> &v, double missval);
-template double varray_avg_mv(size_t len, const Varray<double> &v, double missval);
+template double varray_avg_mv(size_t len, Varray<float> const &v, double missval);
+template double varray_avg_mv(size_t len, Varray<double> const &v, double missval);
 
 template <typename T>
 double
-varray_weighted_avg_mv(size_t len, const Varray<T> &v, const Varray<double> &w, double mv)
+varray_weighted_avg_mv(size_t len, Varray<T> const &v, Varray<double> const &w, double mv)
 {
   T missval = mv;
 
@@ -1003,12 +1003,12 @@ varray_weighted_avg_mv(size_t len, const Varray<T> &v, const Varray<double> &w,
 }
 
 // Explicit instantiation
-template double varray_weighted_avg_mv(size_t len, const Varray<float> &v, const Varray<double> &w, double missval);
-template double varray_weighted_avg_mv(size_t len, const Varray<double> &v, const Varray<double> &w, double missval);
+template double varray_weighted_avg_mv(size_t len, Varray<float> const &v, Varray<double> const &w, double missval);
+template double varray_weighted_avg_mv(size_t len, Varray<double> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
 static void
-varray_prevarsum0(size_t len, const Varray<T> &v, double &rsum, double &rsumw)
+varray_prevarsum0(size_t len, Varray<T> const &v, double &rsum, double &rsumw)
 {
   rsum = 0.0;
   if (len > cdoMinLoopSize)
@@ -1030,7 +1030,7 @@ varray_prevarsum0(size_t len, const Varray<T> &v, double &rsum, double &rsumw)
 
 template <typename T>
 static void
-varray_prevarsum0_mv(size_t len, const Varray<T> &v, double missval, double &rsum, double &rsumw)
+varray_prevarsum0_mv(size_t len, Varray<T> const &v, double missval, double &rsum, double &rsumw)
 {
   auto f_prevarsum0_mv = [](auto a, auto mv_a, auto &sum, auto &sumw) {
     if (fp_is_not_equal(a, mv_a))
@@ -1064,7 +1064,7 @@ varray_prevarsum0_mv(size_t len, const Varray<T> &v, double missval, double &rsu
 
 template <typename T>
 static void
-varray_prevarsum(size_t len, const Varray<T> &v, double &rsum, double &rsumw, double &rsumq, double &rsumwq)
+varray_prevarsum(size_t len, Varray<T> const &v, double &rsum, double &rsumw, double &rsumq, double &rsumwq)
 {
   auto f_prevarsum = [](auto a, auto &sum, auto &sumq) {
     sum += a;
@@ -1098,7 +1098,7 @@ varray_prevarsum(size_t len, const Varray<T> &v, double &rsum, double &rsumw, do
 
 template <typename T>
 static void
-varray_prevarsum_mv(size_t len, const Varray<T> &v, T missval, double &rsum, double &rsumw, double &rsumq, double &rsumwq)
+varray_prevarsum_mv(size_t len, Varray<T> const &v, T missval, double &rsum, double &rsumw, double &rsumq, double &rsumwq)
 {
   auto f_prevarsum = [](auto a, auto mv_a, auto &sum, auto &sumq, auto &sumw, auto &sumwq) {
     if (fp_is_not_equal(a, mv_a))
@@ -1123,7 +1123,7 @@ varray_prevarsum_mv(size_t len, const Varray<T> &v, T missval, double &rsum, dou
 
 template <typename T>
 double
-varray_var(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_var(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1140,12 +1140,12 @@ varray_var(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_var(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_var(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_var(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_var(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
 
 template <typename T>
 double
-varray_var_1(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_var_1(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1162,12 +1162,12 @@ varray_var_1(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_var_1(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_var_1(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_var_1(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_var_1(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
 
 template <typename T>
 static void
-varray_weighted_prevarsum(size_t len, const Varray<T> &v, const Varray<double> &w, double &rsum, double &rsumw, double &rsumq,
+varray_weighted_prevarsum(size_t len, Varray<T> const &v, Varray<double> const &w, double &rsum, double &rsumw, double &rsumq,
                           double &rsumwq)
 {
   auto f_weighted_prevarsum = [](auto aw, auto a, auto &sum, auto &sumq, auto &sumw, auto &sumwq) {
@@ -1201,7 +1201,7 @@ varray_weighted_prevarsum(size_t len, const Varray<T> &v, const Varray<double> &
 
 template <typename T>
 static void
-varray_weighted_prevarsum_mv(size_t len, const Varray<T> &v, const Varray<double> &w, double missval, double &rsum, double &rsumw,
+varray_weighted_prevarsum_mv(size_t len, Varray<T> const &v, Varray<double> const &w, double missval, double &rsum, double &rsumw,
                              double &rsumq, double &rsumwq)
 {
   auto f_weighted_prevarsum_mv = [](auto aw, auto a, auto mv_a, auto &sum, auto &sumq, auto &sumw, auto &sumwq) {
@@ -1238,7 +1238,7 @@ varray_weighted_prevarsum_mv(size_t len, const Varray<T> &v, const Varray<double
 
 template <typename T>
 double
-varray_weighted_var(size_t len, const Varray<T> &v, const Varray<double> &w, size_t numMissVals, double mv)
+varray_weighted_var(size_t len, Varray<T> const &v, Varray<double> const &w, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1255,14 +1255,14 @@ varray_weighted_var(size_t len, const Varray<T> &v, const Varray<double> &w, siz
 }
 
 // Explicit instantiation
-template double varray_weighted_var(size_t len, const Varray<float> &v, const Varray<double> &w, size_t numMissVals,
+template double varray_weighted_var(size_t len, Varray<float> const &v, Varray<double> const &w, size_t numMissVals,
                                     double missval);
-template double varray_weighted_var(size_t len, const Varray<double> &v, const Varray<double> &w, size_t numMissVals,
+template double varray_weighted_var(size_t len, Varray<double> const &v, Varray<double> const &w, size_t numMissVals,
                                     double missval);
 
 template <typename T>
 double
-varray_weighted_var_1(size_t len, const Varray<T> &v, const Varray<double> &w, size_t numMissVals, double mv)
+varray_weighted_var_1(size_t len, Varray<T> const &v, Varray<double> const &w, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1279,14 +1279,14 @@ varray_weighted_var_1(size_t len, const Varray<T> &v, const Varray<double> &w, s
 }
 
 // Explicit instantiation
-template double varray_weighted_var_1(size_t len, const Varray<float> &v, const Varray<double> &w, size_t numMissVals,
+template double varray_weighted_var_1(size_t len, Varray<float> const &v, Varray<double> const &w, size_t numMissVals,
                                       double missval);
-template double varray_weighted_var_1(size_t len, const Varray<double> &v, const Varray<double> &w, size_t numMissVals,
+template double varray_weighted_var_1(size_t len, Varray<double> const &v, Varray<double> const &w, size_t numMissVals,
                                       double missval);
 
 template <typename T>
 static void
-varray_prekurtsum(size_t len, const Varray<T> &v, double mean, double &rsum3w, double &rsum2diff, double &rsum4diff)
+varray_prekurtsum(size_t len, Varray<T> const &v, double mean, double &rsum3w, double &rsum2diff, double &rsum4diff)
 {
   auto f_prekurtsum = [](auto vdiff, auto &sum2diff, auto &sum4diff) {
     sum2diff += vdiff * vdiff;
@@ -1319,7 +1319,7 @@ varray_prekurtsum(size_t len, const Varray<T> &v, double mean, double &rsum3w, d
 
 template <typename T>
 static void
-varray_prekurtsum_mv(size_t len, const Varray<T> &v, T missval, double mean, double &rsum3w, double &rsum2diff, double &rsum4diff)
+varray_prekurtsum_mv(size_t len, Varray<T> const &v, T missval, double mean, double &rsum3w, double &rsum2diff, double &rsum4diff)
 {
   auto f_prekurtsum_mv = [](auto a, auto mv_a, auto meanval, auto &sum2diff, auto &sum4diff, auto &sum3w) {
     if (fp_is_not_equal(a, mv_a))
@@ -1355,7 +1355,7 @@ varray_prekurtsum_mv(size_t len, const Varray<T> &v, T missval, double mean, dou
 
 template <typename T>
 double
-varray_kurt(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_kurt(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1383,12 +1383,12 @@ varray_kurt(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_kurt(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_kurt(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_kurt(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_kurt(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
 
 template <typename T>
 static void
-varray_preskewsum(size_t len, const Varray<T> &v, double mean, double &rsum3w, double &rsum3diff, double &rsum2diff)
+varray_preskewsum(size_t len, Varray<T> const &v, double mean, double &rsum3w, double &rsum3diff, double &rsum2diff)
 {
   auto f_preskewsum = [](auto vdiff, auto &sum3diff, auto &sum2diff) {
     sum3diff += vdiff * vdiff * vdiff;
@@ -1422,7 +1422,7 @@ varray_preskewsum(size_t len, const Varray<T> &v, double mean, double &rsum3w, d
 
 template <typename T>
 static void
-varray_preskewsum_mv(size_t len, const Varray<T> &v, T missval, double mean, double &rsum3w, double &rsum3diff, double &rsum2diff)
+varray_preskewsum_mv(size_t len, Varray<T> const &v, T missval, double mean, double &rsum3w, double &rsum3diff, double &rsum2diff)
 {
   auto f_preskewsum_mv = [](auto a, auto mv_a, auto meanval, auto &sum3diff, auto &sum2diff, auto &sum3w) {
     if (fp_is_not_equal(a, mv_a))
@@ -1458,7 +1458,7 @@ varray_preskewsum_mv(size_t len, const Varray<T> &v, T missval, double mean, dou
 
 template <typename T>
 double
-varray_skew(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_skew(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1486,8 +1486,8 @@ varray_skew(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_skew(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_skew(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_skew(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_skew(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
 
 #include <algorithm>
 
@@ -1519,7 +1519,7 @@ f_median(size_t len, Varray<T> &v)
 
 template <typename T>
 double
-varray_median(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_median(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1547,12 +1547,12 @@ varray_median(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_median(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_median(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_median(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_median(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
 
 template <typename T>
 double
-varray_count(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
+varray_count(size_t len, Varray<T> const &v, size_t numMissVals, double mv)
 {
   T missval = mv;
 
@@ -1575,5 +1575,5 @@ varray_count(size_t len, const Varray<T> &v, size_t numMissVals, double mv)
 }
 
 // Explicit instantiation
-template double varray_count(size_t len, const Varray<float> &v, size_t numMissVals, double missval);
-template double varray_count(size_t len, const Varray<double> &v, size_t numMissVals, double missval);
+template double varray_count(size_t len, Varray<float> const &v, size_t numMissVals, double missval);
+template double varray_count(size_t len, Varray<double> const &v, size_t numMissVals, double missval);
diff --git a/src/varray.h b/src/varray.h
index c8b98a440..e2ab5c7ad 100644
--- a/src/varray.h
+++ b/src/varray.h
@@ -216,19 +216,19 @@ using Matrix = std::array<std::array<T, COL>, ROW>;
 */
 
 template <typename T>
-MinMaxSum varray_min_max_sum(const Varray<T> &v, size_t len, const MinMaxSum &mms);
+MinMaxSum varray_min_max_sum(Varray<T> const &v, size_t len, const MinMaxSum &mms);
 
 template <typename T>
-MinMaxSum varray_min_max_sum_mv(const Varray<T> &v, size_t len, const MinMaxSum &mms, double missval);
+MinMaxSum varray_min_max_sum_mv(Varray<T> const &v, size_t len, const MinMaxSum &mms, double missval);
 
 template <typename T>
-MinMaxMean varray_min_max_mean(const Varray<T> &v, size_t len);
+MinMaxMean varray_min_max_mean(Varray<T> const &v, size_t len);
 
 template <typename T>
-MinMaxMean varray_min_max_mean_mv(const Varray<T> &v, size_t len, T missval);
+MinMaxMean varray_min_max_mean_mv(Varray<T> const &v, size_t len, T missval);
 
 template <typename T>
-MinMax array_min_max_mask(const T *array, size_t len, const Vmask &mask);
+MinMax array_min_max_mask(const T *array, size_t len, Vmask const &mask);
 
 void array_add_array(size_t len, double *array1, const double *array2);
 void array_add_array_mv(size_t len, double *array1, const double *array2, double missval);
@@ -257,7 +257,7 @@ varray_divc(size_t len, Varray<T1> &v, T2 value)
 
 template <typename T, class UnaryOperation>
 void
-varray_transform(const Varray<T> &vIn, Varray<T> &vOut, UnaryOperation unary_op)
+varray_transform(Varray<T> const &vIn, Varray<T> &vOut, UnaryOperation unary_op)
 {
   assert(vIn.size() > 0);
   assert(vOut.size() > 0);
@@ -271,89 +271,89 @@ template <typename T>
 size_t array_num_mv(size_t len, const T *array, double missval);
 
 template <typename T>
-size_t varray_num_mv(size_t len, const Varray<T> &v, double missval);
+size_t varray_num_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-MinMax varray_min_max(size_t len, const Varray<T> &v);
+MinMax varray_min_max(size_t len, Varray<T> const &v);
 
 template <typename T>
 MinMax varray_min_max(size_t len, const T *array);
 
 template <typename T>
-MinMax varray_min_max(const Varray<T> &v);
+MinMax varray_min_max(Varray<T> const &v);
 
 template <typename T>
-MinMax varray_min_max_mv(size_t len, const Varray<T> &v, double missval);
+MinMax varray_min_max_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
 MinMax varray_min_max_mv(size_t len, const T *array, double missval);
 
 template <typename T>
-T varray_min(size_t len, const Varray<T> &v);
+T varray_min(size_t len, Varray<T> const &v);
 
 template <typename T>
-T varray_max(size_t len, const Varray<T> &v);
+T varray_max(size_t len, Varray<T> const &v);
 
 template <typename T>
-T varray_range(size_t len, const Varray<T> &v);
+T varray_range(size_t len, Varray<T> const &v);
 
 template <typename T>
-T varray_min_mv(size_t len, const Varray<T> &v, double missval);
+T varray_min_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-T varray_max_mv(size_t len, const Varray<T> &v, double missval);
+T varray_max_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-T varray_range_mv(size_t len, const Varray<T> &v, double missval);
+T varray_range_mv(size_t len, Varray<T> const &v, double missval);
 
 double array_sum(size_t len, const double *array);
 
 template <typename T>
-double varray_sum(size_t len, const Varray<T> &v);
+double varray_sum(size_t len, Varray<T> const &v);
 
 template <typename T>
-double varray_sum_mv(size_t len, const Varray<T> &v, double missval);
+double varray_sum_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-double varray_mean(size_t len, const Varray<T> &v);
+double varray_mean(size_t len, Varray<T> const &v);
 
 template <typename T>
-double varray_mean_mv(size_t len, const Varray<T> &v, double missval);
+double varray_mean_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-double varray_weighted_mean(size_t len, const Varray<T> &v, const Varray<double> &w, double missval);
+double varray_weighted_mean(size_t len, Varray<T> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
-double varray_weighted_mean_mv(size_t len, const Varray<T> &v, const Varray<double> &w, double missval);
+double varray_weighted_mean_mv(size_t len, Varray<T> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
-double varray_avg_mv(size_t len, const Varray<T> &v, double missval);
+double varray_avg_mv(size_t len, Varray<T> const &v, double missval);
 
 template <typename T>
-double varray_weighted_avg_mv(size_t len, const Varray<T> &v, const Varray<double> &w, double missval);
+double varray_weighted_avg_mv(size_t len, Varray<T> const &v, Varray<double> const &w, double missval);
 
 template <typename T>
-double varray_var(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_var(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_var_1(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_var_1(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_weighted_var(size_t len, const Varray<T> &v, const Varray<double> &w, size_t numMissVals, double missval);
+double varray_weighted_var(size_t len, Varray<T> const &v, Varray<double> const &w, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_weighted_var_1(size_t len, const Varray<T> &v, const Varray<double> &w, size_t numMissVals, double missval);
+double varray_weighted_var_1(size_t len, Varray<T> const &v, Varray<double> const &w, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_skew(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_skew(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_kurt(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_kurt(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_median(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_median(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 template <typename T>
-double varray_count(size_t len, const Varray<T> &v, size_t numMissVals, double missval);
+double varray_count(size_t len, Varray<T> const &v, size_t numMissVals, double missval);
 
 #endif  //  VARRAY_H
diff --git a/src/vector3d.h b/src/vector3d.h
index b5309847f..507a0c332 100644
--- a/src/vector3d.h
+++ b/src/vector3d.h
@@ -43,13 +43,13 @@ public:
   }
 
   Vector3d
-  operator+(const Vector3d &other) const noexcept
+  operator+(Vector3d const &other) const noexcept
   {
     return Vector3d(X + other.X, Y + other.Y, Z + other.Z);
   }
 
   Vector3d
-  operator-(const Vector3d &other) const noexcept
+  operator-(Vector3d const &other) const noexcept
   {
     return Vector3d(X - other.X, Y - other.Y, Z - other.Z);
   }
@@ -62,7 +62,7 @@ public:
 
   // Calculate the cross/outer/vector product
   Vector3d
-  operator%(const Vector3d &other) const noexcept
+  operator%(Vector3d const &other) const noexcept
   {
     return Vector3d(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X);
   }
@@ -82,7 +82,7 @@ public:
 
   // Calculate the dot/inner/scalar  product
   double
-  operator*(const Vector3d &other) const noexcept
+  operator*(Vector3d const &other) const noexcept
   {
     return (X * other.X) + (Y * other.Y) + (Z * other.Z);
   }
@@ -120,7 +120,7 @@ public:
 };
 
 static inline Vector3d
-vector_product(const Vector3d &v0, const Vector3d &v1, const Vector3d &v2)
+vector_product(Vector3d const &v0, Vector3d const &v1, Vector3d const &v2)
 {
   // e1, e2: edges of the underlying planar triangle: v1-v0 ands v2-v0, respectively
   auto e1 = v1 - v0;
@@ -132,7 +132,7 @@ vector_product(const Vector3d &v0, const Vector3d &v1, const Vector3d &v2)
 }
 
 static inline Vector3d
-circum_center_mean(const Vector3d &v0, const Vector3d &v1, const Vector3d &v2)
+circum_center_mean(Vector3d const &v0, Vector3d const &v1, Vector3d const &v2)
 {
   /*
     v0, v1, v2: the coordinates of the three triangle vertices (_dmo,nit vectors) in
diff --git a/src/vertical_interp.cc b/src/vertical_interp.cc
index 824fc007a..13a266fa7 100644
--- a/src/vertical_interp.cc
+++ b/src/vertical_interp.cc
@@ -38,7 +38,7 @@ pressure_to_height(const double *pressureLevels, double *heightLevels, int numLe
 */
 template <typename T>
 void
-vct_to_hybrid_pressure(T *restrict fullPress, T *halfPress, const Varray<double> &vct, const T *restrict ps, long nhlev, long ngp)
+vct_to_hybrid_pressure(T *restrict fullPress, T *halfPress, Varray<double> const &vct, const T *restrict ps, long nhlev, long ngp)
 {
   assert(ps != nullptr);
 
@@ -59,9 +59,9 @@ vct_to_hybrid_pressure(T *restrict fullPress, T *halfPress, const Varray<double>
     }
 }
 
-template void vct_to_hybrid_pressure(float *fullPress, float *halfPress, const Varray<double> &vct, const float *ps, long nhlev,
+template void vct_to_hybrid_pressure(float *fullPress, float *halfPress, Varray<double> const &vct, const float *ps, long nhlev,
                                      long ngp);
-template void vct_to_hybrid_pressure(double *fullPress, double *halfPress, const Varray<double> &vct, const double *ps, long nhlev,
+template void vct_to_hybrid_pressure(double *fullPress, double *halfPress, Varray<double> const &vct, const double *ps, long nhlev,
                                      long ngp);
 
 void
diff --git a/src/vertical_interp.h b/src/vertical_interp.h
index ae544ce2e..3f9e33080 100644
--- a/src/vertical_interp.h
+++ b/src/vertical_interp.h
@@ -13,7 +13,7 @@
 void height_to_pressure(const double *heightLevels, double *pressureLevels, int numLevels);
 
 template <typename T>
-void vct_to_hybrid_pressure(T *fullPress, T *halfPress, const Varray<double> &vct, const T *ps, long nhlev, long ngp);
+void vct_to_hybrid_pressure(T *fullPress, T *halfPress, Varray<double> const &vct, const T *ps, long nhlev, long ngp);
 
 void extrapolate_P(double *slp, const double *halfPress, const double *fullPress, const double *geop, const double *temp, long ngp);
 
-- 
GitLab