diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
index 9f09f2eb727d1285a8a00395b7b76728c58c0d9d..d718e090ca0a08f1a25c2b22ae9bee2dd3d6abb2 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_DCSConditionsConfig.py
@@ -44,5 +44,6 @@ def SCT_DCSConditionsCfg(flags, name="InDetSCT_DCSConditions", **kwargs):
         acc.addCondAlgo(hvAlg)
         tempAlg = SCT_DCSConditionsTempCondAlg(name=name + "TempCondAlg", ReadKey=tempFolder)
         acc.addCondAlgo(tempAlg)
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
index 0727f41c115870ea81b2185dc4df3bb3f46bc755..081cd9d9d85b6f666e0ace54779f913f09e8ecb4 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py
@@ -13,7 +13,7 @@ def SCT_ReadCalibChipDataToolCfg(flags, name="InDetSCT_ReadCalibChipDataTool", *
     return SCT_ReadCalibChipDataTool(name, **kwargs)
 
 def SCT_ReadCalibChipDataCfg(flags, name="SCT_ReadCalibChip", **kwargs):
-    """Return configured ComponentAccumulator and tool for SCT_ReadCalibChipDataCfg
+    """Return configured ComponentAccumulator with SCT_ReadCalibChipDataCfg tool
 
     Accepts optional noiseFolder and gainFolder keyword arguments
     """
@@ -29,5 +29,6 @@ def SCT_ReadCalibChipDataCfg(flags, name="SCT_ReadCalibChip", **kwargs):
     gainAlg = SCT_ReadCalibChipGainCondAlg(name=name + "GainCondAlg", ReadKey=gainFolder)
     acc.addCondAlgo(gainAlg)
     tool = kwargs.get("ReadCalibChipDataTool", SCT_ReadCalibChipDataToolCfg(flags))
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
index fb841600267fcbdb457f6f6a8c2446c513ed1358..50971f5df3807d2fc96dbb33e4423886f6c0775a 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_SiliconConditionsConfig.py
@@ -30,5 +30,6 @@ def SCT_SiliconConditionsCfg(flags, name="SCT_Silicon", **kwargs):
         tempAlg = SCT_SiliconTempCondAlg(name=name + "TempCondAlg", **CondArgs)
         acc.addCondAlgo(hvAlg)
         acc.addCondAlgo(tempAlg)
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
index 78cdab2ff3f91e7240d6e2b80998d4a5bb03b563..fdbb1c4b7fb2990450b4384f17109a8933b2d7d5 100755
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/test/SCT_ConditionsConfig_test.py
@@ -16,14 +16,10 @@ from SCT_ConditionsTools.SCT_ReadCalibChipDataConfig import SCT_ReadCalibChipDat
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 ConfigFlags.Input.Files = defaultTestFiles.HITS
-# DCS
-DCSAcc, DCSTool = SCT_DCSConditionsCfg(ConfigFlags, name="DCSTest")
-# Silicon
-SiliconAcc, SiliconTool = SCT_SiliconConditionsCfg(ConfigFlags, name="SiliconTest")
-# ReadCalibChipData
-ReadAcc, ReadTool = SCT_ReadCalibChipDataCfg(ConfigFlags, name="ReadTest")
-# prevent raise on __del__
-DCSAcc.wasMerged()
-SiliconAcc.wasMerged()
-ReadAcc.wasMerged()
+# call tests
+tacc = SCT_DCSConditionsCfg(ConfigFlags, name="DCSTest")
+tacc.merge(SCT_SiliconConditionsCfg(ConfigFlags, name="SiliconTest"))
+tacc.merge(SCT_ReadCalibChipDataCfg(ConfigFlags, name="ReadTest"))
+# reset to prevent errors on deletion
+tacc.__init__()
 
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
index 908a57e1419c6bfc51f8139ff30ee8c423bd6dc3..3c5d03f3cca97c2e6a59299e803aa45300a2e2ee 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/PixelLorentzAngleConfig.py
@@ -23,12 +23,15 @@ def PixelLorentzAngleCfg(flags, name="PixelSiLorentzAngleCondAlg", **kwargs):
     """
     acc, svc = MagneticFieldSvcCfg(flags)
     tool = kwargs.get("SiLorentzAngleTool", PixelLorentzAngleToolCfg(flags))
-    acc.merge(PixelDCSConditionsCfg(flags))
-    SiPropAcc, SiPropTool = PixelSiPropertiesCfg(flags)
+    DCSCondAcc = PixelDCSConditionsCfg(flags)
+    DCSCondAcc.popPrivateTools()
+    acc.merge(DCSCondAcc)
+    SiPropAcc = PixelSiPropertiesCfg(flags)
     acc.merge(SiPropAcc)
-    kwargs.setdefault("SiPropertiesTool", SiPropTool)
+    kwargs.setdefault("SiPropertiesTool", SiPropAcc.popPrivateTools())
     kwargs.setdefault("UseMagFieldSvc", tool.UseMagFieldSvc)
     kwargs.setdefault("UseMagFieldDcs", not flags.Common.isOnline)
     acc.addCondAlgo(PixelSiLorentzAngleCondAlg(name, **kwargs))
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
index 233f4ff54db39caa83fdea2c29180081acdc14de..4e0f267d1dc22c4965a55e3b43fc581b87df03e5 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/SCT_LorentzAngleConfig.py
@@ -39,19 +39,20 @@ def SCT_LorentzAngleCfg(flags, name="SCT_SiLorentzAngleCondAlg",
             DCSkwargs["hvFolder"] = dcs_folder + "/HV"
             DCSkwargs["tempFolder"] = dcs_folder + "/MODTEMP"
             DCSkwargs["stateFolder"] = dcs_folder + "/CHANSTAT"
-        DCSAcc, DCSTool = SCT_DCSConditionsCfg(flags, **DCSkwargs)
+        DCSAcc = SCT_DCSConditionsCfg(flags, **DCSkwargs)
         acc.merge(DCSAcc)
-        SCAcc, SCTool = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSTool)
+        SCAcc = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSAcc.popPrivateTools())
     else:
         SCTool = SCT_SiliconConditionsToolCfg(flags, UseDB=False, ForceUseGeoModel=True)
-        SCAcc, SCTool = SCT_SiliconConditionsCfg(flags, SiliconConditionsTool=SCTool)
+        SCAcc = SCT_SiliconConditionsCfg(flags, SiliconConditionsTool=SCTool)
+    SCAcc.popPrivateTools()
     acc.merge(SCAcc)
     # set up SCTSiLorentzAngleCondAlg
     kwargs.setdefault("UseMagFieldSvc", tool.UseMagFieldSvc)
     kwargs.setdefault("UseMagFieldDcs", not flags.Common.isOnline)
     kwargs.setdefault("UseGeoModel", forceUseGeoModel)
     kwargs.setdefault("useSctDefaults", False)
-    alg = SCTSiLorentzAngleCondAlg(name, **kwargs)
-    acc.addCondAlgo(alg)
-    return acc, tool
+    acc.addCondAlgo(SCTSiLorentzAngleCondAlg(name, **kwargs))
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
index 1c72737ed6f7f06be70315e55bf8b7d74777adb9..56842f729be3ae28193d9c3b95b3e70825165390 100755
--- a/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/test/SiLorentzAngleConfig_test.py
@@ -16,16 +16,17 @@ from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 ConfigFlags.Input.Files = defaultTestFiles.HITS
+# using __init__ to reset, preventing errors on deletion
 # case online
 ConfigFlags.Common.isOnline = True
-acc, tool = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOnline")
-acc2, tool = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOnline")
-acc.merge(acc2)
-acc.wasMerged()
+tacc = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOnline")
+tacc.__init__()
+tacc = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOnline")
+tacc.__init__()
 # case offline
 ConfigFlags.Common.isOnline = False
-acc, tool = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOffline")
-acc2, tool = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOffline")
-acc.merge(acc2)
-acc.wasMerged()
+tacc = SCT_LorentzAngleCfg(ConfigFlags, name="SCT_LorentzAngleTestOffline")
+tacc.__init__()
+tacc = PixelLorentzAngleCfg(ConfigFlags, name="PixelLorentzAngleTestOffline")
+tacc.__init__()
 
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py b/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
index 66de19b5e61c5ffced1ab01237fe366803585207..ef5aaa94910f42f44054125aa00bb1cd38536b79 100644
--- a/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/python/PixelSiPropertiesConfig.py
@@ -21,5 +21,6 @@ def PixelSiPropertiesCfg(flags, name="PixelSiPropertiesCondAlg", **kwargs):
     acc = PixelDCSConditionsCfg(flags)
     tool = kwargs.get("SiPropertiesTool", PixelSiPropertiesToolCfg(flags))
     acc.addCondAlgo(PixelSiPropertiesCondAlg(name, **kwargs))
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py b/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
index db9151a29e3def4f04f5d2dd722dbd7502856be9..5ce6c514b4dd68c1f46f3265f1dcef6beda68678 100644
--- a/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/python/SCT_SiPropertiesConfig.py
@@ -21,5 +21,6 @@ def SCT_SiPropertiesCfg(flags, name="SCTSiPropertiesCondAlg", **kwargs):
     tool = kwargs.get("SiPropertiesTool", SCT_SiPropertiesToolCfg(flags))
     alg = SCTSiPropertiesCondAlg(name, **kwargs)
     acc.addEventAlgo(alg)
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py b/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
index b68c74d5ce63700a141371ab782de23380df4a4b..67e7196dc6d79fc9b9babec9e8b40053a28e1dbb 100755
--- a/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/test/SiPropertiesConfig_test.py
@@ -17,9 +17,8 @@ log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 ConfigFlags.Input.Files = defaultTestFiles.HITS
 # test
-acc1, tool = SCT_SiPropertiesCfg(ConfigFlags, name="SCT_SiPropertiesConfigTest")
-acc2, tool = PixelSiPropertiesCfg(ConfigFlags, name="PixelSiPropertiesConfigTest")
-# prevent raise on __del__
-acc1.merge(acc2)
-acc1.wasMerged()
+tacc = SCT_SiPropertiesCfg(ConfigFlags, name="SCT_SiPropertiesConfigTest")
+tacc.merge(PixelSiPropertiesCfg(ConfigFlags, name="PixelSiPropertiesConfigTest"))
+# reset to prevent errors on deletion
+tacc.__init__()
 
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
index 22fc5f896eb3a43eb2dd20e3b5ed816dc9733ef0..296e3690b5685b6e75b9621ae206258a79dfcf99 100755
--- a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
@@ -2,9 +2,9 @@
 
 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 """
-from AthenaCommon import CfgMgr
 from RngComps.RandomServices import RNG, AthEngines
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from PileUpComps.PileUpCompsConf import PileUpXingFolder
+from BCM_Digitization.BCM_DigitizationConf import BCM_DigitizationTool, BCM_Digitization
 
 # The earliest and last bunch crossing times for which interactions will be sent
 # to the BCM Digitization code.
@@ -14,18 +14,24 @@ def BCM_FirstXing():
 def BCM_LastXing():
     return 0
 
-def BCM_DigitizationToolCfg(configFlags, name="BCM_DigitizationTool", **kwargs):
-    """Return tuple (ComponentAccumulator, tool) configured for BCM Digitization"""
-    acc = ComponentAccumulator()
-    # Configure the random engine
-    Engine = configFlags.Random.Engine
-    acc.merge(RNG(Engine))
-    # Build the argument dict
+def BCM_RangeCfg(flags, name="BCM_Range" , **kwargs):
+    """Return a BCM configured PileUpXingFolder tool"""
+    kwargs.setdefault("FirstXing", BCM_FirstXing())
+    kwargs.setdefault("LastXing",  BCM_LastXing())
+    # Default 0 no dataproxy reset
+    kwargs.setdefault("CacheRefreshFrequency", 1.0)
+    kwargs.setdefault("ItemList", ["SiHitCollection#BCMHits"])
+    return PileUpXingFolder(name, **kwargs)
+
+def BCM_DigitizationToolCfg(flags, name="BCM_DigitizationTool", **kwargs):
+    """Return a ComponentAccumulator with configured BCM_DigitizationTool"""
+    # take initial ComponentAccumulator from RNG
+    acc = RNG(flags.Random.Engine)
     kwargs.setdefault("RndmSvc", "AthRNGSvc")
     kwargs.setdefault("HitCollName", "BCMHits")
     kwargs.setdefault("OutputRDOKey", "BCM_RDOs")
     kwargs.setdefault("OutputSDOKey", "BCM_SDO_Map")
-    if configFlags.Digitization.DoInnerDetectorNoise:
+    if flags.Digitization.DoInnerDetectorNoise:
         kwargs.setdefault("ModNoise", [90.82] * 8)
     else:
         kwargs.setdefault("ModNoise", [0.0] * 8)
@@ -38,40 +44,28 @@ def BCM_DigitizationToolCfg(configFlags, name="BCM_DigitizationTool", **kwargs):
     kwargs.setdefault("EffDistanceParam", 4.0)
     kwargs.setdefault("EffSharpnessParam", 0.11)
     kwargs.setdefault("TimeDelay", 9.0)
-    if configFlags.Digitization.DoXingByXingPileUp:
+    if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", BCM_FirstXing())
         kwargs.setdefault("LastXing",  BCM_LastXing())
-    # Make the tool
-    tool = CfgMgr.BCM_DigitizationTool(name, **kwargs)
-    return (acc, tool)
+    acc.setPrivateTools(BCM_DigitizationTool(name, **kwargs))
+    return acc
 
-def BCM_DigitizationCfg(configFlags, name="BCM_OverlayDigitization", **kwargs):
-    """Return a ComponentAccumulator with BCM Digitization algorithm"""
-    acc, tool = BCM_DigitizationToolCfg(configFlags, **kwargs)
-    kwargs.setdefault("DigitizationTool", tool)
-    alg = CfgMgr.BCM_Digitization(name, **kwargs)
-    acc.addEventAlgo(alg)
+def BCM_DigitizationCfg(flags, name="BCM_OverlayDigitization", **kwargs):
+    """Return a ComponentAccumulator with configured BCM_Digitization algorithm"""
+    acc = BCM_DigitizationToolCfg(flags, **kwargs)
+    kwargs.setdefault("DigitizationTool", acc.popPrivateTools())
+    acc.addEventAlgo(BCM_Digitization(name, **kwargs))
     return acc
 
-def BCM_OverlayDigitizationToolCfg(configFlags, name="BCM_OverlayDigitizationTool", **kwargs):
-    """Return tuple (ComponentAccumulator, tool) configured for BCM Overlay Digitization"""
-    kwargs.setdefault("EvtStore", configFlags.Overlay.Legacy.EventStore)
-    return BCM_DigitizationToolCfg(configFlags, name, **kwargs)
+def BCM_OverlayDigitizationToolCfg(flags, name="BCM_OverlayDigitizationTool", **kwargs):
+    """Return ComponentAccumulator with BCM_DigitizationTool configured for Overlay"""
+    kwargs.setdefault("EvtStore", flags.Overlay.Legacy.EventStore)
+    return BCM_DigitizationToolCfg(flags, name, **kwargs)
 
-def BCM_OverlayDigitizationCfg(configFlags, name="BCM_OverlayDigitization", **kwargs):
-    """Return a ComponentAccumulator with BCM Overlay Digitization algorithm"""
-    acc, tool = BCM_OverlayDigitizationToolCfg(configFlags, **kwargs)
-    kwargs.setdefault("DigitizationTool", tool)
-    alg = CfgMgr.BCM_Digitization(name, **kwargs)
-    acc.addEventAlgo(alg)
+def BCM_OverlayDigitizationCfg(flags, name="BCM_OverlayDigitization", **kwargs):
+    """Return a ComponentAccumulator with BCM_Digitization algorithm configured for Overlay"""
+    acc = BCM_OverlayDigitizationToolCfg(flags, **kwargs)
+    kwargs.setdefault("DigitizationTool", acc.popPrivateTools())
+    acc.addEventAlgo(BCM_Digitization(name, **kwargs))
     return acc
 
-def getBCM_Range(name="BCM_Range" , **kwargs):
-    """Return a configured PileUpXingFolder tool"""
-    # This is the time of the xing in ns 
-    kwargs.setdefault("FirstXing", BCM_FirstXing())
-    kwargs.setdefault("LastXing",  BCM_LastXing())
-    # Default 0 no dataproxy reset
-    kwargs.setdefault("CacheRefreshFrequency", 1.0)
-    kwargs.setdefault("ItemList", ["SiHitCollection#BCMHits"])
-    return CfgMgr.PileUpXingFolder(name, **kwargs)
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
index f79e4fb5b2dfdd1913a984e9061a1eb3eb186aec..75ffbf152f2dfa7652ede3e1d2de79657d081c18 100755
--- a/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/test/BCM_DigitizationConfigNew_test.py
@@ -12,24 +12,36 @@ from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
 from AthenaConfiguration.TestDefaults import defaultTestFiles
 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
-from BCM_Digitization.BCM_DigitizationConfigNew import BCM_DigitizationCfg
 from Digitization.DigitizationConfigFlags import createDigitizationCfgFlags
 from OverlayCommonAlgs.OverlayConfigFlags import createOverlayCfgFlags
-from TrigUpgradeTest.InDetConfig import InDetGMConfig # FIXME This module would ideally be located somewhere else
+from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
+from BCM_Digitization.BCM_DigitizationConfigNew import (
+    BCM_RangeCfg, BCM_DigitizationToolCfg, BCM_DigitizationCfg,
+    BCM_OverlayDigitizationToolCfg, BCM_OverlayDigitizationCfg,
+)
 
 # Set up logging and new style config
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 # Configure
-ConfigFlags.Input.Files = defaultTestFiles.HITS
-ConfigFlags.Output.RDOFileName = "myRDO.pool.root"
 ConfigFlags.join(createDigitizationCfgFlags())
 ConfigFlags.join(createOverlayCfgFlags())
+ConfigFlags.Input.Files = defaultTestFiles.HITS
+ConfigFlags.Output.RDOFileName = "myRDO.pool.root"
+ConfigFlags.GeoModel.Align.Dynamic = False
 ConfigFlags.lock()
+# Function tests
+tool = BCM_RangeCfg(ConfigFlags)
+tacc = BCM_DigitizationToolCfg(ConfigFlags)
+tacc.merge(BCM_OverlayDigitizationToolCfg(ConfigFlags))
+tacc.merge(BCM_DigitizationToolCfg(ConfigFlags))
+tacc.merge(BCM_OverlayDigitizationCfg(ConfigFlags))
+# reset to prevent errors on deletion
+tacc.__init__()
 # Construct our accumulator to run
 acc = MainServicesSerialCfg()
 acc.merge(PoolReadCfg(ConfigFlags))
-acc.merge(InDetGMConfig(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required for BCM
+acc.merge(PixelGeometryCfg(ConfigFlags))
 # Add configuration to write HITS pool file
 outConfig = OutputStreamCfg(ConfigFlags, "RDO",
     ItemList=["InDetSimDataCollection#*", "BCM_RDO_Container#*"])
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
index d54410fc56e1893d1ce5bf36c6c52773a2f456ca..7c6daebcf8f027444037293299ef9244bc5bdfcf 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
@@ -48,16 +48,17 @@ def SCT_DigitizationCommonCfg(flags, name="SCT_DigitizationToolCommon", **kwargs
         kwargs.setdefault("LastXing", SCT_LastXing() )
     tool = SCT_DigitizationTool(name, **kwargs)
     # attach ToolHandles
-    frontAcc, frontTool = SCT_FrontEndCfg(flags)
-    tool.FrontEnd = frontTool
-    surfAcc, surfTool = SCT_SurfaceChargesGeneratorCfg(flags)
-    tool.SurfaceChargesGenerator = surfTool
+    frontAcc = SCT_FrontEndCfg(flags)
+    tool.FrontEnd = frontAcc.popPrivateTools()
+    surfAcc = SCT_SurfaceChargesGeneratorCfg(flags)
+    tool.SurfaceChargesGenerator = surfAcc.popPrivateTools()
     tool.RandomDisabledCellGenerator = SCT_RandomDisabledCellGeneratorCfg(flags)
     acc.mergeAll([frontAcc, surfAcc])
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
 def SCT_DigitizationToolCfg(flags, name="SCT_DigitizationTool", **kwargs):
-    """Return configured digitization tool"""
+    """Return a ComponentAccumulator with configured SCT digitization tool"""
     if flags.Digitization.PileUpPremixingForMT:
         kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "SCT_RDOs")
         kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "SCT_SDO_Map")
@@ -68,21 +69,21 @@ def SCT_DigitizationToolCfg(flags, name="SCT_DigitizationTool", **kwargs):
     return SCT_DigitizationCommonCfg(flags, name, **kwargs)
 
 def SCT_DigitizationToolHSCfg(flags, name="SCT_DigitizationToolHS", **kwargs):
-    """Return hard scatter configured digitization tool"""
+    """Return a ComponentAccumulator with hard scatter configured SCT digitization tool"""
     kwargs.setdefault("OutputObjectName", "SCT_RDOs")
     kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
     kwargs.setdefault("HardScatterSplittingMode", 1)
     return SCT_DigitizationCommonCfg(flags, name, **kwargs)
 
 def SCT_DigitizationToolPUCfg(flags, name="SCT_DigitizationToolPU",**kwargs):
-    """Return pileup configured digitization tool"""
+    """Return a ComponentAccumulator with pileup configured SCT digitization tool"""
     kwargs.setdefault("OutputObjectName", "SCT_PU_RDOs")
     kwargs.setdefault("OutputSDOName", "SCT_PU_SDO_Map")
     kwargs.setdefault("HardScatterSplittingMode", 2)
     return SCT_DigitizationCommonCfg(flags, name, **kwargs)
 
 def SCT_DigitizationToolOverlayCfg(flags, name="SCT_OverlayDigitizationTool",**kwargs):
-    """Return overlay configured digitization tool"""
+    """Return a ComponentAccumulator with overlay configured SCT digitization tool"""
     acc = ComponentAccumulator()
     if flags.Overlay.Legacy.MT:
         kwargs.setdefault("InputSingleHitsName", "SCT_Hits")
@@ -93,12 +94,11 @@ def SCT_DigitizationToolOverlayCfg(flags, name="SCT_OverlayDigitizationTool",**k
         kwargs.setdefault("OutputObjectName", flags.Overlay.Legacy.EventStore + "+SCT_RDOs")
         kwargs.setdefault("OutputSDOName", flags.Overlay.Legacy.EventStore + "+SCT_SDO_Map")
     kwargs.setdefault("HardScatterSplittingMode", 0)
-    CommonAcc, tool = SCT_DigitizationCommonCfg(flags, name, **kwargs)
-    acc.merge(CommonAcc)
-    return acc, tool
+    acc.merge(SCT_DigitizationCommonCfg(flags, name, **kwargs))
+    return acc
 
 def SCT_DigitizationToolSplitNoMergePUCfg(flags, name="SCT_DigitizationToolSplitNoMergePU",**kwargs):
-    """Return no merged pileup configured digitization tool"""
+    """Return a ComponentAccumulator with merged pileup configured SCT digitization tool"""
     kwargs.setdefault("InputObjectName", "PileupSCT_Hits")
     kwargs.setdefault("HardScatterSplittingMode", 0)
     kwargs.setdefault("OutputObjectName", "SCT_PU_RDOs")
@@ -128,7 +128,7 @@ def SCT_AmpCfg(flags, name="SCT_Amp", **kwargs):
     return SCT_Amp(name, **kwargs)
 
 def SCT_SurfaceChargesGeneratorCfg(flags, name="SCT_SurfaceChargesGenerator", **kwargs):
-    """Return configured (detailed) surface charges tool, conditioned on flags"""
+    """Return a ComponentAccumulator with configured surface charges tool"""
     acc = ComponentAccumulator()
     kwargs.setdefault("FixedTime", -999)
     kwargs.setdefault("SubtractTime", -999)
@@ -142,19 +142,21 @@ def SCT_SurfaceChargesGeneratorCfg(flags, name="SCT_SurfaceChargesGenerator", **
     # experimental SCT_DetailedSurfaceChargesGenerator config dropped here
     tool = SCT_SurfaceChargesGenerator(name, **kwargs)
     tool.RadDamageSummaryTool = SCT_RadDamageSummaryTool()
-    DCSCondAcc, DCSCondTool = SCT_DCSConditionsCfg(flags)
-    SiliCondAcc, SiliCondTool = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSCondTool)
-    SiliPropsAcc, SiliPropsTool = SCT_SiPropertiesCfg(flags, SiConditionsTool=SiliCondTool)
-    LorentzAcc, LorentzTool = SCT_LorentzAngleCfg(flags)
+    DCSCondAcc = SCT_DCSConditionsCfg(flags)
+    DCSCondTool = DCSCondAcc.popPrivateTools()
+    SiliCondAcc = SCT_SiliconConditionsCfg(flags, DCSConditionsTool=DCSCondTool)
+    SiliCondTool = SiliCondAcc.popPrivateTools()
+    SiliPropsAcc = SCT_SiPropertiesCfg(flags, SiConditionsTool=SiliCondTool)
+    LorentzAcc = SCT_LorentzAngleCfg(flags)
     tool.SiConditionsTool = SiliCondTool
-    tool.SiPropertiesTool = SiliPropsTool
-    tool.LorentzAngleTool = LorentzTool
+    tool.SiPropertiesTool = SiliPropsAcc.popPrivateTools()
+    tool.LorentzAngleTool = LorentzAcc.popPrivateTools()
     acc.mergeAll([DCSCondAcc, SiliCondAcc, SiliPropsAcc, LorentzAcc])
-    return acc, tool
+    acc.setPrivateTools(tool)
+    return acc
 
 def SCT_FrontEndCfg(flags, name="SCT_FrontEnd", **kwargs):
-    """Return configured ComponentAccumulator with front-end electronics tool"""
-    acc = ComponentAccumulator()
+    """Return a ComponentAccumulator with configured front-end electronics tool"""
     # Setup noise treament in SCT_FrontEnd
     # To set the mean noise values for the different module types
     # Default values set at 0 degrees, plus/minus ~5 enc per plus/minus degree
@@ -185,9 +187,8 @@ def SCT_FrontEndCfg(flags, name="SCT_FrontEnd", **kwargs):
     # Use Calibration data from Conditions DB, still for testing purposes only
     kwargs.setdefault("UseCalibData", True)
     # Setup the ReadCalibChip folders and Svc
-    readAcc, readTool = SCT_ReadCalibChipDataCfg(flags)
-    kwargs.setdefault("SCT_ReadCalibChipDataTool", readTool)
-    acc.merge(readAcc)
+    acc = SCT_ReadCalibChipDataCfg(flags)
+    kwargs.setdefault("SCT_ReadCalibChipDataTool", acc.popPrivateTools())
     # DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx
     if flags.Digitization.PileUpPremixing:
         kwargs.setdefault("DataCompressionMode", 3)
@@ -202,10 +203,11 @@ def SCT_FrontEndCfg(flags, name="SCT_FrontEnd", **kwargs):
         kwargs.setdefault("DataReadOutMode", 0)
     else:
         kwargs.setdefault("DataReadOutMode", 1)
-    return acc, SCT_FrontEnd(name, **kwargs)
+    acc.setPrivateTools(SCT_FrontEnd(name, **kwargs))
+    return acc
 
 def SCT_FrontEndPileupCfg(flags, name="PileupSCT_FrontEnd", **kwargs):
-    """Return pileup-configured ComponentAccumulator with front-end electronics tool"""
+    """Return a ComponentAccumulator with pileup-configured front-end electronics tool"""
     kwargs.setdefault("NoiseBarrel", 0.0)
     kwargs.setdefault("NoiseBarrel3", 0.0)
     kwargs.setdefault("NoiseInners", 0.0)
@@ -221,8 +223,8 @@ def SCT_FrontEndPileupCfg(flags, name="PileupSCT_FrontEnd", **kwargs):
     kwargs.setdefault("NoiseOn", False)
     return SCT_FrontEndCfg(flags, name, **kwargs)
 
-def SiliconRangeCfg(flags, name="SiliconRange", **kwargs):
-    """Return a configured PileUpXingFolder tool"""
+def SCT_RangeCfg(flags, name="SiliconRange", **kwargs):
+    """Return an SCT configured PileUpXingFolder tool"""
     kwargs.setdefault("FirstXing", SCT_FirstXing())
     kwargs.setdefault("LastXing", SCT_LastXing())
     kwargs.setdefault("CacheRefreshFrequency", 1.0) # default 0 no dataproxy reset
@@ -233,8 +235,8 @@ def SCT_DigitizationCfg(toolCfg, flags, name="SCT_Digitization", **kwargs):
     """Return a ComponentAccumulator with toolCfg type SCT digitization"""
     acc = ComponentAccumulator()
     if "DigitizationTool" not in kwargs:
-        toolAcc, tool = toolCfg(flags)
-        kwargs["DigitizationTool"] = tool
+        toolAcc = toolCfg(flags)
+        kwargs["DigitizationTool"] = toolAcc.popPrivateTools()
         acc.merge(toolAcc)
     alg = SCT_Digitization(name, **kwargs)
     acc.addEventAlgo(alg)
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py b/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
index 334c611412167bff8baa220242436d18ec520933..258d622052992de55df8fa894206bc1dd88cf65a 100755
--- a/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/test/SCT_DigitizationConfigNew_test.py
@@ -18,7 +18,7 @@ from SCT_Digitization.SCT_DigitizationConfigNew import (
     SCT_FrontEndCfg, SCT_FrontEndPileupCfg, SCT_DigitizationCommonCfg, SCT_DigitizationToolCfg,
     SCT_DigitizationToolGeantinoTruthCfg, SCT_DigitizationToolHSCfg, SCT_DigitizationToolPUCfg,
     SCT_DigitizationToolSplitNoMergePUCfg, SCT_DigitizationToolOverlayCfg, SCT_DigitizationHSCfg,
-    SCT_DigitizationPUCfg, SCT_DigitizationOverlayCfg, SiliconRangeCfg,
+    SCT_DigitizationPUCfg, SCT_DigitizationOverlayCfg, SCT_RangeCfg,
 )
 from Digitization.DigitizationConfigFlags import createDigitizationCfgFlags
 from OverlayCommonAlgs.OverlayConfigFlags import createOverlayCfgFlags
@@ -35,28 +35,26 @@ ConfigFlags.GeoModel.Align.Dynamic = False
 ConfigFlags.Concurrency.NumThreads = 1
 ConfigFlags.lock()
 # Function tests
-acc1, tool = SCT_DigitizationCommonCfg(ConfigFlags)
-acc2, tool = SCT_DigitizationToolCfg(ConfigFlags)
-acc3, tool = SCT_DigitizationToolHSCfg(ConfigFlags)
-acc4, tool = SCT_DigitizationToolPUCfg(ConfigFlags)
-acc5, tool = SCT_DigitizationToolOverlayCfg(ConfigFlags)
-acc6, tool = SCT_DigitizationToolSplitNoMergePUCfg(ConfigFlags)
-acc7, tool = SCT_DigitizationToolGeantinoTruthCfg(ConfigFlags)
+tacc = SCT_DigitizationCommonCfg(ConfigFlags)
+tacc.merge(SCT_DigitizationToolCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationToolHSCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationToolPUCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationToolOverlayCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationToolSplitNoMergePUCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationToolGeantinoTruthCfg(ConfigFlags))
 tool = SCT_RandomDisabledCellGeneratorCfg(ConfigFlags)
 tool = SCT_AmpCfg(ConfigFlags)
-acc8, tool = SCT_SurfaceChargesGeneratorCfg(ConfigFlags)
-acc9, tool = SCT_FrontEndCfg(ConfigFlags)
-accA, tool = SCT_FrontEndPileupCfg(ConfigFlags)
-tool = SiliconRangeCfg(ConfigFlags)
-accB = SCT_DigitizationHSCfg(ConfigFlags)
-accC = SCT_DigitizationPUCfg(ConfigFlags)
-accD = SCT_DigitizationOverlayCfg(ConfigFlags)
-acc1.mergeAll([acc2, acc3, acc4, acc5, acc6, acc7, acc8, acc9, accA, accB, accC, accD])
-acc1.wasMerged()
+tacc.merge(SCT_SurfaceChargesGeneratorCfg(ConfigFlags))
+tacc.merge(SCT_FrontEndCfg(ConfigFlags))
+tacc.merge(SCT_FrontEndPileupCfg(ConfigFlags))
+tool = SCT_RangeCfg(ConfigFlags)
+tacc.merge(SCT_DigitizationHSCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationPUCfg(ConfigFlags))
+tacc.merge(SCT_DigitizationOverlayCfg(ConfigFlags))
+# reset to prevent errors on deletion
+tacc.__init__()
 # Construct our accumulator to run
 acc = MainServicesSerialCfg()
-from StoreGate.StoreGateConf import StoreGateSvc # FIXME remove this once athena is fixed
-acc.addService(StoreGateSvc("ConditionStore"))
 acc.merge(PoolReadCfg(ConfigFlags))
 acc.merge(SCT_DigitizationHSCfg(ConfigFlags))
 # Add configuration to write HITS pool file