diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
index 0d11bc05e9b778c06c0a8a4677eadd61dfa8e715..bd9f56e525027cdd71327808b4d58d06855394d1 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.cxx
@@ -76,6 +76,9 @@ CbmMcbm2018MonitorAlgoPsd::CbmMcbm2018MonitorAlgoPsd()
   , fuReadMsgsCntInMs(0)
   , fuLostMsgsCntInMs(0)
   , fuReadEvtCntInMs(0)
+  , fvhHitZLChanEvo(kuNbChanPsd, nullptr)
+  , fvhHitLPChanEvo(kuNbChanPsd, nullptr)
+  , fvhHitFAChanEvo(kuNbChanPsd, nullptr)
   , fvhHitChargeChan(kuNbChanPsd, nullptr)
   , fvhHitZeroLevelChan(kuNbChanPsd, nullptr)
   , fvhHitAmplChan(kuNbChanPsd, nullptr)
@@ -363,48 +366,55 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
   }
 
   switch (fuRawDataVersion) {
-    case 000: {
+// --------------------------------------------------------------------------------------------------
+    case 100: {
 
-      PsdDataV000::PsdGbtReader PsdReader(pInBuff);
+      PsdDataV100::PsdGbtReader PsdReader(pInBuff);
       if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true);
+      // every 80bit gbt word is decomposed into two 64bit words
       if (uNbMessages > 1) {
         while (PsdReader.GetTotalGbtWordsRead() < uNbMessages) {
-          int ReadResult = PsdReader.ReadEventFles();
-          if (PsdReader.EvHdrAb.uHitsNumber > kuNbChanPsd) {
-            LOG(error) << "too many triggered channels! In header: " << PsdReader.EvHdrAb.uHitsNumber
-                       << " in PSD: " << GetNbChanPsd();
-            break;
-          }
-
+          int ReadResult = PsdReader.ReadMs();
           if (ReadResult == 0) {
             fuCountsLastSecond++;
-            fhAdcTime->Fill(PsdReader.EvHdrAc.uAdcTime);
             fuReadEvtCntInMs++;
 
             //hit loop
-            for (int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) {
-              UInt_t uHitChannel         = PsdReader.VectHitHdr.at(hit_iter).uHitChannel;
-              UInt_t uSignalCharge       = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge;
-              UInt_t uZeroLevel          = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel;
+            for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) {
+              if (PsdReader.VectPackHdr.size() != PsdReader.VectHitHdr.size()) {
+                LOG(error) << "Different vector headers sizes!"
+                           << " in VectPackHdr " << PsdReader.VectPackHdr.size() << " in VectHitHdr "
+                           << PsdReader.VectHitHdr.size() << "\n";
+                break;
+              }
+
+              uint16_t uHitChannel   = PsdReader.VectHitHdr.at(hit_iter).uHitChannel;
+              //uint8_t uLinkIndex     = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex;
+              uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge;
+              uint16_t uZeroLevel    = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel;
+              uint32_t uAccum        = PsdReader.VectHitHdr.at(hit_iter).uFeeAccum;
+              //double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5;  //in ns
+              //double dHitTime = PsdReader.MsHdr.ulMicroSlice*1000. + PsdReader.VectPackHdr.at(hit_iter).uAdcTime*12.5; //in ns
               std::vector<uint16_t> uWfm = PsdReader.VectHitData.at(hit_iter).uWfm;
               uSignalCharge /= kfAdc_to_mV;  // ->now in mV
 
-              if (uHitChannel >= kuNbChanPsd)  //uHitChannel numerated from 0
-              {
+              fhAdcTime->Fill(PsdReader.VectPackHdr.at(hit_iter).uAdcTime);
+
+              //uHitChannel numerated from 0
+              if (uHitChannel >= kuNbChanPsd) {
                 LOG(error) << "hit channel number out of range! channel index: " << uHitChannel
                            << " max: " << GetNbChanPsd();
                 break;
               }
-              //Hit header
-              fhHitChargeMap->Fill(uHitChannel, uSignalCharge);
-              fhHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime);
-              fhChanHitMapEvo->Fill(uHitChannel,
-                                    fdMsTime - fdStartTime);  //should be placed map(channel)
 
+              //Pack header
+              fhHitChargeMap->Fill(uHitChannel, uSignalCharge);
+              fhChanHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime);  //should be placed map(channel)
               if (fbMonitorChanMode) {
-
                 fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge);
                 fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel);
+		fvhHitZLChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uZeroLevel);
+		fvhHitFAChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uAccum);
 
                 //Hit data
                 int32_t iHitAmlpitude = 0;
@@ -417,7 +427,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 auto const max_iter = std::max_element(uWfm.begin(), uWfm.end());
                 assert(max_iter != uWfm.end());
                 if (max_iter == uWfm.end()) break;
-                //                uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter);
+                //uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter);
                 iHitAmlpitude = *max_iter - uZeroLevel;
                 iHitAmlpitude /= kfAdc_to_mV;
                 iHitChargeWfm /= kfAdc_to_mV;
@@ -425,6 +435,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 fvhHitChargeByWfmChan[uHitChannel]->Fill(iHitChargeWfm);
 
                 if (fbMonitorWfmMode) {
+		fvhHitLPChanEvo[uHitChannel]->Fill(fdMsTime - fdStartTime, uWfm.back());
+                  for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++)
+                    fvhHitWfmChan[uHitChannel]->Fill(wfm_iter, uWfm.at(wfm_iter));
                   fvhHitWfmChan[uHitChannel]->SetTitle(
                     Form("Waveform channel %03u charge %0u zero level %0u; Time [adc "
                          "counts]; Amplitude [adc counts]",
@@ -472,13 +485,12 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
                   std::complex<float>* harmonics = Pfitter.GetHarmonics();
                   std::vector<uint16_t> uFitWfm  = Pfitter.GetFitWfm();
-                  for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++) {
+                  for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++)
                     fvhHitFitWfmChan[uHitChannel]->Fill(wfm_iter, uFitWfm.at(wfm_iter));
-                    fvhHitWfmChan[uHitChannel]->SetTitle(
-                      Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; "
-                           "Time [adc counts]; Amplitude [adc counts]",
-                           uHitChannel, uSignalCharge, uZeroLevel, fit_R2));
-                  }
+                  fvhHitWfmChan[uHitChannel]->SetTitle(
+                    Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; "
+                         "Time [adc counts]; Amplitude [adc counts]",
+                         uHitChannel, uSignalCharge, uZeroLevel, fit_R2));
 
                   fvhFitQaChan[uHitChannel]->Fill(fit_integral, fit_R2);
 
@@ -488,20 +500,19 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 }  //if (fbMonitorFitMode)
               }    //if (fbMonitorChanMode)
 
+
             }  // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++)
           }
           else if (ReadResult == 1) {
-            LOG(error) << "no event headers in message!";
+            LOG(error) << "no pack headers in message!";
             break;
           }
           else if (ReadResult == 2) {
-            LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmPoints
-                       << " should be: " << 8;
+            LOG(error) << "wrong channel! In header: " << PsdReader.HitHdr.uHitChannel;
             break;
           }
           else if (ReadResult == 3) {
-            LOG(error) << "wrong amount of hits read! In header: " << PsdReader.EvHdrAb.uHitsNumber
-                       << " in hit vector: " << PsdReader.VectHitHdr.size();
+            LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmWords - 1;
             break;
           }
           else {
@@ -511,6 +522,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
         }  // while(PsdReader.GetTotalGbtWordsRead()<uNbMessages)
 
+
         if (uNbMessages != PsdReader.GetTotalGbtWordsRead()) {
           fbPsdMissedData = kTRUE;
           LOG(error) << "Wrong amount of messages read!"
@@ -528,16 +540,10 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
           }
         }
 
-        if (fulCurrentMsIdx != PsdReader.EvHdrAb.ulMicroSlice)
-          LOG(error) << "Wrong MS index!"
-                     << " in microslice " << fulCurrentMsIdx << " by PsdReader " << PsdReader.EvHdrAb.ulMicroSlice
-                     << "\n";
-
         fuMsgsCntInMs += uNbMessages;
         fuReadMsgsCntInMs += PsdReader.GetTotalGbtWordsRead();
         fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead();
-
-      }  //if(uNbMessages > 1)
+      }  //if (uNbMessages > 1)
 
       if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime;
       else {
@@ -549,52 +555,50 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
       FillHistograms();
 
       break;
-    }  // case 0
-
 
-    case 100: {
+    }  // case 1
+// --------------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------------
+    case 000: {
 
-      PsdDataV100::PsdGbtReader PsdReader(pInBuff);
+      PsdDataV000::PsdGbtReader PsdReader(pInBuff);
       if (fair::Logger::Logging(fair::Severity::debug)) PsdReader.SetPrintOutMode(true);
-      // every 80bit gbt word is decomposed into two 64bit words
       if (uNbMessages > 1) {
         while (PsdReader.GetTotalGbtWordsRead() < uNbMessages) {
-          int ReadResult = PsdReader.ReadMs();
+          int ReadResult = PsdReader.ReadEventFles();
+          if (PsdReader.EvHdrAb.uHitsNumber > kuNbChanPsd) {
+            LOG(error) << "too many triggered channels! In header: " << PsdReader.EvHdrAb.uHitsNumber
+                       << " in PSD: " << GetNbChanPsd();
+            break;
+          }
+
           if (ReadResult == 0) {
             fuCountsLastSecond++;
+            fhAdcTime->Fill(PsdReader.EvHdrAc.uAdcTime);
             fuReadEvtCntInMs++;
 
             //hit loop
-            for (uint64_t hit_iter = 0; hit_iter < PsdReader.VectHitHdr.size(); hit_iter++) {
-              if (PsdReader.VectPackHdr.size() != PsdReader.VectHitHdr.size()) {
-                LOG(error) << "Different vector headers sizes!"
-                           << " in VectPackHdr " << PsdReader.VectPackHdr.size() << " in VectHitHdr "
-                           << PsdReader.VectHitHdr.size() << "\n";
-                break;
-              }
-
-              uint16_t uHitChannel = PsdReader.VectHitHdr.at(hit_iter).uHitChannel;
-              //              uint8_t uLinkIndex     = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex;
-              uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge;
-              uint16_t uZeroLevel    = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel;
-              //              double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5;  //in ns
-              //double dHitTime = PsdReader.MsHdr.ulMicroSlice*1000. + PsdReader.VectPackHdr.at(hit_iter).uAdcTime*12.5; //in ns
+            for (int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++) {
+              UInt_t uHitChannel         = PsdReader.VectHitHdr.at(hit_iter).uHitChannel;
+              UInt_t uSignalCharge       = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge;
+              UInt_t uZeroLevel          = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel;
               std::vector<uint16_t> uWfm = PsdReader.VectHitData.at(hit_iter).uWfm;
               uSignalCharge /= kfAdc_to_mV;  // ->now in mV
 
-              fhAdcTime->Fill(PsdReader.VectPackHdr.at(hit_iter).uAdcTime);
-
-              //uHitChannel numerated from 0
-              if (uHitChannel >= kuNbChanPsd) {
+              if (uHitChannel >= kuNbChanPsd)  //uHitChannel numerated from 0
+              {
                 LOG(error) << "hit channel number out of range! channel index: " << uHitChannel
                            << " max: " << GetNbChanPsd();
                 break;
               }
-
-              //Pack header
+              //Hit header
               fhHitChargeMap->Fill(uHitChannel, uSignalCharge);
-              fhChanHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime);  //should be placed map(channel)
+              fhHitMapEvo->Fill(uHitChannel, fdMsTime - fdStartTime);
+              fhChanHitMapEvo->Fill(uHitChannel,
+                                    fdMsTime - fdStartTime);  //should be placed map(channel)
+
               if (fbMonitorChanMode) {
+
                 fvhHitChargeChan[uHitChannel]->Fill(uSignalCharge);
                 fvhHitZeroLevelChan[uHitChannel]->Fill(uZeroLevel);
 
@@ -609,7 +613,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 auto const max_iter = std::max_element(uWfm.begin(), uWfm.end());
                 assert(max_iter != uWfm.end());
                 if (max_iter == uWfm.end()) break;
-                //                uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter);
+                //uint8_t hit_time_max = std::distance(uWfm.begin(), max_iter);
                 iHitAmlpitude = *max_iter - uZeroLevel;
                 iHitAmlpitude /= kfAdc_to_mV;
                 iHitChargeWfm /= kfAdc_to_mV;
@@ -617,6 +621,8 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 fvhHitChargeByWfmChan[uHitChannel]->Fill(iHitChargeWfm);
 
                 if (fbMonitorWfmMode) {
+                  for (UInt_t wfm_iter = 0; wfm_iter < uWfm.size(); wfm_iter++)
+                    fvhHitWfmChan[uHitChannel]->Fill(wfm_iter, uWfm.at(wfm_iter));
                   fvhHitWfmChan[uHitChannel]->SetTitle(
                     Form("Waveform channel %03u charge %0u zero level %0u; Time [adc "
                          "counts]; Amplitude [adc counts]",
@@ -664,13 +670,12 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
                   std::complex<float>* harmonics = Pfitter.GetHarmonics();
                   std::vector<uint16_t> uFitWfm  = Pfitter.GetFitWfm();
-                  for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++) {
+                  for (UInt_t wfm_iter = 0; wfm_iter < uFitWfm.size(); wfm_iter++)
                     fvhHitFitWfmChan[uHitChannel]->Fill(wfm_iter, uFitWfm.at(wfm_iter));
-                    fvhHitWfmChan[uHitChannel]->SetTitle(
-                      Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; "
-                           "Time [adc counts]; Amplitude [adc counts]",
-                           uHitChannel, uSignalCharge, uZeroLevel, fit_R2));
-                  }
+                  fvhHitWfmChan[uHitChannel]->SetTitle(
+                    Form("Waveform channel %03u charge %0u zero level %0u R2 %.5f; "
+                         "Time [adc counts]; Amplitude [adc counts]",
+                         uHitChannel, uSignalCharge, uZeroLevel, fit_R2));
 
                   fvhFitQaChan[uHitChannel]->Fill(fit_integral, fit_R2);
 
@@ -680,19 +685,20 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
                 }  //if (fbMonitorFitMode)
               }    //if (fbMonitorChanMode)
 
-
             }  // for(int hit_iter = 0; hit_iter < PsdReader.EvHdrAb.uHitsNumber; hit_iter++)
           }
           else if (ReadResult == 1) {
-            LOG(error) << "no pack headers in message!";
+            LOG(error) << "no event headers in message!";
             break;
           }
           else if (ReadResult == 2) {
-            LOG(error) << "wrong channel! In header: " << PsdReader.HitHdr.uHitChannel;
+            LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmPoints
+                       << " should be: " << 8;
             break;
           }
           else if (ReadResult == 3) {
-            LOG(error) << "check number of waveform points! In header: " << PsdReader.HitHdr.uWfmWords - 1;
+            LOG(error) << "wrong amount of hits read! In header: " << PsdReader.EvHdrAb.uHitsNumber
+                       << " in hit vector: " << PsdReader.VectHitHdr.size();
             break;
           }
           else {
@@ -702,7 +708,6 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
 
         }  // while(PsdReader.GetTotalGbtWordsRead()<uNbMessages)
 
-
         if (uNbMessages != PsdReader.GetTotalGbtWordsRead()) {
           fbPsdMissedData = kTRUE;
           LOG(error) << "Wrong amount of messages read!"
@@ -720,10 +725,16 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
           }
         }
 
+        if (fulCurrentMsIdx != PsdReader.EvHdrAb.ulMicroSlice)
+          LOG(error) << "Wrong MS index!"
+                     << " in microslice " << fulCurrentMsIdx << " by PsdReader " << PsdReader.EvHdrAb.ulMicroSlice
+                     << "\n";
+
         fuMsgsCntInMs += uNbMessages;
         fuReadMsgsCntInMs += PsdReader.GetTotalGbtWordsRead();
         fuLostMsgsCntInMs += uNbMessages - PsdReader.GetTotalGbtWordsRead();
-      }  //if (uNbMessages > 1)
+
+      }  //if(uNbMessages > 1)
 
       if (fdPrevMsTime < 0.) fdPrevMsTime = fdMsTime;
       else {
@@ -735,8 +746,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t uM
       FillHistograms();
 
       break;
+    }  // case 0
+// --------------------------------------------------------------------------------------------------
 
-    }  // case 1
   }    // switch
 
   return kTRUE;
@@ -808,6 +820,21 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
   if (fbMonitorChanMode) {
 
     for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) {
+
+      fvhHitZLChanEvo[uChan] = new TH2I(Form("hHitZLChanEvo%03u", uChan),
+                                         Form("Hits ZeroLevel evolution for channel %03u; ZeroLevel [adc counts]", uChan),
+                                         fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2));
+      fvhHitZLChanEvo[uChan]->SetMarkerColor(kRed);
+      fvhHitLPChanEvo[uChan] = new TH2I(Form("hHitLPChanEvo%03u", uChan),
+                                         Form("Hits LastPoint evolution for channel %03u; ZeroLevel [adc counts]", uChan),
+                                         fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2));
+      fvhHitLPChanEvo[uChan]->SetMarkerColor(kBlue);
+      fvhHitFAChanEvo[uChan] = new TH2I(Form("hHitFAChanEvo%03u", uChan),
+                                         Form("Hits FeeAccumulator evolution for channel %03u; ZeroLevel [adc counts]", uChan),
+                                         fuHistoryHistoSize, 0, fuHistoryHistoSize, fviHistoZLArgs.at(0), fviHistoZLArgs.at(1), fviHistoZLArgs.at(2));
+      fvhHitFAChanEvo[uChan]->SetMarkerColor(kOrange);
+
+
       fvhHitChargeChan[uChan] = new TH1I(Form("hHitChargeChan%03u", uChan),
                                          Form("Hits charge distribution for channel %03u; Charge [mV]", uChan),
                                          fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2));
@@ -828,13 +855,17 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
                       uChan),
                  fviHistoChargeArgs.at(0), fviHistoChargeArgs.at(1), fviHistoChargeArgs.at(2));
 
+
+      AddHistoToVector(fvhHitZLChanEvo[uChan], sFolder);
+      AddHistoToVector(fvhHitLPChanEvo[uChan], sFolder);
+      AddHistoToVector(fvhHitFAChanEvo[uChan], sFolder);
       AddHistoToVector(fvhHitChargeChan[uChan], sFolder);
       AddHistoToVector(fvhHitZeroLevelChan[uChan], sFolder);
       AddHistoToVector(fvhHitAmplChan[uChan], sFolder);
       AddHistoToVector(fvhHitChargeByWfmChan[uChan], sFolder);
 
       if (fbMonitorWfmMode) {
-        fvhHitWfmChan[uChan] = new TH1I(Form("hHitWfmChan%03u", uChan), Form("HitWfmChan%03u", uChan), 8, 0, 8);
+        fvhHitWfmChan[uChan] = new TH1I(Form("hHitWfmChan%03u", uChan), Form("HitWfmChan%03u", uChan), 32, 0, 32);
         fvhHitWfmChan[uChan]->SetMarkerStyle(31);
         fvhHitWfmChan[uChan]->SetMarkerSize(0.5);
 
@@ -843,7 +874,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
             UInt_t uFlatIndex = uWfmExampleIter * kuNbWfmRanges * kuNbChanPsd + uWfmRangeIter * kuNbChanPsd + uChan;
             fv3hHitWfmFlattenedChan[uFlatIndex] =
               new TH1I(Form("hHitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter),
-                       Form("HitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter), 8, 0, 8);
+                       Form("HitWfmChan%03uRange%02uExample%02u", uChan, uWfmRangeIter, uWfmExampleIter), 32, 0, 32);
 
           }  // for( UInt_t uWfmRangeIter = 0; uWfmRangeIter < kuNbWfmRanges; uWfmRangeIter ++)
         }    // for( UInt_t uWfmExampleIter = 0; uWfmExampleIter < kuNbWfmExamples; uWfmExampleIter ++)
@@ -852,7 +883,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
       if (fbMonitorFitMode) {
 
         fvhHitFitWfmChan[uChan] =
-          new TH1I(Form("hHitFitWfmChan%03u", uChan), Form("HitFitWfmChan%03u", uChan), 8, 0, 8);
+          new TH1I(Form("hHitFitWfmChan%03u", uChan), Form("HitFitWfmChan%03u", uChan), 32, 0, 32);
         fvhHitFitWfmChan[uChan]->SetLineColor(kRed);
         fvhHitFitWfmChan[uChan]->SetLineWidth(2);
 
@@ -975,13 +1006,28 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
 
   if (fbMonitorChanMode) {
 
+    /*******************************************************************/
+    /// ZL evo all channels
+    fcZLevo= new TCanvas("cZLevo", "ZeroLevel evolaution in all channels", w, h);
+    fcZLevo->DivideSquare(kuNbChanPsd);
+
+    for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) {
+      fcZLevo->cd(1 + uChan);
+      fvhHitZLChanEvo[uChan]->Draw();
+      fvhHitLPChanEvo[uChan]->Draw("same");
+      fvhHitFAChanEvo[uChan]->Draw("same");
+    }  // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++)
+
+    AddCanvasToVector(fcZLevo, "canvases");
+    /*******************************************************************/
+
     /*******************************************************************/
     /// Charge from FPGA all channels
     fcChargesFPGA = new TCanvas("cChargesFPGA", "Charges spectra in all channels calculated by FPGA", w, h);
     fcChargesFPGA->DivideSquare(kuNbChanPsd);
 
     for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) {
-      fcChargesFPGA->cd(1 + uChan);
+      fcChargesFPGA->cd(1 + uChan)->SetLogy();
       fvhHitChargeChan[uChan]->Draw();
     }  // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++)
 
@@ -994,7 +1040,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
     fcChargesWfm->DivideSquare(kuNbChanPsd);
 
     for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) {
-      fcChargesWfm->cd(1 + uChan);
+      fcChargesWfm->cd(1 + uChan)->SetLogy();
       fvhHitChargeByWfmChan[uChan]->Draw();
     }  // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++)
 
@@ -1007,7 +1053,7 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::CreateHistograms()
     fcAmplitudes->DivideSquare(kuNbChanPsd);
 
     for (UInt_t uChan = 0; uChan < kuNbChanPsd; uChan++) {
-      fcAmplitudes->cd(1 + uChan);
+      fcAmplitudes->cd(1 + uChan)->SetLogy();
       fvhHitAmplChan[uChan]->Draw();
     }  // for( UInt_t uChan = 0; uChan < kuNbChanPsd; uChan ++)
 
@@ -1117,6 +1163,9 @@ Bool_t CbmMcbm2018MonitorAlgoPsd::ResetHistograms(Bool_t bResetTime)
 
   if (fbMonitorChanMode) {
     for (UInt_t uChan = 0; uChan < kuNbChanPsd; ++uChan) {
+      fvhHitZLChanEvo[uChan]->Reset();
+      fvhHitLPChanEvo[uChan]->Reset();
+      fvhHitFAChanEvo[uChan]->Reset();
       fvhHitChargeChan[uChan]->Reset();
       fvhHitZeroLevelChan[uChan]->Reset();
       fvhHitAmplChan[uChan]->Reset();
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h
index 995d5c152baf39c09a821736e83e694bd3e2d6b2..69acfdf50b84db60dca36ff0940cb7974b6bc4ab 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorAlgoPsd.h
@@ -140,6 +140,9 @@ private:
 
   /// Channel rate plots
   std::vector<UInt_t> fvuHitCntChanMs;
+  std::vector<TH2*> fvhHitZLChanEvo;
+  std::vector<TH2*> fvhHitLPChanEvo;
+  std::vector<TH2*> fvhHitFAChanEvo;
   std::vector<TH1*> fvhHitChargeChan;
   std::vector<TH1*> fvhHitZeroLevelChan;
   std::vector<TH1*> fvhHitAmplChan;
@@ -186,6 +189,7 @@ private:
   /// Canvases
   TCanvas* fcSummary;
   TCanvas* fcHitMaps;
+  TCanvas* fcZLevo;
   TCanvas* fcChargesFPGA;
   TCanvas* fcChargesWfm;
   TCanvas* fcAmplitudes;
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
index 44409d020a1312ced3f9335f816043ea3e920803..fdbaa4054c5ebb4e7fb8f2989c2f441abc29ee9c 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoPsd.cxx
@@ -349,7 +349,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u
               }
 
               uint8_t uHitChannel    = PsdReader.VectHitHdr.at(hit_iter).uHitChannel;
-              uint8_t uLinkIndex     = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex;
+              //uint8_t uLinkIndex     = PsdReader.VectPackHdr.at(hit_iter).uLinkIndex;
               uint32_t uSignalCharge = PsdReader.VectHitHdr.at(hit_iter).uSignalCharge;
               uint16_t uZeroLevel    = PsdReader.VectHitHdr.at(hit_iter).uZeroLevel;
               double dHitTime = (double) fulCurrentMsIdx + PsdReader.VectPackHdr.at(hit_iter).uAdcTime * 12.5;  //in ns
@@ -395,7 +395,7 @@ Bool_t CbmMcbm2018UnpackerAlgoPsd::ProcessMs(const fles::Timeslice& ts, size_t u
               digi.fdEdepWfm = dEdepWfm;
               digi.fdAmpl = dAmpl;
               digi.fuTimeMax = uHitTimeMax;
-              digi.ffFitEdep = uWfm.back();
+              digi.fdFitEdep = uWfm.back();
 
               fDigiVect.emplace_back(digi);