diff --git a/core/data/sts/CbmStsAddress.cxx b/core/data/sts/CbmStsAddress.cxx
index d6d8331b8e6728e2b222b9cb587186708df88c87..8670d4b82f38e8c630fb73adf8a00e0869bd8cfa 100644
--- a/core/data/sts/CbmStsAddress.cxx
+++ b/core/data/sts/CbmStsAddress.cxx
@@ -203,6 +203,10 @@ int32_t CbmStsAddress::PackDigiAddress(int32_t address)
                          | kMask[1][kStsModule] << kShift[1][kStsModule];
 
   int32_t ret = (address & kDMask) >> kShift[1][kStsUnit];
+
+  // Check that no bits were set, that are stripped by this function.
+  assert(address == UnpackDigiAddress(ret));
+
   return ret;
 }
 // -------------------------------------------------------------------------
diff --git a/core/data/sts/CbmStsDigi.cxx b/core/data/sts/CbmStsDigi.cxx
index 733544a0e8d23c1a3fceadfd9ff66e42de20b825..15618dc4c0a6cdf367fddbc550c83e84dc863b08 100644
--- a/core/data/sts/CbmStsDigi.cxx
+++ b/core/data/sts/CbmStsDigi.cxx
@@ -37,7 +37,7 @@ void CbmStsDigi::PackAddressAndTime(int32_t newAddress, uint32_t newTime)
   uint32_t lowerAddr      = packedAddr & ((1 << kNumLowerAddrBits) - 1);
 
   fAddress = lowerAddr;
-  fTime    = (highestBitAddr << kNumTimestampBits) | newTime;
+  fTime    = (highestBitAddr << kNumTimestampBits) | (kTimestampMask & newTime);
 }
 
 int32_t CbmStsDigi::UnpackAddress() const
diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h
index 94594b483e007cdad3f155a76f71e45aab5613a0..7867329e5a2f128e3dc874d087238eec9119863c 100644
--- a/core/data/sts/CbmStsDigi.h
+++ b/core/data/sts/CbmStsDigi.h
@@ -47,8 +47,9 @@ public:
    ** @param  time     Measurement time [ns]
    ** @param  charge   Charge [ADC units]
    **/
-  CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge)
+  CbmStsDigi(int32_t address, int32_t channel, double time, uint16_t charge)
   {
+    assert(time >= 0 && time <= kMaxTimestamp);
     PackAddressAndTime(address, time);
     PackChannelAndCharge(channel, charge);
   }