diff --git a/analysis/detectors/psd/CbmPsdMCbmQaReal.cxx b/analysis/detectors/psd/CbmPsdMCbmQaReal.cxx
index 2abf885349d41671494788a702c3d315954958c8..47fbb5d9dc1e61aa4e0de769f397557465798a43 100644
--- a/analysis/detectors/psd/CbmPsdMCbmQaReal.cxx
+++ b/analysis/detectors/psd/CbmPsdMCbmQaReal.cxx
@@ -485,7 +485,10 @@ void CbmPsdMCbmQaReal::Finish() {
   }
 
   if (this->fDoWriteHistToFile) {
-    TDirectory* oldir = gDirectory;
+    /// Save old global file and folder pointer to avoid messing with FairRoot
+    TFile* oldFile     = gFile;
+    TDirectory* oldDir = gDirectory;
+
     std::string s     = fOutputDir + "/RecoHists.root";
     TFile* outFile    = new TFile(s.c_str(), "RECREATE");
     if (outFile->IsOpen()) {
@@ -494,7 +497,9 @@ void CbmPsdMCbmQaReal::Finish() {
       outFile->Close();
       std::cout << "Done!" << std::endl;
     }
-    gDirectory->cd(oldir->GetPath());
+    /// Restore old global file and folder pointer to avoid messing with FairRoot
+    gFile      = oldFile;
+    gDirectory = oldDir;
   }
 }
 
@@ -503,6 +508,10 @@ void CbmPsdMCbmQaReal::DrawFromFile(const string& fileName,
                                     const string& outputDir) {
   fOutputDir = outputDir;
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   if (fHM != nullptr) delete fHM;
 
   fHM         = new CbmHistManager();
@@ -511,6 +520,10 @@ void CbmPsdMCbmQaReal::DrawFromFile(const string& fileName,
   DrawHist();
 
   fHM->SaveCanvasToImage(fOutputDir);
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 
diff --git a/reco/detectors/psd/CbmPsdHitProducer.cxx b/reco/detectors/psd/CbmPsdHitProducer.cxx
index 1554899204dc84b611236776919d4657f1996649..00e10162044b630f0217ba0118e94fc9a42dfbb5 100644
--- a/reco/detectors/psd/CbmPsdHitProducer.cxx
+++ b/reco/detectors/psd/CbmPsdHitProducer.cxx
@@ -142,7 +142,7 @@ void CbmPsdHitProducer::Exec(Option_t* /*opt*/) {
 
   /*
   for (Int_t imod=0; imod<NPsdMod; imod++) //marina
-  {              
+  {
     if (edep[imod]>0.)
     {
       new ((*fHitArray)[fNHits]) CbmPsdHit(imod+1, edep[imod]);
@@ -160,9 +160,19 @@ void CbmPsdHitProducer::Exec(Option_t* /*opt*/) {
 // -------------------------------------------------------------------------
 void CbmPsdHitProducer::Finish() {
   cout << " CbmPsdHitProducer::Finish() " << endl;
+
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* outfile = new TFile("EdepHistos.root", "RECREATE");
   outfile->cd();
   fhModXNewEn->Write();
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
   //outfile->Close();                     //SELIM
 }
 
diff --git a/sim/detectors/psd/CbmPsdMC.cxx b/sim/detectors/psd/CbmPsdMC.cxx
index 7464c792f7321b94e3b26d43e34a49dc48fef9dc..0e5cf56dc4f4e18757f6cba0a8f31fc42f3f3a0b 100644
--- a/sim/detectors/psd/CbmPsdMC.cxx
+++ b/sim/detectors/psd/CbmPsdMC.cxx
@@ -71,6 +71,10 @@ void CbmPsdMC::ConstructGeometry() {
   }
 
   // --- Look for PSD volume and transformation matrix in geometry file
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* geoFile = new TFile(fgeoName);
   assert ( geoFile );
   TKey* key = nullptr;
@@ -122,9 +126,15 @@ void CbmPsdMC::ConstructGeometry() {
   for (Int_t i=0; i<psdVolume->GetNdaughters(); ++i)
     RegisterSensitiveVolumes(psdVolume->GetNode(i));
 //   RegisterSensitiveVolumes(psdVolume->GetNode(0));
-  
+
   LOG(debug) << GetName() << ": " << fNbOfSensitiveVol
              << " sensitive volumes";
+             *
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
+
+  geoFile->Close();
 */
 
   LOG(info) << "Importing PSD geometry from ROOT file " << fgeoName.Data();