diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index 2a01f59149537eca7f26cf8ec9d363e3fc674703..7a25dcad3685ac7846434fa9431402748052da4c 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -130,7 +130,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
 
   RecoResults results(RecoResultsDescriptor(Opts(), Params()));
   CbmDigiEvent ev;
-  ev.fData = std::move(digiTs.fData);
+  ev.fData = std::move(unpackResult.first.fData);
   results.Events().emplace_back(std::move(ev));
 
   return results;
@@ -167,6 +167,9 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa
   if (!HasMonitor()) return;
 
   auto sizeBytes = [](const auto& d) { return d.size() * sizeof(d[0]); };
+  auto expansionFactor = [](size_t x, const auto& d) {
+    return d.size() > 0 ? static_cast<double>(sizeBytes(d)) / x : 0.0;
+  };
 
   auto& stsDigis   = digis.fData.fSts.fDigis;
   auto& muchDigis  = digis.fData.fMuch.fDigis;
@@ -176,6 +179,11 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa
   auto& trd2dDigis = digis.fData.fTrd2d.fDigis;
   auto& richDigis  = digis.fData.fRich.fDigis;
 
+  size_t nDigisTotal = stsDigis.size() + muchDigis.size() + tofDigis.size() + bmonDigis.size() + trdDigis.size()
+                       + trd2dDigis.size() + richDigis.size();
+
+  double totalExpansionFactor = static_cast<double>(nDigisTotal) / monitor.fNumBytes;
+
   GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}},
                            {
                              {"unpackBytesInSts", monitor.fNumBytesInSts},
@@ -192,6 +200,15 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa
                              {"unpackBytesOutTrd", sizeBytes(trdDigis)},
                              {"unpackBytesOutTrd2d", sizeBytes(trd2dDigis)},
                              {"unpackBytesOutRich", sizeBytes(richDigis)},
+                             {"unpackExpansionFactorSts", expansionFactor(monitor.fNumBytesInSts, stsDigis)},
+                             {"unpackExpansionFactorMuch", expansionFactor(monitor.fNumBytesInMuch, muchDigis)},
+                             {"unpackExpansionFactorTof", expansionFactor(monitor.fNumBytesInTof, tofDigis)},
+                             {"unpackExpansionFactorBmon", expansionFactor(monitor.fNumBytesInBmon, bmonDigis)},
+                             {"unpackExpansionFactorTrd", expansionFactor(monitor.fNumBytesInTrd, trdDigis)},
+                             {"unpackExpansionFactorTrd2d", expansionFactor(monitor.fNumBytesInTrd2d, trd2dDigis)},
+                             {"unpackExpansionFactorRich", expansionFactor(monitor.fNumBytesInRich, richDigis)},
+                             {"unpackExpansionFactorTotal", totalExpansionFactor},
+                             {"unpackNumCompUsed", monitor.fNumCompUsed},
                              {"unpackNumErrInvalidEqId", monitor.fNumErrInvalidEqId},
                              {"unpackNumErrInvalidSysVer", monitor.fNumErrInvalidSysVer},
                            });
diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx
index 053383c12ad9f551057a2af7ae90d4014a1ad38f..9a44ddffd750f29a17addb93fe3061bc0d9aa9f4 100644
--- a/algo/unpack/Unpack.cxx
+++ b/algo/unpack/Unpack.cxx
@@ -170,6 +170,7 @@ namespace cbm::algo
     std::vector<Monitor> monitor(numMs);            // unpacking monitoring data per microslice
 
     xpu::t_add_bytes(sizeBytes);
+    genericMonitor.fNumBytes += sizeBytes;
 
     xpu::push_timer("Unpack");
 #pragma omp parallel for schedule(dynamic)