diff --git a/algo/ca/qa/CaOutputQa.cxx b/algo/ca/qa/CaOutputQa.cxx
index 9957c745a5ad9f9881b91c04934b2beb41293a08..a23de73d2ecc97eadb4d9f46fa3a2604dce92946 100644
--- a/algo/ca/qa/CaOutputQa.cxx
+++ b/algo/ca/qa/CaOutputQa.cxx
@@ -34,9 +34,8 @@ void OutputQa::Init()
     return;
   }
 
-
   // ----- Histograms initialization
-  constexpr int nParPads                              = 4;
+  constexpr int nParPads                              = 3;
   std::array<std::string, knTrkParPoints> vsPointName = {"first", "last"};
   for (int i = 0; i < knTrkParPoints; ++i) {
     {
@@ -59,13 +58,18 @@ void OutputQa::Init()
       auto sTitl        = format("#chi^{{2}}/NDF at {} hit; #chi^{{2}}/NDF", vsPointName[i]);
       fvphTrkChi2Ndf[i] = fQaData.MakeObj<H1D>(sName, sTitl, 100, 0., 20.);
     }
+  }
+  {
+    int nBins   = knStaMax;
+    double xMin = -0.5;
+    double xMax = double(knStaMax) - 0.5;
     {
-      auto sName    = format("track_{}_hit_station", vsPointName[i]);
-      auto sTitl    = format("Station of {} hit;ID_{{sta}}", vsPointName[i]);
-      fvphHitSta[i] = fQaData.MakeObj<H1D>(sName, sTitl, 100, -.5, 10.5);
+      auto sName  = "track_fst_lst_sta";
+      auto sTitl  = "First vs. last station index;ID^{last}_{station};ID^{first}_{station}";
+      fphTrkFstLstSta = fQaData.MakeObj<H2D>(sName, sTitl, nBins, xMin, xMax, nBins, xMin, xMax);
     }
+    fphTrkNofHits = fQaData.MakeObj<H1D>("n_hits", "Number of hits;N_{hit}", nBins, xMin, xMax);
   }
-  fphTrkNofHits = fQaData.MakeObj<H1D>("n_hits", "Number of hits;N_{hit}", 11, -0.5, 10.5);
 
   // ---- Init canvases
   {
@@ -86,7 +90,6 @@ void OutputQa::Init()
       pads[0].RegisterHistogram(fvphTrkTheta[i], "hist");
       pads[1].RegisterHistogram(fvphTrkPhi[i], "hist");
       pads[2].RegisterHistogram(fvphTrkChi2Ndf[i], "hist");
-      pads[3].RegisterHistogram(fvphHitSta[i], "hist");
       for (auto& pad : pads) {
         canv.AddPadConfig(pad);
       }
@@ -110,11 +113,20 @@ void OutputQa::Init()
     // Number of hits in track
     {
       auto canv = CanvasConfig("ca_nhits_in_trk", "Number of hit in track");
-      auto pad  = PadConfig();
-      pad.SetGrid(true, true);
-      pad.SetLog(false, true);
-      pad.RegisterHistogram(fphTrkNofHits, "hist");
-      canv.AddPadConfig(pad);
+      {
+        auto pad  = PadConfig();
+        pad.SetGrid(true, true);
+        pad.SetLog(false, true);
+        pad.RegisterHistogram(fphTrkNofHits, "hist");
+        canv.AddPadConfig(pad);
+      }
+      {
+        auto pad  = PadConfig();
+        pad.SetGrid(true, true);
+        pad.SetLog(false, false, true);
+        pad.RegisterHistogram(fphTrkFstLstSta, "colz");
+        canv.AddPadConfig(pad);
+      }
       fQaData.AddCanvasConfig(canv);
     }
   }
@@ -147,16 +159,16 @@ void OutputQa::Exec()
 
       // Distributions in different track points
       for (int ip = 0; ip < knTrkParPoints; ++ip) {
-        int iHit           = (ip == 0 ? iFstHit : iLstHit);
+        //int iHit           = (ip == 0 ? iFstHit : iLstHit);
+        //const auto& hit    = fpInputData->GetHit(iHit);
         const auto& trkPar = (ip == 0 ? track.fParFirst : track.fParLast);
-        const auto& hit    = fpInputData->GetHit(iHit);
         fvphTrkTheta[ip]->Fill(trkPar.GetTheta() * 180. / Pi);
         fvphTrkPhi[ip]->Fill(trkPar.GetPhi() * 180. / Pi);
         fvphTrkPhiTheta[ip]->Fill(trkPar.GetPhi() * 180. / Pi, trkPar.GetTheta() * 180. / Pi);
         fvphTrkChi2Ndf[ip]->Fill(trkPar.GetChiSq() / trkPar.GetNdf());
-        fvphHitSta[ip]->Fill(hit.Station());
       }
       // Other distributions
+      fphTrkFstLstSta->Fill(fpInputData->GetHit(iLstHit).Station(), fpInputData->GetHit(iFstHit).Station());
       fphTrkNofHits->Fill(nHits);
       trkFirstHit += nHits;
     }
diff --git a/algo/ca/qa/CaOutputQa.h b/algo/ca/qa/CaOutputQa.h
index 2da5c4fd047430922ee0119f4a9e0e17fa243cac..4b089fcf0141614957bd1a0bd532e5412766cea6 100644
--- a/algo/ca/qa/CaOutputQa.h
+++ b/algo/ca/qa/CaOutputQa.h
@@ -48,14 +48,16 @@ namespace cbm::algo::ca
     void Init();
 
    private:
-    static constexpr int knTrkParPoints = 2;  ///< Number of track points to build par distributions
+    static constexpr int knTrkParPoints = 2;   ///< Number of track points to build par distributions
+    static constexpr int knStaMax       = 16;  ///< Max number of stations (histogram binning)
 
     // Track distributions
     std::array<qa::H1D*, knTrkParPoints> fvphTrkTheta    = {{0}};    ///< hist: theta at first/last hit
     std::array<qa::H1D*, knTrkParPoints> fvphTrkPhi      = {{0}};    ///< hist: phi at first/last hit
     std::array<qa::H1D*, knTrkParPoints> fvphTrkChi2Ndf  = {{0}};    ///< hist: chi2/NDF at first/last hit
-    std::array<qa::H1D*, knTrkParPoints> fvphHitSta      = {{0}};    ///< hist: station of first/last hit
     std::array<qa::H2D*, knTrkParPoints> fvphTrkPhiTheta = {{0}};    ///< hist: theta vs. phi at first/last hit
-    qa::H1D* fphTrkNofHits                               = nullptr;  ///< hist: number of hits in track
+
+    qa::H2D* fphTrkFstLstSta = nullptr;  ///< hist: fst vs lst station index
+    qa::H1D* fphTrkNofHits   = nullptr;  ///< hist: number of hits in track
   };
 }  // namespace cbm::algo::ca