diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx
index 189ab0e57389762090fc203d49764eeea58e7fb6..6ecde1253eb9b8ebd751a3222baf873a306f09db 100644
--- a/reco/L1/CbmL1Performance.cxx
+++ b/reco/L1/CbmL1Performance.cxx
@@ -317,7 +317,6 @@ void CbmL1::EfficienciesPerformance()
   for (vector<CbmL1MCTrack>::iterator mtraIt = fvMCTracks.begin(); mtraIt != fvMCTracks.end(); mtraIt++) {
     CbmL1MCTrack& mtra = *(mtraIt);
 
-
     //    if( !( mtra.pdg == -11 && mtra.mother_ID == -1 ) ) continue; // electrons only
     if (!mtra.IsReconstructable() && !mtra.IsAdditional()) continue;
 
@@ -454,8 +453,10 @@ void CbmL1::EfficienciesPerformance()
     cout << endl;
     cout << "L1 ACCUMULATED STAT    : " << L1_NEVENTS << " EVENTS " << endl << endl;
     L1_NTRA.PrintEff(/*ifPrintTableToLog = */ true, false);
-    cout << "MC tracks/event found  : "
-         << int(double(L1_NTRA.reco.counters[L1_NTRA.indices["total"]]) / double(L1_NEVENTS)) << endl;
+    cout << "Reconstructible MC tracks/event: "
+         << (double(L1_NTRA.mc.counters[L1_NTRA.indices["total"]]) / double(L1_NEVENTS)) << endl;
+    cout << "Reconsted MC tracks/event: "
+         << (double(L1_NTRA.reco.counters[L1_NTRA.indices["total"]]) / double(L1_NEVENTS)) << endl;
     cout << endl;
     cout << "CA Track Finder: " << L1_CATIME / L1_NEVENTS << (fLegacyEventMode ? " s/ev" : " s/time slice") << endl
          << endl;
diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx
index 8be7cee15a07d6d128f56df5876dcd098bfc7dea..544bee882db412306fcb8f782472b16ffd1c80f4 100644
--- a/reco/L1/CbmL1ReadEvent.cxx
+++ b/reco/L1/CbmL1ReadEvent.cxx
@@ -56,7 +56,7 @@ using std::endl;
 using std::find;
 
 
-static bool compareZ(const int& a, const int& b)
+static bool compareMcPointZ(const int& a, const int& b)
 {
   //        return (CbmL1::Instance()->fvMCPoints[a].z < CbmL1::Instance()->fvMCPoints[b].z);
   const CbmL1* l1 = CbmL1::Instance();
@@ -178,8 +178,8 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kMvd>(int iHit) const
     int iHitExt          = -(1 + iHit);  // TODO: SZh 28.08.2022: this should be replaced with iHitExt = hit.extIdex
     const auto* hitMatch = dynamic_cast<CbmMatch*>(fpMvdHitMatches->At(iHitExt));
     assert(hitMatch);
-    if (hitMatch->GetNofLinks() > 0 && hitMatch->GetLink(0).GetIndex() < fNpointsMvd) {
-      iPoint = hitMatch->GetLink(0).GetIndex();
+    if (hitMatch->GetNofLinks() > 0 && hitMatch->GetMatchedLink().GetIndex() < fNpointsMvd) {
+      iPoint = hitMatch->GetMatchedLink().GetIndex();
     }
   }
   return iPoint;
@@ -244,8 +244,8 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kMuch>(int iHit) const
       if (hitMatchMuch->GetLink(iLink).GetIndex() < fNpointsMuch) {
         int iMc    = hitMatchMuch->GetLink(iLink).GetIndex();
         int iIndex = iMc + fNpointsMvd + fNpointsSts;
-        int iFile  = hitMatchMuch->GetLink(0).GetFile();
-        int iEvent = hitMatchMuch->GetLink(0).GetEntry();
+        int iFile  = hitMatchMuch->GetMatchedLink().GetFile();
+        int iEvent = hitMatchMuch->GetMatchedLink().GetEntry();
 
         auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile));
         if (itPoint == fmMCPointsLinksMap.cend()) continue;
@@ -266,7 +266,7 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kTrd>(int iHit) const
   if (hitMatch) {
     int iMC = -1;
     if (hitMatch->GetNofLinks() > 0) {
-      iMC = hitMatch->GetLink(0).GetIndex();
+      iMC = hitMatch->GetMatchedLink().GetIndex();
       assert(iMC >= 0 && iMC < fNpointsTrd);
       iPoint = iMC + fNpointsMvd + fNpointsSts + fNpointsMuch;
     }
@@ -607,7 +607,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int
 
     for (unsigned int iTr = 0; iTr < fvMCTracks.size(); iTr++) {
 
-      sort(fvMCTracks[iTr].Points.begin(), fvMCTracks[iTr].Points.end(), compareZ);
+      sort(fvMCTracks[iTr].Points.begin(), fvMCTracks[iTr].Points.end(), compareMcPointZ);
 
       if (fvMCTracks[iTr].mother_ID >= 0) {
         auto iFile                = fvMCTracks[iTr].iFile;
@@ -885,8 +885,8 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int
       //        iMC          = matchHitMatch->GetLink(iLink).GetIndex();
       //        Int_t iIndex = iMC + fNpointsMvd + fNpointsSts;
 
-      //        Int_t iFile  = matchHitMatch->GetLink(0).GetFile();
-      //        Int_t iEvent = matchHitMatch->GetLink(0).GetEntry();
+      //        Int_t iFile  = matchHitMatch->GetMatchedLink().GetFile();
+      //        Int_t iEvent = matchHitMatch->GetMatchedLink().GetEntry();
 
       //        auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile));
       //        if (itPoint == fmMCPointsLinksMap.cend()) continue;
@@ -997,7 +997,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int
       //if (fPerformance && fpTrdHitMatches) {
       //  CbmMatch* trdHitMatch = L1_DYNAMIC_CAST<CbmMatch*>(fpTrdHitMatches->At(iHit));
       //  if (trdHitMatch->GetNofLinks() > 0) {
-      //    iMcTrd = trdHitMatch->GetLink(0).GetIndex();
+      //    iMcTrd = trdHitMatch->GetMatchedLink().GetIndex();
       //    assert(iMcTrd >= 0 && iMcTrd < fNpointsTrd);
       //    th.iMC   = iMcTrd + fNpointsMvd + fNpointsSts + fNpointsMuch;
       //    th.track = fvMCPoints[th.iMC].ID;
diff --git a/reco/qa/CbmTrackingTrdQa.cxx b/reco/qa/CbmTrackingTrdQa.cxx
index 1cb1fb88637554eda661bf1bcd4ade818f97669e..73b94fb4f4f20166b73cd6e1d44bdec11ec2d447 100644
--- a/reco/qa/CbmTrackingTrdQa.cxx
+++ b/reco/qa/CbmTrackingTrdQa.cxx
@@ -212,10 +212,10 @@ void CbmTrackingTrdQa::Exec(Option_t* /*opt*/)
 
     int nContStations = 0;  // Number of continious stations
     {
-      int istaprev = -1;
+      int istaprev = -100;
       int len      = 0;
       for (auto itSta = info.fHitMap.begin(); itSta != info.fHitMap.end(); itSta++) {
-        if (len == 0 || itSta->first == istaprev + 1) { len++; }
+        if (itSta->first == istaprev + 1) { len++; }
         else {
           len = 1;
         }
@@ -810,7 +810,7 @@ void CbmTrackingTrdQa::FillHitMap()
 
     if ((int) hit->GetClassType() != 1) {
       // skip TRD-1D hit
-      //continue;
+      continue;
     }
 
     Int_t station = CbmTrdTrackingInterface::Instance()->GetTrackingStationIndex(hit);
@@ -909,15 +909,19 @@ void CbmTrackingTrdQa::FillTrackMatchMap(Int_t& nRec, Int_t& nGhosts, Int_t& nCl
 
     // previous match is better, this track is a clone
     if ((quali < info.fQuali) || ((quali == info.fQuali) && (nTrue < info.fMatchedNHitsTrue))) {
-      fhNhClones->Fill(nHits);
-      nClones++;
+      if (info.fIsAccepted) {
+        fhNhClones->Fill(nHits);
+        nClones++;
+      }
       continue;
     }
 
     // this track is better than the old one
     if (info.fMatchedNHitsAll > 0) {
-      fhNhClones->Fill(info.fMatchedNHitsAll);
-      nClones++;
+      if (info.fIsAccepted) {
+        fhNhClones->Fill(info.fMatchedNHitsAll);
+        nClones++;
+      }
     }
     info.fGlobalTrackMatch = iGlobalTrack;
     info.fTrdTrackMatch    = iTrdTrack;