diff --git a/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py b/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py
index 337b450a78f821b56a893775d42987c4d9531f1c..18c0314c9c33a375c1fc70f4391520d4aef45736 100755
--- a/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py
+++ b/LArCalorimeter/LArExample/LArConditionsCommon/share/LArConditionsCommon_MC_jobOptions.py
@@ -65,20 +65,21 @@ if SuperCells:
   if larCondFlags.useMCShape():
     larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMCSC/Shape","LArShape",LArShapeSymAlg,None)]
 else:
-  larCondDBFolders = [("LArRampMC","/LAR/ElecCalibMC/Ramp","LArRamp", LArRampSymAlg ,None),
-                      ("LArAutoCorrMC","/LAR/ElecCalibMC/AutoCorr","LArAutoCorr", LArAutoCorrSymAlg,None),
-                      ("LArDAC2uAMC","/LAR/ElecCalibMC/DAC2uA","LArDAC2uA",LArDAC2uASymAlg,None),
-                      ("LArPedestalMC","/LAR/ElecCalibMC/Pedestal","LArPedestal",None,None),
-                      ("LArNoiseMC","/LAR/ElecCalibMC/Noise","LArNoise",LArNoiseSymAlg,None),
+  larCondDBFolders = [
+                      #("LArRampMC","/LAR/ElecCalibMC/Ramp","LArRamp", LArRampSymAlg ,None),
+                      #("LArAutoCorrMC","/LAR/ElecCalibMC/AutoCorr","LArAutoCorr", LArAutoCorrSymAlg,None),
+                      #("LArDAC2uAMC","/LAR/ElecCalibMC/DAC2uA","LArDAC2uA",LArDAC2uASymAlg,None),
+                      #("LArPedestalMC","/LAR/ElecCalibMC/Pedestal","LArPedestal",None,None),
+                      #("LArNoiseMC","/LAR/ElecCalibMC/Noise","LArNoise",LArNoiseSymAlg,None),
                       ("LArfSamplMC","/LAR/ElecCalibMC/fSampl","LArfSampl",LArfSamplSymAlg,None),
-                      ("LAruA2MeVMC","/LAR/ElecCalibMC/uA2MeV","LAruA2MeV", LAruA2MeVSymAlg,None),
-                      ("LArMinBiasMC","/LAR/ElecCalibMC/MinBias","LArMinBias",LArMinBiasSymAlg,None),
+                      #("LAruA2MeVMC","/LAR/ElecCalibMC/uA2MeV","LAruA2MeV", LAruA2MeVSymAlg,None),
+                      #("LArMinBiasMC","/LAR/ElecCalibMC/MinBias","LArMinBias",LArMinBiasSymAlg,None),
                     ]
-  if not isPileUpDigi:
-    larCondDBFolders += [("LArMinBiasAverageMC","/LAR/ElecCalibMC/MinBiasAverage","LArMinBiasAverage",LArMinBiasAverageSymAlg,None)]
+  #if not isPileUpDigi:
+  #  larCondDBFolders += [("LArMinBiasAverageMC","/LAR/ElecCalibMC/MinBiasAverage","LArMinBiasAverage",LArMinBiasAverageSymAlg,None)]
 
-  if larCondFlags.useMCShape():
-    larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMC/Shape","LArShape",LArShapeSymAlg,None)]
+  #if larCondFlags.useMCShape():
+  #  larCondDBFolders += [("LArShape32MC","/LAR/ElecCalibMC/Shape","LArShape",LArShapeSymAlg,None)]
 
 include( "LArConditionsCommon/LArIdMap_MC_jobOptions.py" )
 
@@ -104,9 +105,9 @@ else:
    conddb.addFolder(LArDB,MissingFEBsFolder,className='AthenaAttributeList')
 condSeq+=LArBadFebCondAlg(ReadKey=MissingFEBsFolder)
 
-if not isPileUpDigi:
-  condSeq+=LArBadFebCondAlg("LArKnownBadFebAlg",ReadKey="",WriteKey="LArKnownBadFEBs")
-  condSeq+=LArBadFebCondAlg("LArKnownMNBFebAlg",ReadKey="",WriteKey="LArKnownMNBFEBs")
+#if not isPileUpDigi:
+#  condSeq+=LArBadFebCondAlg("LArKnownBadFebAlg",ReadKey="",WriteKey="LArKnownBadFEBs")
+#  condSeq+=LArBadFebCondAlg("LArKnownMNBFebAlg",ReadKey="",WriteKey="LArKnownMNBFEBs")
 
 
 ## these may be conditional. 
diff --git a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
index a51050c1b6daba429064744f14b4c6d544917896..cd8d25f39ab220ba02a7260cb7c158a7cf9df36b 100644
--- a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
+++ b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
@@ -7,7 +7,7 @@ import TrkConfig.AtlasExtrapolatorToolsConfig as TC
 
 
 # UPDATORS
-def NIMatEffUpdatorCfg(flags, name="NIMatEffUpdator", **kwargs):
+def NIMatEffUpdatorCfg(flags, name="ISF_NIMatEffUpdator", **kwargs):
     mlog = logging.getLogger(name)
     mlog.debug("Start configuration")
     result = ComponentAccumulator()
diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py
index 059b83a057a6725e5fede970a2fb241258845247..a1c67fd6b748f28d7e861e41836a86d05bd2d288 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfigNew.py
@@ -378,7 +378,7 @@ def Kernel_ATLFASTIIF_G4MSCfg(flags, name="ISF_Kernel_ATLFASTIIF_G4MS", **kwargs
     kwargs.setdefault("CavernSimulationSelectors"  , [ acc.getPublicTool("ISF_DefaultParticleKillerSelector") ])
     # not migrated simFlags.SimulationFlavour = "ATLFASTIIF_MS"
     # simFlags.SimulationFlavour = "ATLFASTIIF_G4MS"
-
+    kwargs.setdefault("OutputLevel", 1)
     acc.merge(Kernel_GenericSimulatorCfg(flags, name, **kwargs)) # Merge properly configured SimKernel here and let deduplication sort it out.
     return acc
 
diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
index e4525894b7ad7427531a03eaa2f35d8296cf6da3..0d2e6c826fac429eb03e0bf9ba89ab01d78b9ec8 100644
--- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
+++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
@@ -85,6 +85,9 @@ def ParticleBrokerSvcNoOrderingCfg(ConfigFlags, name="ISF_ParticleBrokerSvcNoOrd
         result.addPublicTool(tool)
         kwargs.setdefault("EntryLayerTool", result.getPublicTool(tool.name))
         kwargs.setdefault("GeoIDSvc", result.getService("ISF_GeoIDSvc").name) # FIXME
+    if ConfigFlags.Sim.ISF.Simulator in ["ATLFASTIIF_G4MS", "ATLFAST3F_G4MS"]:
+        from ISF_Services.ISF_ServicesCoreConfigNew import GeoIDSvcCfg
+        kwargs["GeoIDSvc"] = result.getPrimaryAndMerge(GeoIDSvcCfg(ConfigFlags)).name #HACK
     # assume "GeoIDSvc" has been set alongside "EntryLayerTool"
     kwargs.setdefault("AlwaysUseGeoIDSvc", False)
     kwargs.setdefault("ValidateGeoIDs", ConfigFlags.Sim.ISF.ValidationMode)
diff --git a/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh b/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh
index 9575cb2b8393c04e57cfef9fb73a669d93da1f20..5c2a497abeaababb8be92c3ba42608530f49874a 100755
--- a/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh
+++ b/Simulation/Tests/ISF_Validation/test/test_MC16_ATLFAST3F_G4MS_ttbar.sh
@@ -26,8 +26,9 @@ Sim_tf.py \
 --imf False
 
 rc=$?
-rc2=-9999
 echo  "art-result: $rc simOLD"
+
+rc2=-9999
 if [ $rc -eq 0 ]
 then
     ArtPackage=$1
diff --git a/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh b/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh
index 0964b8148b7c210e0b018e2ff742c9be34f80ae0..85a633fa05e8419123ee6e2e7e007c58eb58c44c 100755
--- a/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh
+++ b/Simulation/Tests/ISF_ValidationMT/test/test_RUN3Sym_ATLFAST3F_G4MS_ttbar_CAvsCG.sh
@@ -18,13 +18,13 @@ Sim_tf.py \
     --physicsList 'FTFP_BERT_ATL' \
     --truthStrategy 'MC15aPlus' \
     --simulator 'ATLFAST3F_G4MS' \
-    --postInclude 'PyJobTransforms.UseFrontier' \
+    --postInclude 'PyJobTransforms.UseFrontier,AthenaConfiguration.JobOptsDumper.JobOptsDumperCfg' \
     --preInclude 'EVNTtoHITS:SimuJobTransforms.BeamPipeKill' \
     --DataRunNumber '330000' \
     --geometryVersion 'default:ATLAS-R3S-2021-01-00-02' \
     --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \
     --outputHITSFile "test.CA.HITS.pool.root" \
-    --maxEvents 4 \
+    --maxEvents 2 \
     --postExec 'with open("ConfigSimCA.pkl", "wb") as f: cfg.store(f)' \
     --imf False
 
@@ -42,12 +42,13 @@ then
         --truthStrategy 'MC15aPlus' \
         --simulator 'ATLFAST3F_G4MS' \
         --postInclude 'default:PyJobTransforms/UseFrontier.py' \
+        --postExec 'default:topSeq+=CfgMgr.JobOptsDumperAlg(FileName="CGSimConfig.txt")' \
         --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' \
         --DataRunNumber '330000' \
         --geometryVersion 'default:ATLAS-R3S-2021-01-00-02_VALIDATION' \
         --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \
         --outputHITSFile "test.CA.HITS.pool.root" \
-        --maxEvents 4 \
+        --maxEvents 2 \
         --imf False \
         --athenaopts '"--config-only=ConfigSimCG.pkl"'
 
@@ -57,6 +58,7 @@ then
         --truthStrategy 'MC15aPlus' \
         --simulator 'ATLFAST3F_G4MS' \
         --postInclude 'default:PyJobTransforms/UseFrontier.py' \
+        --postExec 'default:topSeq+=CfgMgr.JobOptsDumperAlg(FileName="CGSimConfig.txt")' \
         --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py' \
         --DataRunNumber '330000' \
         --geometryVersion 'default:ATLAS-R3S-2021-01-00-02_VALIDATION' \
@@ -71,18 +73,18 @@ then
 fi
 echo "art-result: $rc2 simOLD"
 
-#rc3=-9999
-#if [ $rc2 -eq 0 ]
-#then
-#  # Compare the outputs
-#  acmd.py diff-root test.CG.HITS.pool.root test.CA.HITS.pool.root \
-#    --error-mode resilient \
-#    --mode semi-detailed \
-#    --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings index_ref
-#  rc3=$?
-#  status=$rc3
-#fi
-#
-#echo "art-result: $rc3 CAvsCG"
+rc3=-9999
+if [ $rc2 -eq 0 ]
+then
+  # Compare the outputs
+  acmd.py diff-root test.CG.HITS.pool.root test.CA.HITS.pool.root \
+    --error-mode resilient \
+    --mode semi-detailed \
+    --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings index_ref
+  rc3=$?
+  status=$rc3
+fi
+
+echo "art-result: $rc3 CAvsCG"
 
 exit $status
diff --git a/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py b/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py
index bfd70ce640e972147fdd61ad8914384a26505d50..2b845ca10c4c8e9a235d3948c110a59d124a48fd 100644
--- a/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py
+++ b/TileCalorimeter/TileConditions/share/TileConditions_jobOptions.py
@@ -129,7 +129,9 @@ if TileUseCOOL or athenaCommonFlags.isOnline():
     if not 'TileUseCOOLPULSE' in dir() or not TileUseCOOLOFC:
         TileUseCOOLPULSE=True; # read pulse from COOL
 
-    tileInfoConfigurator.setupCOOL(type=(TileGapTiming+TilePulse))
+    from AthenaCommon.DetFlags import DetFlags
+    if not DetFlags.simulate.Tile_on():
+        tileInfoConfigurator.setupCOOL(type=(TileGapTiming+TilePulse))
 
     if TileUseDCS:
         tileInfoConfigurator.setupCOOLDCS();
diff --git a/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py b/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py
index e726cf284b0ce4f3a612bd0c24a07ef79d2d297f..101494668e7c3f94d09a32c7cd62be26c878a7ae 100644
--- a/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py
+++ b/Tracking/TrkConfig/python/AtlasTrackingGeometrySvcConfig.py
@@ -3,7 +3,7 @@
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
-from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg 
+from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg
 
 from GaudiKernel.GaudiHandles import PrivateToolHandleArray
 
@@ -12,87 +12,77 @@ from GaudiKernel.GaudiHandles import PrivateToolHandleArray
 
 def _setupCondDB(flags, CoolDataBaseFolder, quiet=True):
     result=ComponentAccumulator()
-    
+
     # the tag names
     materialTagBase = 'AtlasLayerMat_v'
-    version = 21 
+    version = 21
     sub_version = ''
-    
+
     AtlasMaterialTag = materialTagBase+str(version)+sub_version+'_'
     if flags.Detector.GeometryITk:
-      AtlasMaterialTag = flags.ITk.trackingGeometry.materialTag+str(flags.ITk.trackingGeometry.version)+'_'
+        AtlasMaterialTag = flags.ITk.trackingGeometry.materialTag+str(flags.ITk.trackingGeometry.version)+'_'
     cfolder = CoolDataBaseFolder +'<tag>TagInfoMajor/'+AtlasMaterialTag+'/GeoAtlas</tag>'
-        
+
     if flags.Detector.GeometryITk and flags.ITk.trackingGeometry.loadLocalDbForMaterialMaps:
         DataBaseName=flags.ITk.trackingGeometry.localDatabaseName
         from IOVDbSvc.IOVDbSvcConfig import addFolders
         result.merge(addFolders(flags,"/GLOBAL/TrackingGeo/LayerMaterialITK",detDb=DataBaseName, tag=AtlasMaterialTag))
         cfolder = CoolDataBaseFolder +'<tag>TagInfoMajor/'+AtlasMaterialTag+'</tag>'
-    
+
     # if not quiet:
     #   print('[ TrackingGeometrySvc ]     base material tag : ' + AtlasMaterialTag)
     #   print('[ TrackingGeometrySvc ]     translated to COOL: ' + cfolder)
 
     # load the right folders
     result.merge( addFoldersSplitOnline(flags,'GLOBAL',[cfolder],[cfolder],splitMC=True) )
-    
+
+    return result
+
+
+def BeamPipeBuilderCfg(flags, namePrefix=''):
+    result = ComponentAccumulator()
+    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
+    result.merge(BeamPipeGeometryCfg(flags))
+    InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder
+    beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder')
+    result.setPrivateTools(beamPipeBuilder)
     return result
-    
-def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True, buildTrtStrawLayers = False):
-  # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py
-  # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made
-  # i.e. this is far from complete, but is better than what was there before.
-  
-  # beampipe
-  from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-  result.merge(BeamPipeGeometryCfg(flags))
-  InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder
-  beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder')
-
-  result.addPublicTool(beamPipeBuilder)
-  layerbuilders = []
-  binnings      = []
-  colors        = []
-
-  # Pixel
-  if flags.Detector.GeometryPixel:
+
+
+def PixelLayerBuilderCfg(flags, namePrefix='', setLayerAssociation = True):
+    result = ComponentAccumulator()
     from AthenaConfiguration.Enums import ProductionStep
     if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS
         from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
-        result.merge(PixelReadoutGeometryCfg( flags ))
+        result.merge(PixelReadoutGeometryCfg(flags))
     else:
         from PixelGeoModel.PixelGeoModelConfig import PixelSimulationGeometryCfg
-        result.merge(PixelSimulationGeometryCfg( flags ))
+        result.merge(PixelSimulationGeometryCfg(flags))
 
     InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder
     PixelLayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilder')
-    PixelLayerBuilder.PixelCase 	       = True
-    PixelLayerBuilder.Identification       = 'Pixel'
+    PixelLayerBuilder.PixelCase = True
+    PixelLayerBuilder.Identification = 'Pixel'
     PixelLayerBuilder.SiDetManagerLocation = 'Pixel'
     # additional layers - handle with care !
-    PixelLayerBuilder.BarrelAdditionalLayerRadii      = [ 130.0 ]   # The PST
-    PixelLayerBuilder.BarrelAdditionalLayerType       = [ 0 ]     # -- will shift volume boundary to PST
+    PixelLayerBuilder.BarrelAdditionalLayerRadii = [ 130.0 ]   # The PST
+    PixelLayerBuilder.BarrelAdditionalLayerType = [ 0 ]     # -- will shift volume boundary to PST
     PixelLayerBuilder.EndcapAdditionalLayerPositionsZ = [ -1900. , 1900. ] # DBM
-    PixelLayerBuilder.EndcapAdditionalLayerType       = [  1 , 1 ] # DBM
+    PixelLayerBuilder.EndcapAdditionalLayerType = [  1 , 1 ] # DBM
     # Pixel barrel specifications
-    PixelLayerBuilder.BarrelLayerBinsZ     = 1
-    PixelLayerBuilder.BarrelLayerBinsPhi   = 1
-    PixelLayerBuilder.EndcapLayerBinsR     = 1
-    PixelLayerBuilder.EndcapLayerBinsPhi   = 1
-    
+    PixelLayerBuilder.BarrelLayerBinsZ = 1
+    PixelLayerBuilder.BarrelLayerBinsPhi = 1
+    PixelLayerBuilder.EndcapLayerBinsR = 1
+    PixelLayerBuilder.EndcapLayerBinsPhi = 1
+
     # set the layer association
-    PixelLayerBuilder.SetLayerAssociation  = setLayerAssociation
-
-    # the binning type of the layers   a
-    PixelLayerBinning = 2
-    # add it to tool service
-    result.addPublicTool(PixelLayerBuilder)
-    # put them to the caches
-    layerbuilders += [ PixelLayerBuilder ]
-    binnings      += [ PixelLayerBinning ]
-    colors        += [ 3 ]
-
-  if flags.Detector.GeometrySCT:
+    PixelLayerBuilder.SetLayerAssociation = setLayerAssociation
+    result.setPrivateTools(PixelLayerBuilder)
+    return result
+
+
+def SCT_LayerBuilderCfg(flags, namePrefix='', setLayerAssociation = True):
+    result = ComponentAccumulator()
     from AthenaConfiguration.Enums import ProductionStep
     if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS
         from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
@@ -108,30 +98,25 @@ def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc,
     SCT_LayerBuilder.Identification                  = 'SCT'
     SCT_LayerBuilder.SiDetManagerLocation            = 'SCT'
     # additionall layers - handle with care !
-    SCT_LayerBuilder.BarrelAdditionalLayerRadii      = []   
-    SCT_LayerBuilder.BarrelAdditionalLayerType      = []   
+    SCT_LayerBuilder.BarrelAdditionalLayerRadii      = []
+    SCT_LayerBuilder.BarrelAdditionalLayerType      = []
 
-    SCT_LayerBuilder.EndcapAdditionalLayerPositionsZ = [ -2850. , 2850. ] 
-    SCT_LayerBuilder.EndcapAdditionalLayerType       = [  0 , 0 ] 
+    SCT_LayerBuilder.EndcapAdditionalLayerPositionsZ = [ -2850. , 2850. ]
+    SCT_LayerBuilder.EndcapAdditionalLayerType       = [  0 , 0 ]
     SCT_LayerBuilder.BarrelLayerBinsZ                = 1
     SCT_LayerBuilder.BarrelLayerBinsPhi              = 1
-    # SCT endcap specifications                          
+    # SCT endcap specifications
     SCT_LayerBuilder.EndcapLayerBinsR                = 1
     SCT_LayerBuilder.EndcapLayerBinsPhi              = 1
-    SCT_LayerBuilder.EndcapComplexRingBinning        = True         
-    # set the layer association                   
-    SCT_LayerBuilder.SetLayerAssociation             = setLayerAssociation        
-    # the binning type of the layer     
-    SCT_LayerBinning = 2
-    # SCT -> ToolSvc                             
-    result.addPublicTool(SCT_LayerBuilder)
-                       
-    # put them to the caches
-    layerbuilders += [ SCT_LayerBuilder ]
-    binnings      += [ SCT_LayerBinning ]
-    colors        += [ 4 ]
-
-  if flags.Detector.GeometryTRT:     
+    SCT_LayerBuilder.EndcapComplexRingBinning        = True
+    # set the layer association
+    SCT_LayerBuilder.SetLayerAssociation             = setLayerAssociation
+    result.setPrivateTools(SCT_LayerBuilder)
+    return result
+
+
+def TRT_LayerBuilderCfg(flags, namePrefix='', buildTrtStrawLayers = False):
+    result = ComponentAccumulator()
     from AthenaConfiguration.Enums import ProductionStep
     if flags.Common.ProductionStep != ProductionStep.Simulation: # Not needed by FATRAS
         from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
@@ -144,279 +129,365 @@ def _getInDetTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc,
     TRT_LayerBuilder = InDet__TRT_LayerBuilder(name=namePrefix+'TRT_LayerBuilder')
     # TRT barrel specifications - assume defaults
     # SCT endcap specifications - assume defaults
-                       
-    # set the binning from bi-aequidistant to arbitrary for complex TRT volumes
-    TRT_LayerBinning = 1        
-    if buildTrtStrawLayers or (flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain] and flags.Sim.ISF.Simulator not in ["ATLFASTIIMT"]):
-       TRT_LayerBinning = 2
+
     if buildTrtStrawLayers:
-       TRT_LayerBuilder.ModelLayersOnly = False
-    # TRT -> ToolSvc                      
-    result.addPublicTool(TRT_LayerBuilder)
-    
-    # put them to the caches
-    layerbuilders += [ TRT_LayerBuilder ]
-    binnings      += [ TRT_LayerBinning ]
-    colors        += [ 5 ]
-
-  # helpers for the InDetTrackingGeometry Builder : layer array creator
-  Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator
-  InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator')
-  InDetLayerArrayCreator.EmptyLayerMode           = 2 # deletes empty material layers from arrays
-  # add to ToolSvc
-  result.addPublicTool(InDetLayerArrayCreator)  
-
-  # helpers for the InDetTrackingGeometry Builder : volume array creator
-  InDetTrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator')
-  # add to ToolSvc
-  result.addPublicTool(InDetTrackingVolumeArrayCreator)  
-
-  # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing
-  Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper
-  InDetTrackingVolumeHelper                             = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper')
-  # the material bins - assume defaults
-  # add to ToolSvc
-  result.addPublicTool(InDetTrackingVolumeHelper)  
-  
-  # helpers for the InDetTrackingGeometry Builder : cylinder volume creator
-  Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator
-  InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator')
-  # give it the layer array creator
-  InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator
-  # specifiy the binning, passive layers, entry layers - assume defaults
-  # add to ToolSvc
-  result.addPublicTool(InDetCylinderVolumeCreator)  
-
-  # the tracking geometry builder
-  InDet__RobustTrackingGeometryBuilder=CompFactory.InDet.RobustTrackingGeometryBuilder
-  return InDet__RobustTrackingGeometryBuilder(namePrefix+name,
-                                                BeamPipeBuilder   = beamPipeBuilder,
-                                                LayerBuilders     = layerbuilders,
-                                                LayerBinningType  = binnings,
-                                                ColorCodes        = colors,
+        TRT_LayerBuilder.ModelLayersOnly = False
+    result.setPrivateTools(TRT_LayerBuilder)
+    return result
+
+
+def InDetTrackingGeometryBuilderCfg(name, flags, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True):
+    # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py
+    # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made
+    # i.e. this is far from complete, but is better than what was there before.
+
+    result = ComponentAccumulator()
+
+    # beampipe
+    beamPipeBuilder = result.popToolsAndMerge(BeamPipeBuilderCfg(flags, namePrefix))
+    result.addPublicTool(beamPipeBuilder)
+
+    layerbuilders = [] # Used to set a PublicToolHandleArray
+    binnings = []
+    colors = []
+
+    if flags.Detector.GeometryPixel:
+        PixelLayerBuilder = result.popToolsAndMerge(PixelLayerBuilderCfg(flags, namePrefix, setLayerAssociation))
+        # the binning type of the layers
+        PixelLayerBinning = 2
+        # add it to tool service
+        result.addPublicTool(PixelLayerBuilder)
+        # put them to the caches
+        layerbuilders += [ PixelLayerBuilder ]
+        binnings += [ PixelLayerBinning ]
+        colors += [ 3 ]
+
+    if flags.Detector.GeometrySCT:
+        SCT_LayerBuilder = result.popToolsAndMerge(SCT_LayerBuilderCfg(flags, namePrefix, setLayerAssociation))
+        # the binning type of the layer
+        SCT_LayerBinning = 2
+        # add it to tool service
+        result.addPublicTool(SCT_LayerBuilder)
+        # put them to the caches
+        layerbuilders += [ SCT_LayerBuilder ]
+        binnings      += [ SCT_LayerBinning ]
+        colors        += [ 4 ]
+
+    if flags.Detector.GeometryTRT:
+        buildTrtStrawLayers = flags.Beam.Type=='cosmics'
+        TRT_LayerBuilder = result.popToolsAndMerge(TRT_LayerBuilderCfg(flags, namePrefix, buildTrtStrawLayers))
+        # set the binning from bi-aequidistant to arbitrary for complex TRT volumes
+        TRT_LayerBinning = 1
+        if buildTrtStrawLayers or (flags.Common.ProductionStep in [ProductionStep.Simulation, ProductionStep.FastChain] and flags.Sim.ISF.Simulator not in ["ATLFASTIIMT"]):
+            TRT_LayerBinning = 2
+        # add it to tool service
+        result.addPublicTool(TRT_LayerBuilder)
+        # put them to the caches
+        layerbuilders += [ TRT_LayerBuilder ]
+        binnings += [ TRT_LayerBinning ]
+        colors += [ 5 ]
+
+    # helpers for the InDetTrackingGeometry Builder : layer array creator
+    Trk__LayerArrayCreator = CompFactory.Trk.LayerArrayCreator
+    InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator')
+    InDetLayerArrayCreator.EmptyLayerMode = 2 # deletes empty material layers from arrays
+    # add to ToolSvc
+    result.addPublicTool(InDetLayerArrayCreator)
+
+    # helpers for the InDetTrackingGeometry Builder : volume array creator
+    InDetTrackingVolumeArrayCreator = CompFactory.Trk.TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator')
+    # add to ToolSvc
+    result.addPublicTool(InDetTrackingVolumeArrayCreator)
+
+    # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing
+    Trk__TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper
+    InDetTrackingVolumeHelper = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper')
+    # the material bins - assume defaults
+    # add to ToolSvc
+    result.addPublicTool(InDetTrackingVolumeHelper)
+
+    # helpers for the InDetTrackingGeometry Builder : cylinder volume creator
+    Trk__CylinderVolumeCreator = CompFactory.Trk.CylinderVolumeCreator
+    InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator')
+    # give it the layer array creator
+    InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator
+    # specifiy the binning, passive layers, entry layers - assume defaults
+    # add to ToolSvc
+    result.addPublicTool(InDetCylinderVolumeCreator)
+
+    # the tracking geometry builder
+    InDet__RobustTrackingGeometryBuilder=CompFactory.InDet.RobustTrackingGeometryBuilder
+    result.setPrivateTools(InDet__RobustTrackingGeometryBuilder(namePrefix+name,
+                                                BeamPipeBuilder = beamPipeBuilder,
+                                                LayerBuilders = layerbuilders,
+                                                LayerBinningType = binnings,
+                                                ColorCodes = colors,
                                                 EnvelopeDefinitionSvc = envelopeDefinitionSvc,
                                                 VolumeEnclosureDiscPositions = [ 3000., 3450. ],
-                                                TrackingVolumeCreator     = InDetCylinderVolumeCreator,
-                                                LayerArrayCreator         = InDetLayerArrayCreator,
-                                                ReplaceAllJointBoundaries=True,
-                                                VolumeEnclosureCylinderRadii=[],
-                                                BuildBoundaryLayers=True,
-                                                ExitVolumeName='InDet::Containers::InnerDetector')
+                                                TrackingVolumeCreator = InDetCylinderVolumeCreator,
+                                                LayerArrayCreator = InDetLayerArrayCreator,
+                                                ReplaceAllJointBoundaries = True,
+                                                VolumeEnclosureCylinderRadii = [],
+                                                BuildBoundaryLayers = True,
+                                                ExitVolumeName = 'InDet::Containers::InnerDetector')
 
                                                 # FIXME - not sure what to do about the following:
                                                 # BuildBoundaryLayers       = TrkDetFlags.InDetBuildMaterialBoundaries(),
                                                 # ReplaceAllJointBoundaries = TrkDetFlags.InDetBuildJointBoundaries(),
                                                 # OutputLevel               = TrkDetFlags.InDetBuildingOutputLevel(),
                                                 # ExitVolumeName            = TrkDetFlags.InDetContainerName(),
-                                                
+
                                                 # Probably they should just be dropped, but I leave this comment for the moment so reviewers can have a think as well.
-                                                
+
                                                 # Barrel Entry layers (in old config) etc were removed in 323990adfce581a635ae1809fd2ecc6a093a704c (!)
+                       )
+    return result
 
 
 def _getITkTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, namePrefix='', setLayerAssociation = True, buildTrtStrawLayers = False):
-  # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py
-  # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made
-  # i.e. this is far from complete, but is better than what was there before.
-  
-  # beampipe
-  from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-  result.merge(BeamPipeGeometryCfg(flags))
-  InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder
-  beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder')
-  beamPipeBuilder.BeamPipeMaterialBinsZ              = flags.ITk.trackingGeometry.beampipeMatZbins
-
-  result.addPublicTool(beamPipeBuilder)
-  BeamPipeBinning = 2  
-  
-  Trk__LayerProvider=CompFactory.Trk.LayerProvider
-  beamPipeProvider = Trk__LayerProvider(name=namePrefix+'BeamPipeProvider')
-  beamPipeProvider.LayerBuilder = beamPipeBuilder
-  result.addPublicTool(beamPipeProvider)  
-  
-  layerProviders = [beamPipeProvider]
-  binnings_barrel = [BeamPipeBinning]
-  binnings_endcap = [BeamPipeBinning]   
-  colors          = [2]
-  
-  # Pixel
-  if flags.Detector.GeometryITkPixel:
-    from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
-    result.merge(ITkPixelReadoutGeometryCfg(flags))
+    # Based on https://gitlab.cern.ch/atlas/athena/blob/master/InnerDetector/InDetDetDescr/InDetTrackingGeometry/python/ConfiguredInDetTrackingGeometryBuilder.py
+    # A lot of comments below are to help people understand differences from the above, in case we need to revert some simplifications I made
+    # i.e. this is far from complete, but is better than what was there before.
+
+    # beampipe
+    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
+    result.merge(BeamPipeGeometryCfg(flags))
+    InDet__BeamPipeBuilder=CompFactory.InDet.BeamPipeBuilder
+    beamPipeBuilder = InDet__BeamPipeBuilder(name=namePrefix+'BeamPipeBuilder')
+    beamPipeBuilder.BeamPipeMaterialBinsZ              = flags.ITk.trackingGeometry.beampipeMatZbins
+
+    result.addPublicTool(beamPipeBuilder)
+    BeamPipeBinning = 2
+
+    Trk__LayerProvider=CompFactory.Trk.LayerProvider
+    beamPipeProvider = Trk__LayerProvider(name=namePrefix+'BeamPipeProvider')
+    beamPipeProvider.LayerBuilder = beamPipeBuilder
+    result.addPublicTool(beamPipeProvider)
+
+    layerProviders = [beamPipeProvider]
+    binnings_barrel = [BeamPipeBinning]
+    binnings_endcap = [BeamPipeBinning]
+    colors          = [2]
+
+    # Pixel
+    if flags.Detector.GeometryITkPixel:
+        from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
+        result.merge(ITkPixelReadoutGeometryCfg(flags))
+
+        InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder
+        PixelLayerBuilderInner = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderInner')
+        PixelLayerBuilderInner.PixelCase            = True
+        PixelLayerBuilderInner.Identification       = 'ITkPixelInner'
+        PixelLayerBuilderInner.SiDetManagerLocation = 'ITkPixel'
+        PixelLayerBuilderInner.LayerIndicesBarrel   = [0,1]
+        PixelLayerBuilderInner.LayerIndicesEndcap   = [0,1,2]
+        PixelLayerBuilderInner.UseRingLayout        = True
+        # Pixel barrel specifications
+        PixelLayerBuilderInner.BarrelLayerBinsZ     = flags.ITk.trackingGeometry.pixelBarrelMatZbins
+        PixelLayerBuilderInner.BarrelLayerBinsPhi   = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins
+        PixelLayerBuilderInner.EndcapLayerBinsR     = flags.ITk.trackingGeometry.pixelEndcapMatRbins
+        PixelLayerBuilderInner.EndcapLayerBinsPhi   = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins
+
+        # set the layer association
+        PixelLayerBuilderInner.SetLayerAssociation  = setLayerAssociation
+
+        # the binning type of the layers   a
+        PixelLayerBinning = 2
+        # add it to tool service
+        result.addPublicTool(PixelLayerBuilderInner)
+
+        pixelProviderInner = Trk__LayerProvider(name=namePrefix+'PixelProviderInner')
+        pixelProviderInner.LayerBuilder = PixelLayerBuilderInner
+        result.addPublicTool(pixelProviderInner)
+        # put them to the caches
+        layerProviders  += [pixelProviderInner]
+        binnings_barrel += [ PixelLayerBinning ]
+        binnings_endcap += [ PixelLayerBinning ]
+        colors          += [ 3 ]
+
+        PixelLayerBuilderOuter = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderOuter')
+        PixelLayerBuilderOuter.PixelCase            = True
+        PixelLayerBuilderOuter.Identification       = 'ITkPixelOuter'
+        PixelLayerBuilderOuter.SiDetManagerLocation = 'ITkPixel'
+        PixelLayerBuilderOuter.LayerIndicesBarrel   = [2,3,4]
+        PixelLayerBuilderOuter.LayerIndicesEndcap   = [3,4,5,6,7,8]
+        PixelLayerBuilderOuter.UseRingLayout=True
+        PixelLayerBuilderOuter.BarrelLayerBinsZ     = flags.ITk.trackingGeometry.pixelBarrelMatZbins
+        PixelLayerBuilderOuter.BarrelLayerBinsPhi   = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins
+        PixelLayerBuilderOuter.EndcapLayerBinsR     = flags.ITk.trackingGeometry.pixelEndcapMatRbins
+        PixelLayerBuilderOuter.EndcapLayerBinsPhi   = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins
+
+        # set the layer association
+        PixelLayerBuilderOuter.SetLayerAssociation  = setLayerAssociation
+
+        # the binning type of the layers   a
+        PixelLayerBinning = 2
+        # add it to tool service
+        result.addPublicTool(PixelLayerBuilderOuter)
+
+        pixelProviderOuter = Trk__LayerProvider(name=namePrefix+'PixelProviderOuter')
+        pixelProviderOuter.LayerBuilder = PixelLayerBuilderOuter
+        result.addPublicTool(pixelProviderOuter)
+        # put them to the caches
+        layerProviders  += [pixelProviderOuter]
+        binnings_barrel += [ PixelLayerBinning ]
+        binnings_endcap += [ PixelLayerBinning ]
+        colors          += [ 3 ]
+
+    if flags.Detector.GeometryITkStrip:
+        from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
+        result.merge(ITkStripReadoutGeometryCfg(flags))
+
+        # SCT building
+        InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder
+        SCT_LayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'SCT_LayerBuilder')
+        SCT_LayerBuilder.PixelCase                       = False
+        SCT_LayerBuilder.Identification                  = 'ITkStrip'
+        SCT_LayerBuilder.SiDetManagerLocation            = 'ITkStrip'
+        SCT_LayerBuilder.AddMoreSurfaces                 = True
+        SCT_LayerBuilder.BarrelLayerBinsZ                = flags.ITk.trackingGeometry.stripBarrelMatZbins
+        SCT_LayerBuilder.BarrelLayerBinsPhi              = flags.ITk.trackingGeometry.stripBarrelMatPhiBins
+        SCT_LayerBuilder.EndcapLayerBinsR                = flags.ITk.trackingGeometry.stripEndcapMatRbins
+        SCT_LayerBuilder.EndcapLayerBinsPhi              = flags.ITk.trackingGeometry.stripEndcapMatPhiBins
+        # set the layer association
+        SCT_LayerBuilder.SetLayerAssociation             = setLayerAssociation
+        # the binning type of the layer
+        SCT_LayerBinning = 2
+        # SCT -> ToolSvc
+        result.addPublicTool(SCT_LayerBuilder)
+
+        stripProvider = Trk__LayerProvider(name=namePrefix+'StripProvider')
+        stripProvider.LayerBuilder = SCT_LayerBuilder
+        result.addPublicTool(stripProvider)
+
+        # put them to the caches
+        layerProviders  += [stripProvider]
+        binnings_barrel += [ SCT_LayerBinning ]
+        binnings_endcap += [ SCT_LayerBinning ]
+        colors          += [ 4 ]
+
+    # helpers for the InDetTrackingGeometry Builder : layer array creator
+    Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator
+    InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator')
+    InDetLayerArrayCreator.EmptyLayerMode           = 2 # deletes empty material layers from arrays
+    # add to ToolSvc
+    result.addPublicTool(InDetLayerArrayCreator)
+
+    # helpers for the InDetTrackingGeometry Builder : volume array creator
+    Trk__TrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator
+    InDetTrackingVolumeArrayCreator = Trk__TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator')
+    # add to ToolSvc
+    result.addPublicTool(InDetTrackingVolumeArrayCreator)
+
+    # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing
+    Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper
+    InDetTrackingVolumeHelper                             = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper')
+    InDetTrackingVolumeHelper.BarrelLayerBinsZ   = flags.ITk.trackingGeometry.passiveBarrelMatZbins
+    InDetTrackingVolumeHelper.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins
+    InDetTrackingVolumeHelper.EndcapLayerBinsR   = flags.ITk.trackingGeometry.passiveEndcapMatRbins
+    InDetTrackingVolumeHelper.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.passiveEndcapMatPhiBins
+
+    # the material bins - assume defaults
+    # add to ToolSvc
+    result.addPublicTool(InDetTrackingVolumeHelper)
+
+    # helpers for the InDetTrackingGeometry Builder : cylinder volume creator
+    Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator
+    InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator')
+    # give it the layer array creator
+    InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator
+    InDetCylinderVolumeCreator.TrackingVolumeArrayCreator = InDetTrackingVolumeArrayCreator
+    InDetCylinderVolumeCreator.TrackingVolumeHelper       = InDetTrackingVolumeHelper
+    InDetCylinderVolumeCreator.PassiveLayerThickness      = 1. ## mm
+    InDetCylinderVolumeCreator.PassiveLayerBinsRZ   = flags.ITk.trackingGeometry.passiveBarrelMatZbins
+    InDetCylinderVolumeCreator.PassiveLayerBinsPhi  = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins
+
+    # specifiy the binning, passive layers, entry layers - assume defaults
+    # add to ToolSvc
+    result.addPublicTool(InDetCylinderVolumeCreator)
+
+    # the tracking geometry builder
+    InDet__StagedTrackingGeometryBuilder=CompFactory.InDet.StagedTrackingGeometryBuilder
+    return InDet__StagedTrackingGeometryBuilder(namePrefix+name,
+                                                LayerBuilders     = layerProviders,
+                                                LayerBinningTypeCenter    = binnings_barrel,
+                                                LayerBinningTypeEndcap    = binnings_endcap,
+                                                ColorCodes                = colors,
+                                                EnvelopeDefinitionSvc     = envelopeDefinitionSvc,
+                                                TrackingVolumeCreator     = InDetCylinderVolumeCreator,
+                                                LayerArrayCreator         = InDetLayerArrayCreator,
+                                                CheckForRingLayout        = True,
+                                                MinimalRadialGapForVolumeSplit = flags.ITk.trackingGeometry.minimalRadialGapForVolumeSplit,
+                                                ReplaceAllJointBoundaries = True,
+                                                BuildBoundaryLayers=True,
+                                                ExitVolumeName='InDet::Containers::InnerDetector')
 
-    InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder
-    PixelLayerBuilderInner = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderInner')
-    PixelLayerBuilderInner.PixelCase            = True
-    PixelLayerBuilderInner.Identification       = 'ITkPixelInner'
-    PixelLayerBuilderInner.SiDetManagerLocation = 'ITkPixel'
-    PixelLayerBuilderInner.LayerIndicesBarrel   = [0,1]
-    PixelLayerBuilderInner.LayerIndicesEndcap   = [0,1,2]
-    PixelLayerBuilderInner.UseRingLayout        = True
-    # Pixel barrel specifications
-    PixelLayerBuilderInner.BarrelLayerBinsZ     = flags.ITk.trackingGeometry.pixelBarrelMatZbins
-    PixelLayerBuilderInner.BarrelLayerBinsPhi   = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins
-    PixelLayerBuilderInner.EndcapLayerBinsR     = flags.ITk.trackingGeometry.pixelEndcapMatRbins
-    PixelLayerBuilderInner.EndcapLayerBinsPhi   = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins
-    
-    # set the layer association
-    PixelLayerBuilderInner.SetLayerAssociation  = setLayerAssociation
-
-    # the binning type of the layers   a
-    PixelLayerBinning = 2
-    # add it to tool service
-    result.addPublicTool(PixelLayerBuilderInner)
-    
-    pixelProviderInner = Trk__LayerProvider(name=namePrefix+'PixelProviderInner')
-    pixelProviderInner.LayerBuilder = PixelLayerBuilderInner
-    result.addPublicTool(pixelProviderInner)
-    # put them to the caches
-    layerProviders  += [pixelProviderInner]
-    binnings_barrel += [ PixelLayerBinning ]
-    binnings_endcap += [ PixelLayerBinning ]
-    colors          += [ 3 ]
-    
-    PixelLayerBuilderOuter = InDet__SiLayerBuilder(name=namePrefix+'PixelLayerBuilderOuter')
-    PixelLayerBuilderOuter.PixelCase            = True
-    PixelLayerBuilderOuter.Identification       = 'ITkPixelOuter'
-    PixelLayerBuilderOuter.SiDetManagerLocation = 'ITkPixel'
-    PixelLayerBuilderOuter.LayerIndicesBarrel   = [2,3,4]
-    PixelLayerBuilderOuter.LayerIndicesEndcap   = [3,4,5,6,7,8]
-    PixelLayerBuilderOuter.UseRingLayout=True
-    PixelLayerBuilderOuter.BarrelLayerBinsZ     = flags.ITk.trackingGeometry.pixelBarrelMatZbins
-    PixelLayerBuilderOuter.BarrelLayerBinsPhi   = flags.ITk.trackingGeometry.pixelBarrelMatPhiBins
-    PixelLayerBuilderOuter.EndcapLayerBinsR     = flags.ITk.trackingGeometry.pixelEndcapMatRbins
-    PixelLayerBuilderOuter.EndcapLayerBinsPhi   = flags.ITk.trackingGeometry.pixelEndcapMatPhiBins
-    
-    # set the layer association
-    PixelLayerBuilderOuter.SetLayerAssociation  = setLayerAssociation
-
-    # the binning type of the layers   a
-    PixelLayerBinning = 2
-    # add it to tool service
-    result.addPublicTool(PixelLayerBuilderOuter)
-    
-    pixelProviderOuter = Trk__LayerProvider(name=namePrefix+'PixelProviderOuter')
-    pixelProviderOuter.LayerBuilder = PixelLayerBuilderOuter
-    result.addPublicTool(pixelProviderOuter)
-    # put them to the caches
-    layerProviders  += [pixelProviderOuter]
-    binnings_barrel += [ PixelLayerBinning ]
-    binnings_endcap += [ PixelLayerBinning ]
-    colors          += [ 3 ]
-
-  if flags.Detector.GeometryITkStrip:
-    from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
-    result.merge(ITkStripReadoutGeometryCfg(flags))
 
-    # SCT building
-    InDet__SiLayerBuilder=CompFactory.InDet.SiLayerBuilder
-    SCT_LayerBuilder = InDet__SiLayerBuilder(name=namePrefix+'SCT_LayerBuilder')
-    SCT_LayerBuilder.PixelCase                       = False
-    SCT_LayerBuilder.Identification                  = 'ITkStrip'
-    SCT_LayerBuilder.SiDetManagerLocation            = 'ITkStrip'
-    SCT_LayerBuilder.AddMoreSurfaces                 = True
-    SCT_LayerBuilder.BarrelLayerBinsZ                = flags.ITk.trackingGeometry.stripBarrelMatZbins
-    SCT_LayerBuilder.BarrelLayerBinsPhi              = flags.ITk.trackingGeometry.stripBarrelMatPhiBins
-    SCT_LayerBuilder.EndcapLayerBinsR                = flags.ITk.trackingGeometry.stripEndcapMatRbins
-    SCT_LayerBuilder.EndcapLayerBinsPhi              = flags.ITk.trackingGeometry.stripEndcapMatPhiBins
-    # set the layer association                   
-    SCT_LayerBuilder.SetLayerAssociation             = setLayerAssociation        
-    # the binning type of the layer     
-    SCT_LayerBinning = 2
-    # SCT -> ToolSvc                             
-    result.addPublicTool(SCT_LayerBuilder)
-    
-    stripProvider = Trk__LayerProvider(name=namePrefix+'StripProvider')
-    stripProvider.LayerBuilder = SCT_LayerBuilder
-    result.addPublicTool(stripProvider)
-    
-    # put them to the caches
-    layerProviders  += [stripProvider]
-    binnings_barrel += [ SCT_LayerBinning ]
-    binnings_endcap += [ SCT_LayerBinning ]
-    colors          += [ 4 ]
-  
-  # helpers for the InDetTrackingGeometry Builder : layer array creator
-  Trk__LayerArrayCreator=CompFactory.Trk.LayerArrayCreator
-  InDetLayerArrayCreator = Trk__LayerArrayCreator(name = 'InDetLayerArrayCreator')
-  InDetLayerArrayCreator.EmptyLayerMode           = 2 # deletes empty material layers from arrays
-  # add to ToolSvc
-  result.addPublicTool(InDetLayerArrayCreator)  
-
-  # helpers for the InDetTrackingGeometry Builder : volume array creator
-  Trk__TrackingVolumeArrayCreator= CompFactory.Trk.TrackingVolumeArrayCreator
-  InDetTrackingVolumeArrayCreator = Trk__TrackingVolumeArrayCreator(name = 'InDetTrackingVolumeArrayCreator')
-  # add to ToolSvc
-  result.addPublicTool(InDetTrackingVolumeArrayCreator)  
-
-  # helpers for the InDetTrackingGeometry Builder : tracking volume helper for gluing
-  Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper
-  InDetTrackingVolumeHelper                             = Trk__TrackingVolumeHelper(name ='InDetTrackingVolumeHelper')
-  InDetTrackingVolumeHelper.BarrelLayerBinsZ   = flags.ITk.trackingGeometry.passiveBarrelMatZbins
-  InDetTrackingVolumeHelper.BarrelLayerBinsPhi = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins
-  InDetTrackingVolumeHelper.EndcapLayerBinsR   = flags.ITk.trackingGeometry.passiveEndcapMatRbins
-  InDetTrackingVolumeHelper.EndcapLayerBinsPhi = flags.ITk.trackingGeometry.passiveEndcapMatPhiBins
-  
-  # the material bins - assume defaults
-  # add to ToolSvc
-  result.addPublicTool(InDetTrackingVolumeHelper)  
-  
-  # helpers for the InDetTrackingGeometry Builder : cylinder volume creator
-  Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator
-  InDetCylinderVolumeCreator = Trk__CylinderVolumeCreator(name = 'InDetCylinderVolumeCreator')
-  # give it the layer array creator
-  InDetCylinderVolumeCreator.LayerArrayCreator = InDetLayerArrayCreator
-  InDetCylinderVolumeCreator.TrackingVolumeArrayCreator = InDetTrackingVolumeArrayCreator
-  InDetCylinderVolumeCreator.TrackingVolumeHelper       = InDetTrackingVolumeHelper
-  InDetCylinderVolumeCreator.PassiveLayerThickness      = 1. ## mm
-  InDetCylinderVolumeCreator.PassiveLayerBinsRZ   = flags.ITk.trackingGeometry.passiveBarrelMatZbins
-  InDetCylinderVolumeCreator.PassiveLayerBinsPhi  = flags.ITk.trackingGeometry.passiveBarrelMatPhiBins
-        
-  # specifiy the binning, passive layers, entry layers - assume defaults
-  # add to ToolSvc
-  result.addPublicTool(InDetCylinderVolumeCreator)  
-
-  # the tracking geometry builder
-  InDet__StagedTrackingGeometryBuilder=CompFactory.InDet.StagedTrackingGeometryBuilder
-  return InDet__StagedTrackingGeometryBuilder(namePrefix+name,
-                                              LayerBuilders     = layerProviders,
-                                              LayerBinningTypeCenter    = binnings_barrel,
-                                              LayerBinningTypeEndcap    = binnings_endcap,
-                                              ColorCodes                = colors,
-                                              EnvelopeDefinitionSvc     = envelopeDefinitionSvc,
-                                              TrackingVolumeCreator     = InDetCylinderVolumeCreator,
-                                              LayerArrayCreator         = InDetLayerArrayCreator,
-                                              CheckForRingLayout        = True,
-                                              MinimalRadialGapForVolumeSplit = flags.ITk.trackingGeometry.minimalRadialGapForVolumeSplit,
-                                              ReplaceAllJointBoundaries = True,
-                                              BuildBoundaryLayers=True,
-                                              ExitVolumeName='InDet::Containers::InnerDetector')
-  
 # Replaces https://gitlab.cern.ch/atlas/athena/blob/master/Calorimeter/CaloTrackingGeometry/python/ConfiguredCaloTrackingGeometryBuilder.py
-def _getCaloTrackingGeometryBuilder(name, flags,result, envelopeDefinitionSvc, trackingVolumeHelper, namePrefix=''):
-  # The following replaces LArCalorimeter/LArTrackingGeometry/python/ConfiguredLArVolumeBuilder.py
-  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
-  result.merge(LArGMCfg(flags))
-  LAr__LArVolumeBuilder=CompFactory.LAr.LArVolumeBuilder
-  lArVolumeBuilder = LAr__LArVolumeBuilder(name="LArVolumeBuilderCond", TrackingVolumeHelper = trackingVolumeHelper,)
-  result.addPublicTool(lArVolumeBuilder)
-  
-  # The following replaces TileCalorimeter/TileTrackingGeometry/python/ConfiguredTileVolumeBuilder.py
-  from TileGeoModel.TileGMConfig import TileGMCfg
-  result.merge(TileGMCfg(flags))
-  Tile__TileVolumeBuilder=CompFactory.Tile.TileVolumeBuilder
-  tileVolumeBuilder = Tile__TileVolumeBuilder(name="TileVolumeBuilderCond", TrackingVolumeHelper = trackingVolumeHelper,  )
-  result.addPublicTool(tileVolumeBuilder)
-  
-  Calo__CaloTrackingGeometryBuilder=CompFactory.Calo.CaloTrackingGeometryBuilder
-  return Calo__CaloTrackingGeometryBuilder(namePrefix+name, LArVolumeBuilder = lArVolumeBuilder,
-                                                   TileVolumeBuilder = tileVolumeBuilder,
-                                                   TrackingVolumeHelper = trackingVolumeHelper,
-                                                   EnvelopeDefinitionSvc = envelopeDefinitionSvc,
-                                                   EntryVolumeName = "InDet::Containers::EntryVolume",
-                                                   ExitVolumeName = "Calo::Container",
-                                                   GapLayerEnvelope=5.0
-                                                   )
+def CaloTrackingGeometryBuilderCfg(name, flags, envelopeDefinitionSvc, namePrefix=''):
+    result = ComponentAccumulator()
+    # The following replaces LArCalorimeter/LArTrackingGeometry/python/ConfiguredLArVolumeBuilder.py
+    from LArGeoAlgsNV.LArGMConfig import LArGMCfg
+    result.merge(LArGMCfg(flags))
+    LAr__LArVolumeBuilder=CompFactory.LAr.LArVolumeBuilder
+    lArVolumeBuilder = LAr__LArVolumeBuilder(name="LArVolumeBuilder", TrackingVolumeHelper = trackingVolumeHelper,)
+    result.addPublicTool(lArVolumeBuilder)
+
+    # The following replaces TileCalorimeter/TileTrackingGeometry/python/ConfiguredTileVolumeBuilder.py
+    from TileGeoModel.TileGMConfig import TileGMCfg
+    result.merge(TileGMCfg(flags))
+    Tile__TileVolumeBuilder=CompFactory.Tile.TileVolumeBuilder
+    tileVolumeBuilder = Tile__TileVolumeBuilder(name="TileVolumeBuilder", TrackingVolumeHelper = trackingVolumeHelper,  )
+    result.addPublicTool(tileVolumeBuilder)
+
+    Trk__TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper
+    trackingVolumeHelper = Trk__TrackingVolumeHelper(name='TrackingVolumeHelper')
+    result.addPublicTool(trackingVolumeHelper)
+
+    Trk__CylinderVolumeCreator = CompFactory.Trk.CylinderVolumeCreator
+    caloVolumeCreator = Trk__CylinderVolumeCreator("CaloVolumeCreator")
+    result.addPublicTool(caloVolumeCreator)
+
+    Calo__CaloTrackingGeometryBuilder=CompFactory.Calo.CaloTrackingGeometryBuilder
+    result.setPrivateTools(Calo__CaloTrackingGeometryBuilder(namePrefix+name, LArVolumeBuilder = lArVolumeBuilder,
+                                                             TileVolumeBuilder = tileVolumeBuilder,
+                                                             TrackingVolumeHelper = trackingVolumeHelper,
+                                                             EnvelopeDefinitionSvc = envelopeDefinitionSvc,
+                                                             EntryVolumeName = "InDet::Containers::EntryVolume",
+                                                             ExitVolumeName = "Calo::Container",
+                                                             GapLayerEnvelope=5.0,
+                                                             TrackingVolumeCreator = caloVolumeCreator
+                                                         ))
+    return result
+
+
+def MuonTrackingGeometryBuilderCfg(flags, envelopeDefinitionSvc):
+    result = ComponentAccumulator()
+    # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry import MuonTrackingGeometryBuilder
+    # Add the muon geometry model to the CA
+    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+    result.merge(MuonGeoModelCfg(flags))
+    Muon__MuonStationTypeBuilder = CompFactory.Muon.MuonStationTypeBuilder
+    muonStationTypeBuilder= Muon__MuonStationTypeBuilder(name = 'MuonStationTypeBuilder')
+
+    Muon__MuonStationBuilder=CompFactory.Muon.MuonStationBuilder
+    muonStationBuilder= Muon__MuonStationBuilder(name = 'MuonStationBuilder')
+    muonStationBuilder.StationTypeBuilder = muonStationTypeBuilder
+
+    muonInertMaterialBuilder= CompFactory.Muon.MuonInertMaterialBuilder(name = 'MuonInertMaterialBuilder')
+
+    Muon__MuonTrackingGeometryBuilder=CompFactory.Muon.MuonTrackingGeometryBuilder
+    muonTrackingGeometryBuilder= Muon__MuonTrackingGeometryBuilder(name = 'MuonTrackingGeometryBuilder',
+                                                                   EnvelopeDefinitionSvc=envelopeDefinitionSvc,
+                                                                   MuonStationBuilder = muonStationBuilder,
+                                                                   InertMaterialBuilder=muonInertMaterialBuilder
+    )
+    # import pdb ; pdb.set_trace()
+    muonTrackingGeometryBuilder.EntryVolumeName = 'MuonSpectrometerEntrance'
+    muonTrackingGeometryBuilder.ExitVolumeName  = 'Muon::Containers::MuonSystem'
+    result.setPrivateTools(muonTrackingGeometryBuilder)
+    return result
+
 
 # Originally this function would use was TrkDetFlags.MaterialSource() and TrkDetFlags.MaterialValidation(). For new configuration, (temporarily?) pass as parameters.
 # https://gitlab.cern.ch/atlas/athena/blob/master/Tracking/TrkDetDescr/TrkDetDescrSvc/python/AtlasTrackingGeometrySvc.py#L112
@@ -426,104 +497,68 @@ def TrackingGeometrySvcCfg( flags , name = 'AtlasTrackingGeometrySvc', doMateria
     """
     result = ComponentAccumulator()
     atlas_tracking_geometry_name = 'AtlasTrackingGeometry'
-    atlas_geometry_builder = CompFactory.Trk.GeometryBuilder(name = 'AtlasGeometryBuilder', WorldDimension=[], WorldMaterialProperties=[], 
-                                TrackingVolumeArrayCreator=CompFactory.Trk.TrackingVolumeArrayCreator(name="TrackingVolumeArrayCreator"), 
+    atlas_geometry_builder = CompFactory.Trk.GeometryBuilder(name = 'AtlasGeometryBuilder', WorldDimension=[], WorldMaterialProperties=[],
+                                TrackingVolumeArrayCreator=CompFactory.Trk.TrackingVolumeArrayCreator(name="TrackingVolumeArrayCreator"),
                                 TrackingVolumeHelper = CompFactory.Trk.TrackingVolumeHelper(name="TrackingVolumeHelper") )
-    
-    envelopSvcCfg= EnvelopeDefSvcCfg(flags)
-    atlas_env_def_service=envelopSvcCfg.getPrimary()
-    result.merge(envelopSvcCfg)
+
+    atlas_env_def_service = result.getPrimaryAndMerge(EnvelopeDefSvcCfg(flags))
 
     # Depending on the job configuration, setup the various detector builders, and add to atlas_geometry_builder
     if flags.Detector.GeometryID:
-      # TODO Not sure how to handle TrkDetFlags, specifically ISF_FatrasCustomGeometry, XMLFastCustomGeometry
-      # So, here we only setup the default InDet geometry builder!
-      inDetTrackingGeometryBuilder = _getInDetTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result, envelopeDefinitionSvc=atlas_env_def_service,
-                                                                      buildTrtStrawLayers=(flags.Beam.Type=='cosmics'))
-      
-      atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder
-      
-    elif flags.Detector.GeometryITk:
-      inDetTrackingGeometryBuilder = _getITkTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result,
-                                                                    envelopeDefinitionSvc=atlas_env_def_service)
-      atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder
-      
-    if flags.Detector.GeometryCalo:
-      Trk__CylinderVolumeCreator=CompFactory.Trk.CylinderVolumeCreator
-      caloVolumeCreator = Trk__CylinderVolumeCreator("CaloVolumeCreator")
-      result.addPublicTool(caloVolumeCreator)
+        # TODO Not sure how to handle TrkDetFlags, specifically ISF_FatrasCustomGeometry, XMLFastCustomGeometry
+        # So, here we only setup the default InDet geometry builder!
+        atlas_geometry_builder.InDetTrackingGeometryBuilder = result.popToolsAndMerge(InDetTrackingGeometryBuilderCfg(name = 'InDetTrackingGeometryBuilder',
+                                                                                                                      flags = flags,
+                                                                                                                      envelopeDefinitionSvc = atlas_env_def_service))
 
-      Trk__TrackingVolumeHelper=CompFactory.Trk.TrackingVolumeHelper
-      trackingVolumeHelper = Trk__TrackingVolumeHelper(name='TrackingVolumeHelper')
-      result.addPublicTool(trackingVolumeHelper)
+    elif flags.Detector.GeometryITk:
+        inDetTrackingGeometryBuilder = _getITkTrackingGeometryBuilder(name ='InDetTrackingGeometryBuilder', flags=flags, result=result,
+                                                                      envelopeDefinitionSvc=atlas_env_def_service)
+        atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder
 
-      caloTrackingGeometryBuilder = _getCaloTrackingGeometryBuilder(name ='CaloTrackingGeometryBuilder', flags=flags, 
-                                     result=result, envelopeDefinitionSvc=atlas_env_def_service, trackingVolumeHelper=trackingVolumeHelper)
-      caloTrackingGeometryBuilder.TrackingVolumeCreator=caloVolumeCreator
-      atlas_geometry_builder.CaloTrackingGeometryBuilder = caloTrackingGeometryBuilder
+    if flags.Detector.GeometryCalo:
+        atlas_geometry_builder.CaloTrackingGeometryBuilder = result.popToolsAndMerge(CaloTrackingGeometryBuilderCfg(name = 'CaloTrackingGeometryBuilder',
+                                                                                                                    flags = flags,
+                                                                                                                    envelopeDefinitionSvc = atlas_env_def_service))
 
     if flags.Detector.GeometryMuon:
-      # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry import MuonTrackingGeometryBuilder
-      # Add the muon geometry model to the CA
-      from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
-      result.merge(MuonGeoModelCfg(flags))
-      Muon__MuonStationTypeBuilder=CompFactory.Muon.MuonStationTypeBuilder
-      muonStationTypeBuilder= Muon__MuonStationTypeBuilder(name = 'MuonStationTypeBuilder')
-    
-      Muon__MuonStationBuilder=CompFactory.Muon.MuonStationBuilder
-      muonStationBuilder= Muon__MuonStationBuilder(name = 'MuonStationBuilder')
-      muonStationBuilder.StationTypeBuilder = muonStationTypeBuilder
-
-      muonInertMaterialBuilder= CompFactory.Muon.MuonInertMaterialBuilder(name = 'MuonInertMaterialBuilder')
-
-      Muon__MuonTrackingGeometryBuilder=CompFactory.Muon.MuonTrackingGeometryBuilder
-      muonTrackingGeometryBuilder= Muon__MuonTrackingGeometryBuilder(name = 'MuonTrackingGeometryBuilder', 
-                                                                     EnvelopeDefinitionSvc=atlas_env_def_service,
-                                                                     MuonStationBuilder = muonStationBuilder,
-                                                                     InertMaterialBuilder=muonInertMaterialBuilder
-                                                                     )
-      # import pdb ; pdb.set_trace()
-      muonTrackingGeometryBuilder.EntryVolumeName = 'MuonSpectrometerEntrance'
-      muonTrackingGeometryBuilder.ExitVolumeName  = 'Muon::Containers::MuonSystem'
-      # result.addPublicTool(muonTrackingGeometryBuilder)
-    
-      atlas_geometry_builder.MuonTrackingGeometryBuilder = muonTrackingGeometryBuilder
-    
+        atlas_geometry_builder.MuonTrackingGeometryBuilder = result.popToolsAndMerge(MuonTrackingGeometryBuilderCfg(flags,
+                                                                                                                    envelopeDefinitionSvc = atlas_env_def_service))
+
     # Now set up processors
-    atlas_geometry_processors=[]
-    
+    atlas_geometry_processors=[] # array of private ToolHandles
+
     if flags.TrackingGeometry.MaterialSource == 'COOL':
-      
-      CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialV2'
-      if flags.Detector.GeometryITk:
-        CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialITK'
-      
-      # the material provider
-      Trk__LayerMaterialProvider=CompFactory.Trk.LayerMaterialProvider
-      atlasMaterialProvider = Trk__LayerMaterialProvider('AtlasMaterialProvider', LayerMaterialMapName=CoolDataBaseFolder, LayerMaterialMapKey='')
-      atlas_geometry_processors += [ atlasMaterialProvider ]
-        
-      # Setup DBs
-      result.merge(_setupCondDB(flags, CoolDataBaseFolder))
-       
+
+        CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialV2'
+        if flags.Detector.GeometryITk:
+            CoolDataBaseFolder = '/GLOBAL/TrackingGeo/LayerMaterialITK'
+
+        # the material provider
+        Trk__LayerMaterialProvider=CompFactory.Trk.LayerMaterialProvider
+        atlasMaterialProvider = Trk__LayerMaterialProvider('AtlasMaterialProvider', LayerMaterialMapName=CoolDataBaseFolder, LayerMaterialMapKey='')
+        atlas_geometry_processors += [ atlasMaterialProvider ]
+
+        # Setup DBs
+        result.merge(_setupCondDB(flags, CoolDataBaseFolder))
+
     elif  flags.TrackingGeometry.MaterialSource == 'Input':
-      Trk__InputLayerMaterialProvider=CompFactory.Trk.InputLayerMaterialProvider
-      atlasMaterialProvider = Trk__InputLayerMaterialProvider('AtlasMaterialProvider')
-      atlas_geometry_processors += [ atlasMaterialProvider ]
-      
+        Trk__InputLayerMaterialProvider=CompFactory.Trk.InputLayerMaterialProvider
+        atlasMaterialProvider = Trk__InputLayerMaterialProvider('AtlasMaterialProvider')
+        atlas_geometry_processors += [ atlasMaterialProvider ]
+
     if doMaterialValidation:
-      Trk__LayerMaterialInspector=CompFactory.Trk.LayerMaterialInspector
-      atlasLayerMaterialInspector = Trk__LayerMaterialInspector('AtlasLayerMaterialInspector')
-      atlas_geometry_processors += [ atlasLayerMaterialInspector ]
+        Trk__LayerMaterialInspector=CompFactory.Trk.LayerMaterialInspector
+        atlasLayerMaterialInspector = Trk__LayerMaterialInspector('AtlasLayerMaterialInspector')
+        atlas_geometry_processors += [ atlasLayerMaterialInspector ]
 
-    svc = CompFactory.Trk.TrackingGeometrySvc( name, GeometryBuilder = atlas_geometry_builder,
+    result.addService(CompFactory.Trk.TrackingGeometrySvc( name, GeometryBuilder = atlas_geometry_builder,
                                     TrackingGeometryName = atlas_tracking_geometry_name,
-                                    GeometryProcessors = PrivateToolHandleArray(atlas_geometry_processors), 
-                                    BuildGeometryFromTagInfo = True)
-    result.addService(svc, primary = True)
+                                    GeometryProcessors = PrivateToolHandleArray(atlas_geometry_processors),
+                                    BuildGeometryFromTagInfo = True), primary = True)
 
     return result
-        
+
 if __name__ == '__main__':
     from AthenaCommon.Configurable import Configurable
     Configurable.configurableRun3Behavior=1