diff --git a/algo/detectors/sts/UnpackSts.cxx b/algo/detectors/sts/UnpackSts.cxx
index ad1a586ac100d7af2590c86ea34e0b64be6437a9..06a154a98caf7a557cbd53c2dfc41a869da9ff4f 100644
--- a/algo/detectors/sts/UnpackSts.cxx
+++ b/algo/detectors/sts/UnpackSts.cxx
@@ -123,11 +123,19 @@ namespace cbm::algo
     messageTime -= elinkPar.fTimeOffset;
 
     // --- Apply walk correction if applicable
-    if (message.GetHitAdc() <= elinkPar.fWalk.size()) { messageTime += elinkPar.fWalk[message.GetHitAdc() - 1]; }
+    if (message.GetHitAdc() <= elinkPar.fWalk.size()) {
+      double walk = elinkPar.fWalk[message.GetHitAdc() - 1];
+      messageTime += walk;
+    }
 
     // --- Charge
     double charge = elinkPar.fAdcOffset + (message.GetHitAdc() - 1) * elinkPar.fAdcGain;
 
+    if (messageTime > CbmStsDigi::kMaxTimestamp) {
+      monitor.fNumErrTimestampOverflow++;
+      return;
+    }
+
     // --- Create output digi
     digiVec.emplace_back(elinkPar.fAddress, channel, messageTime, charge);
   }
diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h
index 2363ba00234204e95270a5ff0e8713153cb3ab9a..ab50018657bd53b4ca6e9ead5a6723bdfe9b7906 100644
--- a/core/data/sts/CbmStsDigi.h
+++ b/core/data/sts/CbmStsDigi.h
@@ -39,11 +39,19 @@
  **/
 class CbmStsDigi {
 
+public:  // constants
+  static constexpr int kNumAdcBits              = 5;
+  static constexpr uint32_t kAdcMask            = (1u << kNumAdcBits) - 1u;
+  static constexpr int kNumLowerAddrBits        = 16;
+  static constexpr int kNumTimestampBits        = 31;
+  static constexpr uint32_t kTimestampMask      = (1u << kNumTimestampBits) - 1u;
+  static constexpr uint32_t kMaxTimestamp       = kTimestampMask;
+  static constexpr uint32_t kTimeAddressBitMask = ~kTimestampMask;
+
 public:
   /** Default constructor **/
   CbmStsDigi() = default;
 
-
   /** Standard constructor
    ** @param  address  Unique element address
    ** @param  channel  Channel number
@@ -159,15 +167,6 @@ public:
 private:
   friend class boost::serialization::access;
 
-
-  static constexpr int kNumAdcBits              = 5;
-  static constexpr uint32_t kAdcMask            = (1u << kNumAdcBits) - 1u;
-  static constexpr int kNumLowerAddrBits        = 16;
-  static constexpr int kNumTimestampBits        = 31;
-  static constexpr uint32_t kTimestampMask      = (1u << kNumTimestampBits) - 1u;
-  static constexpr uint32_t kMaxTimestamp       = kTimestampMask;
-  static constexpr uint32_t kTimeAddressBitMask = ~kTimestampMask;
-
 // CUDA requires types in shared memory to have trivial constructors / destructors
 #if XPU_IS_HIP_CUDA
 #define CPU_ONLY(x)