diff --git a/macro/beamtime/mcbm2019/check_events.C b/macro/beamtime/mcbm2019/check_events.C
index cb9680267af8ff6fbb9ce2bb019bbaa417953778..e214b14d2004721c7a1bf33551ba106326f7e717 100644
--- a/macro/beamtime/mcbm2019/check_events.C
+++ b/macro/beamtime/mcbm2019/check_events.C
@@ -1,4 +1,4 @@
-void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TString friendFile="", TString inFile="") 
+void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TString friendFile="", TString inFile="")
 {
   Int_t iVerbose = 1;
   Int_t iBugCor=0;
@@ -13,46 +13,61 @@ void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TS
   FairLogger::GetLogger();
   gLogger->SetLogScreenLevel(logLevel);
   gLogger->SetLogVerbosityLevel("VERYHIGH");
-  
+
   TString workDir    = gSystem->Getenv("VMCWORKDIR");
 
-  TString runId = TString::Format("%u", uRunId);
+  TString runId = TString::Format("%03u", uRunId);
 
   TString ParFile    = inDir + "/unp_mcbm_params_" + runId + ".root";
 
   TString InputFile  = inDir + "/unp_mcbm_" + runId + ".root";
   TString InputFileEvent="";
-  if (friendFile.Length() > 0) {
-    InputFileEvent  = inDir + friendFile;
-  }
+  if( "" == friendFile )
+  {
+    InputFileEvent = inDir + "/events_" + runId + ".root";
+  } // if( "" == friendFile )
+    else
+    {
+      InputFileEvent  = inDir + friendFile;
+    } // else of if( "" == friendFile )
+
    TString OutputFile = inDir + "/test_" + runId + ".out.root";
 
    TList *parFileList = new TList();
 
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
   // -----   Reconstruction run   -------------------------------------------
   FairRunAna *run= new FairRunAna();
 
   FairFileSource* inputSource = new FairFileSource(InputFile);
-  if (friendFile.Length() > 0) { 
-    inputSource->AddFriend(InputFileEvent);
-  }
+  inputSource->AddFriend(InputFileEvent);
+
   run->SetSource(inputSource);
   run->SetOutputFile(OutputFile);
 
   run->SetEventHeaderPersistence(kFALSE);
 
+  // ------------------------------------------------------------------------
+  // Enable FairMonitor
+  FairMonitor::GetMonitor()->EnableMonitor(kFALSE);
+  // ------------------------------------------------------------------------
+
   CbmCheckEvents* checker = new CbmCheckEvents();
   run->AddTask(checker);
 
   // -----  Parameter database   --------------------------------------------
- 
+
    FairRuntimeDb* rtdb = run->GetRuntimeDb();
    Bool_t kParameterMerged = kTRUE;
    FairParRootFileIo* parIo2 = new FairParRootFileIo(kParameterMerged);
    parIo2->open(ParFile.Data(), "UPDATE");
    parIo2->print();
    rtdb->setFirstInput(parIo2);
-  
+
    FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
    parIo1->open(parFileList, "in");
    parIo1->print();
@@ -70,5 +85,34 @@ void check_events(Int_t nEvents = 10, UInt_t uRunId=0, TString inDir="data/", TS
   run->Run(0, nEvents);
   //tofClust->Finish();
   // ------------------------------------------------------------------------
-  // default display 
+  // default display
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  cout << endl << endl;
+  cout << "Macro finished succesfully." << endl;
+  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
+  cout << endl;
+  // ------------------------------------------------------------------------
+  // Extract the maximal used memory an add is as Dart measurement
+  // This line is filtered by CTest and the value send to CDash
+  FairSystemInfo sysInfo;
+  Float_t maxMemory=sysInfo.GetMaxMemory();
+  cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
+  cout << maxMemory;
+  cout << "</DartMeasurement>" << endl;
+
+  Float_t cpuUsage=ctime/rtime;
+  cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
+  cout << cpuUsage;
+  cout << "</DartMeasurement>" << endl;
+
+  FairMonitor* tempMon = FairMonitor::GetMonitor();
+  tempMon->Print();
+
+//  RemoveGeoManager();
+  cout << " Test passed" << endl;
+  cout << " All ok " << endl;
 }
diff --git a/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C b/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C
index f15db00423b0709d01474249b50e77f6029a4f49..c332895482e186f5002b41e71b5fddb79ce2c96a 100644
--- a/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C
+++ b/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C
@@ -232,15 +232,24 @@ void unpack_tsa_mcbm(TString inFile = "", UInt_t uRunId = 0, UInt_t nrEvents=0,
         unpacker_much->SetTimeOffsetNsAsic( 34,       0.0 ); // Run 384, DPB 5 ASIC 4
         unpacker_much->SetTimeOffsetNsAsic( 35,       0.0 ); // Run 384, DPB 5 ASIC 5
 
+        unpacker_psd->SetTimeOffsetNs( -180.0 );
+
         break;
      } // 384
 
+     case 365:
+     {
+        unpacker_psd->SetTimeOffsetNs( -1007.0 );
+        break;
+     }
+
      default:
         break;
   } // switch( uRunId )
 
   // --- Source task
   CbmMcbm2018Source* source = new CbmMcbm2018Source();
+  source->SetWriteOutputFlag( kTRUE ); // For writing TS metadata
 
   source->SetFileName(inFile);
 //  source->SetInputDir(inDir);