diff --git a/algo/detectors/sts/ReadoutConfig.cxx b/algo/detectors/sts/ReadoutConfig.cxx
index ee8e7b824d656d9a3637f0e65dd0554fb93b5b21..45a5a8c089f99816d3318fc4d523f7543b53c62b 100644
--- a/algo/detectors/sts/ReadoutConfig.cxx
+++ b/algo/detectors/sts/ReadoutConfig.cxx
@@ -93,10 +93,12 @@ void sts::ReadoutConfig::Init(const ReadoutSetup& config, const ChannelMaskSet&
   std::map<size_t, uint32_t> febAdcCuts = {{1, 1}, {2, 1}, {3, 1}, {4, 1}};
 
   // Constructing the map (equipmentId, eLink) -> (module, ASIC within module)
+  int32_t febBaseIdx = 0;
   for (uint16_t compIdx = 0; compIdx < numComp; compIdx++) {
     const auto& component = config.components.at(compIdx);
     uint16_t equipment    = component.equipmentId;
     fReadoutConfig[equipment].resize(numElinksPerComp);
+    const int32_t numFebsPerCrob = component.FEBsPerCrob();
     for (uint16_t crobIdx = 0; crobIdx < numCrobPerComp; crobIdx++) {
       for (uint16_t elinkIdx = 0; elinkIdx < numElinksPerCrob; elinkIdx++) {
 
@@ -134,8 +136,7 @@ void sts::ReadoutConfig::Init(const ReadoutSetup& config, const ChannelMaskSet&
         asicInModule = (moduleSide == 1 ? asicInFeb : numAsicsPerMod - 1 - asicInFeb);
 
         // Init channel mask
-        const int32_t numFebsPerCrob = component.FEBsPerCrob();
-        const int32_t febId          = 2 * moduleIdx + moduleSide;
+        const int32_t febId          = feb + febBaseIdx;
         auto mapIt                   = chanMaskSet.values.find(febId);
         if (mapIt != chanMaskSet.values.end()) {
           const auto& mask = mapIt->second;
@@ -161,6 +162,7 @@ void sts::ReadoutConfig::Init(const ReadoutSetup& config, const ChannelMaskSet&
 
       }  //# elink
     }    //# CROB
+    febBaseIdx += numCrobPerComp * numFebsPerCrob;  // Add the proper offset for the current CROB
   }      //# component
 }