diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index 57ed9baa5ea8795f1d65d3a3f5ec81736611c426..4708b99553de33cc5e249c69a747cf3602163c6a 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -16,9 +16,10 @@
 #include "tof/Config.h"
 #include "yaml/Yaml.h"
 
-#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
 
 #include <fstream>
+#include <fmt/format.h>
 #include <unordered_map>
 
 #include <xpu/host.h>
@@ -119,7 +120,7 @@ void TrackingChain::Finalize()
   if (fConfig.fbStoreMonitor) {
     auto fileName = "./" + fConfig.fsMoniOutName;
     std::ofstream ofs(fileName);
-    boost::archive::text_oarchive oa(ofs);
+    boost::archive::binary_oarchive oa(ofs);
     oa << fCaMonitor;
   }
 }
@@ -198,6 +199,19 @@ TrackingChain::Output_t TrackingChain::PrepareOutput()
   }
 
   fCaMonitorData.StopTimer(ca::ETimer::TrackingChain);
+  
+  if constexpr (kDEBUG) { // Monitor data per TS
+    if (fCaFramework.GetNofThreads() == 1 && fCaFramework.GetNofThreads() == 10) {
+      int tsIndex   = fCaMonitor.GetCounterValue(ca::ECounter::TrackingCall);
+      auto fileName = fmt::format("./ca_monitor_nth_{}_ts{}.dat", fCaFramework.GetNofThreads(), tsIndex);
+      std::ofstream ofs(fileName);
+      boost::archive::binary_oarchive oa(ofs);
+      ca::TrackingMonitor monitorPerTS;
+      monitorPerTS.AddMonitorData(fCaMonitorData);
+      oa << monitorPerTS;
+    }
+  }
+
   fCaMonitor.AddMonitorData(fCaMonitorData);
   output.monitorData = fCaMonitorData;
 
@@ -209,10 +223,10 @@ TrackingChain::Output_t TrackingChain::PrepareOutput()
 template<EDetectorID DetID>
 void TrackingChain::ReadHits(PartitionedSpan<const ca::HitTypes_t::at<DetID>> hits)
 {
-  std::ofstream out;
-  if constexpr (kDEBUG) {
-    out.open(std::string("./Debug_hits_") + ca::kDetName[DetID] + ".txt");
-  }
+  //std::ofstream out;
+  //if constexpr (kDEBUG) {
+  //  out.open(std::string("./Debug_hits_") + ca::kDetName[DetID] + ".txt");
+  //}
 
   int nSt = fCaFramework.GetParameters().GetNstationsActive();
 
@@ -293,12 +307,12 @@ void TrackingChain::ReadHits(PartitionedSpan<const ca::HitTypes_t::at<DetID>> hi
         lastTime = caHit.T();
         fCaDataManager.PushBackHit(caHit, dataStreamDet | dataStream);
         faHitExternalIndices.push_back(std::make_tuple(DetID, iPartition, iPartHit));
-        if constexpr (kDEBUG) {
-          out << (dataStreamDet | dataStream) << " ----- " << caHit.ToString() << '\n';
-          if (prevTime > caHit.T()) {
-            out << "TIME IS UNSORTED\n";
-          }
-        }
+        //if constexpr (kDEBUG) {
+        //  out << (dataStreamDet | dataStream) << " ----- " << caHit.ToString() << '\n';
+        //  if (prevTime > caHit.T()) {
+        //    out << "TIME IS UNSORTED\n";
+        //  }
+        //}
 
         if (fNofHitKeys <= caHit.FrontKey()) {
           fNofHitKeys = caHit.FrontKey() + 1;
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 9adc9528daf7b5959b6083f5cf3ee4e4c6427e98..93185cc7af96e3e36595f6a456449f8ae2e68516 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -117,7 +117,7 @@ namespace cbm::algo
     /// \note  Indexing: [globalHitID], value: (DetID, partitionID, hitID)
     ca::Vector<std::tuple<ca::EDetectorID, uint32_t, uint32_t>> faHitExternalIndices{"faHitExternalIndices"};
 
-    static constexpr bool kDEBUG = false;  ///< Debug mode
+    static constexpr bool kDEBUG = true;  ///< Debug mode
   };