diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx
index a40e34f6975c1036427a079e8aaa310bde53b3f9..87676b0b8c6e21875682cb35989991bd48dee8d7 100644
--- a/sim/transport/steer/CbmTransport.cxx
+++ b/sim/transport/steer/CbmTransport.cxx
@@ -711,19 +711,24 @@ void CbmTransport::SetRandomEventPlane(Double_t phiMin, Double_t phiMax) { fEven
 
 
 // -----   Set output file name   -------------------------------------------
-void CbmTransport::SetOutFileName(TString fileName)
+void CbmTransport::SetOutFileName(TString fileName, Bool_t overwrite)
 {
 
-  // Check for the directory
-  std::string name = fileName.Data();
-  Int_t found      = name.find_last_of("/");
-  if (found >= 0) {
-    TString outDir = name.substr(0, found);
-    if (gSystem->AccessPathName(outDir.Data())) {
-      LOG(fatal) << GetName() << ": Output directory " << outDir << " does not exist!";
-      return;
-    }  //? Directory of output file does not exist
-  }    //? File name contains directory path
+  // --- Protect against overwriting an existing file
+  if ((!gSystem->AccessPathName(fileName.Data())) && (!overwrite)) {
+    LOG(fatal) << fName << ": output file " << fileName << " already exists!";
+    return;
+  }
+
+  // --- If the directory does not yet exist, create it
+  const char* directory = gSystem->DirName(fileName.Data());
+  if (gSystem->AccessPathName(directory)) {
+    Int_t success = gSystem->mkdir(directory, kTRUE);
+    if (success == -1)
+      LOG(fatal) << fName << ": output directory " << directory << " does not exist and cannot be created!";
+    else
+      LOG(info) << fName << ": created directory " << directory;
+  }
 
   fOutFileName = fileName;
 }
diff --git a/sim/transport/steer/CbmTransport.h b/sim/transport/steer/CbmTransport.h
index 5baba55bdd758eb44f93af087e41268699c69528..8a2d65a129b95adc79034cd3342cef052bf7d76c 100644
--- a/sim/transport/steer/CbmTransport.h
+++ b/sim/transport/steer/CbmTransport.h
@@ -286,10 +286,13 @@ public:
                  Double_t z = 0., Double_t rot = 0.);
 
 
-  /** @brief Define output file name
-     ** @param name  Name for output file
+  /** @brief Set the output file name
+     ** @param path  Name of output file
+     ** @param overwrite Overwrite output file if already existing
+     **
+     ** If the directory of the file does not exist, it will be created.
      **/
-  void SetOutFileName(TString name);
+  void SetOutFileName(TString name, Bool_t overwrite = kFALSE);
 
 
   /** @brief Activate random event plane