diff --git a/algo/detectors/sts/UnpackSts.cxx b/algo/detectors/sts/UnpackSts.cxx
index bcb389c2517d756a9b7276968cad77ea65e7484d..f7d72fa3f73db5cb6ef8167df3709604c6da3a9b 100644
--- a/algo/detectors/sts/UnpackSts.cxx
+++ b/algo/detectors/sts/UnpackSts.cxx
@@ -22,7 +22,6 @@ namespace cbm::algo
   UnpackSts::resultType UnpackSts::operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr,
                                               const uint64_t tTimeslice)
   {
-
     // --- Output data
     resultType result = {};
 
@@ -127,7 +126,7 @@ namespace cbm::algo
     messageTime -= elinkPar.fTimeOffset;
 
     // --- Apply walk correction if applicable
-    if (!elinkPar.fWalk.empty()) { messageTime += elinkPar.fWalk[message.GetHitAdc() - 1]; }
+    if (message.GetHitAdc() <= elinkPar.fWalk.size()) { messageTime += elinkPar.fWalk[message.GetHitAdc() - 1]; }
 
     // --- Charge
     double charge = elinkPar.fAdcOffset + (message.GetHitAdc() - 1) * elinkPar.fAdcGain;
diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx
index b6c9b40d799b3909b7e13387954e03f8aceca2b4..8f2111e853aa72f3eebd9992ca6195d96ab504eb 100644
--- a/algo/unpack/Unpack.cxx
+++ b/algo/unpack/Unpack.cxx
@@ -168,7 +168,13 @@ namespace cbm::algo
         elinkPar.fTimeOffset = 0.;
         elinkPar.fAdcOffset  = 1.;
         elinkPar.fAdcGain    = 1.;
-        elinkPar.fWalk       = fStsConfig.WalkMap(elinkPar.fAddress, elinkPar.fAsicNr);
+        if (elinkPar.fAsicNr < numAsicsPerModuleSts / 2) {
+          elinkPar.fWalk = fStsConfig.WalkMap(elinkPar.fAddress, elinkPar.fAsicNr);
+        }
+        else {
+          elinkPar.fWalk = fStsConfig.WalkMap(elinkPar.fAddress,
+                                              numAsicsPerModuleSts - (elinkPar.fAsicNr - numAsicsPerModuleSts / 2) - 1);
+        }
         // TODO: Add parameters for time and ADC calibration
         par->fElinkParams.push_back(elinkPar);
       }