diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index a6a6ff34b102b81fba692a85bf03a0d11f7a30ee..e9f8ab396a3e3f6fa966128d663bab569399564b 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -45,6 +45,7 @@ void TrackingChain::Init()
   L_(info) << "Tracking Chain: parameters object: \n" << parameters.ToString(1) << '\n';
 
   // ------ Initialize CA framework
+  fCaMonitor.Reset();
   fCaFramework.Init(ca::Framework::TrackingMode::kMcbm);
   fCaFramework.ReceiveParameters(std::move(parameters));
 }
@@ -53,25 +54,27 @@ void TrackingChain::Init()
 //
 TrackingChain::Return_t TrackingChain::Run(Input_t recoResults)
 {
-  xpu::scoped_timer t_("CA");  // TODO: pass timings to monitoring for throughput?
+  //xpu::scoped_timer t_("CA");  // TODO: pass timings to monitoring for throughput?
+  ca::TrackingMonitorData monitorData;
+
   // ----- Init input data ---------------------------------------------------------------------------------------------
   this->PrepareInput(recoResults);
 
   // ----- Run reconstruction ------------------------------------------------------------------------------------------
-  // FIXME: SZh 23.10.2023:
-  //        Sub-timeslices algorithm seems not to be working, the whole hit sample is sent to the FindTracks function.
-  //        Further investigations are needed.
+  fCaFramework.SetMonitorData(monitorData);
   fCaFramework.fTrackFinder.FindTracks();
-  L_(info) << "Timeslice contains " << fCaFramework.fRecoTracks.size() << " tracks";
+  monitorData = fCaFramework.GetMonitorData();
+  L_(info) << "Timeslice contains " << monitorData.GetCounterValue(ca::ECounter::RecoTrack) << " tracks";
 
   // ----- Init output data --------------------------------------------------------------------------------------------
   // FIXME: SZh 22.10.2023: Provide a class for the tracking output data (tracks, hit indices and monitor)
-  return std::make_pair(std::move(fCaFramework.fRecoTracks), fCaFramework.GetMonitorDataPerCall());
+  fCaMonitor.AddMonitorData(monitorData);
+  return std::make_pair(std::move(fCaFramework.fRecoTracks), monitorData);
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-void TrackingChain::Finalize() {}
+void TrackingChain::Finalize() { L_(info) << fCaMonitor.ToString(); }
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 3b8452a536b64a7cc875cfe82a7fd69db4e02e1c..22f8a4a7db4bdd06c9992e0da8bcac32cb73a818 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -39,6 +39,9 @@ namespace cbm::algo
 
     using Return_t = std::pair<ca::Vector<ca::Track>, ca::TrackingMonitorData>;
 
+    /// \brief  Gets internal monitor
+    const ca::TrackingMonitor& GetCaMonitor() const { return fCaMonitor; }
+
     /// \brief  Provides action in the initialization of the run
     void Init();
 
@@ -51,6 +54,9 @@ namespace cbm::algo
     void Finalize();
 
   private:
+    // *********************
+    // **  Utility functions
+
     /// \brief  Prepares input data
     /// \param  recoResults  Structure of reconstruction results
     void PrepareInput(Input_t recoResults);
@@ -63,9 +69,18 @@ namespace cbm::algo
 
     /// \brief
 
+
+    // *************************
+    // **  Framework variables
+
+    ca::TrackingMonitor fCaMonitor {};  ///< CA internal monitor (debug purposes)
     ca::Framework fCaFramework {};      ///< CA framework instance
     ca::DataManager fCaDataManager {};  ///< CA data manager
 
+
+    // ************************
+    // **  Auxilary variables
+
     ca::HitKeyIndex_t fNofHitKeys = 0;  ///< Current number of hit keys (aux)
   };
 
diff --git a/algo/ca/core/tracking/CaFramework.cxx b/algo/ca/core/tracking/CaFramework.cxx
index 539483fe87af59ea582d3bc515e73e528bcdb2e7..1d335a7987c6ae068eb4fa211c1f18995934bcad 100644
--- a/algo/ca/core/tracking/CaFramework.cxx
+++ b/algo/ca/core/tracking/CaFramework.cxx
@@ -29,19 +29,6 @@ using cbm::algo::ca::ETimer;  // monitor timer key type
 void Framework::Init(const TrackingMode mode)
 {
   fTrackingMode = mode;
-  // Monitor settings
-  fMonitor.SetCounterName(ECounter::RecoTrack, "reco tracks");
-  fMonitor.SetCounterName(ECounter::RecoHit, "reco hits");
-  fMonitor.SetCounterName(ECounter::Triplet, "triplets");
-  fMonitor.SetCounterName(ECounter::RecoHitUsed, "used reco hits");
-  fMonitor.SetCounterName(ECounter::SubTS, "sub-timeslices");
-  fMonitor.SetTimerName(ETimer::Tracking, "full tracking");
-  fMonitor.SetTimerName(ETimer::TrackFinder, "track finder");
-  fMonitor.SetTimerName(ETimer::TrackFitter, "track fitter");
-  fMonitor.SetTimerName(ETimer::TripletConstruction, "triplet construction");
-  fMonitor.SetTimerName(ETimer::NeighboringTripletSearch, "neighboring triplet search");
-  fMonitor.SetRatioKeys({ECounter::SubTS, ECounter::RecoTrack});
-  fMonitor.Reset();
 }
 
 void Framework::Finish()
diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h
index eca80483580ee6a511462b82170f6806d3db8fbe..c16b048fd3e7e8f95130cc5734631ca08e468b8a 100644
--- a/algo/ca/core/tracking/CaFramework.h
+++ b/algo/ca/core/tracking/CaFramework.h
@@ -179,11 +179,11 @@ namespace cbm::algo::ca
 
     float GetMaxInvMom() const { return fMaxInvMom[0]; }
 
-    /// \brief Gets reference to the monitor
-    const TrackingMonitor& GetMonitor() const { return fMonitor; }
+    /// \brief Gets monitor data
+    const TrackingMonitorData& GetMonitorData() const { return fMonitorData; }
 
-    /// \brief Gets reference to the monitor data per call
-    const TrackingMonitorData& GetMonitorDataPerCall() const { return fMonitorDataPerCall; }
+    /// \brief Sets monitor data
+    void SetMonitorData(const TrackingMonitorData& monitorData) { fMonitorData = monitorData; }
 
   public:
     /// Gets number of stations before the pipe (MVD stations in CBM)
@@ -216,8 +216,7 @@ namespace cbm::algo::ca
     Vector<unsigned char> fvHitKeyFlags {
       "Framework::fvHitKeyFlags"};  ///< List of key flags: has been this hit or cluster already used
 
-    ca::TrackingMonitor fMonitor {"CA Algo"};        ///< Tracking monitor (statistics per run)
-    ca::TrackingMonitorData fMonitorDataPerCall {};  ///< Tracking monitor data (statistics per call)
+    TrackingMonitorData fMonitorData {};  ///< Tracking monitor data (statistics per call)
 
   public:
     Vector<CaHitTimeInfo> fHitTimeInfo;
diff --git a/algo/ca/core/tracking/CaTrackFinder.cxx b/algo/ca/core/tracking/CaTrackFinder.cxx
index 90b3d382476e5010f22c12c92e290e9e7522f61e..fac6e0986958c1d3d1847473835d712ab6c93ddd 100644
--- a/algo/ca/core/tracking/CaTrackFinder.cxx
+++ b/algo/ca/core/tracking/CaTrackFinder.cxx
@@ -47,11 +47,9 @@ void TrackFinder::FindTracks()
   // It splits the input data into sub-timeslices
   // and runs the track finder over the sub-slices
   //
-
-  // Reset monitor
-  frAlgo.fMonitorDataPerCall.Reset();
-  frAlgo.fMonitorDataPerCall.IncrementCounter(ECounter::RecoHit, frAlgo.fInputData.GetNhits());
-  frAlgo.fMonitorDataPerCall.StartTimer(ETimer::Tracking);
+  frAlgo.fMonitorData.IncrementCounter(ECounter::TrackingCall);
+  frAlgo.fMonitorData.IncrementCounter(ECounter::RecoHit, frAlgo.fInputData.GetNhits());
+  frAlgo.fMonitorData.StartTimer(ETimer::Tracking);
 
   auto timerStart = std::chrono::high_resolution_clock::now();
 
@@ -180,9 +178,7 @@ void TrackFinder::FindTracks()
   int statLastLogTimeChunk = -1;
 
   while (areUntouchedDataLeft) {
-
-    frAlgo.fMonitor.IncrementCounter(ECounter::SubTS);
-
+    frAlgo.fMonitorData.IncrementCounter(ECounter::SubTS);
     // select the sub-slice hits
     for (int iS = 0; iS < frAlgo.GetParameters().GetNstationsActive(); ++iS) {
       frAlgo.fSliceHitIds[iS].clear();
@@ -246,13 +242,13 @@ void TrackFinder::FindTracks()
       }
     }
 
-    frAlgo.fMonitorDataPerCall.StartTimer(ETimer::TrackFinder);
+    frAlgo.fMonitorData.StartTimer(ETimer::TrackFinder);
     frAlgo.fTrackFinderWindow.CaTrackFinderSlice();
-    frAlgo.fMonitorDataPerCall.StopTimer(ETimer::TrackFinder);
+    frAlgo.fMonitorData.StopTimer(ETimer::TrackFinder);
 
-    frAlgo.fMonitorDataPerCall.StartTimer(ETimer::TrackFitter);
+    frAlgo.fMonitorData.StartTimer(ETimer::TrackFitter);
     frAlgo.fTrackFitter.FitCaTracks();
-    frAlgo.fMonitorDataPerCall.StopTimer(ETimer::TrackFitter);
+    frAlgo.fMonitorData.StopTimer(ETimer::TrackFitter);
 
     // save reconstructed tracks with no hits in the overlap region
 
@@ -308,12 +304,9 @@ void TrackFinder::FindTracks()
     tsStart -= 5;  // do 5 ns margin
   }
 
-  frAlgo.fMonitorDataPerCall.StopTimer(ETimer::Tracking);
-  frAlgo.fMonitorDataPerCall.IncrementCounter(ECounter::RecoTrack, frAlgo.fRecoTracks.size());
-  frAlgo.fMonitorDataPerCall.IncrementCounter(ECounter::RecoHitUsed, frAlgo.fRecoHits.size());
-
-  // Sum up the monitor data into the total monitor
-  frAlgo.fMonitor.AddMonitorData(frAlgo.fMonitorDataPerCall);
+  frAlgo.fMonitorData.StopTimer(ETimer::Tracking);
+  frAlgo.fMonitorData.IncrementCounter(ECounter::RecoTrack, frAlgo.fRecoTracks.size());
+  frAlgo.fMonitorData.IncrementCounter(ECounter::RecoHitUsed, frAlgo.fRecoHits.size());
 
   auto timerEnd      = std::chrono::high_resolution_clock::now();
   frAlgo.fCaRecoTime = (double) (std::chrono::duration<double>(timerEnd - timerStart).count());
diff --git a/algo/ca/core/tracking/CaTrackFinderWindow.cxx b/algo/ca/core/tracking/CaTrackFinderWindow.cxx
index 4f0abbff39120d8bc07028b1aa967fa636d56914..0b14efccebbfba1419f29ecdd90b636a9331a14c 100644
--- a/algo/ca/core/tracking/CaTrackFinderWindow.cxx
+++ b/algo/ca/core/tracking/CaTrackFinderWindow.cxx
@@ -299,7 +299,7 @@ void TrackFinderWindow::CaTrackFinderSlice()
 
     ///   stage for triplets creation
 
-    frAlgo.fMonitorDataPerCall.StartTimer(ETimer::TripletConstruction);
+    frAlgo.fMonitorData.StartTimer(ETimer::TripletConstruction);
 
     ca::TripletConstructor constructor1(&frAlgo);
     ca::TripletConstructor constructor2(&frAlgo);
@@ -332,10 +332,10 @@ void TrackFinderWindow::CaTrackFinderSlice()
       }
     }  // istal
 
-    frAlgo.fMonitorDataPerCall.StopTimer(ETimer::TripletConstruction);
+    frAlgo.fMonitorData.StopTimer(ETimer::TripletConstruction);
 
     // search for neighbouring triplets
-    frAlgo.fMonitorDataPerCall.StartTimer(ETimer::NeighboringTripletSearch);
+    frAlgo.fMonitorData.StartTimer(ETimer::NeighboringTripletSearch);
     for (int istal = frAlgo.GetParameters().GetNstationsActive() - 2; istal >= frAlgo.fFirstCAstation;
          istal--) {  // start with downstream chambers
 
@@ -376,10 +376,10 @@ void TrackFinderWindow::CaTrackFinderSlice()
         tr.SetLevel(level);
       }  // neighbour search
 
-      frAlgo.fMonitorDataPerCall.IncrementCounter(ECounter::Triplet, frAlgo.fTriplets[istal].size());
+      frAlgo.fMonitorData.IncrementCounter(ECounter::Triplet, frAlgo.fTriplets[istal].size());
 
     }  // istal
-    frAlgo.fMonitorDataPerCall.StopTimer(ETimer::NeighboringTripletSearch);
+    frAlgo.fMonitorData.StopTimer(ETimer::NeighboringTripletSearch);
 
 
     ///====================================================================
diff --git a/algo/ca/core/utils/CaMonitor.h b/algo/ca/core/utils/CaMonitor.h
index b65098e7318d98bdf667e614231eade980647640..063615f98ebb6662e4c307f7291d30b2cb0ca68d 100644
--- a/algo/ca/core/utils/CaMonitor.h
+++ b/algo/ca/core/utils/CaMonitor.h
@@ -151,11 +151,12 @@ namespace cbm::algo::ca
     using std::setfill;
     using std::setw;
     std::stringstream msg;
-    constexpr size_t width = 30;
+    constexpr size_t widthKey = 30;
+    constexpr size_t width    = 12;
     msg << "\n===== Monitor: " << fsName << "\n";
     if constexpr (!std::is_same_v<ETimerKey, EDummy>) {
       msg << "\n----- Timers:\n";
-      msg << setw(width) << left << "Key" << ' ';
+      msg << setw(widthKey) << left << "Key" << ' ';
       msg << setw(width) << left << "N Calls" << ' ';
       msg << setw(width) << left << "Average [s]" << ' ';
       msg << setw(width) << left << "Min [s]" << ' ';
@@ -164,7 +165,7 @@ namespace cbm::algo::ca
       msg << right;
       for (int iKey = 0; iKey < fMonitorData.GetNofTimers(); ++iKey) {
         const Timer& timer = fMonitorData.GetTimer(static_cast<ETimerKey>(iKey));
-        msg << setw(width) << faTimerNames[iKey] << ' ';
+        msg << setw(widthKey) << faTimerNames[iKey] << ' ';
         msg << setw(width) << timer.GetNofCalls() << ' ';
         msg << setw(width) << timer.GetAverage() << ' ';
         msg << setw(width) << timer.GetMin() << ' ';
@@ -174,7 +175,7 @@ namespace cbm::algo::ca
     }
 
     msg << "\n----- Counters:\n";
-    msg << setw(width) << left << "Key" << ' ';
+    msg << setw(widthKey) << left << "Key" << ' ';
     msg << setw(width) << left << "Total" << ' ';
     for (auto key : fvCounterRatioKeys) {
       msg << setw(width) << left << std::string("per ") + faCounterNames[key] << ' ';
@@ -182,7 +183,7 @@ namespace cbm::algo::ca
     msg << '\n';
     for (int iKey = 0; iKey < fMonitorData.GetNofCounters(); ++iKey) {
       auto counterValue = fMonitorData.GetCounterValue(static_cast<ECounterKey>(iKey));
-      msg << setw(width) << left << faCounterNames[iKey] << ' ';
+      msg << setw(widthKey) << left << faCounterNames[iKey] << ' ';
       msg << setw(width) << right << counterValue << ' ';
       for (auto keyDen : fvCounterRatioKeys) {
         auto ratio = static_cast<double>(counterValue) / fMonitorData.GetCounterValue(keyDen);
diff --git a/algo/ca/core/utils/CaTrackingMonitor.h b/algo/ca/core/utils/CaTrackingMonitor.h
index 2458141c4177c5062d166f7fa35e008837c50dd5..d127d0f1135e557bce5b5702dc924fd09da960f7 100644
--- a/algo/ca/core/utils/CaTrackingMonitor.h
+++ b/algo/ca/core/utils/CaTrackingMonitor.h
@@ -3,7 +3,7 @@
    Authors: Sergei Zharko [committer] */
 
 /// \file   CaTrackingMonitor.h
-/// \brief  Monitor specification for the tracking algorithm
+/// \brief  Monitor specialization for the tracking algorithm
 /// \since  19.10.2023
 /// \author S.Zharko <s.zharko@gsi.de>
 
@@ -17,11 +17,12 @@ namespace cbm::algo::ca
   /// \brief Counter keys for the CA algo monitor
   enum class ECounter
   {
-    RecoTrack,    ///< number of reconstructed tracks
-    RecoHit,      ///< number of reconstructed hits
-    RecoHitUsed,  ///< number of used reconstructed hits
-    Triplet,      ///< number of triplets
-    SubTS,        ///< number of sub time-slices
+    TrackingCall,  ///< number of the routine calls
+    SubTS,         ///< number of sub time-slices
+    RecoTrack,     ///< number of reconstructed tracks
+    RecoHit,       ///< number of reconstructed hits
+    RecoHitUsed,   ///< number of used reconstructed hits
+    Triplet,       ///< number of triplets
     kEND
   };
 
@@ -37,6 +38,27 @@ namespace cbm::algo::ca
     kEND
   };
 
-  using TrackingMonitor     = Monitor<ECounter, ETimer>;
   using TrackingMonitorData = MonitorData<ECounter, ETimer>;
+
+  /// \class cbm::algo::ca::TrackingMonitor
+  /// \brief A monitor specialization for cbm::algo::ca::Framework class
+  class TrackingMonitor : public Monitor<ECounter, ETimer> {
+  public:
+    /// \brief Default constructor
+    TrackingMonitor() : Monitor<ECounter, ETimer>("CA Framework Monitor")
+    {
+      SetCounterName(ECounter::TrackingCall, "full routine calls");
+      SetCounterName(ECounter::RecoTrack, "reco tracks");
+      SetCounterName(ECounter::RecoHit, "reco hits");
+      SetCounterName(ECounter::Triplet, "triplets");
+      SetCounterName(ECounter::RecoHitUsed, "used reco hits");
+      SetCounterName(ECounter::SubTS, "sub-timeslices");
+      SetTimerName(ETimer::Tracking, "full tracking");
+      SetTimerName(ETimer::TrackFinder, "track finder");
+      SetTimerName(ETimer::TrackFitter, "track fitter");
+      SetTimerName(ETimer::TripletConstruction, "triplet construction");
+      SetTimerName(ETimer::NeighboringTripletSearch, "neighboring triplet search");
+      SetRatioKeys({ECounter::TrackingCall, ECounter::SubTS, ECounter::RecoTrack});
+    }
+  };
 }  // namespace cbm::algo::ca
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 5c141ee94737088391870439d77f37f76a27e5c9..7037b2e52164ea77cd7eadd0e0d13ef8bf60f611 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -700,16 +700,6 @@ InitStatus CbmL1::Init()
   DumpMaterialToFile("L1material.root");
 
   // Initialize monitor
-  fMonitor.SetCounterName(EMonitorKey::kEvent, "N events");
-  fMonitor.SetCounterName(EMonitorKey::kRecoTrack, "N reco tracks");
-  fMonitor.SetCounterName(EMonitorKey::kRecoHit, "N hits");
-  fMonitor.SetCounterName(EMonitorKey::kGhostTrack, "N ghosts");
-  fMonitor.SetCounterName(EMonitorKey::kDiscardedHitMvd, "N discarded hits in MVD");
-  fMonitor.SetCounterName(EMonitorKey::kDiscardedHitSts, "N discarded hits in STS");
-  fMonitor.SetCounterName(EMonitorKey::kDiscardedHitMuch, "N discarded hits in MUCH");
-  fMonitor.SetCounterName(EMonitorKey::kDiscardedHitTrd, "N discarded hits in TRD");
-  fMonitor.SetCounterName(EMonitorKey::kDiscardedHitTof, "N discarded hits in TOF");
-  fMonitor.SetRatioKeys({EMonitorKey::kEvent, EMonitorKey::kRecoTrack});
   fMonitor.Reset();
 
   return kSUCCESS;
@@ -718,6 +708,8 @@ InitStatus CbmL1::Init()
 
 void CbmL1::Reconstruct(CbmEvent* event)
 {
+  ca::TrackingMonitorData monitorData;
+
   fvSelectedMcEvents.clear();
 
   int bestMcFile  = -1;
@@ -798,13 +790,17 @@ void CbmL1::Reconstruct(CbmEvent* event)
   //  FieldApproxCheck();
   //  FieldIntegralCheck();
 
+  fpAlgo->SetMonitorData(monitorData);
+
   if (fVerbose > 1) { LOG(info) << "L1 Track finder..."; }
   fpAlgo->fTrackFinder.FindTracks();
   //       IdealTrackFinder();
   fTrackingTime = fpAlgo->fCaRecoTime;  // TODO: remove (not used)
-
   if (fVerbose > 1) { LOG(info) << "L1 Track finder ok"; }
 
+  // Update monitor data after the actual tracking
+  monitorData = fpAlgo->GetMonitorData();
+
   // save reconstructed tracks
 
   fvRecoTracks.clear();
@@ -825,10 +821,10 @@ void CbmL1::Reconstruct(CbmEvent* event)
       t.Hits.push_back(cbmHitID);
     }
     fvRecoTracks.push_back(t);
-    fMonitor.IncrementCounter(EMonitorKey::kRecoHit, it->fNofHits);
+    //fMonitor.IncrementCounter(EMonitorKey::kRecoHit, it->fNofHits);
   }
 
-  fMonitor.IncrementCounter(EMonitorKey::kRecoTrack, fvRecoTracks.size());
+  //fMonitor.IncrementCounter(EMonitorKey::kRecoTrack, fvRecoTracks.size());
   LOG(info) << "CA Track Finder: " << fpAlgo->fCaRecoTime << " s/sub-ts";
 
   // output performance
@@ -902,7 +898,7 @@ void CbmL1::Reconstruct(CbmEvent* event)
   }
 
   ++fEventNo;
-  fMonitor.IncrementCounter(EMonitorKey::kEvent);
+  fMonitor.AddMonitorData(monitorData);
 }
 
 // -----   Finish CbmStsFitPerformanceTask task   -----------------------------
@@ -922,8 +918,8 @@ void CbmL1::Finish()
   LOG(info) << "\033[31;1m -------------------------------------------------------------\033[0m";
 
   // monitor of the reconstructed tracks
-  //LOG(info) << fpAlgo->GetMonitor().ToString();
-  LOG(info) << '\n' << fMonitor.ToString();
+  // FIXME: For some reason this string causes the crash of the analysis tree converter. Further investigations are needed
+  //LOG(info) << fMonitor.ToString();
 
   TDirectory* curr   = gDirectory;
   TFile* currentFile = gFile;
diff --git a/reco/L1/CbmL1.h b/reco/L1/CbmL1.h
index 30d34cbd70cced9fca5362df6ed84d8c16631a47..44a5660a0b33ecb7af8cf7dca4ee4221bc62b7f7 100644
--- a/reco/L1/CbmL1.h
+++ b/reco/L1/CbmL1.h
@@ -258,23 +258,7 @@ public:
   void SetMcbmMode() { fTrackingMode = ca::Framework::TrackingMode::kMcbm; }
   void SetGlobalMode() { fTrackingMode = ca::Framework::TrackingMode::kGlobal; }
 
-  // Tracking monitor (prototype)
-  enum class EMonitorKey
-  {
-    kEvent,             ///< Number of processed events
-    kRecoTrack,         ///< Number of reconstructed tracks
-    kRecoHit,           ///< Number of reconstructed hits
-    kGhostTrack,        ///< Number of ghost tracks
-    kDiscardedHitMvd,   ///< Number of discarded hits in MVD
-    kDiscardedHitSts,   ///< Number of discarded hits in STS
-    kDiscardedHitMuch,  ///< Number of discarded hits in MuCh
-    kDiscardedHitTrd,   ///< Number of discarded hits in TRD
-    kDiscardedHitTof,   ///< Number of discarded hits in TOF
-    kEND
-  };
-
-  ca::Monitor<EMonitorKey> fMonitor = {"CbmL1 Monitor"};  ///< Tracking monitor
-
+  ca::TrackingMonitor fMonitor {};  ///< Tracking monitor
 
   //   void SetTrackingLevel( Int_t iLevel ){ fTrackingLevel = iLevel; }
   //   void MomentumCutOff( Double_t cut ){ fMomentumCutOff = cut; }
diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx
index 182f670d4e1de51ac911d0dbc88ac27f086663a8..adbf2638a6e74f53e51b290cf4c2e5c833038dc9 100644
--- a/reco/L1/CbmL1Performance.cxx
+++ b/reco/L1/CbmL1Performance.cxx
@@ -879,7 +879,7 @@ void CbmL1::HistoPerformance()  // TODO: check if works correctly. Change vHitFa
 
     // fill ghost histos
     if (prtra->IsGhost()) {
-      fMonitor.IncrementCounter(EMonitorKey::kGhostTrack);
+      //fMonitor.IncrementCounter(EMonitorKey::kGhostTrack);
       h_ghost_purity->Fill(100 * prtra->GetMaxPurity());
       if (fabs(prtra->GetQp()) > 1.e-10) {
         h_ghost_mom->Fill(prtra->GetP());
diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx
index f37f73ec4f60587a7398dcd7548146c1eed0446b..03498cf157653331ed46ed4732c71827a56cc45f 100644
--- a/reco/L1/CbmL1ReadEvent.cxx
+++ b/reco/L1/CbmL1ReadEvent.cxx
@@ -419,7 +419,7 @@ void CbmL1::ReadEvent(CbmEvent* event)
         nMvdHits++;
       }
       else {
-        fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitMvd);
+        //fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitMvd);
       }
     }  // for j
   }    // if fpMvdHits
@@ -487,7 +487,7 @@ void CbmL1::ReadEvent(CbmEvent* event)
         nStsHits++;
       }
       else {
-        fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitSts);
+        //fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitSts);
       }
     }  // for j
   }    // if fpStsHits
@@ -542,7 +542,7 @@ void CbmL1::ReadEvent(CbmEvent* event)
         nMuchHits++;
       }
       else {
-        fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitMuch);
+        //fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitMuch);
       }
 
     }  // for j
@@ -615,7 +615,7 @@ void CbmL1::ReadEvent(CbmEvent* event)
         nTrdHits++;
       }
       else {
-        fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitTrd);
+        //fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitTrd);
       }
     }  // for fpTrdHits
   }    // read TRD hits
@@ -683,7 +683,7 @@ void CbmL1::ReadEvent(CbmEvent* event)
         nTofHits++;
       }
       else {
-        fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitTof);
+        //fMonitor.IncrementCounter(EMonitorKey::kDiscardedHitTof);
       }
     }  // for j
   }    // if listTofHits