diff --git a/algo/detectors/tof/ReadoutConfig.cxx b/algo/detectors/tof/ReadoutConfig.cxx
index c5b8a599887e94176e315dee1a5ffac897c457c3..6843df6b1664f79263e3065672b52d2662e24430 100644
--- a/algo/detectors/tof/ReadoutConfig.cxx
+++ b/algo/detectors/tof/ReadoutConfig.cxx
@@ -150,6 +150,9 @@ namespace cbm::algo::tof
       nbRobPerComp = 1;
     }
 
+    L_(debug) << "============================================================";
+    L_(debug) << "================== TOF Mapping =============================";
+
     uint32_t uCh = 0;
     for (uint32_t uGbtx = 0; uGbtx < pars.NCROBs(); ++uGbtx) {
       uint32_t uCh0    = uCh;
@@ -200,6 +203,11 @@ namespace cbm::algo::tof
           }
           break;
         }
+        case 66:  // Buc box 2024
+        {
+          BuildChannelsUidMapBuc(uCh, crob);
+          break;
+        }
         case 69: {
           /// 2022 case: 69 is followed by 4 and 9
           BuildChannelsUidMapBuc(uCh, crob);
@@ -218,10 +226,68 @@ namespace cbm::algo::tof
           L_(error) << "Invalid Tof Type specifier for GBTx " << std::setw(2) << uGbtx << ": " << crob.rpcType;
         }
       }  // switch (crob.rpcType)
-      if (int32_t(uCh - uCh0) != pars.nFebsPerComponent * pars.nAsicsPerFeb * pars.nChannelsPerAsic / nbRobPerComp) {
+      if (uCh - uCh0 != pars.nFebsPerComponent * pars.nAsicsPerFeb * pars.nChannelsPerAsic / nbRobPerComp) {
         throw FatalError("Tof mapping error for Gbtx {},  diff = {}, type {}", uGbtx, uCh - uCh0, crob.rpcType);
       }
+
+      L_(debug) << " Map for CROB " << uGbtx;
+      std::vector<int32_t> vAddrBunch(8, -1);
+      for (uint32_t uChPrint = uCh0; uChPrint < uCh; ++uChPrint) {
+        vAddrBunch[uChPrint % 8] = fviRpcChUId[uChPrint];
+        if (7 == uChPrint % 8) {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3]
+                    << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << " 0x"
+                    << std::setw(8) << vAddrBunch[6] << " 0x" << std::setw(8) << vAddrBunch[7] << std::dec;
+        }
+      }
+      switch (uCh % 8) {
+        case 0: {
+          break;
+        }
+        case 1: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << std::dec;
+          break;
+        }
+        case 2: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << std::dec;
+          break;
+        }
+        case 3: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << std::dec;
+          break;
+        }
+        case 4: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3]
+                    << std::dec;
+          break;
+        }
+        case 5: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3]
+                    << " 0x" << std::setw(8) << vAddrBunch[4] << std::dec;
+          break;
+        }
+        case 6: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3]
+                    << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << std::dec;
+          break;
+        }
+        case 7: {
+          L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8)
+                    << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3]
+                    << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << " 0x"
+                    << std::setw(8) << vAddrBunch[6] << std::dec;
+          break;
+        }
+      }
     }  // for (UInt_t uGbtx = 0; uGbtx < numCrob; ++uGbtx)
+
+    L_(debug) << "============================================================";
   }
   // -------------------------------------------------------------------------
 
@@ -393,14 +459,6 @@ namespace cbm::algo::tof
             else
               iSideMap = 1;
           }
-          else {
-            if (crob.rpcSide == 3) {
-              if (iFeet == 0)
-                iSideMap = 1;
-              else
-                iSideMap = 0;
-            }
-          }
           if (crob.rpcType != 6)
             if (iSideMap == 0) iStrMap = 31 - iStr;
 
@@ -459,6 +517,45 @@ namespace cbm::algo::tof
           }
         }
       }
+      else if (crob.rpcSide == 4) {
+        int iSideMap        = -1;
+        int iStrMap         = -1;
+        int iRpcMap         = -1;
+        const int ConOff[8] = {0, 2, 4, 6, 7, 1, 3, 5};  // Get4 after Gbtx
+        for (int32_t iFeet = 0; iFeet < 5; iFeet++) {
+          for (int32_t iStr = 0; iStr < 32; iStr++) {
+            switch (iFeet) {
+              case 0: iSideMap = -1; break;
+              case 1:
+                iRpcMap  = 0;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 0;
+                break;
+              case 2:
+                iRpcMap  = 0;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 1;
+                break;
+              case 3:
+                iRpcMap  = 1;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 1;
+                break;
+              case 4:
+                iRpcMap  = 1;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 0;
+                break;
+            }
+            if (iSideMap > -1)
+              fviRpcChUId[uCh] =
+                CbmTofAddress::GetUniqueAddress(crob.moduleId, iRpcMap, iStrMap, iSideMap, crob.rpcType);
+            else
+              fviRpcChUId[uCh] = 0;
+            uCh++;
+          }
+        }
+      }
     }
   }
 
@@ -483,11 +580,32 @@ namespace cbm::algo::tof
             //   iStrMap=31-iStr;
             iSideMap = 1 - iSideMap;
             break;
-          case 3:
-            iStrMap  = 31 - iStr;
-            iRpcMap  = 1 - iRpcMap;
-            iSideMap = 1 - iSideMap;
-            break;
+          case 3: {
+            const int ConOff[8] = {0, 2, 4, 6, 7, 1, 3, 5};  // Get4 after Gbtx
+            switch (iFeet) {
+              case 0: iSideMap = -1; break;
+              case 1:
+                iRpcMap  = 0;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 0;
+                break;
+              case 2:
+                iRpcMap  = 0;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 1;
+                break;
+              case 3:
+                iRpcMap  = 1;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 1;
+                break;
+              case 4:
+                iRpcMap  = 1;
+                iStrMap  = 3 - iStr % 4 + 4 * ConOff[iStr / 4];
+                iSideMap = 0;
+                break;
+            }
+          } break;
           case 4:  // HD cosmic 2019, Buc2018, v18o
             iRpcMap = 1 - iRpcMap;
             break;
@@ -571,7 +689,8 @@ namespace cbm::algo::tof
           default:;
         }  // switch (crob.rpcSide)
         if (iSideMap > -1)
-          fviRpcChUId[uCh] = CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, crob.rpcType);
+          fviRpcChUId[uCh] =
+            CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, crob.rpcType % 10);
         else
           fviRpcChUId[uCh] = 0;
 
diff --git a/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx b/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx
index ac3774c8b372200f89f230b119d960a527a65d82..44ec54cbbc820e1b6f9accc44b797edcb14fdd7a 100644
--- a/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx
+++ b/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx
@@ -30,7 +30,7 @@ ReadoutPars ReadoutPars::MakeMCBM2024()
   const int32_t rpcType[NumCrob] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 9, 6};
 
   // side of Rpcs connected to Gbtx link, i.e. 0 or 1
-  const int32_t rpcSide[NumCrob] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 3};
+  const int32_t rpcSide[NumCrob] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 4};
 
   // number of Rpcs connected to Gbtx link, i.e. 3 or 5
   const int32_t numRpc[NumCrob] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5};