diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
index 8429661f37904bef050573fbfca046c86760d416..0e583287d1131b655a9028ccce698f2232c86e67 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
@@ -283,13 +283,11 @@ void CbmStsUnpackAlgo::initInternalStatus(CbmMcbm2018StsPar* parset)
 
   fvvusLastTsChan.resize(uNbStsXyters);
   fvvusLastAdcChan.resize(uNbStsXyters);
-  fvvusLastTsMsbChan.resize(uNbStsXyters);
-  fvvusLastTsMsbCycleChan.resize(uNbStsXyters);
+  fvvulLastTsMsbChan.resize(uNbStsXyters);
   for (uint32_t uAsicIdx = 0; uAsicIdx < uNbStsXyters; ++uAsicIdx) {
     fvvusLastTsChan[uAsicIdx].resize(fNrChsPerAsic, 0);
     fvvusLastAdcChan[uAsicIdx].resize(fNrChsPerAsic, 0);
-    fvvusLastTsMsbChan[uAsicIdx].resize(fNrChsPerAsic, 0);
-    fvvusLastTsMsbCycleChan[uAsicIdx].resize(fNrChsPerAsic, 0);
+    fvvulLastTsMsbChan[uAsicIdx].resize(fNrChsPerAsic, 0);
   }
 }
 
@@ -465,7 +463,7 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess)
       if (fbRejectDuplicateDigis) {
         if (usRawTs == fvvusLastTsChan[uAsicIdx][usChan]
             && (fbDupliWithoutAdc || usRawAdc == fvvusLastAdcChan[uAsicIdx][usChan])
-            && fulTsMsbIndexInTs[fuCurrDpbIdx] == fvvusLastTsMsbChan[uAsicIdx][usChan]) {
+            && fulTsMsbIndexInTs[fuCurrDpbIdx] == fvvulLastTsMsbChan[uAsicIdx][usChan]) {
           /// FIXME: add plots to check what is done in this rejection
           LOG(debug) << "CbmStsUnpackAlgo::processHitInfo => "
                      << Form("Rejecting duplicate on Asic %3d channel %3d, TS %3d, ADC %2d", uAsicIdx, usChan, usRawTs,
@@ -474,8 +472,7 @@ void CbmStsUnpackAlgo::processHitInfo(const stsxyter::Message& mess)
         }  // if same TS, (ADC,) TS MSB, TS MSB cycle, reject
         fvvusLastTsChan[uAsicIdx][usChan]         = usRawTs;
         fvvusLastAdcChan[uAsicIdx][usChan]        = usRawAdc;
-        fvvusLastTsMsbChan[uAsicIdx][usChan]      = fulTsMsbIndexInTs[fuCurrDpbIdx];
-        fvvusLastTsMsbCycleChan[uAsicIdx][usChan] = fvuCurrentTsMsbCycle[fuCurrDpbIdx];
+        fvvulLastTsMsbChan[uAsicIdx][usChan]      = fulTsMsbIndexInTs[fuCurrDpbIdx];
       }  // if (fbRejectDuplicateDigis)
 
       uint32_t uChanInMod = usChan + fNrChsPerAsic * (uAsicIdx % fNrAsicsPerFeb);
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
index 132c1081489b32d6da208af6b1faf218cceb9d87..800eb454666088c3aae7cf311db0b78d60d002ff 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
@@ -248,10 +248,8 @@ protected:
   std::vector<std::vector<uint16_t>> fvvusLastTsChan = {};  //!
   /** @brief ADC of last hit message for each channel, [ AsicIdx ][ Chan ] */
   std::vector<std::vector<uint16_t>> fvvusLastAdcChan = {};  //!
-  /** @brief TS MSB of last hit message for each channel, [ AsicIdx ][ Chan ] */
-  std::vector<std::vector<uint16_t>> fvvusLastTsMsbChan = {};  //!
-  /** @brief TS MSB cycle of last hit message for each channel, [ AsicIdx ][ Chan ] */
-  std::vector<std::vector<uint16_t>> fvvusLastTsMsbCycleChan = {};  //!
+  /** @brief TS MSB in TS of last hit message for each channel, [ AsicIdx ][ Chan ] */
+  std::vector<std::vector<uint64_t>> fvvulLastTsMsbChan = {};  //!
 
   /** @brief Time of first valid hit (TS_MSB available), used as reference for evolution plots @todo move this to the monitor the algo does not need it!*/
   double fdStartTime = 0;
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
index 1b0b195b11390c97397bd9c73731a7a4a30fa082..4b903078da2c1a62d246cbb550571c992c896f49 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
@@ -52,7 +52,7 @@ CbmStsUnpackAlgoLegacy::CbmStsUnpackAlgoLegacy()
   , fvmHitsInMs()
   , fvvusLastTsChan()
   , fvvusLastAdcChan()
-  , fvvusLastTsMsbChan()
+  , fvvuLastTsMsbChan()
   , fvvusLastTsMsbCycleChan()
 {
 }
@@ -323,12 +323,12 @@ void CbmStsUnpackAlgoLegacy::InitInternalStatus()
 
   fvvusLastTsChan.resize(uNbStsXyters);
   fvvusLastAdcChan.resize(uNbStsXyters);
-  fvvusLastTsMsbChan.resize(uNbStsXyters);
+  fvvuLastTsMsbChan.resize(uNbStsXyters);
   fvvusLastTsMsbCycleChan.resize(uNbStsXyters);
   for (uint32_t uAsicIdx = 0; uAsicIdx < uNbStsXyters; ++uAsicIdx) {
     fvvusLastTsChan[uAsicIdx].resize(fUnpackPar->GetNbChanPerAsic(), 0);
     fvvusLastAdcChan[uAsicIdx].resize(fUnpackPar->GetNbChanPerAsic(), 0);
-    fvvusLastTsMsbChan[uAsicIdx].resize(fUnpackPar->GetNbChanPerAsic(), 0);
+    fvvuLastTsMsbChan[uAsicIdx].resize(fUnpackPar->GetNbChanPerAsic(), 0);
     fvvusLastTsMsbCycleChan[uAsicIdx].resize(fUnpackPar->GetNbChanPerAsic(), 0);
   }
 }
@@ -572,7 +572,7 @@ void CbmStsUnpackAlgoLegacy::ProcessHitInfo(const stsxyter::Message& mess)
   if (fbRejectDuplicateDigis) {
     if (usRawTs == fvvusLastTsChan[uAsicIdx][usChan]
         && (fbDupliWithoutAdc || usRawAdc == fvvusLastAdcChan[uAsicIdx][usChan])
-        && fvulCurrentTsMsb[fuCurrDpbIdx] - fvvusLastTsMsbChan[uAsicIdx][usChan] < kuMaxTsMsbDiffDuplicates
+        && fvulCurrentTsMsb[fuCurrDpbIdx] - fvvuLastTsMsbChan[uAsicIdx][usChan] < kuMaxTsMsbDiffDuplicates
         && fvuCurrentTsMsbCycle[fuCurrDpbIdx] == fvvusLastTsMsbCycleChan[uAsicIdx][usChan]) {
       /// FIXME: add plots to check what is done in this rejection
       LOG(debug) << "CbmStsUnpackAlgoLegacy::ProcessHitInfo => "
@@ -583,7 +583,7 @@ void CbmStsUnpackAlgoLegacy::ProcessHitInfo(const stsxyter::Message& mess)
   }    // if (fbRejectDuplicateDigis)
   fvvusLastTsChan[uAsicIdx][usChan]         = usRawTs;
   fvvusLastAdcChan[uAsicIdx][usChan]        = usRawAdc;
-  fvvusLastTsMsbChan[uAsicIdx][usChan]      = fvulCurrentTsMsb[fuCurrDpbIdx];
+  fvvuLastTsMsbChan[uAsicIdx][usChan]       = fvulCurrentTsMsb[fuCurrDpbIdx];
   fvvusLastTsMsbCycleChan[uAsicIdx][usChan] = fvuCurrentTsMsbCycle[fuCurrDpbIdx];
 
   // Compute the Full time stamp
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
index 09cf50f56a3761c5817c0fc78688ffa12bc3c504..b81fa7e7615ac41ddf691830ad4342a886f39859 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
@@ -139,8 +139,8 @@ private:
   std::vector<std::vector<uint16_t>> fvvusLastTsChan;  //! TS of last hit message for each channel, [ AsicIdx ][ Chan ]
   std::vector<std::vector<uint16_t>>
     fvvusLastAdcChan;  //! ADC of last hit message for each channel, [ AsicIdx ][ Chan ]
-  std::vector<std::vector<uint16_t>>
-    fvvusLastTsMsbChan;  //! TS MSB of last hit message for each channel, [ AsicIdx ][ Chan ]
+  std::vector<std::vector<uint32_t>>
+    fvvuLastTsMsbChan;  //! TS MSB of last hit message for each channel, [ AsicIdx ][ Chan ]
   std::vector<std::vector<uint16_t>>
     fvvusLastTsMsbCycleChan;  //! TS MSB cycle of last hit message for each channel, [ AsicIdx ][ Chan ]