diff --git a/algo/detectors/tof/Calibrate.cxx b/algo/detectors/tof/Calibrate.cxx
index 3c2199751715a97012e00a593cabb8ab7ecae666..f21207af04fa267d1a78fda4c2c5999c883b0bd0 100644
--- a/algo/detectors/tof/Calibrate.cxx
+++ b/algo/detectors/tof/Calibrate.cxx
@@ -27,8 +27,7 @@ namespace cbm::algo::tof
     auto& monitor    = result.second;
     calDigiOut.reserve(digiIn.size());
 
-    // channel deadtime map
-    std::unordered_map<int32_t, double> mChannelDeadTime;
+    std::fill(mChannelDeadTime.begin(), mChannelDeadTime.end(), std::numeric_limits<double>::quiet_NaN());
 
     for (size_t iDigi = 0; iDigi < digiIn.size(); iDigi++) {
 
@@ -54,13 +53,14 @@ namespace cbm::algo::tof
       }
 
       // Check dead time
-      const int32_t iAddr = pDigi.GetAddress();
-      auto it             = mChannelDeadTime.find(iAddr);
-      if (it != mChannelDeadTime.end() && pDigi.GetTime() <= it->second) {
-        it->second = pDigi.GetTime() + rpcPar.channelDeadtime;
+      const size_t chanIdx = rpcOffset[smOffset[smTypeOffset[SmType] + Sm] + Rpc] + Chan + Side * rpcPar.chanPar.size();
+      double& deadTime     = mChannelDeadTime[chanIdx];
+
+      if (!std::isnan(deadTime) && pDigi.GetTime() <= deadTime) {
+        mChannelDeadTime[chanIdx] = pDigi.GetTime() + rpcPar.channelDeadtime;
         continue;
       }
-      mChannelDeadTime[iAddr] = pDigi.GetTime() + rpcPar.channelDeadtime;
+      mChannelDeadTime[chanIdx] = pDigi.GetTime() + rpcPar.channelDeadtime;
 
       // Create calibrated digi
       CbmTofDigi& pCalDigi = calDigiOut.emplace_back(pDigi);
diff --git a/algo/detectors/tof/Calibrate.h b/algo/detectors/tof/Calibrate.h
index 5703fcba2d0ec976a2e22469ea1574ce19092953..00005a38048484bd4881329857873ef15f5b7eb1 100644
--- a/algo/detectors/tof/Calibrate.h
+++ b/algo/detectors/tof/Calibrate.h
@@ -65,10 +65,41 @@ namespace cbm::algo::tof
     /** @brief Destructor **/
     ~Calibrate() {};
 
-    /** @brief Parameters for TOF hitfinders **/
-    tof::CalibrateSetup fTofConfig {};
+    /** @brief Set parameters for TOF calibrator and initialize channel dead time arrays **/
+    void SetParams(tof::CalibrateSetup params)
+    {
+      fTofConfig = params;
+      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];
+        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();
+            rpcOffset.push_back(rpcOffset.back() + 2 * NbChan);  //Factor 2 for channel sides
+          }
+        }
+      }
+      mChannelDeadTime = std::vector<double>(rpcOffset.back(), std::numeric_limits<double>::quiet_NaN());
+    }
 
   private:  // members
+    /** @brief Parameters for TOF calibrator **/
+    tof::CalibrateSetup fTofConfig {};
+
+    /** @brief Storage for deadtime check **/
+    std::vector<double> mChannelDeadTime;
+
+    std::vector<size_t> smTypeOffset;
+    std::vector<size_t> smOffset;
+    std::vector<size_t> rpcOffset;
   };
 }  // namespace cbm::algo::tof
 
diff --git a/algo/detectors/tof/CalibratorChain.cxx b/algo/detectors/tof/CalibratorChain.cxx
index f6f422ff0a24c4f55366874aa78d502dfa4c52e8..adddf722cec3b14361e557b3f7c717a199424d9b 100644
--- a/algo/detectors/tof/CalibratorChain.cxx
+++ b/algo/detectors/tof/CalibratorChain.cxx
@@ -10,9 +10,9 @@ using namespace cbm::algo::tof;
 
 void CalibratorChain::Init()
 {
-  auto setup             = config::ReadFromFile<CalibrateSetup>(Opts().ParamsDir() / "TofCalibratePar.yaml");
-  fCalibrate             = std::make_unique<Calibrate>();
-  fCalibrate->fTofConfig = setup;
+  auto setup = config::ReadFromFile<CalibrateSetup>(Opts().ParamsDir() / "TofCalibratePar.yaml");
+  fCalibrate = std::make_unique<Calibrate>();
+  fCalibrate->SetParams(setup);
 }
 
 CalibratorChain::ReturnType CalibratorChain::Run(gsl::span<CbmTofDigi> digis)
diff --git a/reco/tasks/CbmTaskTofClusterizer.cxx b/reco/tasks/CbmTaskTofClusterizer.cxx
index b44060443a0ec258321f60315647b896925f9604..d818277c293a4be9a56a6826a02108d76f513e30 100644
--- a/reco/tasks/CbmTaskTofClusterizer.cxx
+++ b/reco/tasks/CbmTaskTofClusterizer.cxx
@@ -314,7 +314,7 @@ bool CbmTaskTofClusterizer::InitAlgos()
     cbm::algo::config::ReadFromFile<cbm::algo::tof::HitfindSetup>("TofHitfinderPar.yaml"));
 
   // Read calibration parameters pass to algo
-  fCalibrate.fTofConfig = cbm::algo::config::ReadFromFile<cbm::algo::tof::CalibrateSetup>("TofCalibratePar.yaml");
+  fCalibrate.SetParams(cbm::algo::config::ReadFromFile<cbm::algo::tof::CalibrateSetup>("TofCalibratePar.yaml"));
 
   return true;
 }