diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/ITkGMConfig.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/ITkGMConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..e2d6029d78f1014f52ce1d32f24169fd43d3af15
--- /dev/null
+++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/ITkGMConfig.py
@@ -0,0 +1,58 @@
+#
+#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+#
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+def ITkGeometryCfg (flags):
+    acc = ComponentAccumulator()
+    GeometryDBSvc=CompFactory.GeometryDBSvc
+    acc.addService(GeometryDBSvc("InDetGeometryDBSvc")) #Beampipe builder expects "InDet" rather than "ITk" - can this be steered?
+    if flags.Detector.GeometryITkPixel:
+        #Need new module in PixelGeoModelXml to import here once it exists...
+        #from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
+        #acc.merge(PixelGeometryCfg( flags ))
+        print("ITk Pixel not yet supported in this release...")
+    if flags.Detector.GeometryITkStrip:
+        from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripGeometryCfg
+        acc.merge(ITkStripGeometryCfg( flags ))
+    return acc
+
+
+if __name__ == "__main__":
+  from AthenaCommon.Logging import log
+  from AthenaCommon.Constants import DEBUG
+  from AthenaCommon.Configurable import Configurable
+  from AthenaConfiguration.AllConfigFlags import ConfigFlags
+  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+  # Set up logging and new style config
+  log.setLevel(DEBUG)
+  Configurable.configurableRun3Behavior = True
+  from AthenaConfiguration.TestDefaults import defaultTestFiles
+  # Provide MC input
+  ConfigFlags.Input.Files = defaultTestFiles.HITS
+  ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
+  ConfigFlags.Detector.SimulateITkPixel = True
+  ConfigFlags.Detector.SimulateITkStrip   = True
+  ConfigFlags.GeoModel.Align.Dynamic    = False
+  # Provide data input
+  ##from AthenaConfiguration.TestDefaults import defaultTestFiles
+  ##ConfigFlags.Input.Files = defaultTestFiles.AOD
+  ##ConfigFlags.GeoModel.Align.Dynamic    = True
+  #
+  ConfigFlags.lock()
+  # Construct ComponentAccumulator
+  acc = MainServicesCfg(ConfigFlags)
+  acc.merge(PoolReadCfg(ConfigFlags))
+  acc.merge(ITkGeometryCfg(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required
+  #acc.getService("StoreGateSvc").Dump=True
+  acc.getService("ConditionStore").Dump=True
+  acc.printConfig(withDetails=True)
+  f=open('ITkGMCfg2.pkl','wb')
+  acc.store(f)
+  f.close()
+  ConfigFlags.dump()
+  # Execute and finish
+  acc.run(maxEvents=3)
diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py
index c14ad63f8d90dce0ddff05a071383356aef7b126..7f1952dc4e11e0edcc3de97254c66875f66db672 100755
--- a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py
+++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGM.py
@@ -25,12 +25,6 @@ elif ( DetFlags.detdescr.ID_on() ):
     if not hasattr(svcMgr,'InDetGeometryDBSvc'):
         from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
         svcMgr+=GeometryDBSvc("InDetGeometryDBSvc")
-        if InDetGeometryFlags.isSLHC():
-            #SLHC specific code
-            # General service builder tool for SLHC
-            from InDetServMatGeoModel.InDetServMatGeoModelConf import InDetServMatBuilderToolSLHC
-            InDetServMatBuilderToolSLHC = InDetServMatBuilderToolSLHC()
-            ToolSvc+=InDetServMatBuilderToolSLHC
 
     if ( DetFlags.detdescr.pixel_on() ):
         from AthenaCommon import CfgGetter
diff --git a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMConfig.py b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMConfig.py
index 29f7eb6d6f3e8d00393482afe661bc8448a043f6..69f8b841d8fb76ed68b178be47824ea6c3866b99 100644
--- a/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMConfig.py
+++ b/DetectorDescription/GeoModel/AtlasGeoModel/python/InDetGMConfig.py
@@ -13,11 +13,6 @@ def InDetServiceMaterialCfg (flags):
     acc.addService(GeometryDBSvc("InDetGeometryDBSvc"))
     InDetServMatTool=CompFactory.InDetServMatTool
     servMatTool = InDetServMatTool()
-    if flags.GeoModel.Run=="RUN4":
-        InDetServMatBuilderToolSLHC=CompFactory.InDetServMatBuilderToolSLHC
-        InDetServMatBuilderToolSLHC = InDetServMatBuilderToolSLHC()
-        acc.addPublicTool( InDetServMatBuilderToolSLHC )
-        servMatTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC
     geoModelSvc.DetectorTools += [ servMatTool ]
     acc.addService(geoModelSvc)
     return acc
diff --git a/DetectorDescription/IdDictParser/data/IdDictLArCalorimeter_HGTD_TDR_01.xml b/DetectorDescription/IdDictParser/data/IdDictLArCalorimeter_HGTD_TDR_01.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2108db54616bdc5d9f2f22f5af55163c20b46613
--- /dev/null
+++ b/DetectorDescription/IdDictParser/data/IdDictLArCalorimeter_HGTD_TDR_01.xml
@@ -0,0 +1,1127 @@
+<IdDictionary name="LArCalorimeter" version="fullAtlas" >
+
+  <field name="part" >
+    <label name="LArEM"   value="1" />
+    <label name="LArHEC"  value="2" />
+    <label name="LArFCAL" value="3" />
+    <label name="LArOnline" value="4" />
+    <label name="LArOnlineCalib" value="5" />
+    <label name="LArEMdisc"   value="-1" />
+    <label name="HGTD"   value="-2" />
+    <label name="LArFCALdisc" value="-3" />
+  </field>
+
+  <field name="barrel-endcap">
+    <label name="negative-endcap-inner-wheel" value="-3" />
+    <label name="negative-endcap-outer-wheel" value="-2" />
+    <label name="negative-barrel"             value="-1" />
+    <label name="barrel"                      value="0"  />
+    <label name="positive-barrel"             value="+1" />
+    <label name="positive-endcap-outer-wheel" value="+2" />
+    <label name="positive-endcap-inner-wheel" value="+3" />
+    <label name="negative-endcap-hgtd"        value="-1" />
+    <label name="positive-endcap-hgtd"        value="1" />
+  </field>
+
+  <field name="barrel-ec">
+    <label name="barrel" value="0" />
+    <label name="endcap" value="1" />
+  </field>    
+
+  <field name="pos_neg">
+    <label name="negative-side" value="0" />
+    <label name="positive-side" value="1" />
+  </field>    
+
+  <field name="is-slar">
+    <label name="cell" value="0" />
+    <label name="slar" value="1" />
+  </field>    
+
+  <field name="is-slar-hec">
+    <label name="cell" value="0" />
+    <label name="slar" value="1" />
+  </field>    
+
+  <field name="is-slar-fcal">
+    <label name="cell" value="0" />
+    <label name="slar" value="1" />
+  </field>    
+
+  <field name="granularity">
+    <label name="coarse" value="0" />
+    <label name="fine"   value="1" />
+  </field>    
+
+  <subregion name="LArFCAL-module" >
+    <range field="phi-fcal" minvalue="0" maxvalue="15" wraparound="TRUE" />
+  </subregion>
+
+  <subregion name="LArEM-extralarge-module" >
+    <range field="phi" minvalue="0" maxvalue="31" wraparound="TRUE" />
+  </subregion>
+
+  <subregion name="LArEM-large-module" >
+    <range field="phi" minvalue="0" maxvalue="63" wraparound="TRUE" />
+  </subregion>
+
+  <subregion name="LArEM-thin-module" >
+    <range field="phi" minvalue="0" maxvalue="255" wraparound="TRUE" />
+  </subregion>
+
+
+
+        <!-- s HGTD -->
+        <!-- we misuse eta0, deta as x0, dx -->
+        <!-- we misuse phi0, dphi as y0, dy -->
+        <!-- since we have 4 quadrants we need 1200 numbers and start at 1 -->
+        <!-- for the future use only the real cells -->
+  <region group="hgtd" name="HGTD-wheel" 
+	  eta0="0.0"  
+	  phi0="0.0"  
+	  deta="0.5"
+	  dphi="0.5"
+	  >
+    <range field="part" value="HGTD" />
+    <range field="barrel-endcap" values="negative-endcap-hgtd positive-endcap-hgtd"/>
+    <range field="sampling" minvalue="0" maxvalue="3" />
+    <range field="granularity" value="coarse" />
+    <range field="x_index" minvalue="-700" maxvalue="700" />
+    <range field="y_index" minvalue="-700" maxvalue="700" />
+  </region>
+
+<!-- we will need this for later
+  <region group="hgtdCaloCell" name="HGTD-wheel" 
+	  eta0="0.0"  
+	  phi0="0.0"  
+	  deta="0.5"
+	  dphi="0.5"
+	  >
+    <range field="part" value="HGTD" />
+    <range field="barrel-endcap" values="negative-endcap-hgtd positive-endcap-hgtd"/>
+    <range field="sampling" minvalue="0" maxvalue="3" />
+    <range field="granularity" value="fine" />
+    <range field="xCaloCell_index" minvalue="-300" maxvalue="300" />
+    <range field="yCaloCell_index" minvalue="-300" maxvalue="300" />
+  </region>
+-->
+
+        <!-- EM Barrel -->
+
+  <subregion name="LArEM-barrel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-barrel positive-barrel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-barrel-00"
+          next_samp="LArEM-barrel-10 LArEM-barrel-11" 
+          next_subdet="LArEM-outer-wheel-10 LArEM-outer-wheel-00" 
+	  eta0="0.0" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="60" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-10" next_abs_eta="LArEM-barrel-11" 
+          prev_samp="LArEM-barrel-00" 
+          next_samp="LArEM-barrel-20" 
+	  eta0="0.003125" deta="0.003125" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="1" maxvalue="447" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-11"
+          prev_samp="LArEM-barrel-00" 
+          next_samp="LArEM-barrel-21" 
+	  eta0="1.4" deta="0.025" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-20" next_abs_eta="LArEM-barrel-21" 
+          prev_samp="LArEM-barrel-10" 
+          next_samp="LArEM-barrel-30" 
+	  eta0="0.0" deta="0.025" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="55" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-21"
+          prev_samp="LArEM-barrel-11" 
+          next_subdet="LArEM-outer-wheel-10" 
+	  eta0="1.4" deta="0.075" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-30"
+          prev_samp="LArEM-barrel-20" eta0="0.0" deta="0.05" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-barrel" />
+    <range field="sampling" value="3" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="26" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+        <!-- EM Barrel sCells -->
+
+  <subregion name="sLArEM-barrel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-barrel positive-barrel" />
+  </subregion>
+
+  <region group="slar_em" name="sLArEM-barrel-00"
+          next_samp="sLArEM-barrel-10 sLArEM-barrel-11"
+          next_subdet="sLArEM-outer-wheel-10 sLArEM-outer-wheel-00"
+          eta0="0.0" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="14" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-barrel-10" next_abs_eta="sLArEM-barrel-11"
+          prev_samp="sLArEM-barrel-00"
+          next_samp="sLArEM-barrel-20"
+          eta0="0.0" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="55" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-barrel-11"
+          prev_samp="sLArEM-barrel-00"
+          next_samp="sLArEM-barrel-21"
+          eta0="1.4" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-barrel-20" next_abs_eta="sLArEM-barrel-21"
+          prev_samp="sLArEM-barrel-10"
+          next_samp="sLArEM-barrel-30"
+          eta0="0.0" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="55" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-barrel-21"
+          prev_samp="sLArEM-barrel-11"
+          next_subdet="sLArEM-outer-wheel-10"
+          eta0="1.4" deta="0.075" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-barrel-30"
+          prev_samp="sLArEM-barrel-20" eta0="0.0" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-barrel" />
+    <range field="sampling" value="3" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="13" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+
+        <!-- EM outer wheel -->
+
+  <subregion name="LArEM-outer-wheel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-outer-wheel-00" 
+          next_samp="LArEM-outer-wheel-12" 
+          prev_subdet="LArEM-barrel-00" 
+	  eta0="1.5" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="11" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-10" next_abs_eta="LArEM-outer-wheel-11" 
+          next_samp="LArEM-outer-wheel-20" 
+          prev_subdet="LArEM-barrel-00 LArEM-barrel-21" 
+	  eta0="1.375" deta="0.05" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-11" next_abs_eta="LArEM-outer-wheel-12" 
+          next_samp="LArEM-outer-wheel-21" eta0="1.425" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-12" next_abs_eta="LArEM-outer-wheel-13" 
+          prev_samp="LArEM-outer-wheel-00" 
+          next_samp="LArEM-outer-wheel-21" eta0="1.5" deta="0.003125" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="2" />
+    <range field="eta" minvalue="0" maxvalue="95" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-13" next_abs_eta="LArEM-outer-wheel-14" 
+          next_samp="LArEM-outer-wheel-21" eta0="1.8" deta="0.0041666666667" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="3" />
+    <range field="eta" minvalue="0" maxvalue="47" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-14" next_abs_eta="LArEM-outer-wheel-15" 
+          next_samp="LArEM-outer-wheel-21" eta0="2.0" deta="0.00625" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="4" />
+    <range field="eta" minvalue="0" maxvalue="63" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-15"
+          next_samp="LArEM-outer-wheel-21" eta0="2.4" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="5" />
+    <range field="eta" minvalue="0" maxvalue="3" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-20" next_abs_eta="LArEM-outer-wheel-21" 
+          prev_samp="LArEM-outer-wheel-10" eta0="1.375" deta="0.05" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-21" next_abs_eta="LArEM-inner-wheel-10" 
+          prev_samp="LArEM-outer-wheel-11 LArEM-outer-wheel-12 LArEM-outer-wheel-13 LArEM-outer-wheel-14 LArEM-outer-wheel-15" 
+          next_samp="LArEM-outer-wheel-30" eta0="1.425" deta="0.025" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="42" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-30" next_abs_eta="LArEM-inner-wheel-20"  
+          prev_samp="LArEM-outer-wheel-21" eta0="1.5" deta="0.05" phi0="0.0" dphi="256" >
+    <reference subregion="LArEM-outer-wheel" />
+    <range field="sampling" value="3" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="19" />
+    <reference subregion="LArEM-thin-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+        <!-- s EM outer wheel -->
+
+  <subregion name="sLArEM-outer-wheel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-00"
+          next_samp="sLArEM-outer-wheel-12"
+	  prev_subdet="sLArEM-barrel-00"
+          eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-10" next_abs_eta="sLArEM-outer-wheel-20"
+          next_samp="sLArEM-outer-wheel-20"
+          eta0="1.375" deta="0.125" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-12" next_abs_eta="sLArEM-outer-wheel-13"
+          prev_samp="sLArEM-outer-wheel-00"
+          next_samp="sLArEM-outer-wheel-21" eta0="1.5" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="2" />
+    <range field="eta" minvalue="0" maxvalue="11" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-13" next_abs_eta="sLArEM-outer-wheel-14"
+          next_samp="sLArEM-outer-wheel-21" eta0="1.8" deta="0.016666667" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="3" />
+    <range field="eta" minvalue="0" maxvalue="11" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-14" next_abs_eta="sLArEM-outer-wheel-15"
+          next_samp="sLArEM-outer-wheel-21" eta0="2.0" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="4" />
+    <range field="eta" minvalue="0" maxvalue="15" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-15"
+          next_samp="sLArEM-outer-wheel-21" eta0="2.4" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="5" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-20" next_abs_eta="sLArEM-outer-wheel-21"
+          prev_samp="sLArEM-outer-wheel-10" eta0="1.375" deta="0.05" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-21" next_abs_eta="sLArEM-inner-wheel-10"
+          prev_samp="sLArEM-outer-wheel-10 sLArEM-outer-wheel-12 sLArEM-outer-wheel-13 sLArEM-outer-wheel-14 sLArEM-outer-wheel-15"
+          next_samp="sLArEM-outer-wheel-30" eta0="1.425" deta="0.025" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="42" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-outer-wheel-30" next_abs_eta="sLArEM-inner-wheel-20"
+          prev_samp="sLArEM-outer-wheel-21" eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArEM-outer-wheel" />
+    <range field="sampling" value="3" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+
+
+
+        <!-- EM inner wheel -->
+
+  <subregion name="LArEM-inner-wheel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-endcap-inner-wheel positive-endcap-inner-wheel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-inner-wheel-10" 
+          next_samp="LArEM-inner-wheel-20" eta0="2.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-inner-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="6" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+  <region group="lar_em" name="LArEM-inner-wheel-20" 
+          prev_samp="LArEM-inner-wheel-10" eta0="2.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArEM-inner-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="6" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar" value="cell" />
+  </region>
+
+        <!-- sEM inner wheel -->
+
+  <subregion name="sLArEM-inner-wheel" >
+    <range field="part" value="LArEM" />
+    <range field="barrel-endcap" values="negative-endcap-inner-wheel positive-endcap-inner-wheel" />
+  </subregion>
+
+  <region group="slar_em" name="sLArEM-inner-wheel-10"
+	  next_abs_eta="sLArEM-inner-wheel-11"
+          next_samp="sLArEM-inner-wheel-20" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="sLArEM-inner-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-inner-wheel-11"
+          next_samp="sLArEM-inner-wheel-21" eta0="3.1" deta="0.1" phi0="0.0" dphi="32" >
+    <reference subregion="sLArEM-inner-wheel" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+
+  <region group="slar_em" name="sLArEM-inner-wheel-20"
+	  next_abs_eta="sLArEM-inner-wheel-21"
+          prev_samp="sLArEM-inner-wheel-10" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="sLArEM-inner-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+  <region group="slar_em" name="sLArEM-inner-wheel-21"
+          prev_samp="sLArEM-inner-wheel-11" eta0="3.1" deta="0.1" phi0="0.0" dphi="32" >
+    <reference subregion="sLArEM-inner-wheel" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar" value="slar" />
+  </region>
+
+
+
+      <!--
+
+          LArHEC
+
+        -->
+
+  <subregion name="LArHEC" >
+    <range field="part" value="LArHEC" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="lar_hec" name="LArHEC-00" next_abs_eta="LArHEC-01"
+     next_samp="LArHEC-10" eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-10" next_abs_eta="LArHEC-11"
+     next_samp="LArHEC-20" prev_samp="LArHEC-00" eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-20" next_abs_eta="LArHEC-21"
+     next_samp="LArHEC-30" prev_samp="LArHEC-10" eta0="1.6" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" values="2" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="1" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-30" next_abs_eta="LArHEC-31"
+     prev_samp="LArHEC-20" eta0="1.7" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" values="3" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="2" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-01"
+     next_samp="LArHEC-11" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="0" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="3" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-11" next_abs_eta="LArFCAL-1"
+     next_samp="LArHEC-21" prev_samp="LArHEC-01" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-21" 
+     next_samp="LArHEC-31" prev_samp="LArHEC-11" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="2" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="2" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+  <region group="lar_hec" name="LArHEC-31" 
+     prev_samp="LArHEC-21" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="LArHEC" />
+    <range field="sampling" value="3" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="3" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar-hec" value="cell" />
+  </region>
+
+
+
+
+      <!--
+
+          LArHEC supercells
+
+        -->
+
+  <subregion name="sLArHEC" >
+    <range field="part" value="LArHEC" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="slar_hec" name="sLArHEC-0" next_abs_eta="sLArHEC-1"
+     eta0="1.5" deta="0.1" phi0="0.0" dphi="64" >
+    <reference subregion="sLArHEC" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="0" maxvalue="9" />
+    <reference subregion="LArEM-large-module" />
+    <range field="is-slar-hec" value="slar" />
+  </region>
+
+  <region group="slar_hec" name="LArHEC-1"
+     next_samp="LArHEC-1" eta0="2.5" deta="0.2" phi0="0.0" dphi="32" >
+    <reference subregion="sLArHEC" />
+    <range field="sampling" value="0" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="0" maxvalue="3" />
+    <reference subregion="LArEM-extralarge-module" />
+    <range field="is-slar-hec" value="slar" />
+  </region>
+
+
+
+      <!--
+
+          LArFCAL
+
+        -->
+
+  <subregion name="LArFCAL" >
+    <range field="part" value="LArFCAL" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="lar_fcal" name="LArFCAL-1"
+     eta0="3.2" deta="0.025" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="1" />
+    <range field="eta-fcal" minvalue="0" maxvalue="62" />
+    <reference subregion="LArFCAL-module" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-2a"
+     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" minvalue="0" maxvalue="29" />
+    <range field="phi-fcal" values="0 7 8 15" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-2b"
+     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" minvalue="0" maxvalue="30" />
+    <range field="phi-fcal" values="3 4 11 12" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-2c"
+     eta0="3.2" deta="0.05" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" minvalue="0" maxvalue="31" />
+    <range field="phi-fcal" values="1 2 5 6 9 10 13 14" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-3a"
+     eta0="3.2" deta="0.1" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="3" />
+    <range field="eta-fcal" minvalue="0" maxvalue="14" />
+    <range field="phi-fcal" values="2 10" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-3b"
+     eta0="3.2" deta="0.1" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="3" />
+    <range field="eta-fcal" minvalue="0" maxvalue="14" />
+    <range field="phi-fcal" values="0 1 3 4 5 6 7 8 9 11 12 13 14 15" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-3c"
+     eta0="3.2" deta="0.1" phi0="0.0" dphi="16" >
+    <reference subregion="LArFCAL" />
+    <range field="module" value="3" />
+    <range field="eta-fcal" value="15" />
+    <range field="phi-fcal" values="0 1 2 3 4 6 7 8 9 10 11 12 14 15" />
+    <range field="is-slar-fcal" value="cell"/>
+  </region>
+
+
+
+      <!--
+
+          LArFCAL sCells
+
+        -->
+
+  <subregion name="sLArFCAL" >
+    <range field="part" value="LArFCAL" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="slar_fcal" name="sLArFCAL-1"
+     eta0="3.2" deta="0.14" phi0="0.0" dphi="16" >
+    <reference subregion="sLArFCAL" />
+    <range field="module" value="1" />
+    <range field="eta-fcal" minvalue="0" maxvalue="11" />
+    <reference subregion="LArFCAL-module" />
+    <range field="is-slar-fcal" value="slar" />
+  </region>
+
+  <region group="slar_fcal" name="sLArFCAL-2"
+     eta0="3.2" deta="0.16" phi0="0.0" dphi="16" >
+    <reference subregion="sLArFCAL" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" minvalue="0" maxvalue="7" />
+    <range field="phi-fcal" minvalue="0" maxvalue="15" />
+    <range field="is-slar-fcal" value="slar" />    
+  </region>
+
+  <region group="slar_fcal" name="sLArFCAL-3"
+     eta0="3.2" deta="0.32" phi0="0.0" dphi="16" >
+    <reference subregion="sLArFCAL" />
+    <range field="module" value="3" />
+    <range field="eta-fcal" minvalue="0" maxvalue="3" />
+    <range field="phi-fcal" minvalue="0" maxvalue="15" />
+    <range field="is-slar-fcal" value="slar" />    
+  </region>
+
+
+      <!--
+
+          Disconnected Channels
+
+        -->
+
+  <subregion name="LArEM-barreldisc" >
+    <range field="part" value="LArEMdisc" />
+    <range field="barrel-endcap" values="negative-barrel positive-barrel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-barrel-00disconnected" >
+    <reference subregion="LArEM-barreldisc" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="61" maxvalue="63" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-10disconnected" > 
+    <reference subregion="LArEM-barreldisc" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" value="0" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-barrel-30disconnected" >
+    <reference subregion="LArEM-barreldisc" />
+    <range field="sampling" value="3" />
+    <range field="region" value="0" />
+    <range field="eta" value="27" />
+    <reference subregion="LArEM-thin-module" />
+  </region>
+
+
+  <subregion name="LArEM-outer-wheeldisc" >
+    <range field="part" value="LArEMdisc" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-outer-wheel-00disconnected" > 
+    <reference subregion="LArEM-outer-wheeldisc" />
+    <range field="sampling" value="0" />
+    <range field="region" value="0" />
+    <range field="eta" minvalue="12" maxvalue="19" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-11disconnected" >
+    <reference subregion="LArEM-outer-wheeldisc" />
+    <range field="sampling" value="1" />
+    <range field="region" value="1" />
+    <range field="eta" minvalue="3" maxvalue="6" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-13disconnected" > 
+    <reference subregion="LArEM-outer-wheeldisc" />
+    <range field="sampling" value="1" />
+    <range field="region" value="3" />
+    <range field="eta" minvalue="48" maxvalue="63" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-outer-wheel-15disconnected" >
+    <reference subregion="LArEM-outer-wheeldisc" />
+    <range field="sampling" value="1" />
+    <range field="region" value="5" />
+    <range field="eta" minvalue="4" maxvalue="7" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+
+  <subregion name="LArEM-inner-wheeldisc" >
+    <range field="part" value="LArEMdisc" />
+    <range field="barrel-endcap" values="negative-endcap-inner-wheel positive-endcap-inner-wheel" />
+  </subregion>
+
+  <region group="lar_em" name="LArEM-inner-wheel-10disconnected" > 
+    <reference subregion="LArEM-inner-wheeldisc" />
+    <range field="sampling" value="1" />
+    <range field="region" value="0" />
+    <range field="eta" value="7" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+  <region group="lar_em" name="LArEM-inner-wheel-20disconnected" >
+    <reference subregion="LArEM-inner-wheeldisc" />
+    <range field="sampling" value="2" />
+    <range field="region" value="0" />
+    <range field="eta" value="7" />
+    <reference subregion="LArEM-large-module" />
+  </region>
+
+
+  <subregion name="LArFCALdisc" >
+    <range field="part" value="LArFCALdisc" />
+    <range field="barrel-endcap" values="negative-endcap-outer-wheel positive-endcap-outer-wheel" />
+  </subregion>
+
+  <region group="lar_fcal" name="LArFCAL-1disconnected" >
+    <reference subregion="LArFCALdisc" />
+    <range field="module" value="1" />
+    <range field="eta-fcal" value="63" />
+    <reference subregion="LArFCAL-module" />
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-2adisconnected" >
+    <reference subregion="LArFCALdisc" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" minvalue="30" maxvalue="31" />
+    <range field="phi-fcal" values="0 7 8 15" />
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-2bdisconnected"
+     eta0="3.2" deta="0.05" phi0="0.0" dphi="0.4" >
+    <reference subregion="LArFCALdisc" />
+    <range field="module" value="2" />
+    <range field="eta-fcal" value="31" />
+    <range field="phi-fcal" values="3 4 11 12" />
+  </region>
+
+  <region group="lar_fcal" name="LArFCAL-3adisconnected" >
+    <reference subregion="LArFCALdisc" />
+    <range field="module" value="3" />
+    <range field="eta-fcal" value="15" />
+    <range field="phi-fcal" values="5 13" />
+  </region>
+
+
+   <!-- LAr Online -->
+
+
+  <!-- LArOnline -Barrel -->
+
+   <subregion name="LArOnline-Barrel">
+      <range field="part" value="LArOnline" />
+      <range field="barrel-ec" values="barrel" />    
+   </subregion>
+
+   <region group="LArOnline" name="laronline-barrel">
+      <reference subregion="LArOnline-Barrel" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" minvalue="0" maxvalue="31" />
+      <range field="slot" minvalue="1" maxvalue="14" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+  <!-- LArOnline-EndCap Standard -->
+
+  <subregion name="LArOnline-Endcap">
+      <range field="part" value="LArOnline" />
+      <range field="barrel-ec" values="endcap" />
+  </subregion>
+
+   <region group="LArOnline" name="laronline-endcap-standard">
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="0 1 4 5 7 8 11 12 13 14 17 18 19 20 23 24" />
+      <range field="slot" minvalue="1" maxvalue="13" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+  <!-- LArOnline-Endcap-Special -->
+
+   <region group="LArOnline" name="laronline-endcap-special" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="2 9 15 21" />
+      <range field="slot" minvalue="1" maxvalue="15" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+  <!-- LArOnline-HEC-->
+  
+   <region group="LArOnline" name="laronline-hec">
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="3 10 16 22" />
+      <range field="slot" values="1 2 5 6 7 8 9 10" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+  <!-- LArOnline-FCAL-->
+  
+   <region group="LArOnline" name="laronlinefcal" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" value="6" />
+      <range field="slot" minvalue="1" maxvalue="7" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+   <region group="LArOnline" name="laronlinefcal" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" value="6" />
+      <range field="slot" minvalue="9" maxvalue="15" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+      <range field="is-slar" value="cell" />
+   </region>
+
+
+  <!-- LArOnline -Barrel Calib -->
+
+   <subregion name="LArOnline-Barrel-Calib">
+      <range field="part" value="LArOnlineCalib" />
+      <range field="barrel-ec" values="barrel" />    
+   </subregion>
+
+   <region group="LArOnline" name="laronline-barrel-calib">
+      <reference subregion="LArOnline-Barrel-Calib" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" minvalue="0" maxvalue="31" />
+      <range field="slot" value="15" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+   </region>
+
+  <!-- LArOnline-EndCap Standard Calib -->
+
+  <subregion name="LArOnline-Endcap-Calib">
+      <range field="part" value="LArOnlineCalib" />
+      <range field="barrel-ec" values="endcap" />
+  </subregion>
+
+   <region group="LArOnline" name="laronline-endcap-standard">
+      <reference subregion="LArOnline-Endcap-Calib" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="0 1 4 5 7 8 11 12 13 14 17 18 19 20 23 24" />
+      <range field="slot" value="15" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+   </region>
+
+  <!-- LArOnline-HEC CALIB -->
+  
+   <region group="LArOnline" name="laronline-hec-calib">
+      <reference subregion="LArOnline-Endcap-Calib" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="3 10 16 22" />
+      <range field="slot" values="3 4 12" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+   </region>
+
+  <!-- LArOnline-FCAL CALIB -->
+  
+   <region group="LArOnline" name="laronline-fcal-calib">
+      <reference subregion="LArOnline-Endcap-Calib" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="feedthrough" values="6" />
+      <range field="slot" value="16" />
+      <range field="channel_in_slot" minvalue="0" maxvalue="127" />
+   </region>
+
+  <!-- LArOnline for sCell -Barrel -->
+
+   <region group="LArOnline_SuperCell" name="slaronline-barrel">
+      <reference subregion="LArOnline-Barrel" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" minvalue="0" maxvalue="31" />
+      <range field="slar_slot" value="1" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="289" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+  <!-- LArOnline for sCell -EndCap Standard -->
+
+   <region group="LArOnline_SuperCell" name="slaronline-endcap-standard">
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" values="0 1 4 5 7 8 11 12 13 14 17 18 19 20 23 24" />
+      <range field="slar_slot" value="1" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="311" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+  <!-- LArOnline for sCell -Endcap-Special -->
+
+   <region group="LArOnline_SuperCell" name="slaronline-endcap-special-01" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" values="2 9 15 21" />
+      <range field="slar_slot" value="1" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="239" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+   <region group="LArOnline_SuperCell" name="slaronline-endcap-special-02" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" values="2 9 15 21" />
+      <range field="slar_slot" value="2" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="159" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+  <!-- LArOnline for sCell -HEC-->
+
+   <region group="LArOnline_SuperCell" name="slaronline-hec">
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" values="3 10 16 22" />
+      <range field="slar_slot" value="1" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="191" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+  <!-- LArOnline for sCell -FCAL-->
+
+   <region group="LArOnline_SuperCell" name="slaronlinefcal" >
+      <reference subregion="LArOnline-Endcap" />
+      <range field="pos_neg" values="negative-side positive-side" />
+      <range field="slar_feedthrough" value="6" />
+      <range field="slar_slot" minvalue="1" maxvalue="2" />
+      <range field="sch_in_slot" minvalue="0" maxvalue="191" />
+      <range field="is-slar" value="slar" />
+   </region>
+
+</IdDictionary>
+
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelConfig.py b/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelConfig.py
index a7f876f06a43c10f2c057299a06e61af7c633a35..d46780932f5c3815145d6bbd995f597d5ff15241 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelConfig.py
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelConfig.py
@@ -17,11 +17,6 @@ def PixelGeometryCfg( flags ):
   InDetDD__BLM_Builder=CompFactory.InDetDD.BLM_Builder
   blmTool = InDetDD__BLM_Builder()
   pixelDetectorTool.BLM_Tool = blmTool
-  if flags.GeoModel.Run=="RUN4":
-      InDetServMatBuilderToolSLHC=CompFactory.InDetServMatBuilderToolSLHC
-      InDetServMatBuilderToolSLHC = InDetServMatBuilderToolSLHC()
-      acc.addPublicTool( InDetServMatBuilderToolSLHC )
-      pixelDetectorTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC
   pixelDetectorTool.useDynamicAlignFolders = flags.GeoModel.Align.Dynamic
   geoModelSvc.DetectorTools += [ pixelDetectorTool ]
   acc.addService(geoModelSvc)
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelOldConfig.py b/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelOldConfig.py
index f97a4a9ca204adb1fcfaf8980a71358dbd4a6b16..b1bd5da0ab1e30b2a844992742c0a060ffea32c7 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelOldConfig.py
+++ b/InnerDetector/InDetDetDescr/PixelGeoModel/python/PixelGeoModelOldConfig.py
@@ -4,9 +4,6 @@ from AthenaCommon import CfgMgr
 
 def getPixelDetectorTool(name="PixelDetectorTool", **kwargs):
     from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags
-    if InDetGeometryFlags.isSLHC():
-        kwargs.setdefault("ServiceBuilderTool",    "InDetServMatBuilderToolSLHC")
-    else:
-        kwargs.setdefault("ServiceBuilderTool",    "")
+    kwargs.setdefault("ServiceBuilderTool",    "")
 
     return CfgMgr.PixelDetectorTool(name, **kwargs)
diff --git a/InnerDetector/InDetDetDescr/SCT_GeoModel/python/SCT_GeoModelConfig.py b/InnerDetector/InDetDetDescr/SCT_GeoModel/python/SCT_GeoModelConfig.py
index d311ff8a4d4ecaad22a2047169149c4c283ded57..07af549e32f3f97e02d76b593b645f8b5ab7e64c 100644
--- a/InnerDetector/InDetDetDescr/SCT_GeoModel/python/SCT_GeoModelConfig.py
+++ b/InnerDetector/InDetDetDescr/SCT_GeoModel/python/SCT_GeoModelConfig.py
@@ -9,20 +9,8 @@ def SCT_GeometryCfg( flags ):
     geoModelSvc=acc.getPrimary()
     GeometryDBSvc=CompFactory.GeometryDBSvc
     acc.addService(GeometryDBSvc("InDetGeometryDBSvc"))
-    if flags.GeoModel.Run=="RUN4":
-        if "GMX" == flags.GeoModel.StripGeoType():
-            SCT_GMX_DetectorTool=CompFactory.SCT_GMX_DetectorTool
-            sctDetectorTool = SCT_GMX_DetectorTool()
-        else:
-            SCT_SLHC_DetectorTool=CompFactory.SCT_SLHC_DetectorTool
-            sctDetectorTool = SCT_SLHC_DetectorTool()
-            InDetServMatBuilderToolSLHC=CompFactory.InDetServMatBuilderToolSLHC
-            InDetServMatBuilderToolSLHC = InDetServMatBuilderToolSLHC()
-            acc.addPublicTool( InDetServMatBuilderToolSLHC )
-            sctDetectorTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC
-    else:
-        SCT_DetectorTool=CompFactory.SCT_DetectorTool
-        sctDetectorTool = SCT_DetectorTool()
+    SCT_DetectorTool=CompFactory.SCT_DetectorTool
+    sctDetectorTool = SCT_DetectorTool()
     sctDetectorTool.useDynamicAlignFolders = flags.GeoModel.Align.Dynamic
     sctDetectorTool.Alignable = True # make this a flag?
     sctDetectorTool.DetectorName = "SCT"
diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
index 528cca2fcd7b02504362ae096c5c5fedfbd598a8..df4cec0a96701d13c3c40e87fe8edc46bf347378 100755
--- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
+++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/SCT_ReadoutGeometry/SCT_DetectorManager.h
@@ -52,6 +52,9 @@ namespace InDetDD {
     
     /// Constructor
     SCT_DetectorManager( StoreGateSvc* detStore );
+
+    /// Constructur with name
+    SCT_DetectorManager( StoreGateSvc* detStore, std::string name );
      
     /// Destructor
     virtual ~SCT_DetectorManager();
diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
index f624231129b4b416a293da711887d4b68f1b02dd..313a7923140a36479c0aeca3fdc3bf0cbf6c8461 100755
--- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/SCT_DetectorManager.cxx
@@ -22,6 +22,7 @@ namespace InDetDD {
 
   const int FIRST_HIGHER_LEVEL = 2;
 
+
   SCT_DetectorManager::SCT_DetectorManager( StoreGateSvc* detStore )
     : SiDetectorManager(detStore, "SCT"),
       m_idHelper(0),
@@ -42,7 +43,26 @@ namespace InDetDD {
     } 
   }
 
-
+  SCT_DetectorManager::SCT_DetectorManager( StoreGateSvc* detStore , std::string name)
+    : SiDetectorManager(detStore,name),
+      m_idHelper(0),
+      m_isLogical(false) // Change to true to change the definition of local module corrections
+  {
+    ATH_MSG_INFO("Using contructor with name specification, to create SCT_DetectorManager named "<<name<<endmsg);
+    //  
+    // Initialized the Identifier helper.
+    //
+    StatusCode sc = detStore->retrieve(m_idHelper, "SCT_ID");  
+    if (sc.isFailure()) {
+      ATH_MSG_ERROR("Could not retrieve SCT id helper");
+    }
+    // Initialize the collections.
+    if (m_idHelper) {
+      m_elementCollection.resize(m_idHelper->wafer_hash_max());
+      m_alignableTransforms.resize(m_idHelper->wafer_hash_max());
+      m_moduleAlignableTransforms.resize(m_idHelper->wafer_hash_max()/2);
+    } 
+  }
 
   SCT_DetectorManager::~SCT_DetectorManager()
   {
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/CMakeLists.txt b/InnerDetector/InDetDetDescr/StripGeoModelXml/CMakeLists.txt
index d33808e561cf5bca1680c99bde66ce14428359bc..1178d2a8b08857a3d830097560ec3436c0a1fc9a 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/CMakeLists.txt
@@ -45,3 +45,6 @@ atlas_add_component( StripGeoModelXml
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                      LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel GeoModelXml GeoModelUtilities GaudiKernel InDetGeoModelUtils InDetReadoutGeometry SCT_ReadoutGeometry SCT_ReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions Identifier InDetIdentifier StripGeoModelXmlLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripGmxInterface.h b/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripGmxInterface.h
index a954dd9063246819bd5319cfa4946ff86c77cfba..1e792b03160fc191d6a617c8b02fa7aa77aaa916 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripGmxInterface.h
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripGmxInterface.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef STRIPGEOMODELXML_STRIPGMXINTERFACE_H
@@ -69,7 +69,7 @@ public:
     std::string getstr(const std::string typeName, const std::string name, const std::map<std::string, std::string> &par);
 
 private:
-    std::map<std::string, const InDetDD::SiDetectorDesign *> m_geometryMap;
+    std::map<std::string, int> m_geometryMap;
     InDetDD::SCT_DetectorManager *m_detectorManager;
     InDetDD::SiCommonItems *m_commonItems;
     WaferTree *m_waferTree;
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripOptions.h b/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripOptions.h
index 01d7c732b89f4050a61ae0c38ce56a794f41fb16..851cff20ce78412b4735cc4da7b4bef4dba5dabd 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripOptions.h
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/StripGeoModelXml/StripOptions.h
@@ -16,22 +16,26 @@ public:
     bool alignable() const;
     bool alignAtModuleLevel() const;
     std::string gmxFilename() const;
+    std::string detectorName() const;
     void setAlignable(bool flag = true);
     void setAlignAtModuleLevel(bool flag = true);
-    void setGmxFilename(std::string filename);  
+    void setGmxFilename(std::string filename); 
+    void setDetectorName(std::string detectorname);
 
 private:
     bool m_alignable;
     bool m_alignModule;
     std::string m_gmxFilename;
+    std::string m_detectorName;
 };
 
 // Inlined methods
 
-inline StripOptions::StripOptions() :
-    m_alignable(true),
-    m_alignModule(true), 
-    m_gmxFilename("")
+ inline StripOptions::StripOptions() :
+   m_alignable(true),
+   m_alignModule(true), 
+   m_gmxFilename(""),
+   m_detectorName("ITkStrip")
 {}
 
 inline bool StripOptions::alignable() const {
@@ -46,6 +50,10 @@ inline std::string StripOptions::gmxFilename() const {
     return m_gmxFilename;
 }
 
+inline std::string StripOptions::detectorName() const {
+    return m_detectorName;
+}
+
 inline void StripOptions::setAlignable(bool flag) {
     m_alignable = flag;
 }
@@ -58,5 +66,9 @@ inline void StripOptions::setGmxFilename(std::string filename) {
     m_gmxFilename = filename;
 }
 
+inline void StripOptions::setDetectorName(std::string detectorname) {
+    m_detectorName = detectorname;
+}
+
 }
 #endif // StripGeoModelXml_StripOptions_H
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/python/ITkStripGeoModelConfig.py b/InnerDetector/InDetDetDescr/StripGeoModelXml/python/ITkStripGeoModelConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..642c5a5b4f3b4a9578237f97d96705ca5d9672e6
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/python/ITkStripGeoModelConfig.py
@@ -0,0 +1,41 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+
+from AthenaConfiguration.ComponentFactory import CompFactory
+#Comment to avoid python compilation warnings until block below is re-added
+#from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
+
+def ITkStripGeometryCfg( flags ):
+    from AtlasGeoModel.GeoModelConfig import GeoModelCfg
+    acc = GeoModelCfg( flags )
+    geoModelSvc=acc.getPrimary()
+    GeometryDBSvc=CompFactory.GeometryDBSvc
+    acc.addService(GeometryDBSvc("ITkGeometryDBSvc"))
+    StripDetectorTool=CompFactory.StripDetectorTool
+    ITkStripDetectorTool = StripDetectorTool()
+    #ITkStripDetectorTool.useDynamicAlignFolders = flags.GeoModel.Align.Dynamic
+    ITkStripDetectorTool.Alignable = False # make this a flag? Set true as soon as decided on folder structure
+    ITkStripDetectorTool.DetectorName = "ITkStrip"
+    geoModelSvc.DetectorTools += [ ITkStripDetectorTool ]
+    
+    """
+    # All this stuff probably needs revisting - comment for now...
+    if flags.GeoModel.Align.Dynamic:
+        acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL1/ID","/Indet/AlignL1/ID",className="CondAttrListCollection"))
+        acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL2/SCT","/Indet/AlignL2/SCT",className="CondAttrListCollection"))
+        acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL3","/Indet/AlignL3",className="AlignableTransformContainer"))
+    else:
+        if (not flags.Detector.SimulateITkStrip) or flags.Detector.OverlayITkStrip:
+            acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/Align","/Indet/Align",className="AlignableTransformContainer"))
+        else:
+            acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/Align","/Indet/Align"))
+    if flags.Common.Project != "AthSimulation": # Protection for AthSimulation builds
+        if (not flags.Detector.SimulateSCT) or flags.Detector.OverlaySCT:
+            SCT_AlignCondAlg=CompFactory.SCT_AlignCondAlg
+            sctAlignCondAlg = SCT_AlignCondAlg(name = "SCT_AlignCondAlg",
+                                               UseDynamicAlignFolders = flags.GeoModel.Align.Dynamic)
+            acc.addCondAlgo(sctAlignCondAlg)
+            SCT_DetectorElementCondAlg=CompFactory.SCT_DetectorElementCondAlg
+            sctDetectorElementCondAlg = SCT_DetectorElementCondAlg(name = "SCT_DetectorElementCondAlg")
+            acc.addCondAlgo(sctDetectorElementCondAlg)
+    """
+    return acc
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorFactory.cxx b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorFactory.cxx
index 38b0d09926ee3a84077393857818abb0048ec3a3..c266ebfa4e77e88094ea477a120cfc6da447a001 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorFactory.cxx
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorFactory.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "StripGeoModelXml/StripDetectorFactory.h"
@@ -44,12 +44,13 @@ StripDetectorFactory::StripDetectorFactory(InDetDD::AthenaComps *athenaComps,
      m_commonItems(commonItems),
      m_options(&options) {
 //
-//    Create the detector manager
+//    Create the detector manager... should allow the name to be set
 //
-    m_detectorManager = new InDetDD::SCT_DetectorManager(detStore());
+    m_detectorManager = new InDetDD::SCT_DetectorManager(detStore(),m_options->detectorName());
 //
 //   Set Detector Manager SCT version information
 //
+//At some point we may want to decouple also this DB stuff, and make this ITkStrip specific?
     DecodeVersionKey versionKey(geoDbTagSvc(), "SCT");
     IRDBRecordset_ptr switchSet = rdbAccessSvc()->getRecordsetPtr("SctSwitches", versionKey.tag(), versionKey.node());
     const IRDBRecord *switches = (*switchSet)[0];
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorTool.cxx b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorTool.cxx
index 26e26305d4bf94fe4d3a36555696725d7ff78f3c..d8cee99ef1f54e35cf41c51f9532ce4439495a84 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorTool.cxx
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripDetectorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "StripGeoModelXml/StripDetectorTool.h"
@@ -8,7 +8,6 @@
 #include "SCT_ReadoutGeometry/SCT_DetectorManager.h"
 #include "InDetGeoModelUtils/InDetDDAthenaComps.h"
 #include "InDetReadoutGeometry/SiCommonItems.h"
-//   ADA   #include "InDetCondServices/ISiLorentzAngleSvc.h"
 #include "GeoModelUtilities/GeoModelExperiment.h"
 #include "GeoModelInterfaces/IGeoModelSvc.h"
 #include "GeoModelUtilities/DecodeVersionKey.h"
@@ -18,8 +17,6 @@
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "DetDescrConditions/AlignableTransformContainer.h"
-
-//   ADA   #include "CLIDSvc/tools/ClassID_traits.h"
 #include "SGTools/DataProxy.h"
 
 using InDetDD::SCT_DetectorManager;
@@ -30,7 +27,7 @@ StripDetectorTool::StripDetectorTool(const std::string &type,
                                              const std::string &name,
                                              const IInterface *parent) :
     GeoModelTool(type, name, parent),
-    m_detectorName("SCT"),
+    m_detectorName("ITkStrip"),
     m_alignable(false),
     m_gmxFilename(""),
     m_manager(0),
@@ -99,18 +96,19 @@ StatusCode StripDetectorTool::create() {
 //
     m_athenaComps = new InDetDD::AthenaComps("StripGeoModelXml");
     m_athenaComps->setDetStore(&*(detStore()));
-    //   ADA   m_athenaComps->setGeoModelSvc(&*m_geoModelSvc);
     m_athenaComps->setRDBAccessSvc(&*m_rdbAccessSvc);
     m_athenaComps->setGeometryDBSvc(&*m_geometryDBSvc);
+    m_athenaComps->setGeoDbTagSvc(&*m_geoDbTagSvc);
+
 
     m_commonItems = new InDetDD::SiCommonItems(idHelper);
-    //   ADA  m_commonItems->setLorentzAngleSvc(m_lorentzAngleSvc);
 //
 //    Get options from python
 //
     InDetDDSLHC::StripOptions options;
     options.setAlignable(m_alignable);
     options.setGmxFilename(m_gmxFilename);
+    options.setDetectorName(m_detectorName);
 //
 //   Get the version
 //
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
index f969c728069774fb308c1afa51a7205f5b66eb7e..30a9604b8c911b156ffd7292d05f4bbef9d05e80 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
@@ -167,9 +167,8 @@ double length(25.0);
     m_detectorManager->addDesign(std::move(design));
 //
 //    Add to map for addSensor routine
-//
-//   ADA    m_geometryMap[typeName] = design;
-    m_geometryMap[typeName] = design.get();
+
+    m_geometryMap[typeName] = m_detectorManager->numDesigns() -1;
 }
 
 void StripGmxInterface::makeStereoAnnulus(string typeName, map<std::string, string> &par) { 
@@ -286,9 +285,8 @@ vector<double> endR;
     m_detectorManager->addDesign(std::move(design));
 //
 //    Add to map for addSensor routine
-//
-//   ADA    m_geometryMap[typeName] = design;
-    m_geometryMap[typeName] = design.get();
+
+    m_geometryMap[typeName] = m_detectorManager->numDesigns() -1;
 }
 
 string StripGmxInterface::getstr(const string typeName, const string name, const map<string, string> &par) {
@@ -330,7 +328,8 @@ void StripGmxInterface::addSensor(string typeName, map<string, int> &index, int
 //
 //    Create the detector element and add to the DetectorManager
 //
-    const InDetDD::SiDetectorDesign *design = m_geometryMap[typeName];
+    const InDetDD::SiDetectorDesign *design = m_detectorManager->getDesign(m_geometryMap[typeName]);
+
     if (!design) {
         *m_log << MSG::FATAL << "StripGmxInterface::addSensor: Error: Readout sensor type " << typeName << 
           " not found.\n" << endmsg;
diff --git a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
index d54425a8e8f9c35cec3ef5df76c1c5523172a205..0113d948e70814b84517d9a164a5425a01d68ba5 100644
--- a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
@@ -5,7 +5,7 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 
 DetectorGeometrySvc, G4AtlasSvc, G4GeometryNotifierSvc, PhysicsListSvc=CompFactory.getComps("DetectorGeometrySvc","G4AtlasSvc","G4GeometryNotifierSvc","PhysicsListSvc",)
 #the physics region tools
-from G4AtlasTools.G4PhysicsRegionConfigNew import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg, BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg, PreSampLArPhysicsRegionToolCfg, DeadMaterialPhysicsRegionToolCfg
+from G4AtlasTools.G4PhysicsRegionConfigNew import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg,ITkPixelPhysicsRegionToolCfg,ITkStripPhysicsRegionToolCfg,BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg, PreSampLArPhysicsRegionToolCfg, DeadMaterialPhysicsRegionToolCfg
 from G4AtlasTools.G4PhysicsRegionConfigNew import DriftWallPhysicsRegionToolCfg, DriftWall1PhysicsRegionToolCfg, DriftWall2PhysicsRegionToolCfg
 
 #the geometry tools
@@ -17,7 +17,6 @@ from AthenaCommon import Logging
 def getATLAS_RegionCreatorList(ConfigFlags):
     regionCreatorList = []
 
-    isUpgrade = ConfigFlags.GeoModel.Run =="RUN4"
     isRUN2 = (ConfigFlags.GeoModel.Run in ["RUN2", "RUN3"]) or (ConfigFlags.GeoModel.Run=="UNDEFINED" and ConfigFlags.GeoModel.IBLLayout not in ["noIBL", "UNDEFINED"])
 
     if ConfigFlags.Beam.Type == 'cosmics' or ConfigFlags.Sim.CavernBG != 'Signal':
@@ -28,7 +27,7 @@ def getATLAS_RegionCreatorList(ConfigFlags):
             regionCreatorList += [PixelPhysicsRegionToolCfg(ConfigFlags)]
         if ConfigFlags.Detector.SimulateSCT:
             regionCreatorList += [SCTPhysicsRegionToolCfg(ConfigFlags)]
-        if ConfigFlags.Detector.SimulateTRT and not isUpgrade:
+        if ConfigFlags.Detector.SimulateTRT:
             regionCreatorList += [TRTPhysicsRegionToolCfg(ConfigFlags)]
             if isRUN2:
                 regionCreatorList += [TRT_ArPhysicsRegionToolCfg(ConfigFlags)] #'TRT_KrPhysicsRegionTool'
@@ -39,6 +38,18 @@ def getATLAS_RegionCreatorList(ConfigFlags):
             #if simFlags.ForwardDetectors.statusOn and simFlags.ForwardDetectors() == 2:
             if False:
                 regionCreatorList += [FWDBeamLinePhysicsRegionToolCfg(ConfigFlags)]
+    if ConfigFlags.Detector.SimulateITk:
+        if ConfigFlags.Detector.SimulateITkPixel:
+            regionCreatorList += [ITkPixelPhysicsRegionToolCfg(ConfigFlags)] #TODO: add dedicated config
+        if ConfigFlags.Detector.SimulateITkStrip:
+            regionCreatorList += [ITkStripPhysicsRegionToolCfg(ConfigFlags)] #TODO: And here...
+        # FIXME dislike the ordering here, but try to maintain the same ordering as in the old configuration.
+        if ConfigFlags.Detector.SimulateBpipe:
+            if ConfigFlags.Sim.BeamPipeSimMode != "Normal":
+                regionCreatorList += [BeampipeFwdCutPhysicsRegionToolCfg(ConfigFlags)]
+            #if simFlags.ForwardDetectors.statusOn and simFlags.ForwardDetectors() == 2:
+            if False:
+                regionCreatorList += [FWDBeamLinePhysicsRegionToolCfg(ConfigFlags)]
     if ConfigFlags.Detector.SimulateCalo:
         if ConfigFlags.Detector.GeometryLAr:
             # Shower parameterization overrides the calibration hit flag
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
index 040b1fc507749d025fae0227847ba3b796fd9064..e630eb41b51c5e24287779a37983279ebd1c4dd2 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
@@ -7,6 +7,7 @@ from AthenaConfiguration.ComponentFactory import CompFactory
 GeoDetectorTool=CompFactory.GeoDetectorTool
 from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
 from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg, InDetServiceMaterialCfg
+from AtlasGeoModel.ITkGMConfig import ITkGeometryCfg
 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
 from TileGeoModel.TileGMConfig import TileGMCfg
 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
@@ -61,6 +62,27 @@ def SCTGeoDetectorToolCfg(ConfigFlags, name='SCT', **kwargs):
     result.setPrivateTools(GeoDetectorTool(name, **kwargs))
     return result
 
+def ITkPixelGeoDetectorToolCfg(ConfigFlags, name='ITkPixel', **kwargs):
+    #set up geometry
+    result=ITkGeometryCfg(ConfigFlags)
+    kwargs.setdefault("DetectorName", "ITkPixel")
+    #add the GeometryNotifierSvc
+    result.addService(G4GeometryNotifierSvcCfg(ConfigFlags))
+    kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc"))
+    result.setPrivateTools(GeoDetectorTool(name, **kwargs))
+    return result
+
+
+def ITkStripGeoDetectorToolCfg(ConfigFlags, name='ITkStrip', **kwargs):
+    #set up geometry
+    result=ITkGeometryCfg(ConfigFlags)
+    kwargs.setdefault("DetectorName", "ITkStrip")
+    #add the GeometryNotifierSvc
+    result.addService(G4GeometryNotifierSvcCfg(ConfigFlags))
+    kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc"))
+    result.setPrivateTools(GeoDetectorTool(name, **kwargs))
+    return result
+
 
 def TRTGeoDetectorToolCfg(ConfigFlags, name='TRT', **kwargs):
     #set up geometry
@@ -185,20 +207,33 @@ def getCavernInfraGeoDetectorTool(ConfigFlags, name='CavernInfra', **kwargs):
     return result
 
 
-def IDETEnvelopeCfg(ConfigFlags, name="IDET", **kwargs):
+def ITKEnvelopeCfg(ConfigFlags, name="ITK", **kwargs):
     result = ComponentAccumulator()
 
-    isUpgrade = ConfigFlags.GeoModel.Run =="RUN4"
-    isRUN2 = ConfigFlags.GeoModel.Run in ["RUN2", "RUN3"]
+    kwargs.setdefault("DetectorName", "ITK")
+    kwargs.setdefault("InnerRadius", 32.15*mm)
+    kwargs.setdefault("OuterRadius", 1.148*m)
+    kwargs.setdefault("dZ", 347.5*cm)
 
-    #isRUN1 = not (isRUN2 or isUpgrade) #not used, remove?
+    SubDetectorList=[]
+    if ConfigFlags.Detector.GeometryITkPixel:
+        toolITkPixel = result.popToolsAndMerge(ITkPixelGeoDetectorToolCfg(ConfigFlags))
+        SubDetectorList += [toolITkPixel]
+    if ConfigFlags.Detector.GeometryITkStrip:
+        toolITkStrip = result.popToolsAndMerge(ITkStripGeoDetectorToolCfg(ConfigFlags))
+        SubDetectorList += [toolITkStrip]
 
+    kwargs.setdefault("SubDetectors", SubDetectorList)
+    result.setPrivateTools(CylindricalEnvelope(name, **kwargs))
+    return result
+
+def IDETEnvelopeCfg(ConfigFlags, name="IDET", **kwargs):
+    result = ComponentAccumulator()
+    isRUN2 = ConfigFlags.GeoModel.Run in ["RUN2", "RUN3"]
     kwargs.setdefault("DetectorName", "IDET")
     innerRadius = 37.*mm # RUN1 default
     if isRUN2:
         innerRadius = 28.9*mm #29.15*mm
-    if isUpgrade:
-        innerRadius = 32.15*mm
     kwargs.setdefault("InnerRadius", innerRadius)
     kwargs.setdefault("OuterRadius", 1.148*m)
     kwargs.setdefault("dZ", 347.5*cm)
@@ -210,7 +245,7 @@ def IDETEnvelopeCfg(ConfigFlags, name="IDET", **kwargs):
     if ConfigFlags.Detector.GeometrySCT:
         toolSCT = result.popToolsAndMerge(SCTGeoDetectorToolCfg(ConfigFlags))
         SubDetectorList += [toolSCT]
-    if ConfigFlags.Detector.GeometryTRT and not isUpgrade:
+    if ConfigFlags.Detector.GeometryTRT:
         toolTRT = result.popToolsAndMerge(TRTGeoDetectorToolCfg(ConfigFlags))
         SubDetectorList += [toolTRT]
 
@@ -327,6 +362,9 @@ def generateSubDetectorList(ConfigFlags):
     if ConfigFlags.Detector.SimulateID:
         toolIDET = result.popToolsAndMerge(IDETEnvelopeCfg(ConfigFlags))
         SubDetectorList += [ toolIDET ]
+    if ConfigFlags.Detector.SimulateITk:
+        toolITK = result.popToolsAndMerge(ITKEnvelopeCfg(ConfigFlags))
+        SubDetectorList += [ toolITK ]
     if ConfigFlags.Detector.SimulateCalo:
         toolCALO = result.popToolsAndMerge(CALOEnvelopeCfg(ConfigFlags))
         SubDetectorList += [ toolCALO ]
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py
index 86a858ecf8dbe7f23ba2a4c23c275c5057f59a2c..f1b8e3adb30a6a78b41ccebd2ea343ff2f8c83ac 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4PhysicsRegionConfigNew.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 from __future__ import print_function
 from AthenaConfiguration.ComponentFactory import CompFactory
 
@@ -75,6 +75,27 @@ def SCTPhysicsRegionToolCfg(ConfigFlags, name='SCTPhysicsRegionTool', **kwargs):
     kwargs.setdefault("GammaCut",    0.05)
     return RegionCreator(name, **kwargs)
 
+def ITkPixelPhysicsRegionToolCfg(ConfigFlags, name='ITkPixelPhysicsRegionTool', **kwargs):
+    kwargs.setdefault("RegionName", 'ITkPixel')
+    volumeList = ['ITkPixel::siLog']
+    kwargs.setdefault("VolumeList",  volumeList)
+    kwargs.setdefault("ElectronCut", 0.05)
+    kwargs.setdefault("PositronCut", 0.05)
+    kwargs.setdefault("GammaCut",    0.05)
+    return RegionCreator(name, **kwargs)
+
+def ITkStripPhysicsRegionToolCfg(ConfigFlags, name='ITkStripPhysicsRegionTool', **kwargs):
+    kwargs.setdefault("RegionName", 'ITkStrip')
+    #Need to find what these should be set to for ITk...
+    volumeList = ['SCT::BRLSensor', 'SCT::BRLSensorSS', 'SCT::BRLSensorMS',
+                   'SCT::ECSensor0', 'SCT::ECSensor1', 'SCT::ECSensor2',
+                   'SCT::ECSensor3', 'SCT::ECSensor4', 'SCT::ECSensor5']
+    kwargs.setdefault("VolumeList",  volumeList)
+    kwargs.setdefault("ElectronCut", 0.05)
+    kwargs.setdefault("PositronCut", 0.05)
+    kwargs.setdefault("GammaCut",    0.05)
+    return RegionCreator(name, **kwargs)
+
 def TRTPhysicsRegionToolCfg(ConfigFlags, name='TRTPhysicsRegionTool', **kwargs):
     #rangeCut = simFlags.TRTRangeCut._Value()
     rangeCut = 30.0