diff --git a/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx b/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx
index b091e9c1ac9547b338b78f38d6bb54db0f2a0d88..304ebfe836a04da5c623575630c1fc7957c7c538 100644
--- a/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx
+++ b/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx
@@ -17,6 +17,7 @@
 #include <TH2.h>
 #include <THttpServer.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <cstdint>
 #include <iomanip>
@@ -880,6 +881,11 @@ Bool_t CbmMuchUnpackMonitor::Init(CbmMuchUnpackPar* parset)
   // Get Infos from the parset
   fNrElinksPerDpb = parset->GetNbElinkPerDpb();
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   /// Trigger histo creation on all associated monitors
   CreateHistograms(parset);
   if (fDebugMode) CreateDebugHistograms(parset);
@@ -887,6 +893,10 @@ Bool_t CbmMuchUnpackMonitor::Init(CbmMuchUnpackPar* parset)
   /// Trigger Canvas creation on all associated monitors
   DrawCanvases();
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
   std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector();
 
diff --git a/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx b/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx
index 6bdd8077970c902a2a2da1763d34024e4d8143d6..6e31dec262515e438cd4455d788acba91e4d4078 100644
--- a/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx
+++ b/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx
@@ -16,6 +16,7 @@
 #include <TH2.h>
 #include <THttpServer.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <cstdint>
 #include <iomanip>
@@ -113,10 +114,20 @@ void CbmRichUnpackMonitor::PrintDebugInfo(const uint64_t MsStartTime, const size
 Bool_t CbmRichUnpackMonitor::Init(CbmMcbm2018RichPar* parset)
 {
   pUnpackParameters = parset;
+
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   /// Trigger histo creation on all associated monitors
   CreateHistograms(parset);
   if (fDebugMode) CreateDebugHistograms(parset);
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
   std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector();
 
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx
index 4f872ad8a81bab4ea7c016ed626d3b57acf17598..9ec3266b6d234c360d9fa53cc29ab0ac73ca58ad 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx
@@ -20,7 +20,12 @@ CbmStsUnpackConfig::CbmStsUnpackConfig(std::string detGeoSetupTag, UInt_t runid)
 {
 }
 
-CbmStsUnpackConfig::~CbmStsUnpackConfig() {}
+CbmStsUnpackConfig::~CbmStsUnpackConfig()
+{
+  LOG(debug) << fName << "::~CbmStsUnpackConfig";
+  fWalkMap.clear();
+  LOG(debug) << fName << "::~CbmStsUnpackConfig done";
+}
 
 // ---- Init ----
 void CbmStsUnpackConfig::InitAlgo()
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx
index 7b7181542a62111d45e6ecd474fa3f9f2588bd51..d630569488f9fb8406a59b52223680d5e269dc35 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx
@@ -17,6 +17,7 @@
 #include <TH2.h>
 #include <THttpServer.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <cstdint>
 #include <iomanip>
@@ -879,6 +880,11 @@ Bool_t CbmStsUnpackMonitor::Init(CbmMcbm2018StsPar* parset)
   // Get Infos from the parset
   fNrElinksPerDpb = parset->GetNbElinkPerDpb();
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   /// Trigger histo creation on all associated monitors
   CreateHistograms(parset);
   if (fDebugMode) CreateDebugHistograms(parset);
@@ -886,6 +892,10 @@ Bool_t CbmStsUnpackMonitor::Init(CbmMcbm2018StsPar* parset)
   /// Trigger Canvas creation on all associated monitors
   DrawCanvases();
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
   std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector();
 
diff --git a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx
index c50b003b7a3af9d000a596713ea37db7813f990c..9acaff4212c920bf5e8d2720a581e9b1102e831c 100644
--- a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx
+++ b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx
@@ -20,6 +20,7 @@
 #include <THttpServer.h>
 #include <TPaveStats.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <cstdint>
 #include <iomanip>
@@ -1312,6 +1313,11 @@ Bool_t CbmTofUnpackMonitor::Init(CbmMcbm2018TofPar* parset)
   fuNbOfChannelsPerComp = fuNbOfGet4PerComp * fuNbOfChannelsPerGet4;
   fuNbOfGet4InSyst      = fuNbOfComps * fuNbOfGet4PerComp;
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   /// Trigger histo creation on all associated monitors
   CreateHistograms();
   DrawCanvases();
@@ -1320,6 +1326,10 @@ Bool_t CbmTofUnpackMonitor::Init(CbmMcbm2018TofPar* parset)
     DrawBmonCanvases();
   }
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
   std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector();
 
@@ -1402,6 +1412,16 @@ void CbmTofUnpackMonitor::Finish()
 
   histoFile->Close();
   delete histoFile;
+
+  /// Cleanup memory
+  for (auto iter = fvpAllHistoPointers.begin(); iter != fvpAllHistoPointers.end();) {
+    if (iter->first != nullptr) { delete iter->first; }
+    iter = fvpAllHistoPointers.erase(iter);
+  }
+  for (auto iter = fvpAllCanvasPointers.begin(); iter != fvpAllCanvasPointers.end();) {
+    if (iter->first != nullptr) { delete iter->first; }
+    iter = fvpAllCanvasPointers.erase(iter);
+  }
 }
 
 
diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx
index 8860363d1f800122e06bf616c6e1b6e365a3a1fb..e41945bf02e249ed31be86f61511ab0e49361f0f 100644
--- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx
+++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx
@@ -18,6 +18,7 @@
 #include <TH1.h>
 #include <TH2.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <boost/math/special_functions/math_fwd.hpp>
 
@@ -98,8 +99,18 @@ Bool_t CbmTrdUnpackFaspMonitor::Init()
     else
       it++;
   }
+
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   createHistos();
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   return kTRUE;
 }
 
diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx
index f203df472fc7c7d9d5931bf900fba368b272e366..b294a1fb4dcea089fe52f3959daeecfd9103b2c9 100644
--- a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx
+++ b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx
@@ -19,6 +19,7 @@
 #include <TH1.h>
 #include <TH2.h>
 #include <TProfile.h>
+#include <TROOT.h>
 
 #include <boost/math/special_functions/math_fwd.hpp>
 
@@ -176,8 +177,17 @@ Bool_t CbmTrdUnpackMonitor::Init(CbmTrdParSetDigi* digiParSet, CbmTrdParSetAsic*
     fHistoServer = run->GetHttpServer();
   }
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+  gROOT->cd();
+
   createHistos();
 
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   return kTRUE;
 }