diff --git a/algo/detectors/tof/Calibrate.cxx b/algo/detectors/tof/Calibrate.cxx
index c7eb9fa79d9acd84d19f6a81f6bf75229643f3f5..0ba00227e29573c7a172c0021a9c5b092dd52bde 100644
--- a/algo/detectors/tof/Calibrate.cxx
+++ b/algo/detectors/tof/Calibrate.cxx
@@ -15,20 +15,17 @@ using fles::Subsystem;
 namespace cbm::algo::tof
 {
   // -----   Constructor  ------------------------------------------------------
-  Calibrate::Calibrate(tof::CalibrateSetup params) : fTofConfig(params)
+  Calibrate::Calibrate(tof::CalibrateSetup setup) : fSetup(setup), smTypeOffset(1, 0), smOffset(1, 0), rpcOffset(1, 0)
   {
-    smTypeOffset.resize(1, 0);
-    smOffset.resize(1, 0);
-    rpcOffset.resize(1, 0);
-
-    for (uint32_t SmType = 0; SmType < fTofConfig.NbSm.size(); SmType++) {
-      int32_t NbSm  = fTofConfig.NbSm[SmType];
-      int32_t NbRpc = fTofConfig.NbRpc[SmType];
+    // Initialize offset arrays for channel deadtime check
+    for (uint32_t SmType = 0; SmType < fSetup.NbSm.size(); SmType++) {
+      int32_t NbSm  = fSetup.NbSm[SmType];
+      int32_t NbRpc = fSetup.NbRpc[SmType];
       smTypeOffset.push_back(smTypeOffset.back() + NbSm);
       for (int32_t Sm = 0; Sm < NbSm; Sm++) {
         smOffset.push_back(smOffset.back() + NbRpc);
         for (int32_t Rpc = 0; Rpc < NbRpc; Rpc++) {
-          int32_t NbChan = fTofConfig.rpcs[SmType][Sm * NbRpc + Rpc].chanPar.size();
+          int32_t NbChan = fSetup.rpcs[SmType][Sm * NbRpc + Rpc].chanPar.size();
           rpcOffset.push_back(rpcOffset.back() + 2 * NbChan);  //Factor 2 for channel sides
         }
       }
@@ -58,20 +55,20 @@ namespace cbm::algo::tof
       const double Rpc    = digi.GetRpc();
       const double Chan   = digi.GetChannel();
       const double Side   = digi.GetSide();
-      const int NbRpc     = fTofConfig.NbRpc[SmType];
+      const int NbRpc     = fSetup.NbRpc[SmType];
 
-      auto& rpcs = fTofConfig.rpcs;
+      auto& rpcs = fSetup.rpcs;
       if (SmType >= rpcs.size() || Sm * NbRpc + Rpc >= rpcs.at(SmType).size()) {
         monitor.fDigiCalibUnknownRPC++;
         continue;
       }
 
-      CalibrateSetup::Rpc& rpcPar      = fTofConfig.rpcs.at(SmType).at(Sm * NbRpc + Rpc);
+      CalibrateSetup::Rpc& rpcPar      = fSetup.rpcs.at(SmType).at(Sm * NbRpc + Rpc);
       CalibrateSetup::Channel& chanPar = rpcPar.chanPar[Chan];
 
       // Check dead time
       const size_t chanIdx = rpcOffset[smOffset[smTypeOffset[SmType] + Sm] + Rpc] + Chan + Side * rpcPar.chanPar.size();
-      double& deadTime     = mChannelDeadTime[chanIdx];
+      const double deadTime = mChannelDeadTime[chanIdx];
 
       if (!std::isnan(deadTime) && digi.GetTime() <= deadTime) {
         mChannelDeadTime[chanIdx] = digi.GetTime() + rpcPar.channelDeadtime;
@@ -92,18 +89,16 @@ namespace cbm::algo::tof
       pCalDigi.SetTime(pCalDigi.GetTime() - chanPar.vCPTOff[Side]);
 
       // subtract Offset
-      double dTot = pCalDigi.GetTot() - chanPar.vCPTotOff[Side];
-      if (dTot < 0.001) dTot = 0.001;
+      const double dTot = std::max(pCalDigi.GetTot() - chanPar.vCPTotOff[Side], 0.001);
+
       // calibrate Digi ToT
       pCalDigi.SetTot(dTot * chanPar.vCPTotGain[Side]);
 
       // walk correction
       std::vector<double>& walk = chanPar.vCPWalk[Side];
       const double dTotBinSize  = (rpcPar.TOTMax - rpcPar.TOTMin) / rpcPar.numClWalkBinX;
-      int32_t iWx               = (int32_t)((pCalDigi.GetTot() - rpcPar.TOTMin) / dTotBinSize);
-
-      if (0 > iWx) { iWx = 0; }
-      if (iWx >= rpcPar.numClWalkBinX) { iWx = rpcPar.numClWalkBinX - 1; }
+      int32_t iWx               = std::max((int32_t)((pCalDigi.GetTot() - rpcPar.TOTMin) / dTotBinSize), 0);
+      iWx                       = std::min(iWx, rpcPar.numClWalkBinX - 1);
 
       const double dDTot = (pCalDigi.GetTot() - rpcPar.TOTMin) / dTotBinSize - (double) iWx - 0.5;
       double dWT         = walk[iWx];
@@ -134,9 +129,8 @@ namespace cbm::algo::tof
     //  std::sort(calDigiOut.begin(), calDigiOut.end(),
     //  [](const CbmTofDigi& a, const CbmTofDigi& b) -> bool { return a.GetTime() < b.GetTime(); });
 
-    monitor.fTime = xpu::pop_timer();
-    //L_(info) << MakeReport("CalibrateTime", monitor.fTime);
-
+    monitor.fTime     = xpu::pop_timer();
+    monitor.fNumDigis = digiIn.size();
     return result;
   }
 
diff --git a/algo/detectors/tof/Calibrate.h b/algo/detectors/tof/Calibrate.h
index 7523e77d51f163d84f7a8190e998b3ea72dc4ff8..fbeb793915090ef5d25cf0b739c068ddf42452bd 100644
--- a/algo/detectors/tof/Calibrate.h
+++ b/algo/detectors/tof/Calibrate.h
@@ -36,7 +36,9 @@ namespace cbm::algo::tof
     std::string print() const
     {
       std::stringstream ss;
-      ss << "Calibrate stats: num unknown RPC " << fDigiCalibUnknownRPC << ", time " << fTime.wall() << std::endl;
+      ss << "Calibrate stats: processed digis " << fNumDigis << ", num unknown RPC " << fDigiCalibUnknownRPC
+         << ", num deadtime skips " << fDigiDeadTimeCount << ", time " << fTime.wall() << " ms ( " << fTime.throughput()
+         << " GB/s )" << std::endl;
       return ss.str();
     }
   };
@@ -61,14 +63,11 @@ namespace cbm::algo::tof
     resultType operator()(gsl::span<const CbmTofDigi> digiIn);
 
     /** @brief Constructor **/
-    Calibrate(tof::CalibrateSetup params);
-
-    /** @brief Destructor **/
-    ~Calibrate() {};
+    explicit Calibrate(tof::CalibrateSetup params);
 
   private:  // members
     /** @brief Parameters for TOF calibrator **/
-    tof::CalibrateSetup fTofConfig {};
+    tof::CalibrateSetup fSetup;
 
     /** @brief Storage for deadtime check **/
     std::vector<double> mChannelDeadTime;
diff --git a/reco/tasks/CbmTaskTofClusterizer.cxx b/reco/tasks/CbmTaskTofClusterizer.cxx
index 4af3613f00b939bf647b0e60bb1218a66b4b2976..6d47357c756b26c1677d65b17afe29841d8f20a9 100644
--- a/reco/tasks/CbmTaskTofClusterizer.cxx
+++ b/reco/tasks/CbmTaskTofClusterizer.cxx
@@ -351,7 +351,9 @@ bool CbmTaskTofClusterizer::BuildClusters()
   }
 
   //Calibrate digis
-  *fTofCalDigiVec = (*fCalibrate)(fTofDigiVec).first;
+  auto [caldigis, calmonitor] = (*fCalibrate)(fTofDigiVec);
+  *fTofCalDigiVec             = std::move(caldigis);
+  LOG(info) << calmonitor.print();
 
   //Call cluster finder
   auto [clusters, monitor, indices] = (*fAlgo)(*fTofCalDigiVec);