diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index f34bc1c550ef99e29095dc78687b89db7c7cadf0..868f32e46aef9eaa9b594bb32f91f73eec31092a 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -11,6 +11,7 @@
 
 #include "tof/Config.h"
 
+#include <fstream>
 #include <unordered_map>
 
 #include <xpu/host.h>
@@ -60,12 +61,14 @@ TrackingChain::Return_t TrackingChain::Run(Input_t recoResults)
   fCaMonitorData.Reset();
 
   // ----- Init input data ---------------------------------------------------------------------------------------------
+  fCaMonitorData.StartTimer(ca::ETimer::PrepareInput);
   this->PrepareInput(recoResults);
+  fCaMonitorData.StopTimer(ca::ETimer::PrepareInput);
 
   // ----- Run reconstruction ------------------------------------------------------------------------------------------
   fCaFramework.SetMonitorData(fCaMonitorData);
-  fCaMonitorData = fCaFramework.GetMonitorData();
   fCaFramework.fTrackFinder.FindTracks();
+  fCaMonitorData = fCaFramework.GetMonitorData();
   L_(info) << "TrackingChain: Timeslice contains " << fCaMonitorData.GetCounterValue(ca::ECounter::RecoTrack)
            << " tracks, the FindTracks routine ran " << fCaMonitorData.GetTimer(ca::ETimer::FindTracks).GetTotal()
            << " s";
@@ -100,6 +103,9 @@ void TrackingChain::PrepareInput(Input_t recoResults)
 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"); }
+
   using Hit_t           = ca::HitTypes_t::at<DetID>;
   constexpr bool IsMvd  = (DetID == EDetectorID::Mvd);
   constexpr bool IsSts  = (DetID == EDetectorID::Sts);
@@ -129,6 +135,7 @@ void TrackingChain::ReadHits(PartitionedSpan<const ca::HitTypes_t::at<DetID>> hi
     size_t iOffset = hits.Offsets()[iPartition];
     if (iStActive < 0) { continue; }
     double lastTime = -1e9;
+    double prevTime = -1;
     for (size_t iPartHit = 0; iPartHit < vHits.size(); ++iPartHit) {
       const auto& hit = vHits[iPartHit];
       int iHitExt     = iOffset + iPartHit;
@@ -161,6 +168,11 @@ void TrackingChain::ReadHits(PartitionedSpan<const ca::HitTypes_t::at<DetID>> hi
         lastTime = caHit.T();
         if (!IsTof) { dataStream = extHitAddress; }
         fCaDataManager.PushBackHit(caHit, dataStreamDet | dataStream);
+        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; }
         if (fNofHitKeys <= caHit.BackKey()) { fNofHitKeys = caHit.BackKey() + 1; }
       }
@@ -171,6 +183,7 @@ void TrackingChain::ReadHits(PartitionedSpan<const ca::HitTypes_t::at<DetID>> hi
         if constexpr (IsTrd) { fCaMonitorData.IncrementCounter(ca::ECounter::UndefinedTrdHit); }
         if constexpr (IsTof) { fCaMonitorData.IncrementCounter(ca::ECounter::UndefinedTofHit); }
       }
+      prevTime = caHit.T();
       // ---- Update number of hit keys
     }  // iPartHit
   }    // iPartition
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 29301e005fb743d7f0edac848aaab28c3e99edaf..b1338cf03aa9bdbb49027b536762a8f569ffd543 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -82,6 +82,8 @@ namespace cbm::algo
     // **  Auxilary variables
 
     ca::HitKeyIndex_t fNofHitKeys = 0;  ///< Current number of hit keys (aux)
+
+    static constexpr bool kDEBUG = false;  ///< Debug mode
   };
 
 
diff --git a/algo/ca/core/utils/CaMonitor.h b/algo/ca/core/utils/CaMonitor.h
index 3410552d148f35d2eb5553b45f1bd58078264555..55c524ec7b52d8fee09c7c7c02ebfe5a5a796cc8 100644
--- a/algo/ca/core/utils/CaMonitor.h
+++ b/algo/ca/core/utils/CaMonitor.h
@@ -152,13 +152,13 @@ namespace cbm::algo::ca
     using std::setw;
     std::stringstream msg;
     constexpr size_t widthKey = 30;
-    constexpr size_t width    = 12;
+    constexpr size_t width    = 24;
     msg << "\n===== Monitor: " << fsName << "\n";
     if constexpr (!std::is_same_v<ETimerKey, EDummy>) {
       msg << "\n----- Timers:\n";
       msg << setw(widthKey) << left << "Key" << ' ';
       msg << setw(width) << left << "N Calls" << ' ';
-      //msg << setw(width) << left << "Average [s]" << ' ';
+      msg << setw(width) << left << "Average [s]" << ' ';
       msg << setw(width) << left << "Min [s]" << ' ';
       msg << setw(width) << left << "Max [s]" << ' ';
       msg << setw(width) << left << "Total [s]" << '\n';
@@ -167,7 +167,7 @@ namespace cbm::algo::ca
         const Timer& timer = fMonitorData.GetTimer(static_cast<ETimerKey>(iKey));
         msg << setw(widthKey) << faTimerNames[iKey] << ' ';
         msg << setw(width) << timer.GetNofCalls() << ' ';
-        //msg << setw(width) << timer.GetAverage() << ' ';
+        msg << setw(width) << timer.GetAverage() << ' ';
         msg << setw(width) << timer.GetMin() << ' ';
         msg << setw(width) << timer.GetMax() << ' ';
         msg << setw(width) << timer.GetTotal() << '\n';
diff --git a/algo/ca/core/utils/CaTimer.h b/algo/ca/core/utils/CaTimer.h
index 1714bebc904dc82676245c3618cadc320b0598d1..8ce67e669d660bea913624f499fd413f91ddb966 100644
--- a/algo/ca/core/utils/CaTimer.h
+++ b/algo/ca/core/utils/CaTimer.h
@@ -49,7 +49,7 @@ namespace cbm::algo::ca
     void AddTimer(const Timer& other);
 
     /// \brief Gets average time [s]
-    double GetAverage() const { return static_cast<double>(fTotal / fNofCalls) * 1.e-9; }
+    double GetAverage() const { return static_cast<double>(fTotal) / fNofCalls * 1.e-9; }
 
     /// \brief Gets time of the longest call [s]
     double GetMax() const { return static_cast<double>(fMax) * 1.e-9; }
diff --git a/algo/ca/core/utils/CaTrackingMonitor.h b/algo/ca/core/utils/CaTrackingMonitor.h
index ceae694acc5c5f3c576aedfcd6d7d6bac153a9a5..09c4f5408f9ee7b68a96f20ede3be0c94b8f84f4 100644
--- a/algo/ca/core/utils/CaTrackingMonitor.h
+++ b/algo/ca/core/utils/CaTrackingMonitor.h
@@ -37,7 +37,7 @@ namespace cbm::algo::ca
   enum class ETimer
   {
     //Tracking,
-    //PrepareInput,
+    PrepareInput,
     FindTracks,
     TrackFinder,
     TrackFitter,
@@ -67,7 +67,7 @@ namespace cbm::algo::ca
       SetCounterName(ECounter::UndefinedTrdHit, "undefined TRD hits");
       SetCounterName(ECounter::UndefinedTofHit, "undefined TOF hits");
       //SetTimerName(ETimer::Tracking, "full tracking");
-      //SetTimerName(ETimer::PrepareInput, "input data initialization");
+      SetTimerName(ETimer::PrepareInput, "input data initialization");
       SetTimerName(ETimer::FindTracks, "find tracks procedure");
       SetTimerName(ETimer::TrackFinder, "track finder");
       SetTimerName(ETimer::TrackFitter, "track fitter");
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 7037b2e52164ea77cd7eadd0e0d13ef8bf60f611..bf232132fa50860f480413f7a6b27412389f26a7 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -918,8 +918,7 @@ void CbmL1::Finish()
   LOG(info) << "\033[31;1m -------------------------------------------------------------\033[0m";
 
   // monitor of the reconstructed tracks
-  // FIXME: For some reason this string causes the crash of the analysis tree converter. Further investigations are needed
-  //LOG(info) << fMonitor.ToString();
+  LOG(info) << fMonitor.ToString();
 
   TDirectory* curr   = gDirectory;
   TFile* currentFile = gFile;