diff --git a/macro/mcbm/geometry/sts/create_stsgeo_v22a.C b/macro/mcbm/geometry/sts/create_stsgeo_v22a.C
index 5a922b4db294d74d8c6fb8ef3108a9c37ed565db..ab51480c3b44e84b65ff97f04a0c02f7046afd46 100644
--- a/macro/mcbm/geometry/sts/create_stsgeo_v22a.C
+++ b/macro/mcbm/geometry/sts/create_stsgeo_v22a.C
@@ -273,6 +273,8 @@ void create_stsgeo_v22a(const char* geoTag = "v22a_mcbm")
   infoFile << "Beam pipe: R3 = " << gkPipeR3 << " cm at z = " << gkPipeZ3 << " cm" << endl;
   // --------------------------------------------------------------------------
 
+  // Load FairRunSim to ensure the correct unit system
+  FairRunSim* sim = new FairRunSim();
 
   // -------   Load media from media file   -----------------------------------
   FairGeoLoader* geoLoad    = new FairGeoLoader("TGeo", "FairGeoLoader");
@@ -946,9 +948,13 @@ void create_stsgeo_v22a(const char* geoTag = "v22a_mcbm")
   gGeoMan->Test();
 
   TFile* geoFile = new TFile(geoFileName, "RECREATE");
-  top->Write();
+  sts->Export(geoFileName);
   cout << endl;
-  cout << "Geometry " << top->GetName() << " written to " << geoFileName << endl;
+  cout << "Geometry " << sts->GetName() << " exported to " << geoFileName << endl;
+  geoFile->Close();
+
+  geoFile = new TFile(geoFileName, "UPDATE");
+  stsTrans->Write();
   geoFile->Close();
 
   TString geoFileName_ = "sts_";
@@ -958,18 +964,17 @@ void create_stsgeo_v22a(const char* geoTag = "v22a_mcbm")
   gGeoMan->Write();  // use this is you want GeoManager format in the output
   geoFile->Close();
 
-  TString geoFileName__ = "sts_";
-  geoFileName_          = geoFileName__ + geoTag + "-geo.root";
-  sts->Export(geoFileName_);
-
-  geoFile = new TFile(geoFileName_, "UPDATE");
-  stsTrans->Write();
-  geoFile->Close();
-
   top->Draw("ogl");
   gGeoManager->SetVisLevel(6);
 
   infoFile.close();
+
+  // create medialist for this geometry
+  TString createmedialist = gSystem->Getenv("VMCWORKDIR");
+  createmedialist += "/macro/geometry/create_medialist.C";
+  std::cout << "Loading macro " << createmedialist << std::endl;
+  gROOT->LoadMacro(createmedialist);
+  gROOT->ProcessLine("create_medialist(\"\", false)");
 }
 // ============================================================================
 // ======                   End of main function                          =====
diff --git a/macro/mcbm/geometry/sts/create_stsgeo_v22b.C b/macro/mcbm/geometry/sts/create_stsgeo_v22b.C
index 98d40f562636628c4a4c12d89b3bc565d529d11c..3b6de175a14a4eb9936dd9bae13516185820350f 100644
--- a/macro/mcbm/geometry/sts/create_stsgeo_v22b.C
+++ b/macro/mcbm/geometry/sts/create_stsgeo_v22b.C
@@ -283,6 +283,8 @@ void create_stsgeo_v22b(const char* geoTag = "v22b_mcbm")
   infoFile << "Beam pipe: R3 = " << gkPipeR3 << " cm at z = " << gkPipeZ3 << " cm" << endl;
   // --------------------------------------------------------------------------
 
+  // Load FairRunSim to ensure the correct unit system
+  FairRunSim* sim = new FairRunSim();
 
   // -------   Load media from media file   -----------------------------------
   FairGeoLoader* geoLoad    = new FairGeoLoader("TGeo", "FairGeoLoader");
@@ -955,9 +957,13 @@ void create_stsgeo_v22b(const char* geoTag = "v22b_mcbm")
   gGeoMan->Test();
 
   TFile* geoFile = new TFile(geoFileName, "RECREATE");
-  top->Write();
+  sts->Export(geoFileName);
   cout << endl;
-  cout << "Geometry " << top->GetName() << " written to " << geoFileName << endl;
+  cout << "Geometry " << sts->GetName() << " exported to " << geoFileName << endl;
+  geoFile->Close();
+
+  geoFile = new TFile(geoFileName, "UPDATE");
+  stsTrans->Write();
   geoFile->Close();
 
   TString geoFileName_ = "sts_";
@@ -967,18 +973,17 @@ void create_stsgeo_v22b(const char* geoTag = "v22b_mcbm")
   gGeoMan->Write();  // use this is you want GeoManager format in the output
   geoFile->Close();
 
-  TString geoFileName__ = "sts_";
-  geoFileName_          = geoFileName__ + geoTag + "-geo.root";
-  sts->Export(geoFileName_);
-
-  geoFile = new TFile(geoFileName_, "UPDATE");
-  stsTrans->Write();
-  geoFile->Close();
-
   top->Draw("ogl");
   gGeoManager->SetVisLevel(6);
 
   infoFile.close();
+
+  // create medialist for this geometry
+  TString createmedialist = gSystem->Getenv("VMCWORKDIR");
+  createmedialist += "/macro/geometry/create_medialist.C";
+  std::cout << "Loading macro " << createmedialist << std::endl;
+  gROOT->LoadMacro(createmedialist);
+  gROOT->ProcessLine("create_medialist(\"\", false)");
 }
 // ============================================================================
 // ======                   End of main function                          =====
diff --git a/macro/mcbm/geometry/sts/create_stsgeo_v22c.C b/macro/mcbm/geometry/sts/create_stsgeo_v22c.C
index 6e026952ed117c4025c3d0cf811e3c8cfcd105b4..9d91975d7a5c2493b2fa9e609a90369971e7e771 100644
--- a/macro/mcbm/geometry/sts/create_stsgeo_v22c.C
+++ b/macro/mcbm/geometry/sts/create_stsgeo_v22c.C
@@ -284,6 +284,8 @@ void create_stsgeo_v22c(const char* geoTag = "v22c_mcbm")
   infoFile << "Beam pipe: R3 = " << gkPipeR3 << " cm at z = " << gkPipeZ3 << " cm" << endl;
   // --------------------------------------------------------------------------
 
+  // Load FairRunSim to ensure the correct unit system
+  FairRunSim* sim = new FairRunSim();
 
   // -------   Load media from media file   -----------------------------------
   FairGeoLoader* geoLoad    = new FairGeoLoader("TGeo", "FairGeoLoader");
@@ -956,9 +958,13 @@ void create_stsgeo_v22c(const char* geoTag = "v22c_mcbm")
   gGeoMan->Test();
 
   TFile* geoFile = new TFile(geoFileName, "RECREATE");
-  top->Write();
+  sts->Export(geoFileName);
   cout << endl;
-  cout << "Geometry " << top->GetName() << " written to " << geoFileName << endl;
+  cout << "Geometry " << sts->GetName() << " exported to " << geoFileName << endl;
+  geoFile->Close();
+
+  geoFile = new TFile(geoFileName, "UPDATE");
+  stsTrans->Write();
   geoFile->Close();
 
   TString geoFileName_ = "sts_";
@@ -968,18 +974,17 @@ void create_stsgeo_v22c(const char* geoTag = "v22c_mcbm")
   gGeoMan->Write();  // use this is you want GeoManager format in the output
   geoFile->Close();
 
-  TString geoFileName__ = "sts_";
-  geoFileName_          = geoFileName__ + geoTag + "-geo.root";
-  sts->Export(geoFileName_);
-
-  geoFile = new TFile(geoFileName_, "UPDATE");
-  stsTrans->Write();
-  geoFile->Close();
-
   top->Draw("ogl");
   gGeoManager->SetVisLevel(6);
 
   infoFile.close();
+
+  // create medialist for this geometry
+  TString createmedialist = gSystem->Getenv("VMCWORKDIR");
+  createmedialist += "/macro/geometry/create_medialist.C";
+  std::cout << "Loading macro " << createmedialist << std::endl;
+  gROOT->LoadMacro(createmedialist);
+  gROOT->ProcessLine("create_medialist(\"\", false)");
 }
 // ============================================================================
 // ======                   End of main function                          =====