diff --git a/sim/detectors/much/qa/CbmMuchDigitizerQa.cxx b/sim/detectors/much/qa/CbmMuchDigitizerQa.cxx
index e59c4edf1884f6c2ca88ed88cfc407ab462494c3..25277599b1736291591ab8cfe15c4cf47a7e598a 100644
--- a/sim/detectors/much/qa/CbmMuchDigitizerQa.cxx
+++ b/sim/detectors/much/qa/CbmMuchDigitizerQa.cxx
@@ -126,14 +126,13 @@ InitStatus CbmMuchDigitizerQa::Init() {
   printf("Init: fNstations = %i\n", fNstations);
 
   //fVerbose = 3;
-  InitChargeCanvases();
-  InitPadCanvases();
+  InitCanvases();
   InitChargeHistos();
   InitLengthHistos();
   InitPadHistos();
-  FillTotalPadsHistos();
   InitChannelPadInfo();
   InitFits();
+  FillTotalPadsHistos();
 
   gDirectory = oldDirectory;
   return kSUCCESS;
@@ -186,45 +185,47 @@ void CbmMuchDigitizerQa::InitChannelPadInfo() {
   printf("===========================================================\n");
 }
 
-void CbmMuchDigitizerQa::InitChargeCanvases() {
-
-  fCanvCharge =
-    new CbmQaCanvas("cMcPointCharge", "MC point charge", 2 * 800, 2 * 400);
-  fCanvCharge->Divide2D(3);
-
-  fCanvStationCharge = new CbmQaCanvas(
-    "cMcPointChargeVsStation", "MC point charge per station", 2 * 800, 2 * 400);
-  fCanvStationCharge->Divide2D(fNstations);
-
-  fCanvChargeVsEnergy = new CbmQaCanvas("cMcPointChargeVsEnergy",
-                                        "MC point charge vs particle Energy",
-                                        2 * 800,
-                                        2 * 400);
-  fCanvChargeVsEnergy->Divide2D(4);
-
-  fCanvChargeVsLength = new CbmQaCanvas("cMcPointChargeVsLength",
-                                        "MC point charge vs track length",
-                                        2 * 800,
-                                        2 * 400);
-  fCanvChargeVsLength->Divide2D(4);
-
-  fCanvTrackLength =
-    new CbmQaCanvas("cTrackLength", "track length", 2 * 800, 2 * 400);
-  fCanvTrackLength->Divide2D(4);
-
-  fCanvNpadsVsArea =
-    new CbmQaCanvas("cNpadsVsArea", "N pads Vs Area", 2 * 800, 2 * 400);
-
-  fOutFolder.Add(fCanvCharge);
-  fOutFolder.Add(fCanvStationCharge);
-  fOutFolder.Add(fCanvChargeVsEnergy);
-  fOutFolder.Add(fCanvChargeVsLength);
-  fOutFolder.Add(fCanvTrackLength);
-  fOutFolder.Add(fCanvNpadsVsArea);
-}
+void CbmMuchDigitizerQa::InitCanvases() {
 
-void CbmMuchDigitizerQa::InitPadCanvases() {
+  /***** charge canvases ****/
+  if (fMCTracks && fPoints) {
+    fCanvCharge =
+      new CbmQaCanvas("cMcPointCharge", "MC point charge", 2 * 800, 2 * 400);
+    fCanvCharge->Divide2D(3);
+
+    fCanvStationCharge = new CbmQaCanvas("cMcPointChargeVsStation",
+                                         "MC point charge per station",
+                                         2 * 800,
+                                         2 * 400);
+    fCanvStationCharge->Divide2D(fNstations);
+
+    fCanvChargeVsEnergy = new CbmQaCanvas("cMcPointChargeVsEnergy",
+                                          "MC point charge vs particle Energy",
+                                          2 * 800,
+                                          2 * 400);
+    fCanvChargeVsEnergy->Divide2D(4);
+
+    fCanvChargeVsLength = new CbmQaCanvas("cMcPointChargeVsLength",
+                                          "MC point charge vs track length",
+                                          2 * 800,
+                                          2 * 400);
+    fCanvChargeVsLength->Divide2D(4);
+
+    fOutFolder.Add(fCanvCharge);
+    fOutFolder.Add(fCanvStationCharge);
+    fOutFolder.Add(fCanvChargeVsEnergy);
+    fOutFolder.Add(fCanvChargeVsLength);
+  }
+
+  /***** length canvas ****/
+  if (fMCTracks && fPoints) {
+    fCanvTrackLength =
+      new CbmQaCanvas("cTrackLength", "track length", 2 * 800, 2 * 400);
+    fCanvTrackLength->Divide2D(4);
+    fOutFolder.Add(fCanvTrackLength);
+  }
 
+  /***** pad canvases ****/
   fCanvUsPadsFiredXY = new CbmQaCanvas(
     "cPadsFiredXY", "Number of pads fired vs XY", 2 * 800, 2 * 400);
   fCanvUsPadsFiredXY->Divide2D(fNstations);
@@ -240,10 +241,28 @@ void CbmMuchDigitizerQa::InitPadCanvases() {
   fOutFolder.Add(fCanvUsPadsFiredXY);
   fOutFolder.Add(fCanvPadOccupancyR);
   fOutFolder.Add(fCanvPadsTotalR);
+
+  /***** pad canvas (MC) ****/
+  if (fMCTracks && fPoints) {
+    fCanvNpadsVsArea =
+      new CbmQaCanvas("cNpadsVsArea", "N pads Vs Area", 2 * 800, 2 * 400);
+    fOutFolder.Add(fCanvNpadsVsArea);
+  }
 }
 
 void CbmMuchDigitizerQa::InitChargeHistos() {
 
+  if (!fMCTracks || !fPoints) { return; }
+
+  fvMcPointCharge.resize(fNstations);
+  for (Int_t i = 0; i < fNstations; i++) {
+    fvMcPointCharge[i] = new TH1F(
+      Form("hMcPointCharge%i", i + 1),
+      Form("MC point charge : Station %i; Charge [10^4 e]; Count", i + 1),
+      BINNING_CHARGE);
+    histFolder->Add(fvMcPointCharge[i]);
+  }
+
   fhMcPointCharge =
     new TH1F("hCharge", "Charge distribution from tracks", BINNING_CHARGE);
   fhMcPointCharge->GetXaxis()->SetTitle("Charge [10^{4} electrons]");
@@ -327,6 +346,8 @@ void CbmMuchDigitizerQa::InitChargeHistos() {
 
 void CbmMuchDigitizerQa::InitLengthHistos() {
 
+  if (!fMCTracks || !fPoints) { return; }
+
   fhTrackLength = new TH1F("hTrackLength", "Track length", BINNING_LENGTH);
 
   fhTrackLengthPi =
@@ -352,8 +373,7 @@ void CbmMuchDigitizerQa::InitLengthHistos() {
 }
 
 void CbmMuchDigitizerQa::InitPadHistos() {
-
-  fvMcPointCharge.resize(fNstations);
+  // non-MC
   fvPadsTotalR.resize(fNstations);
   fvUsPadsFiredR.resize(fNstations);
   fvUsPadsFiredXY.resize(fNstations);
@@ -365,11 +385,6 @@ void CbmMuchDigitizerQa::InitPadHistos() {
     Double_t rMax           = station->GetRmax();
     Double_t rMin           = station->GetRmin();
 
-    fvMcPointCharge[i] = new TH1F(
-      Form("hMcPointCharge%i", i + 1),
-      Form("MC point charge : Station %i; Charge [10^4 e]; Count", i + 1),
-      BINNING_CHARGE);
-
     fvPadsTotalR[i] =
       new TH1F(Form("hPadsTotal%i", i + 1),
                Form("Number of  pads vs radius: Station %i;Radius [cm]", i + 1),
@@ -409,21 +424,24 @@ void CbmMuchDigitizerQa::InitPadHistos() {
       0.6 * rMin,
       1.2 * rMax);
 
-    histFolder->Add(fvMcPointCharge[i]);
     histFolder->Add(fvPadsTotalR[i]);
     histFolder->Add(fvUsPadsFiredXY[i]);
     histFolder->Add(fvPadsFiredR[i]);
     histFolder->Add(fvPadOccupancyR[i]);
   }
-  fhNpadsVsS = new TH2F("hNpadsVsS",
-                        "Number of fired pads vs pad area:area:n pads",
-                        10,
-                        -5,
-                        0,
-                        10,
-                        0.5,
-                        10.5);
-  histFolder->Add(fhNpadsVsS);
+
+  // MC below
+  if (fMCTracks && fPoints) {
+    fhNpadsVsS = new TH2F("hNpadsVsS",
+                          "Number of fired pads vs pad area:area:n pads",
+                          10,
+                          -5,
+                          0,
+                          10,
+                          0.5,
+                          10.5);
+    histFolder->Add(fhNpadsVsS);
+  }
 }
 
 void CbmMuchDigitizerQa::FillTotalPadsHistos() {
@@ -506,7 +524,9 @@ void CbmMuchDigitizerQa::Exec(Option_t*) {
 
   OccupancyQa();
   DigitizerQa();
-  DrawCanvases();
+  FillChargePerPoint();
+  FillDigitizerPerformancePlots();
+
   if (fVerbose > 1) {
     PrintFrontLayerPoints();
     PrintFrontLayerDigis();
@@ -592,9 +612,6 @@ void CbmMuchDigitizerQa::DigitizerQa() {
     new ((*fPointInfos)[i])
       CbmMuchPointInfo(pdgCode, motherPdg, kine, length, stId);
   }
-
-  FillChargePerPoint();
-  FillDigitizerPerformancePlots();
 }
 
 // -------------------------------------------------------------------------
@@ -695,8 +712,14 @@ void CbmMuchDigitizerQa::FillDigitizerPerformancePlots() {
 
 
 // -------------------------------------------------------------------------
-void CbmMuchDigitizerQa::DrawCanvases() {
+void CbmMuchDigitizerQa::DrawChargeCanvases() {
+
+  if (!fMCTracks || !fPoints) { return; }
 
+  for (Int_t i = 0; i < fNstations; i++) {
+    fCanvStationCharge->cd(i + 1);
+    fvMcPointCharge[i]->DrawCopy("", "");
+  }
   fCanvCharge->cd(1);
   fhMcPointCharge->DrawCopy("", "");
   fCanvCharge->cd(2);
@@ -704,20 +727,6 @@ void CbmMuchDigitizerQa::DrawCanvases() {
   fCanvCharge->cd(3);
   fhMcPointChargePr_1GeV_3mm->DrawCopy("", "");
 
-  for (Int_t i = 0; i < 4; i++) {
-    fCanvTrackLength->cd(i + 1);
-    gPad->SetLogy();
-    gStyle->SetOptStat(1110);
-  }
-  fCanvTrackLength->cd(1);
-  fhTrackLength->DrawCopy("", "");
-  fCanvTrackLength->cd(2);
-  fhTrackLengthPi->DrawCopy("", "");
-  fCanvTrackLength->cd(3);
-  fhTrackLengthPr->DrawCopy("", "");
-  fCanvTrackLength->cd(4);
-  fhTrackLengthEl->DrawCopy("", "");
-
   for (Int_t i = 0; i < 4; i++) {
     fCanvChargeVsEnergy->cd(i + 1);
     gPad->Range(0, 0, 200, 200);
@@ -754,7 +763,10 @@ void CbmMuchDigitizerQa::DrawCanvases() {
   fhMcPointChargeVsTrackLengthPr->DrawCopy("colz", "");
   fCanvChargeVsLength->cd(4);
   fhMcPointChargeVsTrackLengthEl->DrawCopy("colz", "");
+}
 
+void CbmMuchDigitizerQa::DrawPadCanvases() {
+  //non-MC
   for (Int_t i = 0; i < fNstations; i++) {
     *fvPadsFiredR[i] = *fvUsPadsFiredR[i];
     //fvPadsFiredR[i]->Sumw2();
@@ -762,8 +774,6 @@ void CbmMuchDigitizerQa::DrawCanvases() {
     fvPadOccupancyR[i]->Divide(fvPadsFiredR[i], fvPadsTotalR[i]);
     fvPadOccupancyR[i]->Scale(100.);
 
-    fCanvStationCharge->cd(i + 1);
-    fvMcPointCharge[i]->DrawCopy("", "");
     fCanvPadOccupancyR->cd(i + 1);
     fvPadOccupancyR[i]->DrawCopy("", "");
     fCanvPadsTotalR->cd(i + 1);
@@ -771,18 +781,36 @@ void CbmMuchDigitizerQa::DrawCanvases() {
     fCanvUsPadsFiredXY->cd(i + 1);
     fvUsPadsFiredXY[i]->DrawCopy("colz", "");
   }
-  fCanvNpadsVsArea->cd();
-  fhNpadsVsS->DrawCopy("colz", "");
+  //MC below
+  if (fMCTracks && fPoints) {
+    fCanvNpadsVsArea->cd();
+    fhNpadsVsS->DrawCopy("colz", "");
+  }
 }
 
+void CbmMuchDigitizerQa::DrawLengthCanvases() {
 
-void CbmMuchDigitizerQa::PrintFrontLayerPoints() {
+  if (!fMCTracks || !fPoints) { return; }
 
-  if (!fMCTracks || !fPoints) {
-    LOG(debug) << " CbmMuchDigitizerQa::PrintFrontLayerPoints(): Found no MC "
-                  "data. Skipping.";
-    return;
+  for (Int_t i = 0; i < 4; i++) {
+    fCanvTrackLength->cd(i + 1);
+    gPad->SetLogy();
+    gStyle->SetOptStat(1110);
   }
+  fCanvTrackLength->cd(1);
+  fhTrackLength->DrawCopy("", "");
+  fCanvTrackLength->cd(2);
+  fhTrackLengthPi->DrawCopy("", "");
+  fCanvTrackLength->cd(3);
+  fhTrackLengthPr->DrawCopy("", "");
+  fCanvTrackLength->cd(4);
+  fhTrackLengthEl->DrawCopy("", "");
+}
+
+void CbmMuchDigitizerQa::PrintFrontLayerPoints() {
+
+  if (!fMCTracks || !fPoints) { return; }
+
   for (int i = 0; i < fPoints->GetEntriesFast(); i++) {
     CbmMuchPoint* point = (CbmMuchPoint*) fPoints->At(i);
     Int_t stId = CbmMuchAddress::GetStationIndex(point->GetDetectorID());
@@ -825,6 +853,10 @@ void CbmMuchDigitizerQa::FinishTask() {
   printf("FinishTask\n");
   cout << "\n\n SG: Finish task!" << endl;
 
+  DrawChargeCanvases();
+  DrawPadCanvases();
+  DrawLengthCanvases();
+
   TDirectory* oldDirectory = gDirectory;
   bool oldBatchMode        = gROOT->IsBatch();
 
@@ -878,17 +910,6 @@ void CbmMuchDigitizerQa::OutputNvsS() {
   fOutFolder.Add(c);
 }
 
-// -------------------------------------------------------------------------
-Double_t CbmMuchDigitizerQa::LandauMPV(Double_t* lg_x, Double_t* par) {
-  Double_t gaz_gain_mean = 1.7e+4;
-  Double_t scale         = 1.e+6;
-  gaz_gain_mean /= scale;
-  Double_t mass = par[0];  // mass in MeV
-  Double_t x    = TMath::Power(10, lg_x[0]);
-  return gaz_gain_mean * MPV_n_e(x, mass);
-}
-
-
 // -------------------------------------------------------------------------
 Int_t CbmMuchDigitizerQa::GetNChannels(Int_t iStation) {
   Int_t nChannels                = 0;
@@ -957,6 +978,16 @@ TVector2 CbmMuchDigitizerQa::GetMaxPadSize(Int_t iStation) {
 }
 // -------------------------------------------------------------------------
 
+// -------------------------------------------------------------------------
+Double_t CbmMuchDigitizerQa::LandauMPV(Double_t* lg_x, Double_t* par) {
+  Double_t gaz_gain_mean = 1.7e+4;
+  Double_t scale         = 1.e+6;
+  gaz_gain_mean /= scale;
+  Double_t mass = par[0];  // mass in MeV
+  Double_t x    = TMath::Power(10, lg_x[0]);
+  return gaz_gain_mean * MPV_n_e(x, mass);
+}
+
 // -------------------------------------------------------------------------
 Double_t CbmMuchDigitizerQa::MPV_n_e(Double_t Tkin, Double_t mass) {
   Double_t logT;
@@ -978,16 +1009,6 @@ Double_t CbmMuchDigitizerQa::MPV_n_e(Double_t Tkin, Double_t mass) {
     return fPol6.EvalPar(&logT, mpv_p);
   }
 }
-
-void CbmMuchDigitizerQa::DivideCanvas2D(TCanvas* c, int nPads) {
-  // divide canvas into nPads in 2D
-  if (!c || nPads < 1) { return; }
-  int rows = (int) sqrt(nPads);
-  int cols = nPads / rows;
-  if (cols * rows < nPads) { cols++; }
-  c->Divide(cols, rows);
-}
-
 // -------------------------------------------------------------------------
 
 ClassImp(CbmMuchDigitizerQa)
diff --git a/sim/detectors/much/qa/CbmMuchDigitizerQa.h b/sim/detectors/much/qa/CbmMuchDigitizerQa.h
index 0fccc78d88c269c1e15797f016eb58c615514e20..a994ea3226c2b1a96f1820963d0085fbdbfe12b8 100644
--- a/sim/detectors/much/qa/CbmMuchDigitizerQa.h
+++ b/sim/detectors/much/qa/CbmMuchDigitizerQa.h
@@ -40,7 +40,6 @@ public:
   virtual void Exec(Option_t* option);
   virtual void FinishTask();
   virtual void SetParContainers();
-  static void DivideCanvas2D(TCanvas* c, int nPads);
 
 protected:
   /* DigitizerQa - analysis of digitizer performance - charge distributions
@@ -65,25 +64,26 @@ private:
   CbmMuchDigitizerQa& operator=(const CbmMuchDigitizerQa&);
 
   TFolder* histFolder;
-  void InitChargeCanvases();
-  void InitPadCanvases();
+
   void InitChargeHistos();
-  void InitLengthHistos();
   void InitPadHistos();
+  void InitLengthHistos();
   void InitChannelPadInfo();
   void InitFits();
+  void InitCanvases();
   void DeInit();
 
   void FillTotalPadsHistos();
-  void DrawCanvases();
-  void OutputNvsS();
-
   void FillChargePerPoint();
   void FillDigitizerPerformancePlots();
-
   void PrintFrontLayerPoints();
   void PrintFrontLayerDigis();
 
+  void DrawChargeCanvases();
+  void DrawPadCanvases();
+  void DrawLengthCanvases();
+  void OutputNvsS();
+
   // geometry
   CbmMuchGeoScheme* fGeoScheme = nullptr;
   Int_t fNstations             = 0;