diff --git a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
index 8ffa4ccd860fb3a8f37ae45bb544d7e2e6b2eb4c..b2588ba84ef16b18af9084a029cdccbcbe8fae8f 100644
--- a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
+++ b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
@@ -46,7 +46,7 @@ def createDetectorConfigFlags():
 
     # Trench (disabled by default)
     dcf.addFlag('Detector.GeometryTrench',False)
-    dcf.addFlag('Detector.GeometryCavern',          lambda prevFlags : (prevFlags.Detector.GeometryTrench ))
+    dcf.addFlag('Detector.GeometryFaserCavern',     lambda prevFlags : (prevFlags.Detector.GeometryTrench ))
 
     # dcf.addFlag('Detector.GeometryFaser',           lambda prevFlags : (prevFlags.Detector.GeometryDecayVolume or
     #                                                                     prevFlags.Detector.GeometryScintillator or
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
index 5e47a915a1dd2d06baa44642ffa85c8ca1de1e50..af1ed16dcb630fd08948f6a648d9deb6d46756e2 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
@@ -122,6 +122,11 @@ def _setupGeoModel():
 
     geoModelSvc.DetectorTools += [ ecalDetectorTool ]
 
+    if "FASERNU-03" in DDversion:
+        from TrenchGeoModel.TrenchGeoModelConf import TrenchDetectorTool
+        trenchDetectorTool = TrenchDetectorTool( )
+
+        geoModelSvc.DetectorTools += [ trenchDetectorTool ]
 
 
     pass
diff --git a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
index 668af4a0b37dc81a8dff6bbb9f93a843875f7491..3862cc8c601539ad51b4b849ad7d21de4a26c82f 100644
--- a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
+++ b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
@@ -60,13 +60,19 @@ void TrenchDetectorFactory::create(GeoPhysVol *world)
     }
 
     std::string resolvedFile = PathResolver::find_file(gdmlFile, "XMLPATH", PathResolver::RecursiveSearch);
+
+    XMLHandlerStore::GetHandlerStore()->clear();
+
+    GDMLController controller {"TrenchGDMLController"};
+
     std::cout << "creating parser" << std::endl;
     XercesParser xercesParser;
+
     std::cout << "parsing " << resolvedFile << std::endl;
     xercesParser.ParseFileAndNavigate(resolvedFile);
     std::cout << "done parsing " << resolvedFile << std::endl;
 
-    const GeoLogVol* trenchLog  = m_controller.retrieveLogicalVolume("Trench").first;
+    const GeoLogVol* trenchLog  = controller.retrieveLogicalVolume("Trench").first;
     GeoPhysVol*      trenchPhys = new GeoPhysVol(trenchLog);
     GeoNameTag *tag = new GeoNameTag("Trench");
     world->add(tag);
diff --git a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
index 07dcad5cfe65a4c143e9785fc6f9fcebf9b6ecc9..14cdbaa18bdc8cc941fb894c9085298ec4191f38 100644
--- a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
+++ b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
@@ -49,7 +49,7 @@ class TrenchDetectorFactory : public GeoVDetectorFactory
   std::string              m_versionTag;
   std::string              m_versionNode;
 
-  GDMLController m_controller {"TrenchGDMLController"};
+//   GDMLController m_controller {"TrenchGDMLController"};
 
 };
 
diff --git a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
index 8e9bb2aa14f9c63a5e6e6822f2aeaf8544c2a747..4e6f59490a97baee0020453bb9572fab2b090fbc 100644
--- a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
+++ b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
@@ -228,7 +228,7 @@ def getFASER_RegionCreatorList(ConfigFlags):
     if ConfigFlags.Detector.GeometryFaserCalo:
         regionCreatorList += [EcalPhysicsRegionToolCfg(ConfigFlags)]
     
-    if ConfigFlags.Detector.GeometryCavern:
+    if ConfigFlags.Detector.GeometryFaserCavern:
         regionCreatorList += [CavernPhysicsRegionToolCfg(ConfigFlags)]
 
     return regionCreatorList
diff --git a/graphics/VTI12/VTI12Algs/share/vti12.py b/graphics/VTI12/VTI12Algs/share/vti12.py
index 3878899db88d845cd247602b91faf6a1204cee7b..07a3a97a2ca79ae0f920f1516590a03c55a2a13b 100644
--- a/graphics/VTI12/VTI12Algs/share/vti12.py
+++ b/graphics/VTI12/VTI12Algs/share/vti12.py
@@ -32,7 +32,8 @@ if not 'vp1NoSortDBReplicas' in dir(): vp1NoSortDBReplicas=False
 if not 'vp1FilterEvents' in dir(): vp1FilterEvents=""
 if not 'vp1NoGui' in dir(): vp1NoGui=False
 if not 'vp1SpacePoints' in dir(): vp1SpacePoints=False
-if not 'vp1Cavern' in dir(): vp1Cavern=False
+# if not 'vp1Cavern' in dir(): vp1Cavern=False
+vp1Cavern=True
 if not 'vp1NoAutoConf' in dir(): vp1NoAutoConf=False
 if not 'vp1Trig' in dir(): vp1Trig=False
 if not 'vp1NSW' in dir(): vp1NSW=False
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
index 0ec7c0ef46679d0489a79260c3944c5f584d075d..8aefd8e48631325fefad9f9a25253e5c2f147a13 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
@@ -36,6 +36,7 @@ public:
     Dipole                  = 0x00000040,
 
     Ecal                    = 0x00000080,
+    CavernInfra             = 0x00000100,
     // Pixel                   = 0x00000001, // bit 0
     // SCT                     = 0x00000002, // 1
     // TRT                     = 0x00000004, // 2
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
index dd4c44c1d3e18c91f8d054f513f538f0df365b6a..fbb27a254fe2aa6454d1e5b80060e083804ffc1e 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
@@ -162,6 +162,9 @@ GeoSysController::GeoSysController(IVP1System * sys)
   // Calorimeter
   m_d->subSysCheckBoxMap[VP1GeoFlags::Ecal] = m_d->ui.checkBox_Ecal;
 
+  // Cavern
+  m_d->subSysCheckBoxMap[VP1GeoFlags::CavernInfra] = m_d->ui.checkBox_CavernInfra;
+
   // MISCELLANEOUS
   // OTHER
   m_d->subSysCheckBoxMap[VP1GeoFlags::AllUnrecognisedVolumes] = m_d->ui.checkBox_other;
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
index dfcff299ea576ef32004e9a07b44786d42b57c92..e5c0eed5d6622562488cc3075dc3115659796fcc 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
@@ -336,6 +336,7 @@ QWidget * VP1GeometrySystem::buildController()
     m_d->addSubSystem( VP1GeoFlags::SCT,      "SCT");
     m_d->addSubSystem( VP1GeoFlags::Dipole,   "Dipole");
     m_d->addSubSystem( VP1GeoFlags::Ecal,     "Ecal");
+    m_d->addSubSystem( VP1GeoFlags::CavernInfra, "Cavern");
 
 
 
@@ -1146,6 +1147,13 @@ void VP1GeometrySystem::Imp::createPathExtras(const VolumeHandle* volhandle, QSt
       entries.push("Ecal::Ecal");
       return;
     }
+    case VP1GeoFlags::CavernInfra:{
+      prefix = QString("Cavern::");
+      entries.push("CAVERN::CAVERN");
+      entries.push("Trench::Trench");
+      return;
+    }
+
   case VP1GeoFlags::None:
   case VP1GeoFlags::AllUnrecognisedVolumes:
   default:{
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
index eae1d4d88e5caa8188bb232d1e7f009f21f76024..ea681cdd6fe6b261a90d6701c5b8fa864777b39c 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
@@ -31,7 +31,7 @@
 class VolumeTreeModel::Imp {
 public:
   //Static definitions of sections and which subsystems goes in which sections:
-  enum SECTION { UNKNOWN, NEUTRINO, SCINT, TRACKER, CALO, MISC };
+  enum SECTION { UNKNOWN, NEUTRINO, SCINT, TRACKER, CALO, MISC, CAVERN };
   static std::map<SECTION,QString> section2string;
   static std::map<VP1GeoFlags::SubSystemFlag,SECTION> subsysflag2section;
   static std::map<VP1GeoFlags::SubSystemFlag,QString> subsysflag2string;
@@ -108,6 +108,7 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::section2string[Imp::SCINT] = "Scintillators";
     Imp::section2string[Imp::TRACKER] = "Tracker";
     Imp::section2string[Imp::CALO] = "Calorimeter";
+    Imp::section2string[Imp::CAVERN] = "Cavern";
     Imp::section2string[Imp::MISC] = "Miscellaneous";
   }
   if (Imp::subsysflag2section.empty()) {
@@ -124,6 +125,8 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::defineSubSystem(VP1GeoFlags::Dipole,    "Dipole",    Imp::TRACKER);
     // Calorimeter
     Imp::defineSubSystem(VP1GeoFlags::Ecal,      "Ecal",      Imp::CALO);
+    // Cavern
+    Imp::defineSubSystem(VP1GeoFlags::CavernInfra, "Cavern",  Imp::CAVERN);
   }
 }
 
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
index 97ae89ccb047a66d002994df67885f66db2ae6ea..96c80ac470dedb37562dc2b6d7e1c38ff5bec9c3 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
@@ -43,6 +43,8 @@ public:
   
   static bool hasEcalGeometry();
 
+  static bool hasCavernInfraGeometry();
+
   //Top geomodel volume link (not strictly "JobConfig", but here it is):
   static const GeoPVConstLink * geoModelWorld();//might return 0
 
diff --git a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
index f572356186e0956ab46642654c505141af4aa7bb..bd325e0d306fb4c93cdc23b82683cf6ac5244e7a 100644
--- a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
+++ b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
@@ -99,6 +99,8 @@ void VP1JobConfigInfo::Imp::ensureInit()
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasSCTGeometry = "+QString(hasSCTGeometry?"On":"Off"));
 
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasEcalGeometry = "+QString(hasEcalGeometry?"On":"Off"));
+    VP1Msg::messageVerbose("VTI12JobConfigInfo => hasCavernInfraGeometry = "+QString(hasCavernInfraGeometry?"On":"Off"));
+
   }
 
 }
@@ -114,6 +116,7 @@ bool VP1JobConfigInfo::hasPreshowerGeometry() { if (!Imp::initialised) Imp::ensu
 bool VP1JobConfigInfo::hasSCTGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasSCTGeometry; }
 
 bool VP1JobConfigInfo::hasEcalGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasEcalGeometry; }
+bool VP1JobConfigInfo::hasCavernInfraGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasCavernInfraGeometry; }
 
 //____________________________________________________________________
 bool VP1JobConfigInfo::Imp::actualInit( StoreGateSvc* detStore )
@@ -169,6 +172,7 @@ bool VP1JobConfigInfo::Imp::actualInit( StoreGateSvc* detStore )
     if ( !hasPreshowerGeometry && name=="Preshower") hasPreshowerGeometry = true;
     if ( !hasSCTGeometry && name=="SCT") hasSCTGeometry = true;
     if ( !hasEcalGeometry && name=="Ecal") hasEcalGeometry = true;
+    if ( !hasCavernInfraGeometry && name == "Trench") hasCavernInfraGeometry = true;
 
     //FIXME: Look for CavernInfra as well!!!