diff --git a/InnerDetector/InDetConfig/python/BackTrackingConfig.py b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
index da02f0a0e613993604f52c2b6b0d84af698bbb3d..3e7e06697607d7344d319ee81ce30cf12fc6da9d 100644
--- a/InnerDetector/InDetConfig/python/BackTrackingConfig.py
+++ b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
@@ -152,8 +152,7 @@ def TRT_SeededTrackFinderCfg(flags, name='InDetTRT_SeededTrackFinder', InputColl
     InDetTrackFitterBT = acc.popToolsAndMerge(TC.InDetTrackFitterBTCfg(flags))
     acc.addPublicTool(InDetTrackFitterBT)
 
-    InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
+    InDetTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
 
     InDetTRTExtensionTool = acc.popToolsAndMerge(TC.InDetTRT_ExtensionToolCfg(flags))
     acc.addPublicTool(InDetTRTExtensionTool)
@@ -258,8 +257,7 @@ def SimpleAmbiguityProcessorToolCfg(flags, name='InDetTRT_SeededAmbiguityProcess
     else:
         InDetTRT_SeededScoringTool = acc.popToolsAndMerge(TC.InDetTRT_SeededScoringToolCfg(flags))
         acc.addPublicTool(InDetTRT_SeededScoringTool)
-        InDetTRT_SeededSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-        acc.addPublicTool(InDetTRT_SeededSummaryTool)
+        InDetTRT_SeededSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     InDetTRT_SeededAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
     acc.addPublicTool(InDetTRT_SeededAmbiTrackSelectionTool)
diff --git a/InnerDetector/InDetConfig/python/ITkRecToolConfig.py b/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
index 6db17f79c5a2b15a45e6e34a93ba7ab5d1729870..c14d8b3d21e037fef7a74938a3871e1f79ad07f8 100644
--- a/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
@@ -37,12 +37,12 @@ def ITkTrackSummaryHelperToolCfg(flags, name='ITkSummaryHelper', **kwargs):
   isHLT=kwargs.pop("isHLT",False)
 
   if 'AssoTool' not in kwargs :
+    assoTool = None
     if not isHLT:
-      ITkPrdAssociationTool_setup = result.getPrimaryAndMerge(ITkPrdAssociationTool_setupCfg(flags))
-      kwargs.setdefault("AssoTool", ITkPrdAssociationTool_setup)
+      assoTool = result.getPrimaryAndMerge(ITkPrdAssociationTool_setupCfg(flags))
     else:
-      ITkTrigPrdAssociationTool = result.getPrimaryAndMerge(ITkTrigPrdAssociationToolCfg(flags))
-      kwargs.setdefault("AssoTool", ITkTrigPrdAssociationTool)
+      assoTool = result.getPrimaryAndMerge(ITkTrigPrdAssociationToolCfg(flags))
+    kwargs.setdefault("AssoTool", assoTool)
 
   if "HoleSearch" not in kwargs:
     ITkTrackHoleSearchTool = result.getPrimaryAndMerge(ITkTrackHoleSearchToolCfg(flags))
@@ -74,7 +74,7 @@ def ITkBoundaryCheckToolCfg(flags, name='ITkBoundaryCheckTool', **kwargs):
       kwargs.setdefault("SctSummaryTool", None)
 
   if 'PixelLayerTool' not in kwargs :
-    kwargs.setdefault("PixelLayerTool", result.getPrimaryAndMerge(ITkTestPixelLayerToolCfg(flags)))
+    kwargs.setdefault("PixelLayerTool", result.popToolsAndMerge(ITkTestPixelLayerToolCfg(flags)))
 
   kwargs.setdefault("UsePixel", flags.Detector.EnableITkPixel)
   kwargs.setdefault("UseSCT", flags.Detector.EnableITkStrip)
@@ -119,7 +119,7 @@ def ITkTestPixelLayerToolCfg(flags, name = "ITkTestPixelLayerTool", **kwargs):
   kwargs.setdefault("CheckDisabledFEs", flags.ITk.checkDeadElementsOnTrack)
 
   tool = CompFactory.InDet.InDetTestPixelLayerTool( name = the_name, **kwargs)
-  result.addPublicTool( tool, primary=True )
+  result.setPrivateTools( tool )
   return result
 
 def ITkPatternPropagatorCfg(flags, name='ITkPatternPropagator', **kwargs):
diff --git a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
index 79e052ca0196bf3211c4cf225f4903c587c32c04..4a6792755e5e5d74db76da8665daf4dfdd2b4188 100644
--- a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
+++ b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
@@ -156,7 +156,7 @@ def ITkNnPixelClusterSplitProbToolCfg(flags, name="ITkNnPixelClusterSplitProbToo
 
     ITkNnPixelClusterSplitProbTool = CompFactory.InDet.TruthPixelClusterSplitProbTool(name=name,**kwargs) #Truth-based for ITk for now
 
-    acc.addPublicTool(ITkNnPixelClusterSplitProbTool, primary=True)
+    acc.setPrivateTools(ITkNnPixelClusterSplitProbTool)
     return acc
 
 def ITkNnPixelClusterSplitterCfg(flags, name="ITkNnPixelClusterSplitter", **kwargs):
diff --git a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
index d8cb567adb8a2c06d2d0f8fb00d66643ed41d110..2a43dcfbd215028a5078bba25dabc8ef62b382e2 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
@@ -14,8 +14,8 @@ def ITk_BCM_ZeroSuppressionCfg(flags, name="ITk_BCM_ZeroSuppression", **kwargs):
 ##------------------------------------------------------------------------------
 def ITkPixelClusterizationCfg(flags, name = "ITkPixelClusterization", **kwargs) :
     acc = ComponentAccumulator()
-    merged_pixels_tool = acc.getPrimaryAndMerge(ITkMergedPixelsToolCfg(flags, **kwargs))
-    ambi_finder = acc.getPrimaryAndMerge(ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs))
+    merged_pixels_tool = acc.popToolsAndMerge(ITkMergedPixelsToolCfg(flags, **kwargs))
+    ambi_finder = acc.popToolsAndMerge(ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs))
 
     kwargs.setdefault("clusteringTool", merged_pixels_tool)
     kwargs.setdefault("gangedAmbiguitiesFinder", ambi_finder)
@@ -46,7 +46,7 @@ def ITkStripClusterizationCfg(flags, name="ITkStripClusterization", **kwargs) :
     ITkStripLorentzAngleTool = acc.popToolsAndMerge( ITkStripLorentzAngleCfg(flags) )
 
     #### Clustering tool ######
-    ITkClusterMakerTool = acc.getPrimaryAndMerge(ITkClusterMakerToolCfg(flags))
+    ITkClusterMakerTool = acc.popToolsAndMerge(ITkClusterMakerToolCfg(flags))
     ITkStripClusteringTool = CompFactory.InDet.SCT_ClusteringTool( name           = "ITkStripClusteringTool",
                                                                    globalPosAlg   = ITkClusterMakerTool,
                                                                    conditionsTool = ITkStripConditionsSummaryTool,
@@ -83,14 +83,14 @@ def ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs) :
     kwargs.setdefault("PixelDetEleCollKey", "ITkPixelDetectorElementCollection")
 
     ITkPixelGangedAmbiguitiesFinder = CompFactory.InDet.PixelGangedAmbiguitiesFinder( name = "ITkPixelGangedAmbiguitiesFinder", **kwargs)
-    acc.addPublicTool( ITkPixelGangedAmbiguitiesFinder, primary=True )
+    acc.setPrivateTools( ITkPixelGangedAmbiguitiesFinder )
     return acc
 
 ##------------------------------------------------------------------------------
 def ITkMergedPixelsToolCfg(flags, **kwargs) :
       acc = ComponentAccumulator()
       # --- now load the framework for the clustering
-      kwargs.setdefault("globalPosAlg", acc.getPrimaryAndMerge(ITkClusterMakerToolCfg(flags)))
+      kwargs.setdefault("globalPosAlg", acc.popToolsAndMerge(ITkClusterMakerToolCfg(flags)))
 
       # PixelClusteringToolBase uses PixelConditionsSummaryTool
       from PixelConditionsTools.ITkPixelConditionsSummaryConfig import ITkPixelConditionsSummaryCfg
@@ -100,27 +100,21 @@ def ITkMergedPixelsToolCfg(flags, **kwargs) :
       kwargs.setdefault("PixelDetEleCollKey","ITkPixelDetectorElementCollection")
 
       ITkMergedPixelsTool = CompFactory.InDet.MergedPixelsTool(  name = "ITkMergedPixelsTool", **kwargs)
-      acc.addPublicTool(ITkMergedPixelsTool, primary=True)
+      acc.setPrivateTools(ITkMergedPixelsTool)
       return acc
 
 ##------------------------------------------------------------------------------
 def ITkClusterMakerToolCfg(flags, name="ITkClusterMakerTool", **kwargs) :
     acc = ComponentAccumulator()
 
-    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (ITkPixelChargeCalibCondAlgCfg, ITkPixelConfigCondAlgCfg, ITkPixelDeadMapCondAlgCfg,
-                                                                 ITkPixelOfflineCalibCondAlgCfg)
+    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelChargeCalibCondAlgCfg
     from PixelReadoutGeometry.PixelReadoutGeometryConfig import ITkPixelReadoutManagerCfg
     #ITkPixelCablingCondAlgCfg + ITkPixelReadoutSpeedAlgCfg needed?
 
     # This directly needs the following Conditions data:
     # PixelModuleData & PixelChargeCalibCondData
-    acc.merge(ITkPixelConfigCondAlgCfg(flags))
-    acc.merge(ITkPixelDeadMapCondAlgCfg(flags))
     acc.merge(ITkPixelChargeCalibCondAlgCfg(flags))
-    acc.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
     acc.merge(ITkPixelReadoutManagerCfg(flags))
-    #acc.merge(PixelCablingCondAlgCfg(flags))
-    #acc.merge(PixelReadoutSpeedAlgCfg(flags))
 
     from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleCfg
     ITkPixelLorentzAngleTool = acc.popToolsAndMerge(ITkPixelLorentzAngleCfg(flags))
@@ -134,7 +128,7 @@ def ITkClusterMakerToolCfg(flags, name="ITkClusterMakerTool", **kwargs) :
     kwargs.setdefault("PixelOfflineCalibData", "")
 
     ITkClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
-    acc.addPublicTool(ITkClusterMakerTool, primary=True)
+    acc.setPrivateTools(ITkClusterMakerTool)
     return acc
 
 
@@ -156,8 +150,7 @@ def ITkTrackParticleCreatorToolCfg(flags, name="ITkTrackParticleCreatorTool", **
         kwargs["TrackToVertex"] = result.popToolsAndMerge(ITkTrackToVertexCfg(flags))
     if "TrackSummaryTool" not in kwargs:
         from InDetConfig.ITkTrackingCommonConfig import ITkTrackSummaryToolSharedHitsCfg
-        TrackSummaryTool = result.popToolsAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
-        result.addPublicTool(TrackSummaryTool)
+        TrackSummaryTool = result.getPrimaryAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
         kwargs["TrackSummaryTool"] = TrackSummaryTool
     p_expr = flags.ITk.perigeeExpression
     kwargs.setdefault("BadClusterID", flags.ITk.pixelClusterBadClusterID)
@@ -190,7 +183,7 @@ def ITkTrackCollectionMergerAlgCfg(flags, name="ITkTrackCollectionMerger", Input
     kwargs.setdefault("UpdateSharedHits", True)
     kwargs.setdefault("UpdateAdditionalInfo", True)
     from InDetConfig.ITkTrackingCommonConfig import ITkTrackSummaryToolSharedHitsCfg
-    TrackSummaryTool = result.popToolsAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
+    TrackSummaryTool = result.getPrimaryAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
     kwargs.setdefault("SummaryTool", TrackSummaryTool)
 
     result.addEventAlgo(CompFactory.Trk.TrackCollectionMerger(name, **kwargs))
@@ -230,29 +223,6 @@ def ITkTrackRecoCfg(flags):
     """Configures complete ID tracking """
     result = ComponentAccumulator()
 
-    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-    result.merge(BeamPipeGeometryCfg(flags))
-
-    #TODO move these to a more appropriate place
-
-    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
-    result.merge(BeamSpotCondAlgCfg(flags))
-
-    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (ITkPixelChargeCalibCondAlgCfg, ITkPixelOfflineCalibCondAlgCfg, ITkPixelDistortionAlgCfg)
-    result.merge(ITkPixelChargeCalibCondAlgCfg(flags))
-    result.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
-    result.merge(ITkPixelDistortionAlgCfg(flags))
-
-    from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleTool, ITkPixelLorentzAngleCfg
-    result.addPublicTool(ITkPixelLorentzAngleTool(flags))
-    result.addPublicTool(result.popToolsAndMerge(ITkPixelLorentzAngleCfg(flags)))
-
-    from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleCfg
-    result.addPublicTool(result.popToolsAndMerge(ITkStripLorentzAngleCfg(flags)))
-
-    #Needed for ITk?
-    #from PixelConditionsAlgorithms.PixelConditionsConfig import PixelHitDiscCnfgAlgCfg
-    #result.merge(PixelHitDiscCnfgAlgCfg(flags))
     if flags.Input.Format == "BS":
         from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConfig import PixelRawDataProviderAlgCfg
         result.merge(PixelRawDataProviderAlgCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py b/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
index 545207a37bfd401e44ac598ff3eb59bcf27d9387..9c37fa534b55201363e52e3dd635af8f64ac0ea3 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
@@ -43,7 +43,6 @@ def ITkTrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth, name='
     acc = ComponentAccumulator()
 
     ITkTruthMatchSimilarityTool = acc.popToolsAndMerge(ITkTruthMatchToolCfg(flags))
-    acc.addPublicTool(ITkTruthMatchSimilarityTool)
 
     kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
     kwargs.setdefault("OutputName", TracksTruth)
diff --git a/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
index 64128d11cfcda75c1f053b6e200660c30ed05992..0238dd31b43de713edd532ab8910ab4cc6dc3021 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
@@ -68,6 +68,9 @@ def ITkPixelClusterOnTrackToolBaseCfg(flags, name="ITkPixelClusterOnTrackTool",
     acc = ComponentAccumulator()
     the_name = makeName(name, kwargs)
 
+    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelOfflineCalibCondAlgCfg
+    acc.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
+
     split_cluster_map_extension = kwargs.pop('SplitClusterMapExtension','')
     if (flags.Beam.Type == "cosmics"):
         kwargs.setdefault("ErrorStrategy", 0)
@@ -238,13 +241,10 @@ def ITkTrackPRD_AssociationCfg(flags, name='ITkTrackPRD_Association', **kwargs):
     return acc
 
 def ITkSummaryHelperNoHoleSearchCfg(flags, name='ITkSummaryHelperNoHoleSearch', **kwargs):
-    acc = ComponentAccumulator()
     if 'HoleSearch' not in kwargs :
         kwargs.setdefault("HoleSearch", None)
     from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
-    ITkTrackSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryHelperTool)
-    return acc
+    return ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
     acc = ComponentAccumulator()
@@ -263,7 +263,7 @@ def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
             from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
             ITkSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, **id_helper_args))
         else:
-            ITkSummaryHelperTool = acc.popToolsAndMerge(ITkSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
+            ITkSummaryHelperTool = acc.getPrimaryAndMerge(ITkSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", ITkSummaryHelperTool)
 
     #
@@ -273,20 +273,16 @@ def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
     kwargs.setdefault("doHolesInDet", do_holes)
     kwargs.setdefault("TRT_ElectronPidTool", None) # we don't want to use those tools during pattern
     kwargs.setdefault("PixelToTPIDTool", None) # we don't want to use those tools during pattern
-    acc.setPrivateTools(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs))
+    acc.addPublicTool(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs), primary=True)
     return acc
 
 def ITkSummaryHelperSharedHitsCfg(flags, name='ITkSummaryHelperSharedHits', **kwargs):
-    acc = ComponentAccumulator()
-
     kwargs.setdefault("PixelToTPIDTool", None)
     kwargs.setdefault("TestBLayerTool", None)
     kwargs.setdefault("DoSharedHits", flags.ITk.doSharedHits)
 
     from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
-    ITkTrackSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryHelperTool)
-    return acc
+    return ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def ITkTrackSummaryToolSharedHitsCfg(flags, name='ITkTrackSummaryToolSharedHits',**kwargs):
     acc = ComponentAccumulator()
@@ -298,14 +294,14 @@ def ITkTrackSummaryToolSharedHitsCfg(flags, name='ITkTrackSummaryToolSharedHits'
         id_helper_args = copyArgs(kwargs,copy_args) if 'ClusterSplitProbabilityName' in kwargs else {}
         kwargs.pop('ClusterSplitProbabilityName',None)
 
-        ITkSummaryHelperSharedHits = acc.popToolsAndMerge(ITkSummaryHelperSharedHitsCfg(flags, **id_helper_args))
+        ITkSummaryHelperSharedHits = acc.getPrimaryAndMerge(ITkSummaryHelperSharedHitsCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", ITkSummaryHelperSharedHits)
 
     kwargs.setdefault( "PixelToTPIDTool", None)
     kwargs.setdefault( "doSharedHits", flags.ITk.doSharedHits)
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags, name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryTool)
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags, name, **kwargs))
+    acc.addPublicTool(ITkTrackSummaryTool, primary=True)
     return acc
 
 def ITkMultipleScatteringUpdatorCfg(flags, name = "ITkMultipleScatteringUpdator", **kwargs):
@@ -503,7 +499,7 @@ def ITkKalmanFitterCfg(flags, name='ITkKalmanFitter',**kwargs) :
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAF)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkKalmanDNAFitterCfg(flags, name='ITkKalmanDNAFitter',**kwargs) :
@@ -520,7 +516,7 @@ def ITkKalmanDNAFitterCfg(flags, name='ITkKalmanDNAFitter',**kwargs) :
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAF)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkReferenceKalmanFitterCfg(flags, name='ITkReferenceKalmanFitter',**kwargs) :
@@ -533,7 +529,7 @@ def ITkReferenceKalmanFitterCfg(flags, name='ITkReferenceKalmanFitter',**kwargs)
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAFRef)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkDistributedKalmanFilterCfg(flags, name="ITkDistributedKalmanFilter", **kwargs) :
@@ -550,7 +546,7 @@ def ITkDistributedKalmanFilterCfg(flags, name="ITkDistributedKalmanFilter", **kw
         kwargs.setdefault('ROTcreator', ITkRotCreator)
 
     DistributedKalmanFilter = CompFactory.Trk.DistributedKalmanFilter(name = name, **kwargs)
-    acc.addPublicTool(DistributedKalmanFilter, primary=True)
+    acc.setPrivateTools(DistributedKalmanFilter)
     return acc
 
 def ITkGlobalChi2FitterCfg(flags, name='ITkGlobalChi2Fitter', **kwargs) :
@@ -592,7 +588,7 @@ def ITkGlobalChi2FitterCfg(flags, name='ITkGlobalChi2Fitter', **kwargs) :
         kwargs.setdefault('Momentum', 1000.*Units.MeV)
 
     ITkGlobalChi2Fitter = acc.popToolsAndMerge(ITkGlobalChi2FitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkGlobalChi2Fitter, primary=True)
+    acc.setPrivateTools(ITkGlobalChi2Fitter)
     return acc
 
 def ITkGsfMaterialUpdatorCfg(flags, name='ITkGsfMaterialUpdator', **kwargs) :
@@ -651,7 +647,7 @@ def ITkGaussianSumFitterCfg(flags, name='ITkGaussianSumFitter', **kwargs) :
     kwargs.setdefault('DoHitSorting', True)
 
     GaussianSumFitter = CompFactory.Trk.GaussianSumFitter(name = name, **kwargs)
-    acc.addPublicTool(GaussianSumFitter, primary=True)
+    acc.setPrivateTools(GaussianSumFitter)
     return acc
 
 def ITkTrackFitterCfg(flags, name='ITkTrackFitter', **kwargs) :
@@ -803,11 +799,8 @@ def ITkRotCreatorDigitalCfg(flags, name='ITkRotCreatorDigital', **kwargs) :
     return acc
 
 def ITkTrackSummaryToolNoHoleSearchCfg(flags, name='ITkTrackSummaryToolNoHoleSearch',**kwargs) :
-    acc = ComponentAccumulator()
     kwargs.setdefault('doHolesInDet', False)
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags, name=name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryTool)
-    return acc
+    return ITkTrackSummaryToolCfg(flags, name=name, **kwargs)
 
 def ITkROIInfoVecCondAlgCfg(flags, name='ITkROIInfoVecCondAlg', **kwargs) :
     acc = ComponentAccumulator()
@@ -823,7 +816,7 @@ def ITkAmbiScoringToolBaseCfg(flags, name='ITkAmbiScoringTool', **kwargs) :
     from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
     kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags)))
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     from AthenaCommon.DetFlags  import DetFlags
     have_calo_rois = flags.ITk.doBremRecovery and flags.ITk.doCaloSeededBrem and DetFlags.detdescr.Calo_allOn()
@@ -847,20 +840,20 @@ def ITkAmbiScoringToolBaseCfg(flags, name='ITkAmbiScoringTool', **kwargs) :
         kwargs.setdefault("InDetEtaDependentCutsSvc", acc.getService("ITkEtaDependentCutsSvc"+flags.ITk.Tracking.extension))
 
     the_name = name + flags.ITk.Tracking.extension
-    acc.addPublicTool(CompFactory.InDet.InDetAmbiScoringTool(name = the_name, **kwargs), primary=True)
+    acc.setPrivateTools(CompFactory.InDet.InDetAmbiScoringTool(name = the_name, **kwargs))
     return acc
 
 def ITkCosmicsScoringToolBaseCfg(flags, name='ITkCosmicsScoringTool', **kwargs) :
     acc = ComponentAccumulator()
     the_name=makeName(name, kwargs)
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nWeightedClustersMin", flags.ITk.Tracking.nWeightedClustersMin )
     kwargs.setdefault("minTRTHits", 0 )
     kwargs.setdefault("SummaryTool", ITkTrackSummaryTool )
 
-    acc.addPublicTool(CompFactory.InDet.InDetCosmicScoringTool(name = the_name, **kwargs ), primary=True)
+    acc.setPrivateTools( CompFactory.InDet.InDetCosmicScoringTool(name = the_name, **kwargs ) )
     return acc
 
 def ITkCosmicExtenScoringToolCfg(flags, name='ITkCosmicExtenScoringTool',**kwargs) :
@@ -894,7 +887,7 @@ def ITkNNScoringToolBaseCfg(flags, name='ITkNNScoringTool', **kwargs) :
 
     from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
     Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nnCutConfig", "dev/TrackingCP/LRTAmbiNetwork/20200727_225401/nn-config.json" )
     kwargs.setdefault("nnCutThreshold", flags.ITk.nnCutLargeD0Threshold )
diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
index 361bad19a4b6dac1002e3c60c327450dd7e4c28e..480ab7402f8b09d7551fbb7120ac51b0b7cc03ac 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
@@ -257,7 +257,7 @@ def ITkSiSPSeededTrackFinderCfg(flags, name="ITkSiSpTrackFinder", InputCollectio
                                                                  InputCollections = InputCollections ))
     from TrkConfig.AtlasExtrapolatorToolsConfig import ITkPropagatorCfg
     ITkPropagator = acc.getPrimaryAndMerge(ITkPropagatorCfg(flags))
-    ITkTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.ITkTrackSummaryToolNoHoleSearchCfg(flags))
+    ITkTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolNoHoleSearchCfg(flags))
     ITkSiSpacePointsSeedMaker = acc.popToolsAndMerge(ITkSiSpacePointsSeedMakerCfg(flags,
                                                                                   InputCollections = InputCollections ))
 
@@ -307,7 +307,6 @@ def ITkSiSPSeededTrackFinderROIConvCfg(flags, name="ITkSiSpTrackFinderROIConv",
 
     from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
     RegSelTool_ITkStrip   = acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags))
-    acc.addPublicTool(RegSelTool_ITkStrip)
 
     kwargs.setdefault("RegSelTool_Strip", RegSelTool_ITkStrip)
     kwargs.setdefault("useITkConvSeeded", True)
@@ -386,7 +385,7 @@ def ITkAmbiTrackSelectionToolCfg(flags, name="ITkAmbiTrackSelectionTool", **kwar
         AmbiTrackSelectionTool = CompFactory.InDet.InDetAmbiTrackSelectionTool
 
     ITkAmbiTrackSelectionTool = AmbiTrackSelectionTool(name = name+flags.ITk.Tracking.extension, **kwargs)
-    acc.addPublicTool(ITkAmbiTrackSelectionTool, primary=True)
+    acc.setPrivateTools(ITkAmbiTrackSelectionTool)
     return acc
 
 def ITkDenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "ITkAmbiguityScoreProcessor", ClusterSplitProbContainer='', **kwargs) :
@@ -395,12 +394,12 @@ def ITkDenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "ITkAmbigui
     # --- set up different Scoring Tool for collisions and cosmics
     #
     if flags.Beam.Type == 'cosmics':
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
     else:
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkAmbiScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkAmbiScoringToolCfg(flags))
 
     from InDetConfig.ITkSiliconPreProcessing import ITkNnPixelClusterSplitProbToolCfg
-    ITkNnPixelClusterSplitProbTool = acc.getPrimaryAndMerge(ITkNnPixelClusterSplitProbToolCfg(flags))
+    ITkNnPixelClusterSplitProbTool = acc.popToolsAndMerge(ITkNnPixelClusterSplitProbToolCfg(flags))
     ITkPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags))
     ITkPRDtoTrackMapTool = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolCfg(flags))
 
@@ -440,9 +439,9 @@ def ITkDenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityPro
     # --- set up different Scoring Tool for collisions and cosmics
     #
     if flags.Beam.Type == 'cosmics':
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
     else:
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkAmbiScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkAmbiScoringToolCfg(flags))
 
     fitter_args = {}
     fitter_args.setdefault("nameSuffix", 'Ambi'+flags.ITk.Tracking.extension)
@@ -476,12 +475,12 @@ def ITkDenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityPro
 
     ITkPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags))
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.ITkTrackSummaryToolCfg( flags,
-                                                                              namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
-                                                                              nameSuffix                  = flags.ITk.Tracking.extension,
-                                                                              ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolCfg( flags,
+                                                                                namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
+                                                                                nameSuffix                  = flags.ITk.Tracking.extension,
+                                                                                ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
 
-    ITkAmbiTrackSelectionTool = acc.getPrimaryAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
+    ITkAmbiTrackSelectionTool = acc.popToolsAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
 
     from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
     Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
@@ -523,12 +522,12 @@ def ITkSimpleAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityProcessor", Cl
     ITkTrackFitter = acc.popToolsAndMerge(TC.ITkTrackFitterCfg(flags))
     ITkPRDtoTrackMapToolGangedPixels = TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.ITkTrackSummaryToolCfg( flags,
-                                                                              namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
-                                                                              nameSuffix                  = flags.ITk.Tracking.extension,
-                                                                              ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolCfg( flags,
+                                                                                namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
+                                                                                nameSuffix                  = flags.ITk.Tracking.extension,
+                                                                                ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
 
-    ITkAmbiTrackSelectionTool = acc.getPrimaryAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
+    ITkAmbiTrackSelectionTool = acc.popToolsAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
 
     kwargs.setdefault("Fitter", ITkTrackFitter)
     kwargs.setdefault("AssociationTool", ITkPRDtoTrackMapToolGangedPixels)
diff --git a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
index 9d97c52e294ee89f702d2e2a7aa2694661c88436..a262b30104b1af6267325a2c1d420b42319f34db 100644
--- a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
@@ -79,7 +79,7 @@ def InDetBoundaryCheckToolCfg(flags, name='InDetBoundaryCheckTool', **kwargs):
       kwargs.setdefault("SctSummaryTool", None)
 
   if 'PixelLayerTool' not in kwargs :
-    kwargs.setdefault("PixelLayerTool", result.getPrimaryAndMerge(InDetTestPixelLayerToolCfg(flags)))
+    kwargs.setdefault("PixelLayerTool", result.popToolsAndMerge(InDetTestPixelLayerToolCfg(flags)))
 
   kwargs.setdefault("UsePixel", flags.Detector.EnablePixel)
   kwargs.setdefault("UseSCT", flags.Detector.EnableSCT)
@@ -127,7 +127,7 @@ def InDetTestPixelLayerToolCfg(flags, name = "InDetTestPixelLayerTool", **kwargs
   kwargs.setdefault("CheckDisabledFEs", flags.InDet.checkDeadElementsOnTrack)
 
   tool = CompFactory.InDet.InDetTestPixelLayerTool( name = the_name, **kwargs)
-  result.addPublicTool( tool, primary=True )
+  result.setPrivateTools( tool )
   return result
 
 def splitDefaultPrefix(name) :
diff --git a/InnerDetector/InDetConfig/python/SiliconPreProcessing.py b/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
index a1c4700b3adea25deb5c6217c1e334ba6dd0a8d7..dd1a1decf0d33ea4d4a2d4b12cddc6797c3effc9 100644
--- a/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
+++ b/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
@@ -35,7 +35,6 @@ def InDetSiTrackerSpacePointFinderCfg(flags, name = "InDetSiTrackerSpacePointFin
     acc = SCT_ReadoutGeometryCfg(flags)
 
     InDetSiSpacePointMakerTool = acc.popToolsAndMerge(SiSpacePointMakerToolCfg(flags))
-    acc.addPublicTool(InDetSiSpacePointMakerTool) ## I decided to merge it
 
     kwargs.setdefault("SiSpacePointMakerTool", InDetSiSpacePointMakerTool)
     kwargs.setdefault("PixelsClustersName", 'PixelClusters') # InDetKeys.PixelClusters
@@ -187,47 +186,11 @@ def InDetRecPreProcessingSiliconCfg(flags, **kwargs):
             from InDetConfig.TrackRecoConfig import BCM_ZeroSuppressionCfg
             acc.merge(BCM_ZeroSuppressionCfg(flags))
         
-        if flags.Detector.EnablePixel or flags.Detector.EnableSCT:
-            #
-            # --- SiLorentzAngleTool
-            #
-            from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
-            PixelLorentzAngleTool = acc.popToolsAndMerge(PixelLorentzAngleCfg(flags))
-            acc.addPublicTool(PixelLorentzAngleTool)
-
-            from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
-            SCTLorentzAngleTool = acc.popToolsAndMerge( SCT_LorentzAngleCfg(flags) )    
-            acc.addPublicTool(SCTLorentzAngleTool)
-            #
-            # --- ClusterMakerTool (public), needed by Pixel and SCT Clusterization
-            #
-            from InDetConfig.TrackRecoConfig import ClusterMakerToolCfg
-            acc.merge(ClusterMakerToolCfg(flags, PixelLorentzAngleTool=PixelLorentzAngleTool, SCTLorentzAngleTool=SCTLorentzAngleTool))
         #
         # -- Pixel Clusterization
         #
         if (flags.Detector.EnablePixel and flags.InDet.doPixelPRDFormation) or redoPatternRecoAndTracking:
             #
-            # --- do we use new splittig or not ?
-            #
-            if flags.InDet.doPixelClusterSplitting:
-                #
-                # --- Neutral Network version ?
-                #
-                if flags.InDet.pixelClusterSplittingType == 'NeuralNet':
-                    NnPixelClusterSplitProbTool = acc.popToolsAndMerge(NnPixelClusterSplitProbToolCfg(flags))
-                    acc.addPublicTool(NnPixelClusterSplitProbTool)
-                
-                    NnPixelClusterSplitter = acc.popToolsAndMerge(NnPixelClusterSplitterCfg(flags))
-                    acc.addPublicTool(NnPixelClusterSplitter)
-                #
-                # --- Neutral Network version ?
-                #
-                elif flags.InDet.pixelClusterSplittingType == 'AnalogClus':      
-                    # new splitter tool
-                    TotPixelClusterSplitter=CompFactory.InDet.TotPixelClusterSplitter (name="TotPixelClusterSplitter")
-                    acc.addPublicTool(TotPixelClusterSplitter)
-            #
             # --- PixelClusterization algorithm
             #
             from InDetConfig.TrackRecoConfig import PixelClusterizationCfg
diff --git a/InnerDetector/InDetConfig/python/TRTExtensionConfig.py b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
index 7a4834f3f7df31a5f39ef3b48f666d6e9f44b096..d750ce310b27004bed4302f75c4244245905eee0 100644
--- a/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
@@ -89,8 +89,7 @@ def InDetExtensionProcessorCfg(flags, SiTrackCollection=None, ExtendedTrackColle
     #
     # --- get configured track extension processor
     #
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     if flags.InDet.materialInteractions:
         kwargs.setdefault("matEffects", flags.InDet.materialInteractionsType)
diff --git a/InnerDetector/InDetConfig/python/TRTPhaseConfig.py b/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
index 1b2d247c03f0f54cbaebb61f7650c3f4455d8bdd..387249dabdbb12a437ffd43f4003e7380c20a012 100644
--- a/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
@@ -98,8 +98,7 @@ def InDetCosmicsEventPhaseCfg(flags, InputTrackCollections, name = 'InDetCosmics
     InDetFixedWindowTrackTimeTool  = acc.popToolsAndMerge(InDetFixedWindowTrackTimeToolCfg(flags))
     acc.addPublicTool(InDetFixedWindowTrackTimeTool )
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     # CalDb tool
     from TRT_ConditionsServices.TRT_ConditionsServicesConfig import TRT_CalDbToolCfg
diff --git a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
index 6c633dc256d8a4f37410de5c211d1e61da5d5a71..282cce021eff8ad1a16f6b29652ee6d3c994ede2 100644
--- a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
@@ -9,8 +9,7 @@ def InDetTrtTrackScoringToolCfg(flags, name ='InDetTRT_StandaloneScoringTool', e
     #
     # --- set up special Scoring Tool for standalone TRT tracks
     #
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     InDetTRTDriftCircleCut = TC.InDetTRTDriftCircleCutForPatternRecoCfg(flags)
     acc.addPublicTool(InDetTRTDriftCircleCut)
@@ -55,8 +54,7 @@ def TRT_SegmentToTrackToolCfg(flags, name ='InDetTRT_SegmentToTrackTool', extens
     InDetTrackFitterTRT = acc.popToolsAndMerge(TC.InDetTrackFitterTRTCfg(flags))
     acc.addPublicTool(InDetTrackFitterTRT)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     InDetExtrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/TrackRecoConfig.py b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
index 41785e9080ec9587ff615b3f2698307bcca34add..579c38eae30f19cd006523326b53a2aff488153c 100644
--- a/InnerDetector/InDetConfig/python/TrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
@@ -14,8 +14,8 @@ def BCM_ZeroSuppressionCfg(flags, name="InDetBCM_ZeroSuppression", **kwargs):
 ##------------------------------------------------------------------------------
 def PixelClusterizationCfg(flags, name = "InDetPixelClusterization", **kwargs) :
     acc = ComponentAccumulator()
-    merged_pixels_tool = acc.getPrimaryAndMerge(MergedPixelsToolCfg(flags, **kwargs))
-    ambi_finder = acc.getPrimaryAndMerge(PixelGangedAmbiguitiesFinderCfg(flags))
+    merged_pixels_tool = acc.popToolsAndMerge(MergedPixelsToolCfg(flags, **kwargs))
+    ambi_finder = acc.popToolsAndMerge(PixelGangedAmbiguitiesFinderCfg(flags))
 
     # Region selector tools for Pixel
     from RegionSelector.RegSelToolConfig import regSelTool_Pixel_Cfg
@@ -47,7 +47,7 @@ def SCTClusterizationCfg(flags, name="InDetSCT_Clusterization", **kwargs) :
     InDetSCT_ConditionsSummaryToolWithoutFlagged = acc.popToolsAndMerge(SCT_ConditionsSummaryToolCfg(flags, withFlaggedCondTool=False))
 
     #### Clustering tool ######
-    InDetClusterMakerTool = acc.getPrimaryAndMerge(ClusterMakerToolCfg(flags))
+    InDetClusterMakerTool = acc.popToolsAndMerge(ClusterMakerToolCfg(flags))
     InDetSCT_ClusteringTool = CompFactory.InDet.SCT_ClusteringTool( name           = "InDetSCT_ClusteringTool",
                                                                     globalPosAlg   = InDetClusterMakerTool,
                                                                     conditionsTool = InDetSCT_ConditionsSummaryToolWithoutFlagged)
@@ -81,14 +81,14 @@ def PixelGangedAmbiguitiesFinderCfg(flags) :
     acc = PixelReadoutGeometryCfg(flags)
 
     InDetPixelGangedAmbiguitiesFinder = CompFactory.InDet.PixelGangedAmbiguitiesFinder( name = "InDetPixelGangedAmbiguitiesFinder")
-    acc.addPublicTool( InDetPixelGangedAmbiguitiesFinder, primary=True)
+    acc.setPrivateTools( InDetPixelGangedAmbiguitiesFinder )
     return acc
 
 ##------------------------------------------------------------------------------
 def MergedPixelsToolCfg(flags, **kwargs) :
       acc = ComponentAccumulator()
       # --- now load the framework for the clustering
-      kwargs.setdefault("globalPosAlg", acc.getPrimaryAndMerge(ClusterMakerToolCfg(flags)) )
+      kwargs.setdefault("globalPosAlg", acc.popToolsAndMerge(ClusterMakerToolCfg(flags)) )
 
       # PixelClusteringToolBase uses PixelConditionsSummaryTool
       from PixelConditionsTools.PixelConditionsSummaryConfig import PixelConditionsSummaryCfg
@@ -100,30 +100,32 @@ def MergedPixelsToolCfg(flags, **kwargs) :
 
       InDetMergedPixelsTool = CompFactory.InDet.MergedPixelsTool(  name = "InDetMergedPixelsTool", **kwargs)
      
-      acc.addPublicTool(InDetMergedPixelsTool, primary=True)
+      acc.setPrivateTools(InDetMergedPixelsTool)
       return acc
 
 ##------------------------------------------------------------------------------
 def ClusterMakerToolCfg(flags, name="InDetClusterMakerTool", **kwargs) :
-    from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelChargeCalibCondAlgCfg, PixelConfigCondAlgCfg, PixelDeadMapCondAlgCfg, 
-                                                                 PixelOfflineCalibCondAlgCfg, PixelCablingCondAlgCfg, PixelReadoutSpeedAlgCfg)
-
     acc = ComponentAccumulator()
+
     # This directly needs the following Conditions data:
-    # PixelModuleData & PixelChargeCalibCondData
-    acc.merge( PixelConfigCondAlgCfg(flags))
-    acc.merge(PixelDeadMapCondAlgCfg(flags))
-    acc.merge( PixelChargeCalibCondAlgCfg(flags))
+    # PixelChargeCalibCondData & PixelOfflineCalibData
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelChargeCalibCondAlgCfg, PixelOfflineCalibCondAlgCfg
+    acc.merge(PixelChargeCalibCondAlgCfg(flags))
     acc.merge(PixelOfflineCalibCondAlgCfg(flags))
-    acc.merge(PixelCablingCondAlgCfg(flags))
-    acc.merge(PixelReadoutSpeedAlgCfg(flags))
 
-    InDetClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
+    from PixelReadoutGeometry.PixelReadoutGeometryConfig import PixelReadoutManagerCfg
+    acc.merge(PixelReadoutManagerCfg(flags))
 
+    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
+    PixelLorentzAngleTool = acc.popToolsAndMerge(PixelLorentzAngleCfg(flags))
     from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
     SCTLorentzAngleTool = acc.popToolsAndMerge( SCT_LorentzAngleCfg(flags) )    
-    acc.addPublicTool(SCTLorentzAngleTool)
-    acc.addPublicTool(InDetClusterMakerTool, primary=True)
+
+    kwargs.setdefault("PixelLorentzAngleTool", PixelLorentzAngleTool)
+    kwargs.setdefault("SCTLorentzAngleTool", SCTLorentzAngleTool)
+
+    InDetClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
+    acc.setPrivateTools(InDetClusterMakerTool)
     return acc
 
 
@@ -144,8 +146,7 @@ def TrackParticleCreatorToolCfg(flags, name="TrackParticleCreatorTool", **kwargs
         kwargs["TrackToVertex"] = result.popToolsAndMerge(TrackToVertexCfg(flags))
     if "TrackSummaryTool" not in kwargs:
         from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolSharedHitsCfg
-        TrackSummaryTool = result.popToolsAndMerge(InDetTrackSummaryToolSharedHitsCfg(flags))
-        result.addPublicTool(TrackSummaryTool)
+        TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolSharedHitsCfg(flags))
         kwargs["TrackSummaryTool"] = TrackSummaryTool
     p_expr = flags.InDet.perigeeExpression
     kwargs.setdefault("BadClusterID", flags.InDet.pixelClusterBadClusterID)
@@ -199,38 +200,15 @@ def TrackRecoCfg(flags):
     """Configures complete ID tracking """
     result = ComponentAccumulator()
 
-    from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
-    result.merge( PixelReadoutGeometryCfg(flags))
-
-    from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
-    result.merge( SCT_ReadoutGeometryCfg(flags))
-
-    from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
-    result.merge(TRT_ReadoutGeometryCfg(flags))
-
-    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-    result.merge(BeamPipeGeometryCfg(flags))
-
-    #TODO move these to a more appropriate place
-
-    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
-    result.merge(BeamSpotCondAlgCfg(flags))
-
     from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelChargeCalibCondAlgCfg, PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg)
     result.merge(PixelChargeCalibCondAlgCfg(flags))
     result.merge(PixelOfflineCalibCondAlgCfg(flags))
     result.merge(PixelDistortionAlgCfg(flags))
+
     from InDetConfig.TrackingCommonConfig import PixelClusterNnCondAlgCfg, PixelClusterNnWithTrackCondAlgCfg
     result.merge(PixelClusterNnCondAlgCfg(flags))    
     result.merge(PixelClusterNnWithTrackCondAlgCfg(flags))
 
-    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool, PixelLorentzAngleCfg
-    result.addPublicTool(PixelLorentzAngleTool(flags))
-    result.addPublicTool(result.popToolsAndMerge(PixelLorentzAngleCfg(flags)))
-
-    from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
-    result.addPublicTool(result.popToolsAndMerge(SCT_LorentzAngleCfg(flags)))
-
     from PixelConditionsAlgorithms.PixelConditionsConfig import PixelHitDiscCnfgAlgCfg
     result.merge(PixelHitDiscCnfgAlgCfg(flags))
     if flags.Input.Format == "BS":
@@ -269,7 +247,7 @@ def TrackRecoCfg(flags):
 
     if flags.InDet.doTruth:
         from InDetConfig.TrackTruthConfig import InDetTrackTruthCfg
-        result.merge(InDetTrackTruthCfg(flags, Tracks = "ExtendTracks", DetailedTruth = "ExtendTracksDetailedTruth", TracksTruth = "ExtendTracksTruthCollection"))
+        result.merge(InDetTrackTruthCfg(flags, Tracks = "ExtendedTracks", DetailedTruth = "ExtendedTracksDetailedTruth", TracksTruth = "ExtendedTracksTruthCollection"))
 
     # TODO add followup algs
     result.merge(TrackParticleCnvAlgCfg(flags, TrackContainerName="ExtendedTracks"))
@@ -320,6 +298,9 @@ if __name__ == "__main__":
         from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
         top_acc.merge(EventInfoCnvAlgCfg(ConfigFlags))
 
+    if ConfigFlags.Input.isMC:
+        from xAODTruthCnv.xAODTruthCnvConfigNew import GEN_AOD2xAODCfg
+        top_acc.merge(GEN_AOD2xAODCfg(ConfigFlags))
 
     top_acc.merge(TrackRecoCfg(ConfigFlags))
     from AthenaCommon.Constants import DEBUG
diff --git a/InnerDetector/InDetConfig/python/TrackTruthConfig.py b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
index 327464e4210e58b832399584a8b723725f93433d..8e7b8b544bb36c420ecdf0d279b876965c6ed94d 100644
--- a/InnerDetector/InDetConfig/python/TrackTruthConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory     import CompFactory
 # -------------------------------------------------------------------------
@@ -47,7 +47,6 @@ def TrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth, name='Sel
     acc = ComponentAccumulator()
 
     InDetTruthMatchSimilarityTool = acc.popToolsAndMerge(InDetTruthMatchToolCfg(flags))
-    acc.addPublicTool(InDetTruthMatchSimilarityTool)
 
     kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
     kwargs.setdefault("OutputName", TracksTruth)
@@ -100,28 +99,11 @@ if __name__ == "__main__":
 
     ####################### Aditional Configurations #########################
 
-    from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
-    top_acc.merge( PixelReadoutGeometryCfg(ConfigFlags) )
-
-    from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
-    top_acc.merge(SCT_ReadoutGeometryCfg(ConfigFlags))
-
-    from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
-    top_acc.merge(TRT_ReadoutGeometryCfg( ConfigFlags ))
-
     from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
     top_acc.merge(BeamSpotCondAlgCfg(ConfigFlags))
 
-    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg, PixelHitDiscCnfgAlgCfg
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg
     top_acc.merge(PixelDistortionAlgCfg(ConfigFlags))
-    top_acc.merge(PixelHitDiscCnfgAlgCfg(ConfigFlags))
-
-    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool, PixelLorentzAngleCfg
-    top_acc.addPublicTool(PixelLorentzAngleTool(ConfigFlags))
-    top_acc.addPublicTool(top_acc.popToolsAndMerge(PixelLorentzAngleCfg(ConfigFlags)))
-
-    from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConfig import PixelRawDataProviderAlgCfg
-    top_acc.merge(PixelRawDataProviderAlgCfg(ConfigFlags))
 
     ################## SiliconPreProcessing Configurations ###################
     from InDetConfig.SiliconPreProcessing import InDetRecPreProcessingSiliconCfg
diff --git a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
index 24e4ec9124eaedfa6f1d47b011b3965e6760f51f..87c304b376e12477965772ffc53a4914087454bb 100644
--- a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
@@ -52,7 +52,6 @@ def PixelClusterNnCondAlgCfg(flags, **kwargs):
     if 'NetworkToHistoTool' not in kwargs :
         NeuralNetworkToHistoTool = acc.popToolsAndMerge(NeuralNetworkToHistoToolCfg(name = "NeuralNetworkToHistoTool"))
         kwargs.setdefault("NetworkToHistoTool", NeuralNetworkToHistoTool)
-        acc.addPublicTool(NeuralNetworkToHistoTool)
 
     acc.addCondAlgo(CompFactory.InDet.TTrainedNetworkCondAlg(kwargs.pop("name", 'PixelClusterNnCondAlg'), **kwargs))
     return acc
@@ -82,7 +81,6 @@ def NnClusterizationFactoryCfg(flags, name = 'NnClusterizationFactory', **kwargs
     if 'PixelLorentzAngleTool' not in kwargs :
         from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool
         PixelLorentzAngleTool = PixelLorentzAngleTool(flags, name="PixelLorentzAngleTool", **kwargs)
-        acc.addPublicTool(PixelLorentzAngleTool)
         kwargs.setdefault("PixelLorentzAngleTool", PixelLorentzAngleTool)
 
     useTTrainedNetworks = flags.InDet.useNNTTrainedNetworks
@@ -107,13 +105,16 @@ def NnClusterizationFactoryCfg(flags, name = 'NnClusterizationFactory', **kwargs
     kwargs.setdefault("NnCollectionJSONReadKey", '' if useTTrainedNetworks else 'PixelClusterNNJSON')
 
     NnClusterizationFactory = CompFactory.InDet.NnClusterizationFactory( name = the_name, **kwargs )
-    acc.addPublicTool( NnClusterizationFactory, primary=True)
+    acc.setPrivateTools( NnClusterizationFactory )
     return acc
 
 def InDetPixelClusterOnTrackToolBaseCfg(flags, name="PixelClusterOnTrackTool", **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName(name, kwargs)
 
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelOfflineCalibCondAlgCfg
+    acc.merge(PixelOfflineCalibCondAlgCfg(flags))
+
     split_cluster_map_extension = kwargs.pop('SplitClusterMapExtension','')
     if (flags.Beam.Type == "cosmics") or flags.InDet.doDBMstandalone:
         kwargs.setdefault("ErrorStrategy", 0)
@@ -154,7 +155,7 @@ def InDetPixelClusterOnTrackToolNNSplittingCfg(flags, name='InDetPixelClusterOnT
 
     if flags.InDet.doPixelClusterSplitting and flags.InDet.pixelClusterSplittingType == 'NeuralNet':
         if 'NnClusterizationFactory' not in kwargs :
-            NnClusterizationFactory = acc.getPrimaryAndMerge(NnClusterizationFactoryCfg(flags))
+            NnClusterizationFactory = acc.popToolsAndMerge(NnClusterizationFactoryCfg(flags))
             kwargs.setdefault("NnClusterizationFactory", NnClusterizationFactory)
 
     tool = acc.popToolsAndMerge(InDetPixelClusterOnTrackToolBaseCfg(flags, name=name, **kwargs))
@@ -250,13 +251,13 @@ def InDetTRT_DriftCircleOnTrackToolCfg(flags, name='TRT_DriftCircleOnTrackTool',
     tmpAcc, LuminosityOutputKey = LumiCondDataKeyForTRTMuScalingCfg(flags)
     acc.merge(tmpAcc)
     kwargs.setdefault("LumiDataKey", LuminosityOutputKey)
-    acc.addPublicTool(CompFactory.InDet.TRT_DriftCircleOnTrackTool(name = the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackTool(name = the_name, **kwargs))
     return acc
 
 def InDetBroadTRT_DriftCircleOnTrackToolCfg(name='InDetBroadTRT_DriftCircleOnTrackTool', **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.InDet.TRT_DriftCircleOnTrackNoDriftTimeTool(the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackNoDriftTimeTool(the_name, **kwargs))
     return acc
 
 def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
@@ -276,7 +277,6 @@ def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
             ToolPixelCluster= acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
         else:
             ToolPixelCluster= acc.popToolsAndMerge(InDetPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(ToolPixelCluster)
         kwargs.setdefault("ToolPixelCluster", ToolPixelCluster)
 
     if 'ToolSCT_Cluster' not in kwargs :
@@ -285,10 +285,9 @@ def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
         else :
             ToolSCT_Cluster = acc.popToolsAndMerge(InDetSCT_ClusterOnTrackToolCfg(flags))
         kwargs.setdefault("ToolSCT_Cluster", ToolSCT_Cluster)
-        acc.addPublicTool(ToolSCT_Cluster)
 
     if 'ToolTRT_DriftCircle' not in kwargs :
-        kwargs.setdefault("ToolTRT_DriftCircle", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("ToolTRT_DriftCircle", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     kwargs.setdefault('Mode', 'indet')
     acc.setPrivateTools(CompFactory.Trk.RIO_OnTrackCreator(name=the_name, **kwargs))
@@ -300,10 +299,10 @@ def InDetTRT_DriftCircleOnTrackUniversalToolCfg(name='InDetTRT_RefitRotCreator',
     default_ScaleHitUncertainty = 2.5
 
     if 'RIOonTrackToolDrift' not in kwargs :
-        RIOonTrackToolDrift = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+        RIOonTrackToolDrift = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolDrift", RIOonTrackToolDrift)
     if 'RIOonTrackToolTube' not in kwargs :
-        RIOonTrackToolTube = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+        RIOonTrackToolTube = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolTube", RIOonTrackToolTube)
     kwargs.setdefault("ScaleHitUncertainty", default_ScaleHitUncertainty) 
     acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackUniversalTool(name = the_name, **kwargs))
@@ -317,7 +316,6 @@ def InDetRefitRotCreatorCfg(flags, name='InDetRefitRotCreator', **kwargs):
         if 'ToolTRT_DriftCircle' not in kwargs :
             ToolTRT_DriftCircle = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCfg(ScaleHitUncertainty = ScaleHitUncertainty))
             kwargs.setdefault("ToolTRT_DriftCircle", ToolTRT_DriftCircle)
-            acc.addPublicTool(ToolTRT_DriftCircle)
     InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name = name, **kwargs))
     acc.setPrivateTools(InDetRotCreator)
     return acc
@@ -356,13 +354,10 @@ def InDetTRTDriftCircleCutForPatternRecoCfg(flags, name='InDetTRTDriftCircleCutF
     return result
 
 def InDetSummaryHelperNoHoleSearchCfg(flags, name='InDetSummaryHelperNoHoleSearch', **kwargs):
-    acc = ComponentAccumulator()
     if 'HoleSearch' not in kwargs :
         kwargs.setdefault("HoleSearch", None)
     from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
-    InDetSummaryHelper = acc.getPrimaryAndMerge(InDetTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools( InDetSummaryHelper)
-    return acc
+    return InDetTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
     acc = ComponentAccumulator()
@@ -381,8 +376,7 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
             from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
             InDetSummaryHelperTool = acc.getPrimaryAndMerge(InDetTrackSummaryHelperToolCfg(flags, **id_helper_args))
         else:
-            InDetSummaryHelperTool = acc.popToolsAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
-            acc.addPublicTool(InDetSummaryHelperTool)
+            InDetSummaryHelperTool = acc.getPrimaryAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelperTool)
 
     #
@@ -392,7 +386,7 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
     kwargs.setdefault("doHolesInDet", do_holes)
     kwargs.setdefault("TRT_ElectronPidTool", None) # we don't want to use those tools during pattern
     kwargs.setdefault("PixelToTPIDTool", None) # we don't want to use those tools during pattern
-    acc.setPrivateTools(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs))
+    acc.addPublicTool(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs), primary=True)
     return acc
 
 def PixeldEdxAlg(flags, name = "PixeldEdxAlg", **kwargs):
@@ -436,14 +430,12 @@ def InDetSummaryHelperSharedHitsCfg(flags, name='InDetSummaryHelperSharedHits',
     acc = ComponentAccumulator()
     if 'PixelToTPIDTool' not in kwargs :
         InDetPixelToTPIDTool = acc.popToolsAndMerge(InDetPixelToTPIDToolCfg(flags))
-        acc.addPublicTool(InDetPixelToTPIDTool)
         kwargs.setdefault("PixelToTPIDTool", InDetPixelToTPIDTool)
 
     if 'TestBLayerTool' not in kwargs :
         testBLayerToolAcc = InDetRecTestBLayerToolCfg(flags)
         if testBLayerToolAcc is not None:
             InDetRecTestBLayerTool = acc.popToolsAndMerge(testBLayerToolAcc)
-            acc.addPublicTool(InDetRecTestBLayerTool)
         else:
             InDetRecTestBLayerTool = None
         kwargs.setdefault("TestBLayerTool", InDetRecTestBLayerTool)
@@ -471,7 +463,6 @@ def InDetTrackSummaryToolSharedHitsCfg(flags, name='InDetTrackSummaryToolSharedH
         kwargs.pop('ClusterSplitProbabilityName',None)
 
         InDetSummaryHelperSharedHits = acc.popToolsAndMerge(InDetSummaryHelperSharedHitsCfg(flags, **id_helper_args))
-        acc.addPublicTool(InDetSummaryHelperSharedHits)
         kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelperSharedHits)
 
     if 'TRT_ElectronPidTool' not in kwargs:
@@ -484,13 +475,12 @@ def InDetTrackSummaryToolSharedHitsCfg(flags, name='InDetTrackSummaryToolSharedH
 
     if 'PixelToTPIDTool' not in kwargs :
         InDetPixelToTPIDTool = acc.popToolsAndMerge(InDetPixelToTPIDToolCfg(flags))
-        acc.addPublicTool(InDetPixelToTPIDTool)
         kwargs.setdefault( "PixelToTPIDTool", InDetPixelToTPIDTool)
 
     kwargs.setdefault( "doSharedHits", flags.InDet.doSharedHits)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags, name, **kwargs))
-    acc.setPrivateTools(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags, name, **kwargs))
+    acc.addPublicTool(InDetTrackSummaryTool, primary=True)
     return acc
 
 def InDetUpdatorCfg(flags, name = 'InDetUpdator', **kwargs):
@@ -509,7 +499,7 @@ def InDetUpdatorCfg(flags, name = 'InDetUpdator', **kwargs):
     else :
         tool = CompFactory.Trk.KalmanUpdator(name = the_name, **kwargs)
 
-    acc.addPublicTool(tool, primary = True)
+    acc.setPrivateTools(tool)
     return acc
 
 def InDetMultipleScatteringUpdatorCfg(name = "InDetMultipleScatteringUpdator", **kwargs):
@@ -530,14 +520,11 @@ def InDetMeasRecalibSTCfg(flags, name='InDetMeasRecalibST', **kwargs) :
     if 'BroadPixelClusterOnTrackTool' not in kwargs :
         InDetBroadPixelClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
         kwargs.setdefault('BroadPixelClusterOnTrackTool', InDetBroadPixelClusterOnTrackTool)
-        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
     if 'BroadSCT_ClusterOnTrackTool' not in kwargs :
         InDetBroadSCT_ClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadSCT_ClusterOnTrackToolCfg(flags))
-        acc.addPublicTool(InDetBroadSCT_ClusterOnTrackTool)
         kwargs.setdefault('BroadSCT_ClusterOnTrackTool', InDetBroadSCT_ClusterOnTrackTool)
     if 'CommonRotCreator' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault('CommonRotCreator', InDetRefitRotCreator)
 
     MeasRecalibSteeringTool = CompFactory.Trk.MeasRecalibSteeringTool(name, **kwargs)
@@ -556,10 +543,9 @@ def InDetKalmanTrackFitterBaseCfg(flags, name='InDetKalmanTrackFitterBase',**kwa
 
     if 'RIO_OnTrackCreatorHandle' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault("RIO_OnTrackCreatorHandle", InDetRefitRotCreator)
 
-    InDetUpdator = acc.getPrimaryAndMerge(InDetUpdatorCfg(flags))
+    InDetUpdator = acc.popToolsAndMerge(InDetUpdatorCfg(flags))
     kwargs.setdefault('MeasurementUpdatorHandle', InDetUpdator)
     kwargs.setdefault('KalmanSmootherHandle', InDetBKS())
     kwargs.setdefault('KalmanOutlierLogicHandle', InDetKOL())
@@ -571,11 +557,9 @@ def InDetKalmanTrackFitterBaseCfg(flags, name='InDetKalmanTrackFitterBase',**kwa
         if 'RecalibratorHandle' not in kwargs :
             the_tool_name = 'InDetMeasRecalibST'
             InDetMeasRecalibST = acc.popToolsAndMerge(InDetMeasRecalibSTCfg(flags, name=the_tool_name+nameSuffix, **pix_cluster_on_track_args))
-            acc.addPublicTool(InDetMeasRecalibST)
             kwargs.setdefault('RecalibratorHandle', InDetMeasRecalibST)
     else :
         InDetMeasRecalibST = acc.popToolsAndMerge(InDetMeasRecalibSTCfg(flags))
-        acc.addPublicTool(InDetMeasRecalibST)
         kwargs.setdefault('RecalibratorHandle', InDetMeasRecalibST)
 
     KalmanFitter = CompFactory.Trk.KalmanFitter(name=name, **kwargs)
@@ -630,17 +614,15 @@ def InDetBroadRotCreatorCfg(flags, name='InDetBroadInDetRotCreator', **kwargs) :
     if 'ToolPixelCluster' not in kwargs :
         pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
         InDetBroadPixelClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
         kwargs.setdefault('ToolPixelCluster', InDetBroadPixelClusterOnTrackTool)
 
     if 'ToolSCT_Cluster' not in kwargs :
         InDetBroadSCT_ClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadSCT_ClusterOnTrackToolCfg(flags))
-        acc.addPublicTool(InDetBroadSCT_ClusterOnTrackTool)
         kwargs.setdefault('ToolSCT_Cluster', InDetBroadSCT_ClusterOnTrackTool)
 
     if flags.Detector.EnableTRT:
         if 'ToolTRT_DriftCircle' not in kwargs :
-            InDetBroadTRT_DriftCircleOnTrackTool = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+            InDetBroadTRT_DriftCircleOnTrackTool = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
             kwargs.setdefault('ToolTRT_DriftCircle', InDetBroadTRT_DriftCircleOnTrackTool)
 
     InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name = name, **kwargs))
@@ -698,7 +680,6 @@ def DistributedKalmanFilterCfg(flags, name="DistributedKalmanFilter", **kwargs)
 
     if 'ROTcreator' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('ROTcreator', InDetRotCreator)
 
     DistributedKalmanFilter = CompFactory.Trk.DistributedKalmanFilter(name = name, **kwargs)
@@ -714,14 +695,12 @@ def InDetGlobalChi2FitterCfg(flags, name='InDetGlobalChi2Fitter', **kwargs) :
 
     if 'RotCreatorTool' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('RotCreatorTool', InDetRotCreator)
 
     use_broad_cluster_any = flags.InDet.useBroadClusterErrors and (not flags.InDet.doDBMstandalone)
 
     if 'BroadRotCreatorTool' not in kwargs and  not flags.InDet.doRefit:
         InDetBroadRotCreator = acc.popToolsAndMerge(InDetBroadRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadRotCreator)
         kwargs.setdefault('BroadRotCreatorTool', InDetBroadRotCreator)
 
     if flags.InDet.doDBMstandalone:
@@ -797,12 +776,10 @@ def GaussianSumFitterCfg(flags, name='GaussianSumFitter', **kwargs) :
 
     if 'ToolForROTCreation' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('ToolForROTCreation', InDetRotCreator)
 
     if 'ToolForExtrapolation' not in kwargs :
         InDetGsfExtrapolator = acc.popToolsAndMerge(InDetGsfExtrapolatorCfg(flags))
-        acc.addPublicTool(InDetGsfExtrapolator)
         kwargs.setdefault('ToolForExtrapolation', InDetGsfExtrapolator)
     
     kwargs.setdefault('ReintegrateOutliers', False)
@@ -847,7 +824,6 @@ def InDetGlobalChi2FitterBaseCfg(flags, name='GlobalChi2FitterBase', **kwargs):
 
     InDetMultipleScatteringUpdator = acc.popToolsAndMerge(
         InDetMultipleScatteringUpdatorCfg())
-    acc.addPublicTool(InDetMultipleScatteringUpdator)
 
     InDetMaterialEffectsUpdator = acc.getPrimaryAndMerge(
         InDetMaterialEffectsUpdatorCfg(flags))
@@ -885,7 +861,6 @@ def InDetGlobalChi2FitterTRTCfg(flags, name='InDetGlobalChi2FitterTRT', **kwargs
 
     if 'RotCreatorTool' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault("RotCreatorTool", InDetRefitRotCreator)
 
     kwargs.setdefault("MaterialUpdateTool", '')
@@ -928,12 +903,10 @@ def InDetGlobalChi2FitterLowPtCfg(flags, name='InDetGlobalChi2FitterLowPt', **kw
 
     if 'RotCreatorTool' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('RotCreatorTool', InDetRotCreator)
 
     if 'BroadRotCreatorTool' not in kwargs and  not flags.InDet.doRefit:
         InDetBroadRotCreator = acc.popToolsAndMerge(InDetBroadRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadRotCreator)
         kwargs.setdefault('BroadRotCreatorTool', InDetBroadRotCreator)
 
     kwargs.setdefault('OutlierCut', 5.0)
@@ -1020,8 +993,7 @@ def InDetTRT_ExtensionToolCosmicsCfg(flags, name='InDetTRT_ExtensionToolCosmics'
 
     if 'Propagator' not in kwargs :
         from TrkConfig.AtlasExtrapolatorToolsConfig import InDetPropagatorCfg
-        InDetPropagator = acc.popToolsAndMerge(InDetPropagatorCfg(flags))
-        acc.addPublicTool(InDetPropagator)
+        InDetPropagator = acc.getPrimaryAndMerge(InDetPropagatorCfg(flags))
         kwargs.setdefault("Propagator", InDetPropagator)
 
     if 'Extrapolator' not in kwargs :
@@ -1030,12 +1002,10 @@ def InDetTRT_ExtensionToolCosmicsCfg(flags, name='InDetTRT_ExtensionToolCosmics'
 
     if 'RIOonTrackToolYesDr' not in kwargs :
         InDetTRT_DriftCircleOnTrackUniversalToolCosmics = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCosmicsCfg())
-        acc.addPublicTool(InDetTRT_DriftCircleOnTrackUniversalToolCosmics)
         kwargs.setdefault("RIOonTrackToolYesDr", InDetTRT_DriftCircleOnTrackUniversalToolCosmics)
 
     if 'RIOonTrackToolNoDr' not in kwargs :
-        InDetBroadTRT_DriftCircleOnTrackTool = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
-        acc.addPublicTool(InDetBroadTRT_DriftCircleOnTrackTool)
+        InDetBroadTRT_DriftCircleOnTrackTool = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolNoDr", InDetBroadTRT_DriftCircleOnTrackTool)
 
     kwargs.setdefault("TRT_ClustersContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1068,11 +1038,10 @@ def InDetTRT_TrackExtensionTool_xkCfg(flags, name='InDetTRT_ExtensionTool', **kw
         kwargs.setdefault("DriftCircleCutTool", InDetTRTDriftCircleCutForPatternReco)
 
     if 'RIOonTrackToolYesDr' not in kwargs :
-        kwargs.setdefault("RIOonTrackToolYesDr", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("RIOonTrackToolYesDr", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     if 'RoadTool' not in kwargs :
         InDetTRT_RoadMaker = acc.popToolsAndMerge(InDetTRT_RoadMakerCfg(flags))
-        acc.addPublicTool(InDetTRT_RoadMaker)
         kwargs.setdefault("RoadTool", InDetTRT_RoadMaker)
 
     kwargs.setdefault("TRT_ClustersContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1096,7 +1065,7 @@ def InDetTRT_TrackExtensionTool_xkCfg(flags, name='InDetTRT_ExtensionTool', **kw
 def InDetWeightCalculatorCfg(name='InDetWeightCalculator', **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.Trk.DAF_SimpleWeightCalculator(name = the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.Trk.DAF_SimpleWeightCalculator(name = the_name, **kwargs))
     return acc
 
 def InDetCompetingTRT_DC_ToolCfg(flags, name='InDetCompetingTRT_DC_Tool', **kwargs):
@@ -1108,11 +1077,11 @@ def InDetCompetingTRT_DC_ToolCfg(flags, name='InDetCompetingTRT_DC_Tool', **kwar
         kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags)))
 
     if 'ToolForWeightCalculation' not in kwargs :
-        InDetWeightCalculator = acc.getPrimaryAndMerge(InDetWeightCalculatorCfg())
+        InDetWeightCalculator = acc.popToolsAndMerge(InDetWeightCalculatorCfg())
         kwargs.setdefault("ToolForWeightCalculation", InDetWeightCalculator)
 
     if 'ToolForTRT_DriftCircleOnTrackCreation' not in kwargs :
-        kwargs.setdefault("ToolForTRT_DriftCircleOnTrackCreation", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("ToolForTRT_DriftCircleOnTrackCreation", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     acc.setPrivateTools(CompFactory.InDet.CompetingTRT_DriftCirclesOnTrackTool( the_name, **kwargs))
     return acc
@@ -1133,7 +1102,6 @@ def InDetTRT_TrackExtensionTool_DAFCfg(flags, name='TRT_TrackExtensionTool_DAF',
 
     if 'CompetingDriftCircleTool' not in kwargs :
         InDetCompetingTRT_DC_Tool = acc.popToolsAndMerge(InDetCompetingTRT_DC_ToolCfg(flags))
-        acc.addPublicTool(InDetCompetingTRT_DC_Tool)
         kwargs.setdefault("CompetingDriftCircleTool", InDetCompetingTRT_DC_Tool)
 
     if 'PropagatorTool' not in kwargs :
@@ -1142,7 +1110,6 @@ def InDetTRT_TrackExtensionTool_DAFCfg(flags, name='TRT_TrackExtensionTool_DAF',
 
     if 'RoadTool' not in kwargs :
         InDetTRT_RoadMaker = acc.popToolsAndMerge(InDetTRT_RoadMakerCfg(flags)) 
-        acc.addPublicTool(InDetTRT_RoadMaker)
         kwargs.setdefault("RoadTool", InDetTRT_RoadMaker)
 
     kwargs.setdefault("TRT_DriftCircleContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1176,7 +1143,6 @@ def InDetRotCreatorDigitalCfg(flags, name='InDetRotCreatorDigital', **kwargs) :
 
         ToolPixelCluster = acc.popToolsAndMerge(InDetPixelClusterOnTrackToolDigitalCfg(flags, **pix_cluster_on_track_args))
         kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
-        acc.addPublicTool(ToolPixelCluster)
 
     acc.setPrivateTools(acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name=name, **kwargs)))
     return acc
@@ -1184,7 +1150,7 @@ def InDetRotCreatorDigitalCfg(flags, name='InDetRotCreatorDigital', **kwargs) :
 def InDetTrackSummaryToolNoHoleSearchCfg(flags, name='InDetTrackSummaryToolNoHoleSearch',**kwargs) :
     acc = ComponentAccumulator()
     kwargs.setdefault('doHolesInDet', False)
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags, name=name, **kwargs))
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags, name=name, **kwargs))
     acc.setPrivateTools(InDetTrackSummaryTool)
     return acc
 
@@ -1202,8 +1168,7 @@ def InDetAmbiScoringToolBaseCfg(flags, name='InDetAmbiScoringTool', **kwargs) :
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags)))
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     if 'DriftCircleCutTool' not in kwargs :
         InDetTRTDriftCircleCutForPatternReco = acc.getPrimaryAndMerge(InDetTRTDriftCircleCutForPatternRecoCfg(flags))
@@ -1229,8 +1194,7 @@ def InDetCosmicsScoringToolBaseCfg(flags, name='InDetCosmicsScoringTool', **kwar
     acc = ComponentAccumulator()
     the_name=makeName(name, kwargs)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.setPrivateTools(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nWeightedClustersMin", flags.InDet.Tracking.nWeightedClustersMin )
     kwargs.setdefault("minTRTHits", 0 )
@@ -1242,7 +1206,6 @@ def InDetCosmicsScoringToolBaseCfg(flags, name='InDetCosmicsScoringTool', **kwar
 def InDetTRT_ExtensionToolPhaseCfg(flags, name='InDetTRT_ExtensionToolPhase', **kwargs) :
     acc = ComponentAccumulator()
     InDetTRT_DriftCircleOnTrackUniversalTool = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCfg())
-    acc.addPublicTool(InDetTRT_DriftCircleOnTrackUniversalTool)
     if 'RIOonTrackToolYesDr' not in kwargs :
         kwargs.setdefault("RIOonTrackToolYesDr", InDetTRT_DriftCircleOnTrackUniversalTool)
 
@@ -1269,7 +1232,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name='InDetSiComTrackFinder', **kwar
 
     from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
     InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-    acc.addPublicTool(InDetBoundaryCheckTool)
 
     kwargs.setdefault("PropagatorTool",  InDetPatternPropagator)
     kwargs.setdefault("UpdatorTool", InDetPatternUpdator)
@@ -1287,7 +1249,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name='InDetSiComTrackFinder', **kwar
 def InDetCosmicScoringTool_TRTCfg(flags, name='InDetCosmicExtenScoringTool',**kwargs) :
     acc = ComponentAccumulator()
     InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
 
     kwargs.setdefault("minTRTHits", flags.InDet.Tracking.minSecondaryTRTonTrk)
     kwargs.setdefault("SummaryTool", InDetTrackSummaryToolNoHoleSearch)
@@ -1368,11 +1329,9 @@ def InDetRotCreatorDBMCfg(flags, name='InDetRotCreatorDBM', **kwargs) :
 
         if flags.Detector.EnablePixel and flags.InDet.loadRotCreator:
             ToolPixelCluster = InDetPixelClusterOnTrackToolDBMCfg(flags, pix_cluster_on_track_args)
-            acc.addPublicTool(ToolPixelCluster)
             kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
         else :
             ToolPixelCluster= InDetPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args)
-            acc.addPublicTool(ToolPixelCluster)
             kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
 
     acc.setPrivateTools(acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name=name, **kwargs)))
@@ -1381,7 +1340,7 @@ def InDetRotCreatorDBMCfg(flags, name='InDetRotCreatorDBM', **kwargs) :
 def PRDtoTrackMapToolCfg(name='PRDtoTrackMapTool',**kwargs) :
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.Trk.PRDtoTrackMapTool( name=the_name, **kwargs), primary=True)
+    acc.setPrivateTools(CompFactory.Trk.PRDtoTrackMapTool( name=the_name, **kwargs))
     return acc
 
 def InDetNNScoringToolBaseCfg(flags, name='InDetNNScoringTool', **kwargs) :
@@ -1396,9 +1355,7 @@ def InDetNNScoringToolBaseCfg(flags, name='InDetNNScoringTool', **kwargs) :
 
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     InDetExtrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
-
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     if 'DriftCircleCutTool' not in kwargs :
         InDetTRTDriftCircleCutForPatternReco = acc.getPrimaryAndMerge(InDetTRTDriftCircleCutForPatternRecoCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
index 78636d0e78893bbc47822c18e8ac0be85492719b..18f8620154e392a96cafd20893d39bcd2187f3e4 100644
--- a/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
@@ -112,7 +112,6 @@ def SiZvertexMaker_xkCfg(flags, name="InDetZvertexMaker", InputCollections = Non
     
     InDetSiSpacePointsSeedMaker = acc.popToolsAndMerge(SiSpacePointsSeedMakerCfg(flags, 
                                                                                  InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiSpacePointsSeedMaker)
 
     kwargs.setdefault("SeedMakerTool", InDetSiSpacePointsSeedMaker)
     if flags.InDet.doHeavyIon:
@@ -160,7 +159,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", **kwar
 
     from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
     boundary_check_tool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-    acc.addPublicTool(boundary_check_tool)
 
     kwargs.setdefault("PropagatorTool", InDetPatternPropagator)
     kwargs.setdefault("UpdatorTool", InDetPatternUpdator)
@@ -180,7 +178,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", **kwar
 
     if flags.Detector.EnableSCT:
         InDetSCT_ConditionsSummaryTool = CompFactory.SCT_ConditionsSummaryTool(name = 'InDetSCT_ConditionsSummaryTool')
-        acc.addPublicTool(InDetSCT_ConditionsSummaryTool)
         kwargs.setdefault("SctSummaryTool", InDetSCT_ConditionsSummaryTool)
     else:
         kwargs.setdefault("SctSummaryTool", None)
@@ -193,7 +190,6 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
     acc = ComponentAccumulator()
     useBremMode = flags.InDet.Tracking.extension == "Offline" or flags.InDet.Tracking.extension == "DBM"
     InDetSiDetElementsRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags))
-    acc.addPublicTool(InDetSiDetElementsRoadMaker)
 
     if flags.InDet.Tracking.usePixel:
         acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksPixelCondAlg",
@@ -207,7 +203,6 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
                                                                                 WriteKey = "SCT_DetElementBoundaryLinks_xk") )
 
     track_finder = acc.popToolsAndMerge(SiCombinatorialTrackFinder_xkCfg(flags))
-    acc.addPublicTool(track_finder)
 
     #
     # --- decide if use the association tool
@@ -282,7 +277,7 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
     if flags.InDet.doStoreTrackSeeds:
         InDet_SeedToTrackConversion = CompFactory.InDet.SeedToTrackConversionTool(  name = "InDet_SeedToTrackConversion",
                                                                                     OutputName = 'SiSPSeedSegments' + flags.InDet.Tracking.extension)
-        acc.addPublicTool(InDet_SeedToTrackConversion)
+        acc.setPrivateTools(InDet_SeedToTrackConversion)
         kwargs.setdefault("SeedToTrackConversion", InDet_SeedToTrackConversion)
         kwargs.setdefault("SeedSegmentsWrite", True)
 
@@ -312,14 +307,11 @@ def SiSPSeededTrackFinderCfg(flags, name="InDetSiSpTrackFinder", InputCollection
 
     InDetSiTrackMaker = acc.popToolsAndMerge(SiTrackMaker_xkCfg(flags,
                                                                 InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiTrackMaker)
  
-    InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
+    InDetTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
 
     InDetSiSpacePointsSeedMaker = acc.popToolsAndMerge(SiSpacePointsSeedMakerCfg(flags, 
                                                                                  InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiSpacePointsSeedMaker)
 
     #
     # --- Z-coordinates primary vertices finder (only for collisions)
@@ -327,7 +319,6 @@ def SiSPSeededTrackFinderCfg(flags, name="InDetSiSpTrackFinder", InputCollection
     if flags.InDet.useZvertexTool and flags.InDet.Tracking.extension != "DBM":
         InDetZvertexMaker = acc.popToolsAndMerge(SiZvertexMaker_xkCfg(flags,
                                                  InputCollections = InputCollections))
-        acc.addPublicTool(InDetZvertexMaker)
     else:
         InDetZvertexMaker = None
 
@@ -394,7 +385,6 @@ def InDetAmbiTrackSelectionToolCfg(flags, name="InDetAmbiTrackSelectionTool", **
         kwargs.setdefault("DriftCircleCutTool", InDetTRTDriftCircleCut)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
     kwargs.setdefault("AssociationTool" , InDetPRDtoTrackMapToolGangedPixels)
     kwargs.setdefault("minHits"         , flags.InDet.Tracking.minClusters)
@@ -454,17 +444,13 @@ def DenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "InDetAmbiguit
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
-
 
     from InDetConfig.SiliconPreProcessing import NnPixelClusterSplitProbToolCfg
     NnPixelClusterSplitProbTool = acc.popToolsAndMerge(NnPixelClusterSplitProbToolCfg(flags))
-    acc.addPublicTool(NnPixelClusterSplitProbTool)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    PRDtoTrackMapTool = acc.getPrimaryAndMerge(TC.PRDtoTrackMapToolCfg())
+    PRDtoTrackMapTool = acc.popToolsAndMerge(TC.PRDtoTrackMapToolCfg())
 
     prob1 = flags.InDet.pixelClusterSplitProb1
     prob2 = flags.InDet.pixelClusterSplitProb2
@@ -513,7 +499,6 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
 
     use_low_pt_fitter =  True if flags.InDet.Tracking.extension == "LowPt" or flags.InDet.Tracking.extension == "VeryLowPt" or (flags.InDet.Tracking.extension == "Pixel" and flags.InDet.doMinBias) else False
     
@@ -526,17 +511,14 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
         fitter_args.setdefault("DoHoleSearch", True)
         from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
         InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-        acc.addPublicTool(InDetBoundaryCheckTool)
         fitter_args.setdefault("BoundaryCheckTool", InDetBoundaryCheckTool)
 
     fitter_list=[]
     if not use_low_pt_fitter:
         InDetTrackFitterAmbi = acc.popToolsAndMerge(TC.InDetTrackFitterCfg(flags, name='InDetTrackFitter'+'Ambi'+flags.InDet.Tracking.extension, **fitter_args))
-        acc.addPublicTool(InDetTrackFitterAmbi)
         fitter_list.append(InDetTrackFitterAmbi)
     else:
         InDetTrackFitterLowPt = acc.popToolsAndMerge(TC.InDetTrackFitterLowPt(flags, name='InDetTrackFitterLowPt'+flags.InDet.Tracking.extension, **fitter_args))
-        acc.addPublicTool(InDetTrackFitterLowPt)
         fitter_list.append(InDetTrackFitterLowPt)
 
     if flags.InDet.doRefitInvalidCov: 
@@ -544,32 +526,25 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
             fitter_args = {}
             fitter_args.setdefault("SplitClusterMapExtension", flags.InDet.Tracking.extension)
             KalmanFitter = acc.popToolsAndMerge(TC.KalmanFitterCfg(flags, name='KalmanFitter'+flags.InDet.Tracking.extension, **fitter_args))
-            acc.addPublicTool(KalmanFitter)
             fitter_list.append(KalmanFitter)
 
             ReferenceKalmanFitter = acc.popToolsAndMerge(TC.ReferenceKalmanFitterCfg(flags, name='ReferenceKalmanFitter'+flags.InDet.Tracking.extension, **fitter_args))
-            acc.addPublicTool(ReferenceKalmanFitter)
             fitter_list.append(ReferenceKalmanFitter)
         else:
             KalmanFitter = acc.popToolsAndMerge(TC.KalmanFitterCfg(flags))
-            acc.addPublicTool(KalmanFitter)
             fitter_list.append(KalmanFitter)
 
             ReferenceKalmanFitter = acc.popToolsAndMerge(TC.ReferenceKalmanFitterCfg(flags))
-            acc.addPublicTool(ReferenceKalmanFitter)
             fitter_list.append(ReferenceKalmanFitter)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg( flags,
-                                                                                namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
-                                                                                nameSuffix                  = flags.InDet.Tracking.extension,
-                                                                                ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
-    acc.addPublicTool(ambi_track_summary_tool)
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg( flags,
+                                                                                  namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
+                                                                                  nameSuffix                  = flags.InDet.Tracking.extension,
+                                                                                  ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
 
     InDetAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
-    acc.addPublicTool(InDetAmbiTrackSelectionTool)
 
     kwargs.setdefault("Fitter", fitter_list)
     kwargs.setdefault("AssociationTool", InDetPRDtoTrackMapToolGangedPixels)
@@ -606,22 +581,17 @@ def SimpleAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProcessor", Clu
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
 
     InDetTrackFitter = acc.popToolsAndMerge(TC.InDetTrackFitterCfg(flags))
-    acc.addPublicTool(InDetTrackFitter)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg( flags,
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg( flags,
                                                                                 namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
                                                                                 nameSuffix                  = flags.InDet.Tracking.extension,
                                                                                 ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
-    acc.addPublicTool(ambi_track_summary_tool)
 
     InDetAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
-    acc.addPublicTool(InDetAmbiTrackSelectionTool)
 
     kwargs.setdefault("Fitter", InDetTrackFitter)
     kwargs.setdefault("AssociationTool", InDetPRDtoTrackMapToolGangedPixels)
@@ -646,7 +616,6 @@ def SimpleAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProcessor", Clu
             pass
         else:
             InDetTrackFitterLowPt = acc.popToolsAndMerge(TC.InDetTrackFitterLowPt(flags))
-            acc.addPublicTool(InDetTrackFitterLowPt)
             kwargs.setdefault("Fitter", InDetTrackFitterLowPt)
 
     if flags.InDet.materialInteractions:
@@ -667,7 +636,6 @@ def TrkAmbiguityScoreCfg(flags, name="InDetAmbiguityScore", SiSPSeededTrackColle
 
     if flags.InDet.doTIDE_Ambi and not (flags.InDet.Tracking.extension == "ForwardTracks" or flags.InDet.Tracking.extension == "DBM"):
         InDetAmbiguityScoreProcessor = acc.popToolsAndMerge(DenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags))
-        acc.addPublicTool(InDetAmbiguityScoreProcessor)
     else:
         InDetAmbiguityScoreProcessor = None
 
@@ -690,11 +658,9 @@ def TrkAmbiguitySolverCfg(flags, name="InDetAmbiguitySolver", ResolvedTrackColle
     # DenseEnvironmentsAmbiguityProcessorTool
         InDetAmbiguityProcessor = acc.popToolsAndMerge(DenseEnvironmentsAmbiguityProcessorToolCfg(  flags,
                                                                                                     ClusterSplitProbContainer=ClusterSplitProbContainer))
-        acc.addPublicTool(InDetAmbiguityProcessor)
     else:
         InDetAmbiguityProcessor = acc.popToolsAndMerge(SimpleAmbiguityProcessorToolCfg( flags,
                                                                                         ClusterSplitProbContainer=ClusterSplitProbContainer))
-        acc.addPublicTool(InDetAmbiguityProcessor)
     
     #
     # --- configure Ambiguity solver
diff --git a/InnerDetector/InDetConfig/python/VertexFindingConfig.py b/InnerDetector/InDetConfig/python/VertexFindingConfig.py
index 2072cd78b116e8ba0f6b2e95283e7144d25199b7..bbe12511c263033a9389e83fdbed499b83fa8b48 100644
--- a/InnerDetector/InDetConfig/python/VertexFindingConfig.py
+++ b/InnerDetector/InDetConfig/python/VertexFindingConfig.py
@@ -23,8 +23,7 @@ def primaryVertexFindingCfg(flags):
     acc.merge(actsGeoAcc)
 
     trackExtrapolator = acc.getPrimaryAndMerge(ActsExtrapolationToolCfg(flags))
-
-    trackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    trackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     # TODO find out which of the settings below need to be picked from flags
     trackSelector = CompFactory.InDet.InDetTrackSelectionTool(
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
index b5759b35013d24f05e7559e8b6bd13f9211bf8c2..98efaaf9956675d57fdd58e4ed4fa788ec52bb7f 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
@@ -48,10 +48,8 @@ def InDetGlobalMonitoringRun3TestConfig(flags):
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.CutLevel         = "TightPrimary"
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.minPt            = 5000
         
-
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        InDetTrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         inDetGlobalTrackMonAlg.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalTrackMonAlg.TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalTrackMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
@@ -84,10 +82,8 @@ def InDetGlobalMonitoringRun3TestConfig(flags):
         inDetGlobalLRTMonAlg.TrackSelectionTool.maxNPixelHoles   = 1
         inDetGlobalLRTMonAlg.TrackSelectionTool.minPt            = 5000
         
-
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        InDetTrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         inDetGlobalLRTMonAlg.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalLRTMonAlg.TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalLRTMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py b/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
index a851454434c74c9e06df3b175fe4f798573997c0..2f5de62a66b641b54d8260c485321f82080413fe 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
@@ -52,9 +52,8 @@ def PixelMonitoringConfig(flags):
         pixelAthClusterMonAlg.TrackSelectionTool.maxD0            = 2
         pixelAthClusterMonAlg.TrackSelectionTool.maxZ0            = 150
 
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        pixelAthClusterMonAlg.TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        pixelAthClusterMonAlg.TrackSelectionTool.TrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         pixelAthClusterMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
         
         
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
index 71b4c2175a239fd3b393f22a892c4e66c59cfce8..7dc2155ecbc7b4e70c193b69edd6f9b039fd79f8 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
@@ -46,8 +46,8 @@ def SCTLorentzMonAlgConfig(inputFlags):
     # myMonAlg.RandomHist = True
 
     # Set InDetTrackSummaryTool to TrackSummaryTool of SCTLorentzMonAlg
-    from .TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    myMonAlg.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    myMonAlg.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
     ### STEP 4 ###
     # Add some tools. N.B. Do not use your own trigger decion tool. Use the
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
index 327e5736d23c1ca5a3406aa8e0a66fe839fb5262..90132c5a100779bc548272d8d6b0f1f75945443e 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
@@ -51,9 +51,8 @@ def SCTTracksMonAlgConfig(inputFlags):
     myMonAlg.TriggerChain = ''
     # myMonAlg.RandomHist = True
 
-    # Set InDetTrackSummaryTool to TrackSummaryTool of SCTLorentzMonAlg
-    from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    myMonAlg.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    myMonAlg.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
     ### STEP 4 ###
     # Add some tools. N.B. Do not use your own trigger decion tool. Use the
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py
deleted file mode 100644
index e88e0e5a7595b5857885e8caecb94e83f194cb8b..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-'''@file TrackingConfigurationWorkaround.py
-@author Peter Onyisi
-@date 2019-12-17
-@brief Centralize the DQ workarounds for setting up ID tracking tools in new-style config, until this is provided centrally
-'''
-from AthenaConfiguration.ComponentFactory import CompFactory
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from InDetConfig import TrackingCommonConfig
-
-def TrackSummaryToolWorkaround(flags):
-    result = ComponentAccumulator()
-    result.setPrivateTools( result.popToolsAndMerge(TrackingCommonConfig.InDetTrackSummaryToolCfg(flags) ) )
-
-    # To run job only with ID
-    if hasattr(flags, "Detector") and hasattr(flags.Detector, "GeometryMuon") and hasattr(flags.Detector, "GeometryID"):
-        TrkEventCnvSuperTool = CompFactory.Trk.EventCnvSuperTool(name = "EventCnvSuperTool",
-                                                                 DoMuons = flags.Detector.GeometryMuon,
-                                                                 DoID = flags.Detector.GeometryID)
-        result.addPublicTool(TrkEventCnvSuperTool)
-
-    return result
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
index 2232280a3ad2a3a13ee9f6ba560c340e3beafa08..07f9f30bbdf46a5fefabf717275e9dab5fa39148 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
@@ -35,10 +35,8 @@ def TRTMonitoringRun3ESD_AlgConfig(inputFlags):
     result.merge(addFoldersSplitOnline(inputFlags, "TRT","/TRT/Onl/Calib/RT","/TRT/Calib/RT",className="TRTCond::RtRelationMultChanContainer"))
     result.merge(addFoldersSplitOnline(inputFlags, "TRT","/TRT/Onl/Calib/T0","/TRT/Calib/T0",className="TRTCond::StrawT0MultChanContainer"))
 
-    ############################## WORKAROUND (START) ##########################
-    from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    algTRTMonitoringRun3ESD.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
-    ############################## WORKAROUND (END) ############################
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    algTRTMonitoringRun3ESD.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
 #     # To run job only with ID
 #    if hasattr(inputFlags, "Detector") and hasattr(inputFlags.Detector, "GeometryMuon") and hasattr(inputFlags.Detector, "GeometryID"):
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
index 394ffb603e7698f437c5ed9787c73bf62921b465..25dd54b10d2957346c7f592c31f3cbc5c5cf9abb 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
@@ -48,8 +48,8 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags):
 
     # @TODO really run the TRT hole search ? Hole search still seems to use a condition service
     if isRun3Cfg():
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        algTRTMonitoringRun3RAW.TrackSummaryTool = rv.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        algTRTMonitoringRun3RAW.TrackSummaryTool = rv.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
         algTRTMonitoringRun3RAW.trt_hole_search= rv.popToolsAndMerge( TRTHoleSearchCfg(inputFlags) )
     else :
         algTRTMonitoringRun3RAW.trt_hole_search=TRTHoleSearch()
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py
deleted file mode 100644
index 85b0035e06528072fccc0b60f95613f70af91534..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-'''@file TrackingConfigurationWorkaround.py
-@author Peter Onyisi
-@date 2019-12-17
-@brief Centralize the DQ workarounds for setting up ID tracking tools in new-style config, until this is provided centrally
-'''
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from InDetConfig import TrackingCommonConfig
-
-def TrackSummaryToolWorkaround(flags):
-    result = ComponentAccumulator()
-    result.setPrivateTools( result.popToolsAndMerge(TrackingCommonConfig.InDetTrackSummaryToolCfg(flags) ) )
-    return result
diff --git a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
index 4ca60caf55505839a7a05a3519b14fe8565f238b..72b8f3ab22faa75999d49b703e8f9d6ee3828493 100644
--- a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
+++ b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+ * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
 #ifndef ATHENA_INNERDETECTOR_TOOLS_BOUNDARYCHECKTOOL
@@ -61,7 +61,13 @@ namespace InDet {
                 "SCT_ConditionsSummaryTool/InDetSCT_ConditionsSummaryTool",
                 "Tool to retrieve SCT Conditions summary"
             };
-            ToolHandle<IInDetTestPixelLayerTool> m_pixelLayerTool;
+
+            ToolHandle<IInDetTestPixelLayerTool> m_pixelLayerTool{
+                this,
+                "PixelLayerTool",
+		"InDet::InDetTestPixelLayerTool",
+		"Tool to retrieve pixel conditions summary"
+	    };
 
             const AtlasDetectorID *m_atlasId;
 
diff --git a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
index 4d71c8d5fa1e0eb441e86efb9aed491c01ef18e9..f34cf63e67e5d6663ca6bf3d9ae4f54479fa31b6 100644
--- a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+ * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
 #include "TrkToolInterfaces/IBoundaryCheckTool.h"
@@ -14,12 +14,10 @@ InDet::InDetBoundaryCheckTool::InDetBoundaryCheckTool(
 ):
     AthAlgTool(t, n, p),
     m_geoModelSvc("GeoModelSvc", n),
-    m_pixelLayerTool("InDet::InDetTestPixelLayerTool"),
     m_atlasId(nullptr)
 {
     declareInterface<IBoundaryCheckTool>(this);
     declareProperty("GeoModelService", m_geoModelSvc);
-    declareProperty("PixelLayerTool", m_pixelLayerTool);
 }
 
 StatusCode InDet::InDetBoundaryCheckTool::initialize() {
diff --git a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
index 77b327196b487753a5489c38e7520dc3b1ea901f..cb7ddb87ec2cda5deab291ecd5edc1df23324171 100755
--- a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
+++ b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
@@ -30,13 +30,15 @@
 #include "EventPrimitives/EventPrimitives.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 
+// interfaces
+#include "TrkExInterfaces/IExtrapolator.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
+#include "TrkToolInterfaces/IWeightCalculator.h"
+
 namespace Trk {
   class LocalParameters;
   class Surface;
   class PrepRawData;
-  class IRIO_OnTrackCreator;
-  class IWeightCalculator;
-  class IExtrapolator;
 }
 
 
@@ -129,14 +131,17 @@ private:
     // Private data:
     ///////////////////////////////////////////////////////////////////
 
-    ToolHandle< Trk::IRIO_OnTrackCreator >  m_TRT_ROTCreator;   //!< Det-specific ROT creation for TRT
+    ToolHandle< Trk::IRIO_OnTrackCreator >  m_TRT_ROTCreator
+      {this, "ToolForTRT_DriftCircleOnTrackCreation", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool", "TRT_DriftCircleOnTrackCreator needed for the creation of CompetingPixelClustersOnTrack"};   //!< Det-specific ROT creation for TRT
 
-    ToolHandle< Trk::IWeightCalculator >    m_weightCalculator; //!< Weight calculator tool for assignment probabilities
+    ToolHandle< Trk::IWeightCalculator >    m_weightCalculator
+      {this, "ToolForWeightCalculation", "Trk::DAF_SimpleWeightCalculator/DAF_WeightCalculator", "Tool for weight (assignment probability) calculation"}; //!< Weight calculator tool for assignment probabilities
 
     double m_jo_EndCapCutValue;                                  //!< job option set cutValue of assignment probabilities for TRT end-cap
     double m_jo_BarrelCutValue;                                  //!< job option set cutValue of assignment probabilities for barrel TRT
 
-    ToolHandle< Trk::IExtrapolator >        m_extrapolator;     //!<  the Extrapolator tool
+    PublicToolHandle< Trk::IExtrapolator >        m_extrapolator
+      {this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator", "Extrapolator tool"};     //!<  the Extrapolator tool
 
     ///////////////////////////////////////////////////////////////////
     // Private functions:
diff --git a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
index 1c0f018dabcbf01f3932dee8fc0708e289a6cd8f..cef6454ee6df9ba4d2e979f27c967edb91c8b2a5 100755
--- a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
@@ -23,11 +23,6 @@
 #include "InDetPrepRawData/TRT_DriftCircle.h"
 #include "InDetCompetingRIOsOnTrack/CompetingTRT_DriftCirclesOnTrack.h"
 
-// interfaces
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkToolInterfaces/IWeightCalculator.h"
-
 //
 #include <cmath>
 
@@ -39,18 +34,12 @@ InDet::CompetingTRT_DriftCirclesOnTrackTool::CompetingTRT_DriftCirclesOnTrackToo
     const std::string& ty,
     const std::string& na,
     const IInterface* pa ) :
-        AthAlgTool(ty,na,pa),
-        m_TRT_ROTCreator("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"),
-        m_weightCalculator("Trk::DAF_SimpleWeightCalculator/DAF_WeightCalculator"),
-        m_extrapolator("Trk::Extrapolator/AtlasExtrapolator")
+        AthAlgTool(ty,na,pa)
 {
     declareInterface<ICompetingTRT_DriftCirclesOnTrackCreator>(this);
     declareInterface<ICompetingRIOsOnTrackTool>(this);
-    declareProperty("ToolForTRT_DriftCircleOnTrackCreation",m_TRT_ROTCreator,           "TRT_DriftCircleOnTrackCreator needed for the creation of CompetingPixelClustersOnTrack");
-    declareProperty("ToolForWeightCalculation",             m_weightCalculator,         "Tool for weight (assignment probability) calculation");
     declareProperty("WeightCutValueBarrel",                 m_jo_BarrelCutValue=6.66,    "lambda parameter (intrinsic roadwidth) for measurements in the Barrel part");
     declareProperty("WeightCutValueEndCap",                 m_jo_EndCapCutValue=6.66,    "lambda parameter (intrinsic roadwidth) for measurements in the EndCap part");
-    declareProperty("Extrapolator",                         m_extrapolator,             "Extrapolator tool");
 }
 
 ///////////////////////////////////////////////////////////////////
diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
index 704461ee04d5b40b77e55160b9eb31b8db1cced5..9e144dbcc8d9ab5b05b0da15b113453ffe371a8a 100755
--- a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
+++ b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -50,8 +50,10 @@ public:
   // Private data:
   ///////////////////////////////////////////////////////////////////
 
-  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackDrift ; 
-  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackTube  ; 
+  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackDrift
+    {this, "RIOonTrackToolDrift", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackTube
+    {this, "RIOonTrackToolTube", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"};
   double                               m_scalefactor; //scale factor for hit uncertainty
 };
 
diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
index c0075098ef2aea46b38b0c3ab49be8a2fbc34dc7..44386a14493a24fe6d4d2da1cb5c55ea069f2f79 100755
--- a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
+++ b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
@@ -21,13 +21,9 @@
 InDet::TRT_DriftCircleOnTrackUniversalTool::TRT_DriftCircleOnTrackUniversalTool
 (const std::string& ty,const std::string& na,const IInterface* pa)
   : AthAlgTool(ty,na,pa),
-    m_riontrackDrift("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"                      ),
-    m_riontrackTube("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"),
     m_scalefactor(2.)
 {
   declareInterface<IRIO_OnTrackCreator>(this);
-  declareProperty("RIOonTrackToolDrift"  ,m_riontrackDrift );
-  declareProperty("RIOonTrackToolTube"   ,m_riontrackTube  );
   declareProperty("ScaleHitUncertainty"  ,m_scalefactor    );    
 }
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
index e988846479d25a5b257679635c958406b43b7c3e..c0c7c3a83e5e9d5ad8dc370ed44d2efc71d1b201 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
@@ -32,18 +32,19 @@
 #include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "MagFieldElements/AtlasFieldCache.h"
 
+// tools:
+#include "TrkExInterfaces/IPropagator.h"
+#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
+#include "InDetCompetingRIOsOnTrackTool/ICompetingTRT_DriftCirclesOnTrackCreator.h"
+
 class MsgStream;
 class TRT_ID;
 
 namespace Trk {
     class Surface;
-    //class MagneticFieldProperties;
-    class IPropagator;
 }
 
 namespace InDet {
-    class ITRT_DetElementsRoadMaker;
-    class ICompetingTRT_DriftCirclesOnTrackCreator;
 
 /**
 @class TRT_TrackExtensionTool_DAF
@@ -141,12 +142,24 @@ protected:
     ///////////////////////////////////////////
     // the different tools and their jobOptions
     ///////////////////////////////////////////
-    ToolHandle< InDet::ICompetingTRT_DriftCirclesOnTrackCreator >   m_compROTcreator;       //!< the instance of the CompetingTRT_DriftCirclesOnTrackCreator tool
+    ToolHandle< InDet::ICompetingTRT_DriftCirclesOnTrackCreator >   m_compROTcreator
+      {this,
+       "CompetingDriftCircleTool",
+       "InDet::CompetingTRT_DriftCirclesOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool",
+       "Tool for the creation of CompetingTRT_DriftCirclesOnTrack"};       //!< the instance of the CompetingTRT_DriftCirclesOnTrackCreator tool
     double                                                          m_jo_annealingFactor;    //!< jobOption: The annealing factor used for Trk::CompetingRIOsOnTrack creation
 
-    ToolHandle< InDet::ITRT_DetElementsRoadMaker >                  m_roadtool;             //!<  instance of the TRT road maker tool
-
-    ToolHandle< Trk::IPropagator >                                  m_propagator;           //!<  the Propagator tool
+    ToolHandle< InDet::ITRT_DetElementsRoadMaker >                  m_roadtool
+      {this,
+       "RoadTool",
+       "InDet::TRT_DetElementsRoadMaker_xk/TRT_DetElementsRoadMaker",
+       "TRT Road Tool for the search of Detector Elements"};             //!<  instance of the TRT road maker tool
+
+    PublicToolHandle< Trk::IPropagator >                                  m_propagator
+      {this,
+       "PropagatorTool",
+       "Trk::RungeKuttaPropagator/Propagator",
+       "Propagator tool"};           //!<  the Propagator tool
 
     SG::ReadCondHandleKey<AtlasFieldCacheCondObj>                   m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
index 6c3f92550a6d76ae463f07d0dca4b21aeaebc61c..1a1bd2c32b1a29d2388f5de1907b13db6b68f8e2 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
@@ -14,12 +14,6 @@
 
 #include "TrkParameters/TrackParameters.h"
 
-// tools:
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkExInterfaces/IPropagator.h"
-#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
-#include "InDetCompetingRIOsOnTrackTool/ICompetingTRT_DriftCirclesOnTrackCreator.h"
-
 #include "TrkTrack/Track.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
 
@@ -56,10 +50,7 @@ InDet::TRT_TrackExtensionTool_DAF::TRT_TrackExtensionTool_DAF
             m_jo_simpleExtension(true),
             m_jo_maxGroupDistance(5.),
             m_jo_minGroupDistance(1.),
-            m_compROTcreator("InDet::CompetingTRT_DriftCirclesOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool"),
             m_jo_annealingFactor(81.),
-            m_roadtool("InDet::TRT_DetElementsRoadMaker_xk/TRT_DetElementsRoadMaker"),
-            m_propagator("Trk::RungeKuttaPropagator/Propagator"),
             m_fieldmode("MapSolenoid"),
             m_trtID(nullptr)
 {
@@ -67,9 +58,6 @@ InDet::TRT_TrackExtensionTool_DAF::TRT_TrackExtensionTool_DAF
     declareInterface<ITRT_TrackExtensionTool>(this);
 
     declareProperty("MagneticFieldMode",        m_fieldmode,          "field mode of the field tool");
-    declareProperty("PropagatorTool",           m_propagator,           "Propagator tool");
-    declareProperty("CompetingDriftCircleTool", m_compROTcreator,       "Tool for the creation of CompetingTRT_DriftCirclesOnTrack");
-    declareProperty("RoadTool",                 m_roadtool,             "TRT Road Tool for the search of Detector Elements");
     declareProperty("TRT_DriftCircleContainer", m_jo_trtcontainername,   "Name of the container of TRT measurements (TRT_DriftCircles)");
     declareProperty("InitialAnnealingFactor",   m_jo_annealingFactor,    "Annealing factor (temperature) used to calculate the initial assignment probabilities of a group of competing TRT measurements. Should be choosen identical to the first entry of the annealing schedule of the Deterministic Annealing Filter");
     declareProperty("SimpleElementWiseExtension", m_jo_simpleExtension,  "Do simple element wise extension or do sophisticated grouping of measurements?");
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
index f55246aad26cfc05b55fe29b6a2314e0ee2fb3a1..fc3d082fb553fa955ac9296399e430235815b1e5 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
@@ -22,6 +22,8 @@
 #include "InDetRecToolInterfaces/ITRT_TrackExtensionTool.h"
 #include "InDetPrepRawData/TRT_DriftCircleContainer.h"
 #include "TrkEventUtils/EventDataBase.h"
+#include "TrkExInterfaces/IPropagator.h"
+#include "TrkExInterfaces/IExtrapolator.h"
 
 #include "StoreGate/ReadHandleKey.h"
 #include <iosfwd>
@@ -33,10 +35,7 @@ class AtlasDetectorID;
 class PropDirection;
 
 namespace Trk{
-
   class Surface;
-  class IExtrapolator;
-  class IPropagator;
 }
 
 namespace InDet {
@@ -106,10 +105,14 @@ namespace InDet {
       // Protected Data
       ///////////////////////////////////////////////////////////////////
 
-      ToolHandle<Trk::IExtrapolator>        m_extrapolator;
-      ToolHandle<Trk::IPropagator>          m_propagator  ;
-      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackD  ; //
-      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackN  ; //
+      PublicToolHandle<Trk::IExtrapolator>        m_extrapolator
+        {this, "Extrapolator", "Trk::Extrapolator/InDetExtrapolator"};
+      PublicToolHandle<Trk::IPropagator>          m_propagator
+        {this, "Propagator", "Trk::RungeKuttaPropagator"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackD
+	{this, "RIOonTrackToolYesDr", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackToolUniversal"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackN
+	{this, "RIOonTrackToolNoDr", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"}; //
 
       int                              m_outputlevel{}    ; // Print level
       int                              m_nprint{}         ; // Kind of print
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
index c82fce24f67a8e18d8b605b77e67f6d73807125b..5f2c6276bbeca31cfedba038f78593bce11634df 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
@@ -21,6 +21,8 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "InDetRecToolInterfaces/ITRT_TrackExtensionTool.h"
+#include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
+#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
 #include "TrkEventUtils/EventDataBase.h"
 #include "TRT_TrackExtensionTool_xk/TRT_Trajectory_xk.h"
 #include "InDetPrepRawData/TRT_DriftCircleContainer.h"
@@ -37,9 +39,6 @@ class TRT_ID;
 
 namespace InDet{
 
-  class ITrtDriftCircleCutTool;
-  class ITRT_DetElementsRoadMaker;
-
   /**
   @class TRT_TrackExtensionTool_xk
 
@@ -119,12 +118,18 @@ namespace InDet{
       ///////////////////////////////////////////////////////////////////
 
       const TRT_ID                          *m_trtid{};
-      ToolHandle<ITRT_DetElementsRoadMaker>         m_roadtool   ; // TRT road maker tool
-      ToolHandle<Trk::IPatternParametersPropagator> m_proptool   ; //
-      ToolHandle<Trk::IPatternParametersUpdator>    m_updatortool; //
-      ToolHandle<ITrtDriftCircleCutTool>            m_selectortool;// Segment selector tool
-      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackD ; //
-      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackN ; //
+      ToolHandle<ITRT_DetElementsRoadMaker>         m_roadtool
+	{this, "RoadTool", "InDet::TRT_DetElementsRoadMaker_xk"}; // TRT road maker tool
+      PublicToolHandle<Trk::IPatternParametersPropagator> m_proptool
+	{this, "PropagatorTool", "Trk::RungeKuttaPropagator"};
+      PublicToolHandle<Trk::IPatternParametersUpdator>    m_updatortool
+	{this, "UpdatorTool", "Trk::KalmanUpdator_xk"};
+      PublicToolHandle<ITrtDriftCircleCutTool>            m_selectortool
+	{this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"};// Segment selector tool
+      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackD
+	{this, "RIOonTrackToolYesDr", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackN
+	{this, "RIOonTrackToolNoDr", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"};
 
       SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
index b0f3d03bc1943529ec8fe5e5571b377e3ec7f73c..6a6398a1b2de9e65ed3b65a5f2ddbc4f1b6f747f 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
@@ -14,8 +14,6 @@
 
 #include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 #include "TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h"
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkExInterfaces/IPropagator.h"
 #include "TrkSurfaces/CylinderSurface.h"
 #include "TrkSurfaces/DiscSurface.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
@@ -32,9 +30,7 @@
 
 InDet::TRT_TrackExtensionToolCosmics::TRT_TrackExtensionToolCosmics
 (const std::string& t,const std::string& n,const IInterface* p)
-  : AthAlgTool(t,n,p),
-    m_riontrackD("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackToolUniversal"                      ),
-    m_riontrackN("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool")
+  : AthAlgTool(t,n,p)
 {
   m_trtmanager      = "TRT"             ;
   m_minNumberDCs    = 9                 ;
@@ -43,11 +39,6 @@ InDet::TRT_TrackExtensionToolCosmics::TRT_TrackExtensionToolCosmics
 
   declareInterface<ITRT_TrackExtensionTool>(this);
 
-  declareProperty("RIOonTrackToolYesDr"  ,m_riontrackD     );
-  declareProperty("RIOonTrackToolNoDr"   ,m_riontrackN     );
-  declareProperty("Extrapolator"         ,m_extrapolator   );
-  declareProperty("Propagator"           ,m_propagator     );
-
   declareProperty("TrtManagerLocation"   ,m_trtmanager     );
   declareProperty("RoadWidth"            ,m_roadwidth      );
   declareProperty("BoundaryLocZTolerance",m_roadwidth_locz );
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
index df6e5113a0e167d61f5767820b46cb13f3d35c08..725348f72874ac6d0e74bc75586c47f8c3d9e0fc 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
@@ -13,9 +13,7 @@
 
 
 #include "AthenaPoolUtilities/CondAttrListCollection.h"
-#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
 #include "TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h"
-#include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 #include "InDetPrepRawData/SCT_Cluster.h"
 #include "TrkTrack/Track.h"
@@ -46,13 +44,7 @@ namespace{
 
 InDet::TRT_TrackExtensionTool_xk::TRT_TrackExtensionTool_xk
 (const std::string& t,const std::string& n,const IInterface* p)
-  : AthAlgTool(t,n,p),
-    m_roadtool  ("InDet::TRT_DetElementsRoadMaker_xk"                                                ),
-    m_proptool    ("Trk::RungeKuttaPropagator"                                                       ),
-    m_updatortool ("Trk::KalmanUpdator_xk"                                                           ),
-    m_selectortool("InDet::InDetTrtDriftCircleCutTool"                                               ),
-    m_riontrackD("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"                      ),
-    m_riontrackN("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool")
+  : AthAlgTool(t,n,p)
 {
   m_fieldmode       = "MapSolenoid"      ;
   m_trtmanager      = "TRT"              ;
@@ -68,12 +60,6 @@ InDet::TRT_TrackExtensionTool_xk::TRT_TrackExtensionTool_xk
   m_parameterization= true               ;
   m_scale_error     = 2.                 ;
   declareInterface<ITRT_TrackExtensionTool>(this);
-  declareProperty("RoadTool"               ,m_roadtool        );
-  declareProperty("PropagatorTool"         ,m_proptool        );
-  declareProperty("UpdatorTool"            ,m_updatortool     );
-  declareProperty("DriftCircleCutTool"     ,m_selectortool    );
-  declareProperty("RIOonTrackToolYesDr"    ,m_riontrackD      );
-  declareProperty("RIOonTrackToolNoDr"     ,m_riontrackN      );
   declareProperty("TrtManagerLocation"     ,m_trtmanager      );
   declareProperty("RoadWidth"              ,m_roadwidth       );
   declareProperty("ZVertexHalfWidth"       ,m_zVertexWidth    );
diff --git a/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h b/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
index 957e20d582489c0d65290b1c43050a082648caaf..02365722cb116204793ee1c14dbb72fb3bbd2114 100644
--- a/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
+++ b/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRACKTRUTHSIMILARITYSELECTOR_H
@@ -30,7 +30,8 @@ private:
   SG::WriteHandle<TrackTruthCollection> m_out; //std::string m_outputName;
 
   // Match quality tool
-  ToolHandle<Trk::IDetailedTrackTruthSimilarity> m_matchTool;
+  ToolHandle<Trk::IDetailedTrackTruthSimilarity> m_matchTool
+    {this, "TrackTruthSimilarityTool", "Trk::TruthMatchRatio", "Track-truth similarity tool"};
   
   void fillOutput(TrackTruthCollection *out, const DetailedTrackTruthCollection *in);
 };
diff --git a/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx b/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
index 5ff36fefd34052b79bb9de3356a2668fe5903874..10697a6392c2016dae78da8284cb7d1132f4e381 100644
--- a/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
+++ b/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <memory>
@@ -12,9 +12,7 @@
 TrackTruthSimilaritySelector::TrackTruthSimilaritySelector(const std::string &name,ISvcLocator *pSvcLocator)
   : AthAlgorithm(name,pSvcLocator),
   m_detailed("DetailedTrackTruth"), m_out("TrackTruthNew")
-  , m_matchTool("Trk::TruthMatchRatio")
 {
-  declareProperty("TrackTruthSimilarityTool", m_matchTool, "Track-truth similarity tool");
   declareProperty("DetailedTrackTruthName",  m_detailed);
   declareProperty("OutputName",  m_out);
 }
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
index 91a6991ce9acf49c6e38c92d7109b3714ad74daf..dcbbdf3fb7e7cd9e87dcd4e23e9f95dd72c5c75f 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
+++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -33,6 +33,13 @@
 #include "TrkFitterInterfaces/ITrackBreakpointAnalyser.h"
 #include "TrkFitterInterfaces/IKalmanPiecewiseAnnealingFilter.h"
 
+#include "TrkValInterfaces/IValidationNtupleTool.h"
+#include "TrkDetDescrInterfaces/IAlignableSurfaceProvider.h"
+#include "TrkExInterfaces/IExtrapolator.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
+#include "TrkToolInterfaces/IUpdator.h"
+#include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
+
 #include "GeoPrimitives/GeoPrimitives.h"
 #include <array>
 #include <memory>
@@ -46,14 +53,7 @@ namespace Trk {
   class PerigeeSurface;
   class FitQuality;
 
-  class IValidationNtupleTool;   // validation tool to write intermediate results to ntuple
-  class IAlignableSurfaceProvider; // tool to enable Kalman-alignment
-    
-  class IExtrapolator;           // Extrapolation Tool
-  class IUpdator;                // If class for Estimator updating
-  class IRIO_OnTrackCreator;     // Interface for creation of ROT
   class ProtoTrajectoryUtility;  // helper to analyse current trajectory
-  class IMeasurementRecalibrator;// steering if and which ROTs to re-do
   class TrackFitInputPreparator; // helper to fill internal trajectories
   typedef std::vector<Trk::ProtoTrackStateOnSurface> Trajectory;
   typedef DataVector<const TrackStateOnSurface>::const_iterator TS_iterator;
@@ -201,31 +201,44 @@ private:
     mutable MsgStream             m_log;         //!< msgstream as private member (-> speed)
 
     //! extrapolation tool: does propagation and applies material effects
-    ToolHandle< IExtrapolator >             m_extrapolator;
+    PublicToolHandle< IExtrapolator >             m_extrapolator
+      {this, "ExtrapolatorHandle", "Trk::Extrapolator/AtlasExtrapolator", "Extrapolation tool for transporting track pars and handling material effects"};
     //! measurement updator: implements the Kalman filtering formulae
-    ToolHandle< IUpdator >                  m_updator;
+    ToolHandle< IUpdator >                  m_updator
+      {this, "MeasurementUpdatorHandle", "Trk::KalmanUpdator/KalmanUpdator", "Tool to perform measurement update and chi2 calculation"};
     //! Trk::RIO_OnTrack creation: re-calibrates hits (special interface/option only)
-    ToolHandle< IRIO_OnTrackCreator >       m_ROTcreator;
+    ToolHandle< IRIO_OnTrackCreator >       m_ROTcreator
+      {this, "RIO_OnTrackCreatorHandle", "Trk::RIO_OnTrackCreator/RIO_OnTrackCreator", "Tool to create RIO_OnTrack out of PrepRawData input"};
     //! dynamic noise adjustment tool: adds momentum noise for electron brem
-    ToolHandle< IDynamicNoiseAdjustor >     m_dynamicNoiseAdjustor;
+    ToolHandle< IDynamicNoiseAdjustor >     m_dynamicNoiseAdjustor
+      {this, "DynamicNoiseAdjustorHandle", "", "Tool to handle brem as dynamically adjusted q/p noise"};
     //! dynamic noise adjustment tool: confirm brem breakpoint or not
-    ToolHandle< ITrackBreakpointAnalyser >  m_brempointAnalyser;
+    ToolHandle< ITrackBreakpointAnalyser >  m_brempointAnalyser
+      {this, "BrempointAnalyserHandle", "", "Tool to confirm if DNA activity is due to brem or not"};
     //! tool to extend KF to be Kalman-Alignment-Fitter
-    ToolHandle< IAlignableSurfaceProvider > m_alignableSfProvider;
+    ToolHandle< IAlignableSurfaceProvider > m_alignableSfProvider
+      {this, "AlignableSurfaceProviderHandle", "", "Tool to replace measurement surface by an alignable one"};
     //! tool to remake ROTs if configured
-    ToolHandle< IMeasurementRecalibrator >  m_recalibrator;
+    ToolHandle< IMeasurementRecalibrator >  m_recalibrator
+      {this, "RecalibratorHandle", ""};
     //! tool to do L/R driftcircle solving
-    ToolHandle< IKalmanPiecewiseAnnealingFilter > m_internalDAF;
+    ToolHandle< IKalmanPiecewiseAnnealingFilter > m_internalDAF
+      {this, "InternalDAFHandle", ""};
     //! forward filtering tool: code structuring
-    ToolHandle< IForwardKalmanFitter >      m_forwardFitter;
+    ToolHandle< IForwardKalmanFitter >      m_forwardFitter
+      {this, "ForwardKalmanFitterHandle", "Trk::ForwardKalmanFitter/FKF", "Tool for running the forward filter along the internal trajectory"};
     //! backward filtering and smoothing tool: code structuring
-    ToolHandle< IKalmanSmoother >           m_smoother;
+    ToolHandle< IKalmanSmoother >           m_smoother
+      {this, "KalmanSmootherHandle", "Trk::KalmanSmoother/BKS", "Tool for performing the backward smoothing on the internal trajectory"};
     //! outlier logic tool: track quality and cleaning
-    ToolHandle< IKalmanOutlierLogic >       m_outlierLogic;
+    ToolHandle< IKalmanOutlierLogic >       m_outlierLogic
+      {this, "KalmanOutlierLogicHandle", "Trk::KalmanOutlierLogic/KOL", "Tool for fit quality analysis and outlier flagging"};
     //! outlier logic tool: outlier recovery and tuning
-    ToolHandle< IKalmanOutlierLogic >       m_outlierRecovery;
+    ToolHandle< IKalmanOutlierLogic >       m_outlierRecovery
+      {this, "KalmanOutlierRecoveryHandle", "Trk::KalmanOutlierRecovery_InDet/KOL_RecoveryID", "Tool for fit quality analysis and outlier recovery"};
     //! performance/error validation tool
-    ToolHandle< IValidationNtupleTool >     m_FitterValidationTool;
+    ToolHandle< IValidationNtupleTool >     m_FitterValidationTool
+      {this, "FitterValidationToolHandle", "", "Tool for fitter validation (writes intermediate results to ntuple)"};
 
     // the settable job options
     bool                          m_option_enforceSorting;
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
index 79f3dea90b3722d13e1aca88f92ed73b7238f7b7..a5b9255441eda4a9d5e6d690b5c1e96bd8edcbb9 100644
--- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
+++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -13,6 +13,7 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
 #include "TrkParameters/TrackParameters.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 
 namespace Trk 
 {
@@ -20,7 +21,6 @@ namespace Trk
   class MeasurementBase;
   class RIO_OnTrack;
   class MeasurementTypeID;
-  class IRIO_OnTrackCreator;
 
   /** @class MeasRecalibSteeringTool
       @brief tool to repeat the calibration PrepRawData to RIO_OnTrack on an
@@ -59,13 +59,17 @@ namespace Trk
     private:
       
       // tool handles for a whole zoo of ROT creators
-      ToolHandle< IRIO_OnTrackCreator >   m_rotCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_broadPixelClusterCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_broadSctClusterCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_trtDriftCircleCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_trtTubeHitCreator;
+      ToolHandle< IRIO_OnTrackCreator >   m_rotCreator
+	{this, "CommonRotCreator", "Trk::RIO_OnTrackCreator/InDetRefitRotCreator"};
+      ToolHandle< IRIO_OnTrackCreator >   m_broadPixelClusterCreator
+	{this, "BroadPixelClusterOnTrackTool", "InDet::PixelClusterOnTrackTool/InDetBroadPixelClusterOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_broadSctClusterCreator
+	{this, "BroadSCT_ClusterOnTrackTool", "InDet::SCT_ClusterOnTrackTool/InDetBroadSCT_ClusterOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_trtDriftCircleCreator
+	{this, "TRT_DriftCircleOnTrackTool", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_trtTubeHitCreator
+	{this, "TRT_StrawTubeOnTrackTool", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_StrawTubeOnTrackTool"};
       bool                                m_haveInDetTools;
-      //bool                                m_haveMuonTools;
 
       //! Helper to detect type of sub-detector
       const AtlasDetectorID*            m_idHelper;
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
index 8e789008fccea0e364bbc305843195c710154cb9..0e3c49736f9e2edcad640ed077833cc404bab4df 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
@@ -27,12 +27,6 @@
 #include "TrkTrack/TrackInfo.h"
 #include "TrkParameters/TrackParameters.h"
 
-#include "TrkValInterfaces/IValidationNtupleTool.h"
-#include "TrkDetDescrInterfaces/IAlignableSurfaceProvider.h"
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkToolInterfaces/IUpdator.h"
-#include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
 #include "TrkEventUtils/PrepRawDataComparisonFunction.h"
 #include "TrkEventUtils/MeasurementBaseComparisonFunction.h"
 #include "TrkEventUtils/IdentifierExtractor.h"
@@ -52,19 +46,6 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n,
                                 const IInterface* p) :
   AthAlgTool (t,n,p),
   m_log(msgSvc(), n),
-  m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
-  m_updator("Trk::KalmanUpdator/KalmanUpdator"),
-  m_ROTcreator("Trk::RIO_OnTrackCreator/RIO_OnTrackCreator"),
-  m_dynamicNoiseAdjustor(""),
-  m_brempointAnalyser(""),
-  m_alignableSfProvider(""),
-  m_recalibrator(""),
-  m_internalDAF(), // or "Trk::KalmanPiecewiseAnnealingFilter/KalmanInternalDAF"
-  m_forwardFitter("Trk::ForwardKalmanFitter/FKF"),
-  m_smoother("Trk::KalmanSmoother/BKS"),
-  m_outlierLogic("Trk::KalmanOutlierLogic/KOL"),
-  m_outlierRecovery("Trk::KalmanOutlierRecovery_InDet/KOL_RecoveryID"),
-  m_FitterValidationTool(""),
   m_option_callValidationToolForFailedFitsOnly(false),
   m_option_sortingRefPoint{0.,0.,0.},
   m_callValidationTool(false),
@@ -85,32 +66,6 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n,
 
   m_trajectory.reserve(100);
 
-  // --- tools used by KalmanFitter, passed as ToolHandles
-  declareProperty("ExtrapolatorHandle",m_extrapolator,
-                  "Extrapolation tool for transporting track pars and handling material effects");
-  declareProperty("RIO_OnTrackCreatorHandle",m_ROTcreator,
-                  "Tool to create RIO_OnTrack out of PrepRawData input");
-  declareProperty("MeasurementUpdatorHandle",m_updator,
-                  "Tool to perform measurement update and chi2 calculation");
-  declareProperty("DynamicNoiseAdjustorHandle",m_dynamicNoiseAdjustor,
-                  "Tool to handle brem as dynamically adjusted q/p noise");
-  declareProperty("BrempointAnalyserHandle",m_brempointAnalyser,
-                  "Tool to confirm if DNA activity is due to brem or not");
-  declareProperty("AlignableSurfaceProviderHandle",m_alignableSfProvider,
-                  "Tool to replace measurement surface by an alignable one");
-  declareProperty("RecalibratorHandle", m_recalibrator);
-  declareProperty("InternalDAFHandle", m_internalDAF);
-  declareProperty("ForwardKalmanFitterHandle",m_forwardFitter,
-                  "Tool for running the forward filter along the internal trajectory");
-  declareProperty("KalmanSmootherHandle",m_smoother,
-                  "Tool for performing the backward smoothing on the internal trajectory");
-  declareProperty("KalmanOutlierLogicHandle",m_outlierLogic,
-                  "Tool for fit quality analysis and outlier flagging");
-  declareProperty("KalmanOutlierRecoveryHandle",m_outlierRecovery,
-                  "Tool for fit quality analysis and outlier recovery");
-  declareProperty("FitterValidationToolHandle", m_FitterValidationTool,
-                  "Tool for fitter validation (writes intermediate results to ntuple)");
-
   // -- job options - do NOT modify defaults to achieve detector-specific tuning!
   declareProperty("DoDNAForElectronsOnly",m_doDNAForElectronsOnly,
 		  "for new ID bremfit: DNA active only for tracks with particleHypothesis electron");
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
index 85ae0bd130a3196594e86f975e59a1ac2c8d8102..c6e29b85d285c365352961a5e0f65da722d47bab 100644
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -14,7 +14,6 @@
 #include "TrkEventUtils/RoT_Extractor.h"
 #include "TrkEventUtils/MeasurementTypeID.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 
 using namespace Trk;
 using namespace Trk::TrackState;
@@ -26,24 +25,11 @@ Trk::MeasRecalibSteeringTool::MeasRecalibSteeringTool(const std::string& t,
 			  const IInterface*  p )
   :
   AthAlgTool(t,n,p),
-  m_rotCreator("Trk::RIO_OnTrackCreator/InDetRefitRotCreator"),
-  m_broadPixelClusterCreator("InDet::PixelClusterOnTrackTool/InDetBroadPixelClusterOnTrackTool"),
-  m_broadSctClusterCreator("InDet::SCT_ClusterOnTrackTool/InDetBroadSCT_ClusterOnTrackTool"),
-  m_trtDriftCircleCreator("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"),
-  m_trtTubeHitCreator("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_StrawTubeOnTrackTool"),
   m_haveInDetTools(true),
-  //m_haveMuonTools(false),
   m_idHelper(nullptr),
   m_mbHelper(nullptr)
 {
   declareInterface<IMeasurementRecalibrator>(this);
-
-  //  template for property decalration
-  declareProperty("CommonRotCreator",             m_rotCreator);
-  declareProperty("BroadPixelClusterOnTrackTool", m_broadPixelClusterCreator);
-  declareProperty("BroadSCT_ClusterOnTrackTool",  m_broadSctClusterCreator);
-  declareProperty("TRT_DriftCircleOnTrackTool",   m_trtDriftCircleCreator);
-  declareProperty("TRT_StrawTubeOnTrackTool",     m_trtTubeHitCreator);
 }
 
 //================ Destructor =================================================
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
index fbe5865e984901d6c438d8ca51b357184e3453c4..55430402faf9628e76a92cc1541f32a193c89294 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
@@ -1,9 +1,8 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "AmbiguityProcessorBase.h"
-#include "TrackScoringTool.h"
 #include "AmbiguityProcessorUtility.h"
 
 #include "GaudiKernel/ToolVisitor.h"
@@ -13,8 +12,7 @@ namespace Trk {
   AmbiguityProcessorBase::AmbiguityProcessorBase(const std::string& t, const std::string& n, const IInterface*  p ):
     AthAlgTool(t,n,p), 
     m_etaBounds{0.8, 1.6, 2.5, 4.0}, 
-    m_stat(m_etaBounds),
-    m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"){
+    m_stat(m_etaBounds){
       declareProperty("ObserverTool", m_observerTool, "track observer tool");
 }
   //
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
index 7598c27a5c2da475da1c00418af018365d8e0668..6985c4200e3a9ffc485d6a37c9f7c7bb9f2d0e51 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef AmbiguityProcessorBase_h
@@ -15,6 +15,7 @@
 #include "TrkEventPrimitives/TrackScore.h"
 #include "TrkEventUtils/ClusterSplitProbabilityContainer.h"
 #include "TrkValInterfaces/ITrkObserverTool.h"
+#include "TrackScoringTool.h"
 #include "AmbiguityProcessorUtility.h"
 
 #include <vector>
@@ -26,7 +27,6 @@
 
 namespace Trk {
   //fwd declare
-  class ITrackScoringTool;
   class Track;
   class PRDtoTrackMap;
 
@@ -126,7 +126,7 @@ namespace Trk {
     /**Scoring tool
        This tool is used to 'score' the tracks, i.e. to quantify what a good track is.
        @todo The actual tool that is used should be configured through job options*/
-    ToolHandle<ITrackScoringTool> m_scoringTool;
+    ToolHandle<ITrackScoringTool> m_scoringTool{this, "ScoringTool", "", "track scoring tool"};
     /**Observer tool      This tool is used to observe the tracks and their 'score' */
     PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{this, "TrackObserverTool", "", "track observer within ambiguity solver"};
     ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
index d01f2cb8ec9237e6ae9595c4c31dc3ad7ec9bd49..88f0714edea3f2577f4a4f005872e92b6c9ce45e 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "DenseEnvironmentsAmbiguityProcessorTool.h"
@@ -39,12 +39,12 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::checkTrack( const Trk::Track *trac
 
 //==================================================================================================
 Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcessorTool(const std::string& t, 
-                                const std::string& n,
-                                const IInterface*  p )
+										      const std::string& n,
+										      const IInterface*  p )
   :
   AmbiguityProcessorBase(t,n,p),
-  m_extrapolatorTool("Trk::Extrapolator/AtlasExtrapolator"),
-  m_selectionTool("InDet::InDetDenseEnvAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"){
+  m_fitterTool(this),
+  m_extrapolatorTool("Trk::Extrapolator/AtlasExtrapolator"){
   // statitics stuff
 
   m_fitterTool.push_back("Trk::KalmanFitter/InDetTrackFitter");
@@ -52,8 +52,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcesso
   declareInterface<ITrackAmbiguityProcessorTool>(this);
   declareProperty("RefitPrds"            , m_refitPrds          = true); //  True to allow for updated NN information to be taken into account
   declareProperty("MatEffects"           , m_matEffects         = 3); // pion
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SelectionTool"        , m_selectionTool);
   declareProperty("Fitter"               , m_fitterTool );
   declareProperty("TrackExtrapolator"    , m_extrapolatorTool);
   declareProperty("SuppressHoleSearch"   , m_suppressHoleSearch = false);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
index e656a2e43e6e9d670b10b1a83cd3394d4bca1ee7..e9b51ce2fc162fbaa89f5ac41ece92c37036e4be 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef DenseEnvironmentsAmbiguityProcessorTool_H
@@ -105,7 +105,8 @@ namespace Trk {
 
     /** selection tool - here the decision which hits remain on a track and
         which are removed are made */
-    ToolHandle<IAmbiTrackSelectionTool> m_selectionTool;
+    ToolHandle<IAmbiTrackSelectionTool> m_selectionTool
+      {this, "SelectionTool", "InDet::InDetDenseEnvAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"};
 
     /**Observer tool      This tool is used to observe the tracks and their 'score' */
     PublicToolHandle<Trk::ITrkObserverTool> m_observerToolWriter{this, "TrackObserverToolWriter", "", "track observer writer within ambiguity solver"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
index dcb2217f0570abd6b3fe0fadb4ba6f790caea4fd..f6a571bc7b870f365cb2bef777326eeb0653dfec 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
@@ -9,7 +9,6 @@
 #include "TrkParameters/TrackParameters.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 #include "TrkTrack/TrackInfo.h"
-#include "InDetRecToolInterfaces/IPixelClusterSplitProbTool.h"
 #include "TrkTrackSummary/TrackSummary.h"
 
 #include <map>
@@ -27,15 +26,11 @@ Trk::DenseEnvironmentsAmbiguityScoreProcessorTool::DenseEnvironmentsAmbiguitySco
                                 const IInterface*  p )
   :
   AthAlgTool(t,n,p),
-  m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"), 
-  m_splitProbTool("InDet::NnPixelClusterSplitProbTool/NnPixelClusterSplitProbTool"),
   m_etaBounds{0.8, 1.6, 2.5,4.0},
   m_stat(m_etaBounds)
 {
 
   declareInterface<ITrackAmbiguityScoreProcessorTool>(this);
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SplitProbTool"        , m_splitProbTool);
   declareProperty("SplitClusterMap_old"  , m_splitClusterMapKey_last);
   declareProperty("SplitClusterMap_new"  , m_splitClusterMapKey);
   declareProperty("sharedProbCut"        , m_sharedProbCut           = 0.3);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
index 8d96ef17461fd83baf5e71aea96b9eae66b5d496..a32fb1800f1cc1b302bdf2806e21d1699ddc3639 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef DenseEnvironmentsAmbiguityScoreProcessorTool_H
@@ -21,6 +21,7 @@
 
 #include "TrkToolInterfaces/IPRDtoTrackMapTool.h"
 #include "TrkEventUtils/PRDtoTrackMap.h"
+#include "InDetRecToolInterfaces/IPixelClusterSplitProbTool.h"
 #include "TrkEventUtils/ClusterSplitProbabilityContainer.h"
 #include "AmbiCounter.icc"
 #include <map>
@@ -28,7 +29,6 @@
 #include <vector>
 
 namespace InDet{
-  class IPixelClusterSplitProbTool;
   class PixelCluster;
   class SCT_Cluster;
 }
@@ -92,7 +92,8 @@ namespace Trk {
       /**Scoring tool
          This tool is used to 'score' the tracks, i.e. to quantify what a good track is.
          @todo The actual tool that is used should be configured through job options*/
-      ToolHandle<ITrackScoringTool> m_scoringTool;
+      ToolHandle<ITrackScoringTool> m_scoringTool
+	 {this, "ScoringTool", "Trk::TrackScoringTool/TrackScoringTool" };
       
       ToolHandle<Trk::IPRDtoTrackMapTool>         m_assoTool
          {this, "AssociationTool", "InDet::InDetPRDtoTrackMapToolGangedPixels" };
@@ -101,7 +102,8 @@ namespace Trk {
          {this, "AssociationToolNotGanged", "Trk::PRDtoTrackMapTool" };  // @TODO why are ganged pixels ignored ?
        
       /** recalculate split prob tool **/
-      ToolHandle<InDet::IPixelClusterSplitProbTool> m_splitProbTool; 
+      ToolHandle<InDet::IPixelClusterSplitProbTool> m_splitProbTool
+	 {this, "SplitProbTool", "InDet::NnPixelClusterSplitProbTool/NnPixelClusterSplitProbTool" };
 
       /**Observer tool      This tool is used to observe the tracks and their 'score' */
       PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{this, "TrackObserverTool", "", "track observer within ambiguity solver"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
index 5a6e9b354a845a9e4641ebed23d4dbd5bd44edf9..1014db5e0b8999d75e4bcc795ba0b449183133c4 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "SimpleAmbiguityProcessorTool.h"
@@ -21,9 +21,7 @@ Trk::SimpleAmbiguityProcessorTool::SimpleAmbiguityProcessorTool(const std::strin
                 const std::string& n,
                 const IInterface*  p )
   :
-  AmbiguityProcessorBase(t,n,p),
-  m_fitterTool ("Trk::KalmanFitter/InDetTrackFitter"), 
-  m_selectionTool("InDet::InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"){
+  AmbiguityProcessorBase(t,n,p){
   // statistics stuff
 
   declareInterface<ITrackAmbiguityProcessorTool>(this);
@@ -31,9 +29,6 @@ Trk::SimpleAmbiguityProcessorTool::SimpleAmbiguityProcessorTool(const std::strin
   declareProperty("ForceRefit"           , m_forceRefit         = true);
   declareProperty("RefitPrds"            , m_refitPrds          = false);
   declareProperty("MatEffects"           , m_matEffects         = 3); // pion
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SelectionTool"        , m_selectionTool);
-  declareProperty("Fitter"               , m_fitterTool );
   declareProperty("SuppressHoleSearch"   , m_suppressHoleSearch = false);
   declareProperty("SuppressTrackFit"     , m_suppressTrackFit   = false);
   declareProperty("tryBremFit"           , m_tryBremFit         = false);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
index 0dd677921d8e84b151781dbeba4995cdb2da1e41..e410c6978cf5a630500847bb02d54c22fd913183 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef SIMPLEAMBIGUITYPROCESSORTOOL_H
@@ -113,11 +113,11 @@ namespace Trk {
   
       /** refitting tool - used to refit tracks once shared hits are removed. 
       Refitting tool used is configured via jobOptions.*/
-      ToolHandle<ITrackFitter> m_fitterTool;
+      ToolHandle<ITrackFitter> m_fitterTool{this, "Fitter", "Trk::KalmanFitter/InDetTrackFitter"};
       /** association tool **/
       ToolHandle<Trk::IPRDtoTrackMapTool>         m_assoTool{this, "AssociationTool", "Trk::PRDtoTrackMapTool" };
       /** selection tool - here the decision which hits remain on a track and which are removed are made */
-      ToolHandle<IAmbiTrackSelectionTool> m_selectionTool;
+      ToolHandle<IAmbiTrackSelectionTool> m_selectionTool{this, "SelectionTool", "InDet::InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"};
 
     };
 } //end ns
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
index c0647616a0c9ddae090bff3a9f300c8aa2a2400f..5191179e5bc084a69ed149fc653338fde26614be 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
@@ -227,7 +227,7 @@ def InDetTrackSummaryHelperToolCfg(flags, name="InDetTrigSummaryHelper"):
   acc.addPublicTool( tool, primary=True )
   return acc
 
-def TrackSummaryToolCfg(flags, name="InDetTrackSummaryTool", summaryHelperTool=None, makePublic=True, useTRT=False):
+def TrackSummaryToolCfg(flags, name="InDetTrigTrackSummaryTool", summaryHelperTool=None, makePublic=True, useTRT=False):
   acc = ComponentAccumulator()
   if not summaryHelperTool:
     summaryHelperTool = acc.getPrimaryAndMerge( InDetTrackSummaryHelperToolCfg( flags, "InDetTrigSummaryHelper") )
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
index 4c3ec8929422114987cbf20e7de97aaa4eaf536c..85850399447b0d24cfa8a7868e08f144508d9d7e 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
@@ -55,7 +55,7 @@ def iterativeVertexFinderCfg(flags, signature):
     acc = ComponentAccumulator()
     vtx_cuts = ConfiguredTrigVtxCuts()
     # TODO - should this have isHLT = True? This isn't set in the non-CA version
-    summary_tool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    summary_tool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
     extrapolator_acc = InDetExtrapolatorCfg(flags)
     extrapolator = extrapolator_acc.getPrimary()
     acc.merge(extrapolator_acc)
@@ -107,7 +107,7 @@ def adaptiveMultiVertexFinderCfg(flags, signature):
 
     acc = ComponentAccumulator()
     # TODO - should this have isHLT = True? This isn't set in the non-CA version
-    summary_tool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    summary_tool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
     extrapolator_acc = InDetExtrapolatorCfg(flags)
     extrapolator = extrapolator_acc.getPrimary()
     acc.merge(extrapolator_acc)