diff --git a/algo/detectors/trd/Hitfind.cxx b/algo/detectors/trd/Hitfind.cxx
index 571fbd8bb8d224e8bc8919450c8beb09e89bfe11..21929d5d7c791854793af0d894c6dcbdff18983f 100644
--- a/algo/detectors/trd/Hitfind.cxx
+++ b/algo/detectors/trd/Hitfind.cxx
@@ -186,12 +186,14 @@ namespace cbm::algo::trd
     monitor.timeClusterize = xpu::pop_timer();
 
     // Hit finding
-    PODVector<Hit> hitsFlat;                          // hit storage
-    std::vector<size_t> modSizes(fModList.size());    // nHits per modules
-    std::vector<uint> modAddresses(fModList.size());  // address of modules
+    PODVector<Hit> hitsFlat;       // hit storage
+    PODVector<size_t> modSizes;    // nHits per modules
+    PODVector<uint> modAddresses;  // address of modules
 
     // Prefix array for parallelization
     std::vector<size_t> hitsPrefix;
+    std::vector<size_t> sizePrefix;
+    std::vector<size_t> addrPrefix;
 
     xpu::push_timer("FindHits");
     CBM_PARALLEL()
@@ -199,9 +201,16 @@ namespace cbm::algo::trd
       const int ithread  = openmp::GetThreadNum();
       const int nthreads = openmp::GetNumThreads();
 
-      CBM_OMP(single) { hitsPrefix.resize(nthreads + 1); }
+      CBM_OMP(single)
+      {
+        hitsPrefix.resize(nthreads + 1);
+        sizePrefix.resize(nthreads + 1);
+        addrPrefix.resize(nthreads + 1);
+      }
 
       std::vector<Hit> local_hits;
+      std::vector<size_t> local_sizes;
+      std::vector<uint> local_addresses;
 
       CBM_OMP(for schedule(dynamic) nowait)
       for (size_t mod = 0; mod < fModList.size(); mod++) {
@@ -228,27 +237,35 @@ namespace cbm::algo::trd
           //sort(clusters.begin(), clusters.end(), [](const auto& a, const auto& b) { return a.GetStartTime() < b.GetStartTime(); });
           mod_hits = (*fHitFind[address])(&clusters);
         }
-        // Append clusters to output
-        local_hits.insert(local_hits.end(), std::make_move_iterator(mod_hits.begin()),
-                          std::make_move_iterator(mod_hits.end()));
-
         // store partition size
-        modSizes[mod] = mod_hits.size();
+        local_sizes.push_back(mod_hits.size());
 
         // store hw address of partition
-        modAddresses[mod] = address;
+        local_addresses.push_back(address);
+
+        // Append clusters to output
+        local_hits.insert(local_hits.end(), std::make_move_iterator(mod_hits.begin()),
+                          std::make_move_iterator(mod_hits.end()));
       }
 
       hitsPrefix[ithread + 1] = local_hits.size();
+      sizePrefix[ithread + 1] = local_sizes.size();
+      addrPrefix[ithread + 1] = local_addresses.size();
       CBM_OMP(barrier)
       CBM_OMP(single)
       {
         for (int i = 1; i < (nthreads + 1); i++) {
           hitsPrefix[i] += hitsPrefix[i - 1];
+          sizePrefix[i] += sizePrefix[i - 1];
+          addrPrefix[i] += addrPrefix[i - 1];
         }
         hitsFlat.resize(hitsPrefix[nthreads]);
+        modSizes.resize(sizePrefix[nthreads]);
+        modAddresses.resize(addrPrefix[nthreads]);
       }
       std::move(local_hits.begin(), local_hits.end(), hitsFlat.begin() + hitsPrefix[ithread]);
+      std::move(local_sizes.begin(), local_sizes.end(), modSizes.begin() + sizePrefix[ithread]);
+      std::move(local_addresses.begin(), local_addresses.end(), modAddresses.begin() + addrPrefix[ithread]);
     }
     // Monitoring
     monitor.timeHitfind = xpu::pop_timer();