diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index 8fb3e2d622ac1f5c0142624fdc1bcfa99435a5b7..f40d61430a4120414dd0fcb85477a32051a4731e 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -167,5 +167,15 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa
   if (!HasMonitor()) return;
 
   GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}},
-                           {{"bytesInSts", monitor.fNumBytesInSts}, {"bytesInTof", monitor.fNumBytesInTof}});
+                           {
+                             {"unpackBytesInSts", monitor.fNumBytesInSts},
+                             {"unpackBytesInMuch", monitor.fNumBytesInMuch},
+                             {"unpackBytesInTof", monitor.fNumBytesInTof},
+                             {"unpackBytesInBmon", monitor.fNumBytesInBmon},
+                             {"unpackBytesInTrd", monitor.fNumBytesInTrd},
+                             {"unpackBytesInTrd2d", monitor.fNumBytesInTrd2d},
+                             {"unpackBytesInRich", monitor.fNumBytesInRich},
+                             {"unpackNumErrInvalidEqId", monitor.fNumErrInvalidEqId},
+                             {"unpackNumErrInvalidSysVer", monitor.fNumErrInvalidSysVer},
+                           });
 }
diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx
index f8fbe902a5ad521369494326da4b7a99572eadae..2dbc219cdf466d06101bbd53febd5cc52c87161e 100644
--- a/algo/unpack/Unpack.cxx
+++ b/algo/unpack/Unpack.cxx
@@ -38,11 +38,13 @@ namespace cbm::algo
     }
 
     if (DetectorEnabled(Subsystem::BMON)) {
-      ParallelMsLoop(Subsystem::BMON, monitor, digiTs.fData.fT0.fDigis, monitor.fBmon, *timeslice, fAlgoBmon, 0x00);
+      monitor.fNumBytesInBmon +=
+        ParallelMsLoop(Subsystem::BMON, monitor, digiTs.fData.fT0.fDigis, monitor.fBmon, *timeslice, fAlgoBmon, 0x00);
     }
 
     if (DetectorEnabled(Subsystem::MUCH)) {
-      ParallelMsLoop(Subsystem::MUCH, monitor, digiTs.fData.fMuch.fDigis, monitor.fMuch, *timeslice, fAlgoMuch, 0x20);
+      monitor.fNumBytesInMuch +=
+        ParallelMsLoop(Subsystem::MUCH, monitor, digiTs.fData.fMuch.fDigis, monitor.fMuch, *timeslice, fAlgoMuch, 0x20);
     }
 
     // ---  Component loop
@@ -77,13 +79,16 @@ namespace cbm::algo
       //   MsLoop(timeslice, fAlgoBmon, comp, equipmentId, &digiTs.fData.fT0.fDigis, monitor, &monitor.fBmon, 0x00);
       // }
       if (subsystem == Subsystem::TRD) {
-        MsLoop(timeslice, fAlgoTrd, comp, equipmentId, &digiTs.fData.fTrd.fDigis, monitor, &monitor.fTrd, 0x01);
+        monitor.fNumBytesInTrd +=
+          MsLoop(timeslice, fAlgoTrd, comp, equipmentId, &digiTs.fData.fTrd.fDigis, monitor, &monitor.fTrd, 0x01);
       }
       if (subsystem == Subsystem::TRD2D) {
-        MsLoop(timeslice, fAlgoTrd2d, comp, equipmentId, &digiTs.fData.fTrd2d.fDigis, monitor, &monitor.fTrd2d, 0x02);
+        monitor.fNumBytesInTrd2d +=
+          MsLoop(timeslice, fAlgoTrd2d, comp, equipmentId, &digiTs.fData.fTrd2d.fDigis, monitor, &monitor.fTrd2d, 0x02);
       }
       if (subsystem == Subsystem::RICH) {
-        MsLoop(timeslice, fAlgoRich, comp, equipmentId, &digiTs.fData.fRich.fDigis, monitor, &monitor.fRich, 0x03);
+        monitor.fNumBytesInRich +=
+          MsLoop(timeslice, fAlgoRich, comp, equipmentId, &digiTs.fData.fRich.fDigis, monitor, &monitor.fRich, 0x03);
       }
     }  //# component
 
@@ -253,6 +258,8 @@ namespace cbm::algo
     monitor.fNumBytes += numBytesInComp;
     monitor.fNumDigis += numDigisInComp;
     monitor.fNumCompUsed++;
+
+    return numBytesInComp;
   }
   // ----------------------------------------------------------------------------
 
diff --git a/algo/unpack/Unpack.h b/algo/unpack/Unpack.h
index 13cb0b7d9257e50be01936ccd8ba5b0f0abb1738..676af4fcb4e08f036286ab1b9e0938f6cd6b9066 100644
--- a/algo/unpack/Unpack.h
+++ b/algo/unpack/Unpack.h
@@ -142,9 +142,9 @@ namespace cbm::algo
   private:  // methods
     /** @brief Microslice loop **/
     template<class Digi, class UnpackAlgo, class MonitorData>
-    void MsLoop(const fles::Timeslice* timeslice, std::map<uint16_t, UnpackAlgo>& algoMap, const uint64_t comp,
-                const uint16_t eqId, std::vector<Digi>* digis, UnpackMonitorData& monitor,
-                std::vector<MonitorData>* monitorMs, uint8_t sys_ver);
+    size_t MsLoop(const fles::Timeslice* timeslice, std::map<uint16_t, UnpackAlgo>& algoMap, const uint64_t comp,
+                  const uint16_t eqId, std::vector<Digi>* digis, UnpackMonitorData& monitor,
+                  std::vector<MonitorData>* monitorMs, uint8_t sys_ver);
 
     /** @brief Parallel microslice loop **/
     template<class Digi, class UnpackAlgo, class Monitor>