diff --git a/algo/detectors/trd2d/UnpackTrd2d.cxx b/algo/detectors/trd2d/UnpackTrd2d.cxx
index c067198fa5c925a216a7d5f8349fd1d29c0910fc..d399ad611b2836e09500e96c91af1b4ba3f6394c 100644
--- a/algo/detectors/trd2d/UnpackTrd2d.cxx
+++ b/algo/detectors/trd2d/UnpackTrd2d.cxx
@@ -32,6 +32,9 @@ namespace cbm::algo
     // --- Output data
     resultType result = {};
 
+    // Reset monitoring data
+    fMonitor = UnpackTrd2dMonitorData();
+
     // define time wrt start of time slice in TRD/FASP clks [80 MHz]. Contains:
     //  - relative offset of the MS wrt the TS
     //  - FASP epoch offset for current CROB
@@ -74,16 +77,17 @@ namespace cbm::algo
         lFaspOld = fasp_id;
       }
       if (data & 0x1) {
-        LOG(warn) << "UnpackTrd2d - Data corrupted : detect end bit set.";
+        fMonitor.fNumErrEndBitSet++;
         continue;
       }
       if (data & 0x2000) {
-        LOG(debug) << "UnpackTrd2d - Self-triggered data.";
+        fMonitor.fNumSelfTriggeredData++;
         data &= 0x1fff;
       }
       vMess.emplace_back(ch_id, kData, slice, data >> 1, crob_id, lFaspOld);
     }
-    result.first = FinalizeComponent();
+    result.first  = FinalizeComponent();  //TO DO: Original (non-algo) version calls this after MS loop!!
+    result.second = fMonitor;
 
     return result;
   }
@@ -181,7 +185,7 @@ namespace cbm::algo
       // clear digi buffer wrt the digi which was forwarded to higher structures
       fDigiBuffer[ipad].clear();
       if (nIncomplete > 2) {
-        LOG(warn) << "FinalizeComponent() skip " << nIncomplete << " incomplete digi at pad " << ipad << ".\n";
+        fMonitor.fNumIncompleteDigis++;  //TO DO: This must be moved if finalization is done after MS loop
       }
     }
     return outputDigis;
diff --git a/algo/detectors/trd2d/UnpackTrd2d.h b/algo/detectors/trd2d/UnpackTrd2d.h
index f4d254a2fa1a83e3570a2d3cf9839d24105c7d20..25cc2886c2f0ce76ec94f87d837e8cbae0f20f4e 100644
--- a/algo/detectors/trd2d/UnpackTrd2d.h
+++ b/algo/detectors/trd2d/UnpackTrd2d.h
@@ -85,22 +85,20 @@ namespace cbm::algo
    ** @brief Monitoring data for TRD unpacking
    **/
   struct UnpackTrd2dMonitorData {
-    uint32_t fNumNonHitOrTsbMessage     = 0;
-    uint32_t fNumErrElinkOutOfRange     = 0;  ///< Elink not contained in parameters
-    uint32_t fNumErrInvalidFirstMessage = 0;  ///< First message is not TS_MSB or second is not EPOCH
-    uint32_t fNumErrInvalidMsSize       = 0;  ///< Microslice size is not multiple of message size
-    uint32_t fNumErrTimestampOverflow   = 0;  ///< Overflow in 64 bit time stampa
+    uint32_t fNumSelfTriggeredData = 0;  ///< word fulfills data & 0x2000
+    uint32_t fNumIncompleteDigis   = 0;  ///< incomplete digis left in pads after finalization
+    uint32_t fNumErrEndBitSet      = 0;  ///< Corrupted data with end bit set
+
     bool HasErrors()
     {
-      uint32_t numErrors = fNumNonHitOrTsbMessage + fNumErrElinkOutOfRange + fNumErrInvalidFirstMessage
-                           + fNumErrInvalidMsSize + fNumErrTimestampOverflow;
+      uint32_t numErrors = fNumErrEndBitSet;
       return (numErrors > 0 ? true : false);
     }
     std::string print()
     {
       std::stringstream ss;
-      ss << "errors " << fNumNonHitOrTsbMessage << " | " << fNumErrElinkOutOfRange << " | "
-         << fNumErrInvalidFirstMessage << " | " << fNumErrInvalidMsSize << " | " << fNumErrTimestampOverflow << " | ";
+      ss << "stats " << fNumSelfTriggeredData << " | " << fNumIncompleteDigis << " | errors " << fNumErrEndBitSet
+         << " | ";
       return ss.str();
     }
   };
@@ -141,6 +139,8 @@ namespace cbm::algo
   private:                        // members
     UnpackTrd2dPar fParams = {};  ///< Parameter container
 
+    UnpackTrd2dMonitorData fMonitor;  ///< Container for monitoring data
+
     /**
      ** @brief Time offset for the system
      ** @todo This should be module and channel dependent and included into the asic parameters