diff --git a/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx b/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
index f03ff7708dc27a3bc3df1144f62e1c0457416016..976600540789537a51f23d8995e25325ec0b3a93 100644
--- a/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
+++ b/fles/mcbm2018/monitor/CbmCheckDataFormatGdpb2018.cxx
@@ -1276,11 +1276,12 @@ void CbmCheckDataFormatGdpb2018::Reset() {}
 void CbmCheckDataFormatGdpb2018::Finish() { SaveAllHistos(fsHistoFilename); }
 
 void CbmCheckDataFormatGdpb2018::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1366,7 +1367,9 @@ void CbmCheckDataFormatGdpb2018::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
index 05a137b5d8145afd4f3e745bdccf2abf71ddd9ad..c5708cde3e152d7aca15b967e602fcc6656f3dbd 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorDataRates.cxx
@@ -600,11 +600,12 @@ void CbmMcbm2018MonitorDataRates::Reset() {}
 void CbmMcbm2018MonitorDataRates::Finish() { SaveAllHistos(fsHistoFilename); }
 
 void CbmMcbm2018MonitorDataRates::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -645,7 +646,9 @@ void CbmMcbm2018MonitorDataRates::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
index 4f3dab3d38d10dae8ccf8e108d0edd94ea493d1d..6c6b2b821f92ab9d009fc73260f2d176e591a4d5 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmPulser.cxx
@@ -1398,11 +1398,12 @@ void CbmMcbm2018MonitorMcbmPulser::Finish() {
 
 
 void CbmMcbm2018MonitorMcbmPulser::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = nullptr;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = nullptr;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1441,7 +1442,9 @@ void CbmMcbm2018MonitorMcbmPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorMcbmPulser::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
index 1108ad79ed79f46cf7c58113d1bc43cab7ad6609..3949008b903f928bf42a45988382814cf4f63343 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmRate.cxx
@@ -1285,11 +1285,12 @@ void CbmMcbm2018MonitorMcbmRate::Finish() {
 
 
 void CbmMcbm2018MonitorMcbmRate::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = nullptr;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = nullptr;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1331,7 +1332,9 @@ void CbmMcbm2018MonitorMcbmRate::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorMcbmRate::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
index 247ec608a8823ddb2787a861a5c8998421a1358a..a2932495aa7e3339ec13c3d0caf41daaad6a1a4d 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMcbmSync.cxx
@@ -1536,11 +1536,12 @@ void CbmMcbm2018MonitorMcbmSync::Finish() {
 
 
 void CbmMcbm2018MonitorMcbmSync::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = nullptr;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = nullptr;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1591,7 +1592,9 @@ void CbmMcbm2018MonitorMcbmSync::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorMcbmSync::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
index 9e38a2ff6b0f393606786db8a9fb73f32a0563a1..7f87df29a2865481fc162aa1720130fb41bff486 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuch.cxx
@@ -1951,11 +1951,12 @@ void CbmMcbm2018MonitorMuch::Finish() {
 
 
 void CbmMcbm2018MonitorMuch::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -2059,7 +2060,9 @@ void CbmMcbm2018MonitorMuch::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorMuch::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
index 863a37392678ca0e162a769aa0d9729f32215964..9f09fc3cab3b6cbc0f62078448b85bba244145e8 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorMuchLite.cxx
@@ -1566,11 +1566,12 @@ void CbmMcbm2018MonitorMuchLite::Finish() {
 
 
 void CbmMcbm2018MonitorMuchLite::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1652,7 +1653,9 @@ void CbmMcbm2018MonitorMuchLite::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
index cd054078870b2f7fdb42e6be2db30deac7a8885f..71c83655ba2db2be80eb0cac53f14124425c62ec 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorSts.cxx
@@ -2567,11 +2567,12 @@ void CbmMcbm2018MonitorSts::Finish() {
 
 
 void CbmMcbm2018MonitorSts::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -2702,7 +2703,9 @@ void CbmMcbm2018MonitorSts::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorSts::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
index 43b87d097ec1f0ecefeb7165258ff441b42e5d9c..b548473046dd41078926eeb9770761d1547a6fe9 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsPulser.cxx
@@ -1332,11 +1332,12 @@ void CbmCosy2018MonitorPulser::Finish() {
 
 
 void CbmCosy2018MonitorPulser::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1402,7 +1403,9 @@ void CbmCosy2018MonitorPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmCosy2018MonitorPulser::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
index bd37e5a2cb4b0af80c8bf6493cd1d4837ca18827..bb8f8d5be107e47b7a178581c38189d5173c373b 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorStsSync.cxx
@@ -1800,11 +1800,12 @@ void CbmMcbm2018MonitorStsSync::Finish() {
 }
 
 void CbmMcbm2018MonitorStsSync::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1896,15 +1897,18 @@ void CbmMcbm2018MonitorStsSync::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorStsSync::SavePulserHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1927,7 +1931,9 @@ void CbmMcbm2018MonitorStsSync::SavePulserHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 void CbmMcbm2018MonitorStsSync::ResetAllHistos() {
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskHodo.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskHodo.cxx
index 1d79c996c1035d75f978069dc8e8811f29f7512b..91528178a0058162ba34dc9d7d1456b8f92309ce 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskHodo.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskHodo.cxx
@@ -219,11 +219,12 @@ Bool_t CbmMcbm2018MonitorTaskHodo::SaveHistograms() {
   std::vector<std::pair<TCanvas*, std::string>> vCanvas =
     fMonitorAlgo->GetCanvasVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  // Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   // open separate histo file in recreate mode
   histoFile = new TFile("data/HistosMonitorHodo.root", "RECREATE");
 
@@ -256,8 +257,10 @@ Bool_t CbmMcbm2018MonitorTaskHodo::SaveHistograms() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  // Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 
   return kTRUE;
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx
index b2f808ea9275c91f0cf206d2a8ba246cff2dc501..6423306e8ab623f155d2902f19b7acb99deb45d7 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskPsd.cxx
@@ -188,11 +188,12 @@ void CbmMcbm2018MonitorTaskPsd::Finish() {
   std::vector<std::pair<TNamed*, std::string>> vHistos =
     fMonitorAlgo->GetHistoVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  // Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   // open separate histo file in recreate mode
   histoFile = new TFile(fsHistoFileName, "RECREATE");
   histoFile->cd();
@@ -210,8 +211,10 @@ void CbmMcbm2018MonitorTaskPsd::Finish() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  // Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskT0.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskT0.cxx
index 135b85d7d2dfa21aba42498cfa3de02a7dad743a..8f08a21cf891a18dda25381b26afab7ea0cf613d 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskT0.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskT0.cxx
@@ -186,11 +186,12 @@ void CbmMcbm2018MonitorTaskT0::Finish() {
   std::vector<std::pair<TNamed*, std::string>> vHistos =
     fMonitorAlgo->GetHistoVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  // Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   // open separate histo file in recreate mode
   histoFile = new TFile(fsHistoFileName, "RECREATE");
   histoFile->cd();
@@ -208,8 +209,10 @@ void CbmMcbm2018MonitorTaskT0::Finish() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  // Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTof.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTof.cxx
index 1bda1f04879e35931ac693abe6829b892af3126b..3574413d5aae8722f6fa470faac9a6ae4458e764 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTof.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTof.cxx
@@ -197,11 +197,12 @@ Bool_t CbmMcbm2018MonitorTaskTof::SaveHistograms() {
   std::vector<std::pair<TCanvas*, std::string>> vCanvas =
     fMonitorAlgo->GetCanvasVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  // Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   // open separate histo file in recreate mode
   histoFile = new TFile(fsHistoFileName, "RECREATE");
 
@@ -232,8 +233,10 @@ Bool_t CbmMcbm2018MonitorTaskTof::SaveHistograms() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  // Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 
   return kTRUE;
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTofPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTofPulser.cxx
index 53cd020db4d211d98f5ccd1e7d7f22166ba74a88..23353307dab9e26497c7001259cac508b62338ce 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTofPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTaskTofPulser.cxx
@@ -202,11 +202,12 @@ Bool_t CbmMcbm2018MonitorTaskTofPulser::SaveHistograms() {
   std::vector<std::pair<TCanvas*, std::string>> vCanvas =
     fMonitorPulserAlgo->GetCanvasVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  // Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   // open separate histo file in recreate mode
   histoFile = new TFile(fsHistoFileName, "RECREATE");
 
@@ -237,8 +238,10 @@ Bool_t CbmMcbm2018MonitorTaskTofPulser::SaveHistograms() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  // Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 
   return kTRUE;
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
index 3439cff4b06a069a89502325d4d55fd15fb160ed..c11bcab45a79f4e4797e52f44345993fd0438269 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTof.cxx
@@ -3377,11 +3377,12 @@ void CbmMcbm2018MonitorTof::Finish() {
 }
 
 void CbmMcbm2018MonitorTof::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -3562,12 +3563,9 @@ void CbmMcbm2018MonitorTof::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
-  }  // if( "" != sFileName )
-  if ("" != sFileName) {
-    // Restore original directory position
-    histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
index c867ad64242fb9d05f5a28037b1c3fd7bc91eecb..e4e2819075b6fc662682465add6369ee037e3cde 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018MonitorTofPulser.cxx
@@ -1593,11 +1593,12 @@ void CbmMcbm2018MonitorTofPulser::Finish() {
 }
 
 void CbmMcbm2018MonitorTofPulser::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1665,12 +1666,9 @@ void CbmMcbm2018MonitorTofPulser::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
-  }  // if( "" != sFileName )
-  if ("" != sFileName) {
-    // Restore original directory position
-    histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx b/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
index 377c0a251dbb04275bf7134242fd700e5ab008d8..2657d60db61560c77b974b7d5cb8d2715b526c7b 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018TofFeeThr.cxx
@@ -514,11 +514,12 @@ void CbmMcbm2018TofFeeThr::Finish() {
 }
 
 void CbmMcbm2018TofFeeThr::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -527,7 +528,9 @@ void CbmMcbm2018TofFeeThr::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx b/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
index 030d677337371c88f76fc32480026d2035441592..d893bc5fe2b952e1cf84a1e001269e6b84a9a09d 100644
--- a/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
+++ b/fles/mcbm2018/monitor/CbmMcbm2018TofTestFee.cxx
@@ -1817,11 +1817,12 @@ void CbmMcbm2018TofTestFee::Finish() {
 }
 
 void CbmMcbm2018TofTestFee::SaveAllHistos(TString sFileName) {
-  TDirectory* oldDir = NULL;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* histoFile   = NULL;
   if ("" != sFileName) {
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
     // open separate histo file in recreate mode
     histoFile = new TFile(sFileName, "RECREATE");
     histoFile->cd();
@@ -1913,12 +1914,9 @@ void CbmMcbm2018TofTestFee::SaveAllHistos(TString sFileName) {
   if ("" != sFileName) {
     // Restore original directory position
     histoFile->Close();
-    oldDir->cd();
-  }  // if( "" != sFileName )
-  if ("" != sFileName) {
-    // Restore original directory position
-    histoFile->Close();
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }  // if( "" != sFileName )
 }
 
diff --git a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
index e56e4ef92534de4c4d159e402e40c99073cfa8d4..1216bf30e5dc7c8859819a47217e1b53518f779d 100644
--- a/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbm2019TimeWinEventBuilderTask.cxx
@@ -104,11 +104,12 @@ void CbmMcbm2019TimeWinEventBuilderTask::SaveHistos() {
   std::vector<std::pair<TNamed*, std::string>> vHistos =
     fpAlgo->GetHistoVector();
 
-  /// (Re-)Create ROOT file to store the histos
-  TDirectory* oldDir = NULL;
-  TFile* histoFile   = NULL;
-  /// Store current directory position to allow restore later
-  oldDir = gDirectory;
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
+  TFile* histoFile = nullptr;
+
   /// open separate histo file in recreate mode
   histoFile = new TFile(fsOutFileName, "RECREATE");
   histoFile->cd();
@@ -126,8 +127,10 @@ void CbmMcbm2019TimeWinEventBuilderTask::SaveHistos() {
     histoFile->cd();
   }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-  /// Restore original directory position
-  oldDir->cd();
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   histoFile->Close();
 }
 //----------------------------------------------------------------------
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
index cfb880bbbab5ad9c892f869db97012fe28593055..7fa222bf489b7558afbbae51da5b5f6da6a2a20b 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingTask.cxx
@@ -72,10 +72,12 @@ void CbmMcbmCheckTimingTask::SaveHistos() {
    std::vector< std::pair< TNamed *, std::string > > vHistos = fpAlgo->GetHistoVector();
 
    /// (Re-)Create ROOT file to store the histos
-   TDirectory * oldDir = NULL;
-   TFile * histoFile = NULL;
-   /// Store current directory position to allow restore later
-   oldDir = gDirectory;
+   TFile* histoFile   = nullptr;
+
+   /// Save old global file and folder pointer to avoid messing with FairRoot
+   TFile* oldFile     = gFile;
+   TDirectory* oldDir = gDirectory;
+
    /// open separate histo file in recreate mode
    histoFile = new TFile( fsOutFileName , "RECREATE");
    histoFile->cd();
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskHodo.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskHodo.cxx
index 50ab822581228a9a88d92ee05e889d3b0f0a6743..a9e982ad81695cf70b63e3d8fa21f0c752b72189 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskHodo.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskHodo.cxx
@@ -267,11 +267,12 @@ void CbmMcbm2018UnpackerTaskHodo::Finish() {
       fUnpackerAlgoSts->GetHistoVector();
     vHistos.insert(vHistos.end(), vHistosSts.begin(), vHistosSts.end());
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerSts.root", "RECREATE");
     histoFile->cd();
@@ -289,8 +290,10 @@ void CbmMcbm2018UnpackerTaskHodo::Finish() {
       histoFile->cd();
     }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-    // Restore original directory position
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskMuch.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskMuch.cxx
index 8ffac75f500c0d1876cc0db95c721cca38918086..42bcf9fb8fbb982160120013479ab3f4f25e23da 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskMuch.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskMuch.cxx
@@ -197,11 +197,12 @@ void CbmMcbm2018UnpackerTaskMuch::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerMuch.root", "RECREATE");
     histoFile->cd();
@@ -219,8 +220,10 @@ void CbmMcbm2018UnpackerTaskMuch::Finish() {
       histoFile->cd();
     }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-    // Restore original directory position
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
index b6c4d6d1b22c6680e85bbb966f63532ebe2e3a51..c6a5e5c4f871ce71307d551e69f7a0e7ac923fd5 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskPsd.cxx
@@ -209,11 +209,12 @@ void CbmMcbm2018UnpackerTaskPsd::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerPsd.root", "RECREATE");
     histoFile->cd();
@@ -233,8 +234,11 @@ void CbmMcbm2018UnpackerTaskPsd::Finish() {
 
     fhArraySize->Write();
     fhArrayCapacity->Write();
-    // Restore original directory position
-    oldDir->cd();
+
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskRich.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskRich.cxx
index d87a4d073b57a5dfb11fe3288df554634979b9a5..13c85b393b74c5204e7b2e27fc49854c6af56054 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskRich.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskRich.cxx
@@ -105,11 +105,12 @@ void CbmMcbm2018UnpackerTaskRich::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerRich.root", "RECREATE");
     histoFile->cd();
@@ -127,8 +128,10 @@ void CbmMcbm2018UnpackerTaskRich::Finish() {
       histoFile->cd();
     }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-    // Restore original directory position
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskSts.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskSts.cxx
index 5462affc2adfffd1276b015925d8c359968a4557..b29bb7e501e8a9372ef3b358b16986637f50e160 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskSts.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskSts.cxx
@@ -203,11 +203,12 @@ void CbmMcbm2018UnpackerTaskSts::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerSts.root", "RECREATE");
     histoFile->cd();
@@ -225,8 +226,10 @@ void CbmMcbm2018UnpackerTaskSts::Finish() {
       histoFile->cd();
     }  // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-    // Restore original directory position
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTof.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTof.cxx
index 4be0c21b4cd03d75ad90975efade99ec6eeab2e5..8046bcb2d9741202e4d0a1bba5f4e092696a917a 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTof.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTof.cxx
@@ -251,11 +251,12 @@ void CbmMcbm2018UnpackerTaskTof::Finish() {
     std::vector<std::pair<TNamed*, std::string>> vHistos =
       fUnpackerAlgo->GetHistoVector();
 
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
+    TFile* histoFile = nullptr;
+
     // open separate histo file in recreate mode
     histoFile = new TFile("data/HistosUnpackerTof.root", "RECREATE");
     histoFile->cd();
@@ -275,8 +276,11 @@ void CbmMcbm2018UnpackerTaskTof::Finish() {
 
     fhArraySize->Write();
     fhArrayCapacity->Write();
-    // Restore original directory position
-    oldDir->cd();
+
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }  // if( kTRUE == fbMonitorMode )
 }
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
index 910bfeaaef80bab9ba5321f3aefb02ce8822b835..7198fe429042f5dd74f6ebef4c8ef11ee4ad9bbf 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerTaskTrdR.cxx
@@ -118,10 +118,12 @@ void CbmMcbm2018UnpackerTaskTrdR::Finish() {
       fUnpackerAlgo->GetHistoVector();
 
     /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = nullptr;
     TFile* histoFile   = nullptr;
-    // Store current directory position to allow restore later
-    oldDir = gDirectory;
+
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
     // open separate histo file in recreate mode
     TString histoFileName = fMonitorHistoFileName;
     histoFile             = new TFile(histoFileName.Data(), "RECREATE");
@@ -136,8 +138,10 @@ void CbmMcbm2018UnpackerTaskTrdR::Finish() {
       vHistos[uHisto].first->Write();
       histoFile->cd();
     }
-    // Restore original directory position
-    oldDir->cd();
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
+
     histoFile->Close();
   }
 }
diff --git a/reco/base/CbmUnpackTask.tmpl b/reco/base/CbmUnpackTask.tmpl
index 08fddecc6ccb849e9804f893daf0d63de8b1f58a..2c22de882e31fbf32dc45e2c9c2fc6ed705b57e5 100644
--- a/reco/base/CbmUnpackTask.tmpl
+++ b/reco/base/CbmUnpackTask.tmpl
@@ -226,10 +226,11 @@ void CbmUnpackTask< TDigi, TAlgo, TParam >::Finish()
       std::vector< std::pair< TNamed *, std::string > > vHistos = fUnpackerAlgo->GetHistoVector();
 
       /// (Re-)Create ROOT file to store the histos
-      TDirectory * oldDir = NULL;
-      TFile * histoFile = NULL;
-      // Store current directory position to allow restore later
-      oldDir = gDirectory;
+      TFile * histoFile = nullptr;
+      /// Save old global file and folder pointer to avoid messing with FairRoot
+      TFile* oldFile     = gFile;
+      TDirectory* oldDir = gDirectory;
+
       // open separate histo file in recreate mode
       histoFile = new TFile( "data/HistosUnpackerSts.root" , "RECREATE");
       histoFile->cd();
@@ -249,9 +250,10 @@ void CbmUnpackTask< TDigi, TAlgo, TParam >::Finish()
          histoFile->cd();
       } // for( UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto )
 
-     // Restore original directory position
-     oldDir->cd();
-     histoFile->Close();
+      /// Restore old global file and folder pointer to avoid messing with FairRoot
+      gFile      = oldFile;
+      gDirectory = oldDir;
+      histoFile->Close();
    } // if( kTRUE == fbMonitorMode )
 }