diff --git a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
index f909c266ead5a50782f5edc92b3bcdc81dc4fbbe..6eb41252224091c13d5ee751cb2c85c638f43a85 100644
--- a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
+++ b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
@@ -11,5 +11,19 @@ def createSimConfigFlags():
     scf.addFlag('Sim.ParticleID',False)
     scf.addFlag("Sim.CalibrationRun", "DeadLAr") # 'LAr', 'Tile', 'LAr+Tile', 'DeadLAr'
 
+    scf.addFlag('Sim.CavernBG',False) #'Write' , 'Read' , 'Signal' , 'WriteWorld' , 'SignalWorld'
+    scf.addFlag('Sim.ReadTR',False) 
+    scf.addFlag('Sim.WorldRRange', 12500) #int or float
+    scf.addFlag('Sim.WorldZRange', 22031) #int or float
+
+    #for forward region
+    scf.addFlag('Sim.TwissFileBeam1',False)
+    scf.addFlag('Sim.TwissFileBeam2',False)
+    scf.addFlag('Sim.TwissEnergy',8000000.)
+    scf.addFlag('Sim.TwissFileBeta',550.)
+    scf.addFlag('Sim.TwissFileNomReal',False) #'nominal','real' #default to one of these?!
+    scf.addFlag('Sim.TwissFileVersion','v01')
+
+
 
     return scf
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
index 3a845687a31a783ee6fff6cb5e61ed564e02439b..0bbe42593cefac348b3ae6630e613a16aaf021d0 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
@@ -1,13 +1,21 @@
 # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from AtlasGeoModel.GeoModelConfig import GeoModelCfg
 
 from Geo2G4.Geo2G4Conf import GeoDetectorTool
 from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-from G4AtlasTools.G4AtlasToolsConf import CylindricalEnvelope
+from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg, InDetServiceMaterialCfg
+from LArGeoAlgsNV.LArGMConfig import LArGMCfg
+from TileGeoModel.TileGMConfig import TileGMCfg
+from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
+
+from G4AtlasTools.G4AtlasToolsConf import CylindricalEnvelope, PolyconicalEnvelope
 
 from AthenaCommon.SystemOfUnits import mm, cm, m
 
+#ToDo - finish migrating this (dnoel)
+#from ForwardRegionProperties.ForwardRegionPropertiesToolConfig import ForwardRegionPropertiesCfg
+
 #tool cfg or just cfg?
 def BeamPipeGeoDetectorToolCfg(ConfigFlags, name='BeamPipe', **kwargs):
     #set up geometry
@@ -17,61 +25,77 @@ def BeamPipeGeoDetectorToolCfg(ConfigFlags, name='BeamPipe', **kwargs):
 
 def PixelGeoDetectorToolCfg(ConfigFlags, name='Pixel', **kwargs):    
     #set up geometry
-    result=BeamPipeGeometryCfg(ConfigFlags)
+    result=InDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "Pixel")
     return result, GeoDetectorTool(name, **kwargs)
 
 def SCTGeoDetectorToolCfg(ConfigFlags, name='SCT', **kwargs):
     #set up geometry
-    result=BeamPipeGeometryCfg(ConfigFlags)
+    result=InDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "SCT")
     return result, GeoDetectorTool(name, **kwargs)
 
 def TRTGeoDetectorToolCfg(ConfigFlags, name='TRT', **kwargs):
     #set up geometry
-    result=BeamPipeGeometryCfg(ConfigFlags)
+    result=InDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "TRT")
     return result, GeoDetectorTool(name, **kwargs)
 
 def IDetServicesMatGeoDetectorToolCfg(ConfigFlags, name='IDetServicesMat', **kwargs):
     #set up geometry
-    result=BeamPipeGeometryCfg(ConfigFlags)
+    result=InDetServiceMaterialCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "InDetServMat")
     return result, GeoDetectorTool(name, **kwargs)
 
-def getLArMgrGeoDetectorTool(name='LArMgr', **kwargs):
+def LArMgrGeoDetectorToolCfg(ConfigFlags, name='LArMgr', **kwargs):
+    #set up geometry
+    result=LArGMCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "LArMgr")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getTileGeoDetectorTool(name='Tile', **kwargs):
+def TileGeoDetectorToolCfg(ConfigFLags, name='Tile', **kwargs):
+    #set up geometry
+    result=TileGMCfg(ConfigFLags)
     kwargs.setdefault("DetectorName", "Tile")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getLucidGeoDetectorTool(name='Lucid', **kwargs):
+def LucidGeoDetectorToolCfg(ConfigFlags, name='Lucid', **kwargs):
+    #set up geometry
+    result=ForDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "LUCID")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getALFAGeoDetectorTool(name='ALFA', **kwargs):
+def ALFAGeoDetectorToolCfg(ConfigFlags, name='ALFA', **kwargs):
+    #set up geometry
+    result=ForDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "ALFA")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getZDCGeoDetectorTool(name='ZDC', **kwargs):
+def ZDCGeoDetectorToolCfg(ConfigFlags, name='ZDC', **kwargs):
+    #set up geometry
+    result=ForDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "ZDC")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getAFPGeoDetectorTool(name='AFP', **kwargs):
+def AFPGeoDetectorToolCfg(ConfigFlags, name='AFP', **kwargs):
+    #set up geometry
+    result=ForDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "AFP")
     kwargs.setdefault("GeoDetectorName", "AFP_GeoModel")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getFwdRegionGeoDetectorTool(name='FwdRegion', **kwargs):
+def FwdRegionGeoDetectorToolCfg(ConfigFlags, name='FwdRegion', **kwargs):
+    #set up geometry
+    result=ForDetGeometryCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "FwdRegion")
     kwargs.setdefault("GeoDetectorName", "ForwardRegionGeoModel")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
-def getMuonGeoDetectorTool(name='Muon', **kwargs):
+def MuonGeoDetectorToolCfg(ConfigFlags, name='Muon', **kwargs):
+    #set up geometry
+    result=MuonGeoModelCfg(ConfigFlags)
     kwargs.setdefault("DetectorName", "Muon")
-    return CfgMgr.GeoDetectorTool(name, **kwargs)
+    return result, GeoDetectorTool(name, **kwargs)
 
 def getCavernInfraGeoDetectorTool(name='CavernInfra', **kwargs):
     kwargs.setdefault("DetectorName", "CavernInfra")
@@ -114,54 +138,73 @@ def IDETEnvelopeCfg(ConfigFlags, name="IDET", **kwargs):
     kwargs.setdefault("SubDetectors", SubDetectorList)
     return result, CylindricalEnvelope(name, **kwargs)
 
-def getCALOEnvelope(name="CALO", **kwargs):
+def CALOEnvelopeCfg(ConfigFlags, name="CALO", **kwargs):
+    result = ComponentAccumulator() 
+
     kwargs.setdefault("DetectorName", "CALO")
     kwargs.setdefault("NSurfaces", 18)
     kwargs.setdefault("InnerRadii", [41.,41.,41.,41.,41.,41.,120.,120.,1148.,1148.,120.,120.,41.,41.,41.,41.,41.,41.]) #FIXME Units?
     kwargs.setdefault("OuterRadii", [415.,415,3795.,3795.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,4251.,3795.,3795.,415.,415.]) #FIXME Units?
     kwargs.setdefault("ZSurfaces", [-6781.,-6735.,-6735.,-6530.,-6530.,-4587.,-4587.,-3475.,-3475.,3475.,3475.,4587.,4587.,6530.,6530.,6735.,6735.,6781.]) #FIXME Units?
     SubDetectorList=[]
-    from AthenaCommon.DetFlags import DetFlags
-    if DetFlags.geometry.LAr_on():
-        SubDetectorList += ['LArMgr']
-    if DetFlags.geometry.Tile_on():
-        SubDetectorList += ['Tile']
+    if ConfigFlags.Detector.GeometryLAr:
+        accLArMgr, toolLArMgr = LArMgrGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolLArMgr ]
+        result.merge(accLArMgr)
+    if ConfigFlags.Detector.GeometryTile:
+        accTile, toolTile = TileGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolTile ]
+        result.merge(accTile)
     kwargs.setdefault("SubDetectors", SubDetectorList)
-    return CfgMgr.PolyconicalEnvelope(name, **kwargs)
+    return result, PolyconicalEnvelope(name, **kwargs)
+
+def ForwardRegionEnvelopeCfg(ConfigFlags, name='ForwardRegion', **kwargs):
+    result = ComponentAccumulator()
 
-def getForwardRegionEnvelope(name='ForwardRegion', **kwargs):
     kwargs.setdefault("DetectorName", "ForDetEnvelope")
     SubDetectorList=[]
-    from AthenaCommon.DetFlags import DetFlags
-    if DetFlags.geometry.FwdRegion_on():
-        SubDetectorList += ['FwdRegion']
-        # FIXME Temporary solution - looking for a better place to add this one.
-        from AthenaCommon.CfgGetter import getPublicTool
-        from AthenaCommon.AppMgr import ToolSvc
-        ToolSvc += getPublicTool("ForwardRegionProperties")
-    if DetFlags.geometry.ZDC_on():
-        SubDetectorList += ['ZDC']
-    if DetFlags.geometry.ALFA_on():
-        SubDetectorList += ['ALFA']
-    if DetFlags.geometry.AFP_on():
-        SubDetectorList += ['AFP']
+
+    if ConfigFlags.Detector.SimulateFwdRegion:
+        accFwdRegion, toolFwdRegion = FwdRegionGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolFwdRegion ]
+        result.merge(accFwdRegion)
+
+        #TODO - migrate this over (WIP at the moment) (dnoel)
+        #toolFwdRegionProperties = ForwardRegionPropertiesCfg(ConfigFlags)
+        #result.addPublicTool(toolFwdRegionProperties) #add this as a service later?
+    if ConfigFlags.Detector.GeometryZDC:
+        accZDC, toolZDC = ZDCGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolZDC ]
+        result.merge(accZDC)
+    if ConfigFlags.Detector.GeometryALFA:
+        accALFA, toolALFA = ALFAGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolALFA ]
+        result.merge(accALFA)
+    if ConfigFlags.Detector.GeometryAFP:
+        accAFP, toolAFP = AFPGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolAFP ]
+        result.merge(accAFP)
     kwargs.setdefault("SubDetectors", SubDetectorList)
-    return CfgMgr.GeoDetectorTool(name, **kwargs) ##FIXME Should this really be a GeoDetectorTool???
+    return result, GeoDetectorTool(name, **kwargs) ##FIXME Should this really be a GeoDetectorTool???
+
+def MUONEnvelopeCfg(ConfigFlags, name="MUONQ02", **kwargs): #FIXME rename to MUON when safe (IS IT SAFE?))
+    result = ComponentAccumulator()
 
-def getMUONEnvelope(name="MUONQ02", **kwargs): #FIXME rename to MUON when safe
     kwargs.setdefault("DetectorName", "MUONQ02") #FIXME rename to MUON when safe
     kwargs.setdefault("NSurfaces", 34)
     kwargs.setdefault("InnerRadii", [1050.,1050.,1050.,1050.,436.7,436.7,279.,279.,70.,70.,420.,420.,3800.,3800.,4255.,4255.,4255.,4255.,4255.,4255.,3800.,3800.,420.,420.,70.,70.,279.,279.,436.7,436.7,1050.,1050.,1050.,1050.]) #FIXME Units?
     kwargs.setdefault("OuterRadii", [1500.,1500.,2750.,2750.,12650.,12650.,13400.,13400.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,13000.,13000.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,14200.,13400.,13400.,12650.,12650.,2750.,2750.,1500.,1500.]) #FIXME Units?
     kwargs.setdefault("ZSurfaces", [-26046.,-23001.,-23001.,-22030.,-22030.,-18650.,-18650.,-12900.,-12900.,-6783.,-6783.,-6736.,-6736.,-6550.,-6550.,-4000.,-4000.,4000.,4000.,6550.,6550.,6736.,6736.,6783.,6783.,12900.,12900.,18650.,18650.,22030.,22030.,23001.,23001.,26046.]) #FIXME Units?
     SubDetectorList=[]
-    from AthenaCommon.DetFlags import DetFlags
-    if DetFlags.geometry.Muon_on():
-        SubDetectorList += ['Muon']
+    if ConfigFlags.Detector.SimulateMuon:
+        accMuon, toolMuon = MuonGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolMuon ]
+        result.merge(accMuon)
+
     kwargs.setdefault("SubDetectors", SubDetectorList)
-    return CfgMgr.PolyconicalEnvelope(name, **kwargs)
+    return result, PolyconicalEnvelope(name, **kwargs)
 
-def getCosmicShortCut(name="CosmicShortCut", **kwargs):
+def CosmicShortCutCfg(ConfigFlags, name="CosmicShortCut", **kwargs):
     kwargs.setdefault("DetectorName", "TTR_BARREL")
     kwargs.setdefault("NSurfaces", 14)
     kwargs.setdefault("InnerRadii", [70.,70.,12500.,12500.,12500.,12500.,13000.,13000.,12500.,12500.,12500.,12500.,70.,70.]) #FIXME Units?
@@ -169,41 +212,51 @@ def getCosmicShortCut(name="CosmicShortCut", **kwargs):
     kwargs.setdefault("ZSurfaces", [-22031.,-22030.,-22030.,-12901.,-12901.,-12900.,-12900., 12900.,12900.,12901.,12901.,22030.,22030.,22031.]) #FIXME Units?
     SubDetectorList=[]
     kwargs.setdefault("SubDetectors", SubDetectorList)
-    return CfgMgr.PolyconicalEnvelope(name, **kwargs)
+    return PolyconicalEnvelope(name, **kwargs)
 
-def generateSubDetectorList():
+def generateSubDetectorList(ConfigFlags):
+    result = ComponentAccumulator()
     SubDetectorList=[]
-    from G4AtlasApps.SimFlags import simFlags
-    from AthenaCommon.BeamFlags import jobproperties
-    if jobproperties.Beam.beamType() == 'cosmics' or \
-            (simFlags.CavernBG.statusOn and not 'Signal' in simFlags.CavernBG.get_Value() ):
-        if jobproperties.Beam.beamType() == 'cosmics' and hasattr(simFlags, "ReadTR"):
-            SubDetectorList += ['CosmicShortCut']
-    from AthenaCommon.DetFlags import DetFlags
-    if DetFlags.Muon_on():
-        SubDetectorList += ['MUONQ02'] #FIXME rename to MUON when safe
-    if DetFlags.ID_on():
-        SubDetectorList += ['IDET']
-    if DetFlags.Calo_on():
-        SubDetectorList += ['CALO']
-    if DetFlags.ID_on(): #HACK
-        if DetFlags.bpipe_on(): #HACK
-            SubDetectorList += ['BeamPipe'] #HACK
-    if DetFlags.geometry.Lucid_on():
-        SubDetectorList += ['Lucid']
-    if simFlags.ForwardDetectors.statusOn:
-        SubDetectorList += ['ForwardRegion']
+
+    if ConfigFlags.Beam.Type == 'cosmics' or ConfigFlags.Sim.CavernBG != 'Signal':
+        if ConfigFlags.Beam.Type == 'cosmics' and ConfigFlags.Sim.ReadTR:
+            SubDetectorList += [ CosmicShortCutCfg(ConfigFlags) ]
+
+    if ConfigFlags.Detector.SimulateMuon:
+        accMuon, toolMuon = MUONEnvelopeCfg(ConfigFlags)
+        SubDetectorList += [ toolMuon ] #FIXME rename to MUON when safe
+        result.merge(accMuon)
+    if ConfigFlags.Detector.SimulateID:
+        accIDET, toolIDET = IDETEnvelopeCfg(ConfigFlags)
+        SubDetectorList += [ toolIDET ]
+        result.merge(accIDET)
+    if ConfigFlags.Detector.SimulateCalo:
+        accCALO, toolCALO = CALOEnvelopeCfg(ConfigFlags)
+        SubDetectorList += [ toolCALO ]
+        result.merge(accCALO)
+    if ConfigFlags.Detector.SimulateBpipe:
+        accBpipe, toolBpipe = BeamPipeGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolBpipe ]
+        result.merge(accBpipe)
+    if ConfigFlags.Detector.GeometryLucid:
+        accLucid, toolLucid = LucidGeoDetectorToolCfg(ConfigFlags)
+        SubDetectorList += [ toolLucid ]
+        result.merge(accLucid)
+    if ConfigFlags.Detector.SimulateForward: 
+        AccForward, toolForward = ForwardRegionEnvelopeCfg(ConfigFlags)
+        SubDetectorList += [ toolForward ]
+        result.merge(AccForward)
+
     #if DetFlags.Muon_on(): #HACK
     #    SubDetectorList += ['MUONQ02'] #FIXME rename to MUON when safe #HACK
     #SubDetectorList += generateFwdSubDetectorList() #FIXME Fwd Detectors not supported yet.
-    return SubDetectorList
+    return result, SubDetectorList
+
+def ATLASEnvelopeCfg(ConfigFlags, name="Atlas", **kwargs):
+    result = ComponentAccumulator()
 
-def getATLAS(name="Atlas", **kwargs):
     kwargs.setdefault("DetectorName", "Atlas")
     kwargs.setdefault("NSurfaces", 18)
-    from G4AtlasApps.SimFlags import simFlags
-    from AthenaCommon.BeamFlags import jobproperties
-    from AthenaCommon.DetFlags import DetFlags
     ## InnerRadii
     innerRadii = [0.0] * 18
     kwargs.setdefault("InnerRadii", innerRadii)
@@ -216,11 +269,11 @@ def getATLAS(name="Atlas", **kwargs):
     AtlasOuterR1 = 14201.
     AtlasOuterR2 = 14201.
     AtlasOuterR3 =  1501.
-    if jobproperties.Beam.beamType() != 'cosmics' and not DetFlags.Muon_on() and not \
-       (simFlags.CavernBG.statusOn and not 'Signal' in simFlags.CavernBG.get_Value() ):
+    if ConfigFlags.Beam.Type != 'cosmics' and not ConfigFlags.Detector.SimulateMuon and not \
+       (ConfigFlags.Sim.CavernBG != 'Signal'):
         AtlasOuterR1 = 4251.
         AtlasOuterR2 = 4251.
-        if not DetFlags.Calo_on():
+        if not ConfigFlags.Detector.SimulateCalo:
             AtlasOuterR1 = 1150.
             AtlasOuterR2 = 1150.
 
@@ -235,39 +288,43 @@ def getATLAS(name="Atlas", **kwargs):
         outerRadii[i] = AtlasOuterR1
 
     ## World R range
-    if simFlags.WorldRRange.statusOn:
-        if simFlags.WorldRRange.get_Value() > max(AtlasOuterR1, AtlasOuterR2):
-            routValue = simFlags.WorldRRange.get_Value()
-            for i in xrange(4, 14):
-                outerRadii[i] = routValue
-        else:
-            raise RuntimeError('getATLASEnvelope: ERROR simFlags.WorldRRange must be > %f. Current value %f' % max(AtlasOuterR1, AtlasOuterR2), routValue)
+    routValue = ConfigFlags.Sim.WorldRRange
+    if ConfigFlags.Sim.WorldRRange > max(AtlasOuterR1, AtlasOuterR2):
+        for i in xrange(4, 14):
+            outerRadii[i] = routValue
+    else:
+        raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldRRange must be > %f. Current value %f' % (max(AtlasOuterR1, AtlasOuterR2), routValue) )
     kwargs.setdefault("OuterRadii", outerRadii)
 
     ## ZSurfaces
     zSurfaces = [-26046., -23001., -23001., -22031., -22031., -12899., -12899., -6741., -6741.,  6741.,  6741.,  12899., 12899., 22031., 22031., 23001., 23001., 26046.] # FIXME units mm??
 
-    if simFlags.ForwardDetectors.statusOn:
+    if ConfigFlags.Detector.SimulateForward:
         zSurfaces[0]  = -400000.
         zSurfaces[17] =  400000.
 
-    if simFlags.WorldZRange.statusOn:
-        if simFlags.WorldZRange.get_Value() < 26046.:
-              AtlasG4Eng.G4Eng.log.error('')
-              raise RuntimeError('getATLASEnvelope: ERROR simFlags.WorldZRange must be > 26046. Current value: %f' % simFlags.WorldZRange.get_Value())
-        zSurfaces[17] =  simFlags.WorldZRange.get_Value() + 100.
-        zSurfaces[16] =  simFlags.WorldZRange.get_Value() + 50.
-        zSurfaces[15] =  simFlags.WorldZRange.get_Value() + 50.
-        zSurfaces[14] =  simFlags.WorldZRange.get_Value()
-        zSurfaces[13] =  simFlags.WorldZRange.get_Value()
-        zSurfaces[0] =  -simFlags.WorldZRange.get_Value() - 100.
-        zSurfaces[1] =  -simFlags.WorldZRange.get_Value() - 50.
-        zSurfaces[2] =  -simFlags.WorldZRange.get_Value() - 50.
-        zSurfaces[3] =  -simFlags.WorldZRange.get_Value()
-        zSurfaces[4] =  -simFlags.WorldZRange.get_Value()
+    #leave a check in for WorldRrange and WorldZrange?
+    #if simFlags.WorldZRange.statusOn:
+
+    if ConfigFlags.Sim.WorldZRange < 26046.:
+          raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldZRange must be > 26046. Current value: %f' % ConfigFlags.Sim.WorldZRange)
+    zSurfaces[17] =  ConfigFlags.Sim.WorldZRange + 100.
+    zSurfaces[16] =  ConfigFlags.Sim.WorldZRange + 50.
+    zSurfaces[15] =  ConfigFlags.Sim.WorldZRange + 50.
+    zSurfaces[14] =  ConfigFlags.Sim.WorldZRange
+    zSurfaces[13] =  ConfigFlags.Sim.WorldZRange
+    zSurfaces[0] =  -ConfigFlags.Sim.WorldZRange - 100.
+    zSurfaces[1] =  -ConfigFlags.Sim.WorldZRange - 50.
+    zSurfaces[2] =  -ConfigFlags.Sim.WorldZRange - 50.
+    zSurfaces[3] =  -ConfigFlags.Sim.WorldZRange
+    zSurfaces[4] =  -ConfigFlags.Sim.WorldZRange
+
     kwargs.setdefault("ZSurfaces", zSurfaces)
-    kwargs.setdefault("SubDetectors", generateSubDetectorList())
-    return CfgMgr.PolyconicalEnvelope(name, **kwargs)
+    accSubDetectors, SubDetectorList = generateSubDetectorList(ConfigFlags) 
+    kwargs.setdefault("SubDetectors", SubDetectorList)
+    result.merge(accSubDetectors)
+
+    return result, PolyconicalEnvelope(name, **kwargs)
 
 def getCavernWorld(name="Cavern", **kwargs):
     kwargs.setdefault("DetectorName", "World")
@@ -307,4 +364,4 @@ def getG4AtlasDetectorConstructionTool(name="G4AtlasDetectorConstructionTool", *
 
 def getMaterialDescriptionTool(name="MaterialDescriptionTool", **kwargs):
     ## kwargs.setdefault("SomeProperty", aValue)
-    return CfgMgr.MaterialDescriptionTool(name, **kwargs)
\ No newline at end of file
+    return CfgMgr.MaterialDescriptionTool(name, **kwargs)