diff --git a/InnerDetector/InDetConfig/python/BackTrackingConfig.py b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
index 940233ffa232f2d59ca6405c8bdec8fdb2d3c9c6..5d2714b8d588a25aaca0742a73e555b90b3bb0df 100644
--- a/InnerDetector/InDetConfig/python/BackTrackingConfig.py
+++ b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
@@ -94,10 +94,9 @@ def TRT_SeededTrackFinder_ATLCfg(flags, name='InDetTRT_SeededTrackMaker', Tracki
     InDetSiComTrackFinder = acc.popToolsAndMerge(TC.SiCombinatorialTrackFinder_xkCfg(flags))
     acc.addPublicTool(InDetSiComTrackFinder)
 
-    InDetTRT_SeededSiRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags, TrackingFlags=TrackingFlags))
-    acc.addPublicTool(InDetTRT_SeededSiRoadMaker)
-
     if (TrackingFlags.usePixel and TrackingFlags.useSCT) is not False:
+        InDetTRT_SeededSiRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags, TrackingFlags=TrackingFlags))
+        acc.addPublicTool(InDetTRT_SeededSiRoadMaker)
         kwargs.setdefault("RoadTool", InDetTRT_SeededSiRoadMaker)
 
     #
@@ -155,8 +154,8 @@ def TRT_SeededTrackFinderCfg(flags, name='InDetTRT_SeededTrackFinder', TrackingF
         suffix = ''
         usePrdAssociationTool = False
 
-    InDetTrackFitter = acc.popToolsAndMerge(TC.InDetKalmanFitterCfg(flags))
-    acc.addPublicTool(InDetTrackFitter)
+    InDetTrackFitterBT = acc.popToolsAndMerge(TC.InDetTrackFitterBTCfg(flags))
+    acc.addPublicTool(InDetTrackFitterBT)
 
     InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
     acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
@@ -174,7 +173,7 @@ def TRT_SeededTrackFinderCfg(flags, name='InDetTRT_SeededTrackFinder', TrackingF
                                                                                  InputCollections=InputCollections))
     acc.addPublicTool(InDetTRT_SeededTrackTool)
 
-    kwargs.setdefault("RefitterTool", InDetTrackFitter)
+    kwargs.setdefault("RefitterTool", InDetTrackFitterBT)
     kwargs.setdefault("TrackTool", InDetTRT_SeededTrackTool)
     kwargs.setdefault("PRDtoTrackMap", prefix+'PRDtoTrackMap'+suffix if usePrdAssociationTool else "")
     kwargs.setdefault("TrackSummaryTool", InDetTrackSummaryToolNoHoleSearch)
@@ -251,8 +250,8 @@ def SimpleAmbiguityProcessorToolCfg(flags, name='InDetTRT_SeededAmbiguityProcess
     #
     # --- load Ambiguity Processor
     #
-    InDetTrackFitter = acc.popToolsAndMerge(TC.InDetKalmanFitterCfg(flags))
-    acc.addPublicTool(InDetTrackFitter)
+    InDetTrackFitterBT = acc.popToolsAndMerge(TC.InDetTrackFitterBTCfg(flags))
+    acc.addPublicTool(InDetTrackFitterBT)
 
     InDetPRDtoTrackMapToolGangedPixels = TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags)
     acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
@@ -274,7 +273,7 @@ def SimpleAmbiguityProcessorToolCfg(flags, name='InDetTRT_SeededAmbiguityProcess
     InDetTRT_SeededAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags, TrackingFlags=TrackingFlags))
     acc.addPublicTool(InDetTRT_SeededAmbiTrackSelectionTool)
 
-    kwargs.setdefault("Fitter", InDetTrackFitter)
+    kwargs.setdefault("Fitter", InDetTrackFitterBT)
     kwargs.setdefault("AssociationTool", InDetPRDtoTrackMapToolGangedPixels)
     kwargs.setdefault("TrackSummaryTool", InDetTRT_SeededSummaryTool)
     kwargs.setdefault("SelectionTool", InDetTRT_SeededAmbiTrackSelectionTool)
@@ -383,9 +382,6 @@ if __name__ == "__main__":
     from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
     top_acc.merge(PoolReadCfg(ConfigFlags))
 
-    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
-    top_acc.merge(MagneticFieldSvcCfg(ConfigFlags))
-
     from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
     top_acc.merge( PixelGeometryCfg(ConfigFlags) )
 
@@ -418,7 +414,7 @@ if __name__ == "__main__":
     from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
     top_acc.addPublicTool(top_acc.popToolsAndMerge(SCT_LorentzAngleCfg(ConfigFlags)))
     ##
-    from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg)
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg
     top_acc.merge(PixelOfflineCalibCondAlgCfg(ConfigFlags))
     top_acc.merge(PixelDistortionAlgCfg(ConfigFlags))
     ##
@@ -462,8 +458,6 @@ if __name__ == "__main__":
     iovsvc = top_acc.getService('IOVDbSvc')
     iovsvc.OutputLevel=5
 
-    top_acc.getService('StoreGateSvc').Dump = True
-    top_acc.printConfig(withDetails = True, summariseProps = True)
-
+    top_acc.printConfig()
     top_acc.run(25)
     top_acc.store(open("test_BackTrackingConfig.pkl", "wb"))
\ No newline at end of file
diff --git a/InnerDetector/InDetConfig/python/NewTrackingTRTExtensionConfig.py b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
similarity index 91%
rename from InnerDetector/InDetConfig/python/NewTrackingTRTExtensionConfig.py
rename to InnerDetector/InDetConfig/python/TRTExtensionConfig.py
index f2e3f048b3b51a68a11d50bdd2d3211937f6c5aa..d6c695fdc97f1dc7d13ecda31c9e7b2c6e390a80 100644
--- a/InnerDetector/InDetConfig/python/NewTrackingTRTExtensionConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
@@ -5,14 +5,6 @@ import InDetConfig.TrackingCommonConfig         as   TC
 import AthenaCommon.SystemOfUnits               as   Units
 
 #///////////// Temporary location TrackingSiPatternConfig configurations ///////////////////////
-def SiDetElementBoundaryLinksCondAlg_xkCfg(name="InDetSiDetElementBoundaryLinksPixelCondAlg", **kwargs) :
-    acc = ComponentAccumulator()
-
-    kwargs.setdefault("ReadKey", "PixelDetectorElementCollection")
-    kwargs.setdefault("WriteKey", "PixelDetElementBoundaryLinks_xk")
-    acc.addCondAlgo(CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk(name = name))
-    return acc
-
 def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", TrackingFlags = None, **kwargs) :
     acc = ComponentAccumulator()
     #
@@ -33,14 +25,22 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", Tracki
     InDetPatternUpdator = TC.InDetPatternUpdatorCfg()
     acc.addPublicTool(InDetPatternUpdator)
 
+    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)
+    kwargs.setdefault("BoundaryCheckTool", boundary_check_tool)
     kwargs.setdefault("RIOonTrackTool", rot_creator_digital)
     kwargs.setdefault("usePixel", flags.Detector.RecoPixel)
     kwargs.setdefault("useSCT", flags.Detector.RecoSCT if not is_dbm else False)
     kwargs.setdefault("PixelClusterContainer", 'PixelClusters') # InDetKeys.PixelClusters()
     kwargs.setdefault("SCT_ClusterContainer", 'SCT_Clusters') # InDetKeys.SCT_Clusters()
 
+    if TrackingFlags.extension == "Offline": 
+        kwargs.setdefault("writeHolesFromPattern", flags.InDet.useHolesFromPattern)
+
     if is_dbm :
         kwargs.setdefault("MagneticFieldMode", "NoField")
         kwargs.setdefault("TrackQualityCut", 9.3)
@@ -56,11 +56,42 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", Tracki
     acc.setPrivateTools(track_finder)
     return acc
 
+def SiDetElementsRoadMaker_xkCfg(flags, name="InDetSiRoadMaker", TrackingFlags = None, **kwargs) :
+    acc = ComponentAccumulator()
+    #
+    # --- SCT and Pixel detector elements road builder
+    #
+    InDetPatternPropagator = TC.InDetPatternPropagatorCfg()
+    acc.addPublicTool(InDetPatternPropagator)
+
+    kwargs.setdefault("PropagatorTool", InDetPatternPropagator)
+    kwargs.setdefault("usePixel", TrackingFlags.usePixel )
+    kwargs.setdefault("PixManagerLocation", 'Pixel')
+    kwargs.setdefault("useSCT", TrackingFlags.useSCT)
+    kwargs.setdefault("SCTManagerLocation", 'SCT')
+    kwargs.setdefault("RoadWidth", TrackingFlags.roadWidth)
+
+    InDetSiDetElementsRoadMaker = CompFactory.InDet.SiDetElementsRoadMaker_xk(name = name+TrackingFlags.extension, **kwargs)
+    acc.setPrivateTools(InDetSiDetElementsRoadMaker)
+    return acc
+
 def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None, TrackingFlags = None, **kwargs) :
     acc = ComponentAccumulator()
     useBremMode = TrackingFlags.extension == "Offline" or TrackingFlags.extension == "SLHC" or TrackingFlags.extension == "DBM"
-    #InDetSiDetElementsRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags, TrackingFlags = TrackingFlags ))
-    #acc.addPublicTool(InDetSiDetElementsRoadMaker)
+    InDetSiDetElementsRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags, TrackingFlags = TrackingFlags ))
+    acc.addPublicTool(InDetSiDetElementsRoadMaker)
+    if flags.Detector.RecoPixel:
+        acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksPixelCondAlg",
+                                                                                ReadKey  = "PixelDetectorElementCollection",
+                                                                                WriteKey = "PixelDetElementBoundaryLinks_xk") )
+    if TrackingFlags.useSCT:
+        acc.addCondAlgo(CompFactory.InDet.SiDetElementsRoadCondAlg_xk(name = "InDet__SiDetElementsRoadCondAlg_xk"))
+
+        acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksSCTCondAlg",
+                                                                                ReadKey  = "SCT_DetectorElementCollection",
+                                                                                WriteKey = "SCT_DetElementBoundaryLinks_xk") )
+
+
     track_finder = acc.popToolsAndMerge(SiCombinatorialTrackFinder_xkCfg(flags, TrackingFlags = TrackingFlags))
     acc.addPublicTool(track_finder)
 
@@ -74,7 +105,7 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
 
     kwargs.setdefault("useSCT", TrackingFlags.useSCT)  #TrackingFlags.useSCT()
     kwargs.setdefault("usePixel", TrackingFlags.usePixel) #TrackingFlags.usePixel()
-    #kwargs.setdefault("RoadTool", InDetSiDetElementsRoadMaker)
+    kwargs.setdefault("RoadTool", InDetSiDetElementsRoadMaker)
     kwargs.setdefault("CombinatorialTrackFinder", track_finder)
     kwargs.setdefault("pTmin", TrackingFlags.minPT)
     kwargs.setdefault("pTminBrem", TrackingFlags.minPTBrem)
@@ -214,6 +245,8 @@ def SiSpacePointsSeedMakerCfg(flags, name="InDetSpSeedsMaker", InputCollections
             kwargs.setdefault("alwaysKeepConfirmedPixelSeeds", TrackingFlags.keepAllConfirmedPixelSeeds)
             kwargs.setdefault("mindRadius", 10)
             kwargs.setdefault("maxSizeSP", 200)
+            kwargs.setdefault("dImpactCutSlopeUnconfirmedSSS", 1.25)
+            kwargs.setdefault("dImpactCutSlopeUnconfirmedPPP", 2.0)
         
     if TrackingFlags.extension == "R3LargeD0":
         kwargs.setdefault("optimisePhiBinning", False)
@@ -346,6 +379,9 @@ def SiSPSeededTrackFinderCfg(flags, name="InDetSiSpTrackFinder", InputCollection
     if flags.InDet.doHeavyIon :
         kwargs.setdefault("FreeClustersCut",2) #Heavy Ion optimization from Igor
 
+    if TrackingFlags.extension == "Offline":
+        kwargs.setdefault("writeHolesFromPattern", flags.InDet.useHolesFromPattern)
+
     InDetSiSPSeededTrackFinder = CompFactory.InDet.SiSPSeededTrackFinder(name = name+TrackingFlags.extension, **kwargs)
     acc.addEventAlgo(InDetSiSPSeededTrackFinder)
     return acc
@@ -401,6 +437,7 @@ def DeterministicAnnealingFilterCfg(flags, name = 'InDetDAF', **kwargs):
 
 def InDetExtensionProcessorCfg(flags, TrackingFlags, SiTrackCollection=None, ExtendedTrackCollection = None, ExtendedTracksMap = None, doPhase=True, **kwargs):
     acc = ComponentAccumulator()
+
     ForwardTrackCollection = ExtendedTrackCollection
     # set output extension map name
     OutputExtendedTracks = ExtendedTracksMap
@@ -412,8 +449,19 @@ def InDetExtensionProcessorCfg(flags, TrackingFlags, SiTrackCollection=None, Ext
         InDetExtensionFitter = acc.popToolsAndMerge(DeterministicAnnealingFilterCfg(flags, name = 'InDetDAF'+ TrackingFlags.extension))
         acc.addPublicTool(InDetExtensionFitter)
     else:
-        InDetExtensionFitter = acc.popToolsAndMerge(TC.InDetKalmanFitterCfg(flags, name = "InDetTrackFitter"))
-        acc.addPublicTool(InDetExtensionFitter)
+        fitter_args = {}
+        if flags.InDet.holeSearchInGX2Fit:
+            fitter_args.setdefault("DoHoleSearch", True)
+            from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
+            InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
+            acc.addPublicTool(InDetBoundaryCheckTool)
+            fitter_args.setdefault("BoundaryCheckTool", InDetBoundaryCheckTool)
+        if TrackingFlags.extension != "LowPt":
+            InDetExtensionFitter = acc.popToolsAndMerge(TC.InDetTrackFitterCfg(flags, 'InDetTrackFitter_TRTExtension'+TrackingFlags.extension, **fitter_args))
+            acc.addPublicTool(InDetExtensionFitter)
+        else:
+            InDetExtensionFitter = acc.popToolsAndMerge(TC.InDetTrackFitterLowPt(flags, 'InDetTrackFitter_TRTExtension'+TrackingFlags.extension, **fitter_args))
+            acc.addPublicTool(InDetExtensionFitter)
     #
     # --- load scoring for extension
     #
@@ -519,6 +567,8 @@ if __name__ == "__main__":
 
     ConfigFlags.addFlag('InDet.doTRTExtension', True)
     ConfigFlags.addFlag('InDet.doExtensionProcessor', True)
+    ConfigFlags.addFlag('InDet.useHolesFromPattern', False)
+    ConfigFlags.addFlag('InDet.holeSearchInGX2Fit', True)
 
     # SiliconPreProcessing
     ConfigFlags.InDet.doPixelClusterSplitting = True
@@ -535,9 +585,6 @@ if __name__ == "__main__":
     from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
     top_acc.merge(PoolReadCfg(ConfigFlags))
 
-    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
-    top_acc.merge(MagneticFieldSvcCfg(ConfigFlags))
-
     from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
     from SCT_GeoModel.SCT_GeoModelConfig import SCT_GeometryCfg
     top_acc.merge(PixelGeometryCfg(ConfigFlags))
@@ -553,8 +600,7 @@ if __name__ == "__main__":
     from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
     top_acc.merge(BeamSpotCondAlgCfg(ConfigFlags))
 
-    from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg)
-    top_acc.merge(PixelOfflineCalibCondAlgCfg(ConfigFlags))
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg
     top_acc.merge(PixelDistortionAlgCfg(ConfigFlags))
 
     from InDetConfig.TRTSegmentFindingConfig import TRTActiveCondAlgCfg
@@ -569,14 +615,6 @@ if __name__ == "__main__":
     from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
     top_acc.addPublicTool(top_acc.popToolsAndMerge(SCT_LorentzAngleCfg(ConfigFlags)))
 
-    from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelChargeCalibCondAlgCfg, PixelConfigCondAlgCfg, PixelCablingCondAlgCfg, PixelReadoutSpeedAlgCfg, PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg)
-    top_acc.merge(PixelChargeCalibCondAlgCfg(ConfigFlags))
-    top_acc.merge(PixelConfigCondAlgCfg(ConfigFlags))
-    top_acc.merge(PixelCablingCondAlgCfg(ConfigFlags))
-    top_acc.merge(PixelReadoutSpeedAlgCfg(ConfigFlags))
-    top_acc.merge(PixelOfflineCalibCondAlgCfg(ConfigFlags))
-    top_acc.merge(PixelDistortionAlgCfg(ConfigFlags))
-
     top_acc.merge(TC.PixelClusterNnCondAlgCfg(ConfigFlags))
     top_acc.merge(TC.PixelClusterNnWithTrackCondAlgCfg(ConfigFlags))
 
@@ -587,30 +625,13 @@ if __name__ == "__main__":
     InputCollections = []
     
     InDetSpSeededTracksKey    = 'SiSPSeededTracks'  # InDetKeys.SiSpSeededTracks()
-
-    if ConfigFlags.InDet.doDBMstandalone:
-        InDetSpSeededTracksKey    = 'SiSPSeededDBMTracks' # InDetKeys.SiSpSeededDBMTracks()
-
     SiSPSeededTrackCollectionKey = InDetSpSeededTracksKey
 
     ExtendedTrackCollection = 'ExtendedTracksPhase' # InDetKeys.ExtendedTracksPhase
     ExtendedTracksMap = 'ExtendedTracksMapPhase'    # InDetKeys.ExtendedTracksMapPhase
 
     #################### Additional Configuration  ########################
-    from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
-    top_acc.merge(addFoldersSplitOnline(ConfigFlags, "TRT", "/TRT/Onl/Cond/StatusHT", "/TRT/Cond/StatusHT", className='TRTCond::StrawStatusMultChanContainer'))
-    top_acc.merge(addFoldersSplitOnline(ConfigFlags, 'INDET','/Indet/Onl/TrkErrorScaling','/Indet/TrkErrorScaling', className="CondAttrListCollection"))
-
-    top_acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksPixelCondAlg",
-                                                                                ReadKey  = "PixelDetectorElementCollection",
-                                                                                WriteKey = "PixelDetElementBoundaryLinks_xk") )
-
-    top_acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksSCTCondAlg",
-                                                                                ReadKey  = "SCT_DetectorElementCollection",
-                                                                                WriteKey = "SCT_DetElementBoundaryLinks_xk") )
-
-    top_acc.addCondAlgo(CompFactory.InDet.SiDetElementsRoadCondAlg_xk(name = "InDet__SiDetElementsRoadCondAlg_xk"))
-
+    #######################################################################
     ################# TRTPreProcessing Configuration ######################
     from InDetConfig.TRTPreProcessing import TRTPreProcessingCfg
     if not ConfigFlags.InDet.doDBMstandalone:
@@ -627,8 +648,6 @@ if __name__ == "__main__":
 
     ####################### TrackingSiPattern #############################
     if ConfigFlags.InDet.doSiSPSeededTrackFinder:
-        if ConfigFlags.Detector.RecoPixel:
-            top_acc.merge(SiDetElementBoundaryLinksCondAlg_xkCfg())
         top_acc.merge(SiSPSeededTrackFinderCfg( ConfigFlags,
                                                 InputCollections = InputCollections, 
                                                 SiSPSeededTrackCollectionKey = InDetSpSeededTracksKey, 
@@ -659,4 +678,4 @@ if __name__ == "__main__":
     #
     top_acc.printConfig()
     top_acc.run(25)
-    top_acc.store(open("NewTrackingTRTExtensionConfig.pkl", "wb"))
\ No newline at end of file
+    top_acc.store(open("TRTExtensionConfig.pkl", "wb"))
\ No newline at end of file
diff --git a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
index bd7b10255d1dd90a7becb1e6c7137f78e02ad041..455bf062905ca5bef27852b9ce2011b7385c0375 100644
--- a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
@@ -52,7 +52,7 @@ def TRT_SegmentToTrackToolCfg(flags, name ='InDetTRT_SegmentToTrackTool', Tracki
     else:
         asso_tool = None
 
-    InDetTrackFitterTRT = acc.popToolsAndMerge(TC.GlobalChi2FitterCfg(flags))
+    InDetTrackFitterTRT = acc.popToolsAndMerge(TC.InDetTrackFitterTRTCfg(flags))
     acc.addPublicTool(InDetTrackFitterTRT)
 
     InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
@@ -230,9 +230,6 @@ if __name__ == "__main__":
     from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
     top_acc.merge(PoolReadCfg(ConfigFlags))
 
-    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
-    top_acc.merge(MagneticFieldSvcCfg(ConfigFlags))
-
     from TRT_GeoModel.TRT_GeoModelConfig import TRT_GeometryCfg
     top_acc.merge(TRT_GeometryCfg( ConfigFlags ))
 
@@ -264,9 +261,6 @@ if __name__ == "__main__":
     PixeldEdxAlg = CompFactory.PixeldEdxAlg(name="PixeldEdxAlg", ReadFromCOOL = True)
     top_acc.addCondAlgo(PixeldEdxAlg)
     ###
-    ###
-    top_acc.merge(addFoldersSplitOnline(ConfigFlags, "TRT", "/TRT/Onl/Cond/Status", "/TRT/Cond/Status", className='TRTCond::StrawStatusMultChanContainer'))
-
     InDetTRTStrawStatusSummaryTool = top_acc.popToolsAndMerge(TC.InDetTRTStrawStatusSummaryToolCfg(ConfigFlags))
     top_acc.addPublicTool(InDetTRTStrawStatusSummaryTool)
 
@@ -302,11 +296,11 @@ if __name__ == "__main__":
 
     top_acc.merge(TRTActiveCondAlgCfg(ConfigFlags))
     top_acc.merge(TC.TRT_DetElementsRoadCondAlgCfg())
-
+    ############################# TRTPreProcessing configuration ############################
     from InDetConfig.TRTPreProcessing import TRTPreProcessingCfg
     if not ConfigFlags.InDet.doDBMstandalone:
         top_acc.merge(TRTPreProcessingCfg(ConfigFlags,(not ConfigFlags.InDet.doTRTPhaseCalculation or ConfigFlags.Beam.Type =="collisions"),False))
-
+    ########################### TRTSegmentFindingCfg configuration ##########################
     TrackingFlags = ConfigFlags.InDet.Tracking
     # NewTracking collection keys
     InputCombinedInDetTracks = []
@@ -316,7 +310,7 @@ if __name__ == "__main__":
                                         InputCombinedInDetTracks,
                                         TrackingFlags,
                                         'TRTSegments')) # InDetKeys.TRT_Segments
-
+    #########################################################################################
     ############################### TRTStandalone configuration #############################
     top_acc.merge(TRTStandaloneCfg( ConfigFlags, 
                                     extension = "",
@@ -327,7 +321,5 @@ if __name__ == "__main__":
     iovsvc = top_acc.getService('IOVDbSvc')
     iovsvc.OutputLevel=5
 
-    top_acc.getService('StoreGateSvc').Dump = True
-    top_acc.printConfig(withDetails = True, summariseProps = True)
     top_acc.run(25)
     top_acc.store(open("test_TRTStandaloneConfig.pkl", "wb"))
\ No newline at end of file
diff --git a/InnerDetector/InDetConfig/python/TrackTruthConfig.py b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..f905b397c052d36a20cf4030aff4f4a2386cec4a
--- /dev/null
+++ b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
@@ -0,0 +1,166 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory     import CompFactory
+# -------------------------------------------------------------------------
+#
+# ------- fragment to handle track truth association
+#
+# -------------------------------------------------------------------------
+
+def InDetDetailedTrackTruthMakerCfg(flags, Tracks, DetailedTruth, name='Maker',**kwargs) :
+    acc = ComponentAccumulator()
+    kwargs.setdefault("TrackCollectionName", Tracks)
+    kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
+    kwargs.setdefault("TruthNamePixel", 'PRD_MultiTruthPixel')
+    kwargs.setdefault("TruthNameSCT", 'PRD_MultiTruthSCT')
+    kwargs.setdefault("TruthNameTRT", 'PRD_MultiTruthTRT')
+
+    # this is how the truth maker gets to know which detector is on ...
+    if (not flags.Detector.RecoPixel):
+        kwargs.setdefault("TruthNamePixel", "")
+    if (not flags.Detector.RecoSCT):
+        kwargs.setdefault("TruthNameSCT", "")
+    # for cosmics, at the stage of SiPatternRecognition, the TRT truth information is not yet available
+    if ((not flags.Detector.RecoTRT) or (flags.Beam.Type == 'cosmics' and (DetailedTruth == "SiSPSeededTracksDetailedTruth" or DetailedTruth == "ResolvedTracksDetailedTruth"))):
+        kwargs.setdefault("TruthNameTRT", "")
+
+    acc.addEventAlgo(CompFactory.InDet.InDetDetailedTrackTruthMaker(name = DetailedTruth+name, **kwargs))
+    return acc
+
+def InDetTruthMatchToolCfg(flags, name='InDetTruthMatchTool', **kwargs) :
+    acc = ComponentAccumulator()
+
+    if flags.InDet.truthMatchStrategy == 'TruthMatchRatio':
+        InDetTruthMatchTool = CompFactory.Trk.TruthMatchRatio
+    elif flags.InDet.truthMatchStrategy == 'TruthMatchTanimoto':
+        InDetTruthMatchTool = CompFactory.Trk.TruthMatchTanimoto
+
+    kwargs.setdefault("WeightPixel", 10.)
+    kwargs.setdefault("WeightSCT", 5.)
+    kwargs.setdefault("WeightTRT", 1.)
+
+    InDetTruthMatchSimilarityTool = InDetTruthMatchTool(name = name, **kwargs)
+    acc.setPrivateTools(InDetTruthMatchSimilarityTool)
+    return acc
+
+def TrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth, name='Selector', **kwargs) :
+    acc = ComponentAccumulator()
+
+    InDetTruthMatchSimilarityTool = acc.popToolsAndMerge(InDetTruthMatchToolCfg(flags))
+    acc.addPublicTool(InDetTruthMatchSimilarityTool)
+
+    kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
+    kwargs.setdefault("OutputName", TracksTruth)
+    kwargs.setdefault("TrackTruthSimilarityTool", InDetTruthMatchSimilarityTool)
+
+    acc.addEventAlgo(CompFactory.TrackTruthSimilaritySelector(name = TracksTruth+name, **kwargs))
+    return acc
+
+def  InDetTrackTruthCfg(flags, Tracks = None, DetailedTruth = None, TracksTruth = None):
+    acc = ComponentAccumulator()
+    #
+    # --- Enable the detailed track truth
+    #
+    acc.merge(InDetDetailedTrackTruthMakerCfg(flags, Tracks, DetailedTruth))
+    #
+    # --- Detailed to old TrackTruth
+    #
+    acc.merge(TrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth))
+
+    return acc
+
+
+if __name__ == "__main__":
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior=1
+
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+
+    numThreads=1
+    ConfigFlags.Concurrency.NumThreads=numThreads
+    ConfigFlags.Concurrency.NumConcurrentEvents=numThreads # Might change this later, but good enough for the moment.
+
+    ConfigFlags.Detector.GeometryPixel = True
+    ConfigFlags.Detector.GeometrySCT = True
+    ConfigFlags.Detector.GeometryTRT   = True
+
+    ConfigFlags.InDet.doPixelClusterSplitting = True
+
+    ConfigFlags.Detector.RecoIBL = True
+    ConfigFlags.Detector.RecoPixel = True
+    ConfigFlags.Detector.RecoTRT = True
+    ConfigFlags.Detector.RecoSCT = True
+
+    ConfigFlags.addFlag('InDet.useHolesFromPattern', False)
+
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
+    ConfigFlags.Input.Files = defaultTestFiles.RDO
+    ConfigFlags.lock()
+    ConfigFlags.dump()
+
+    from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+    top_acc = MainServicesCfg(ConfigFlags)
+
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    top_acc.merge(PoolReadCfg(ConfigFlags))
+
+    ####################### Aditional Configurations #########################
+
+    from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
+    top_acc.merge( PixelGeometryCfg(ConfigFlags) )
+
+    from SCT_GeoModel.SCT_GeoModelConfig import SCT_GeometryCfg
+    top_acc.merge(SCT_GeometryCfg(ConfigFlags))
+
+    from TRT_GeoModel.TRT_GeoModelConfig import TRT_GeometryCfg
+    top_acc.merge(TRT_GeometryCfg( ConfigFlags ))
+
+    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
+    top_acc.merge(BeamSpotCondAlgCfg(ConfigFlags))
+
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg, PixelHitDiscCnfgAlgCfg
+    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 InDetOverlay.PixelOverlayConfig import PixelRawDataProviderAlgCfg
+    top_acc.merge(PixelRawDataProviderAlgCfg(ConfigFlags))
+
+    ################## SiliconPreProcessing Configurations ###################
+    from InDetConfig.SiliconPreProcessing import InDetRecPreProcessingSiliconCfg
+    top_acc.merge(InDetRecPreProcessingSiliconCfg(ConfigFlags))
+    #################### TRTPreProcessing Configurations #####################
+    from InDetConfig.TRTPreProcessing import TRTPreProcessingCfg
+    top_acc.merge(TRTPreProcessingCfg(ConfigFlags,(not ConfigFlags.InDet.doTRTPhaseCalculation or ConfigFlags.Beam.Type =="collisions"),False))
+    
+    #//// TrackingSiPatternConfig configurations from Temporary location /////
+    ################# SiSPSeededTrackFinder Configurations ###################
+    TrackingFlags = ConfigFlags.InDet.Tracking
+
+    InputCollections = []
+
+    SiSPSeededTrackCollectionKey = 'SiSPSeededPixelTracks'
+    ResolvedTrackCollectionKey = 'ResolvedPixelTracks'
+    from InDetConfig.TRTExtensionConfig import SiSPSeededTrackFinderCfg
+    top_acc.merge(SiSPSeededTrackFinderCfg( ConfigFlags,
+                                            InputCollections = InputCollections, 
+                                            SiSPSeededTrackCollectionKey = SiSPSeededTrackCollectionKey, 
+                                            TrackingFlags = TrackingFlags))
+    ##########################################################################
+    #################### InDetTrackTruth Configurations ######################
+
+    InputTrackCollection = 'SiSPSeededPixelTracks'
+    InputDetailedTrackTruth = 'DetailedTrackTruth'
+    InputTrackCollectionTruth = 'TrackTruthCollection'
+    
+    top_acc.merge(InDetTrackTruthCfg(flags=ConfigFlags,
+                                     Tracks = InputTrackCollection,
+                                     DetailedTruth = InputDetailedTrackTruth,
+                                     TracksTruth = InputTrackCollectionTruth))
+    #################################################################
+    top_acc.printConfig()
+    top_acc.run(25)
+    top_acc.store(open("TrackTruthConfig.pkl", "wb"))
\ No newline at end of file
diff --git a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
index 40a893f022a3d70ab36e3e220679a92354ebef6a..13107c433f5a52c3a9c6101a3bf23d53298038d5 100644
--- a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
@@ -3,6 +3,7 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory     import CompFactory
 from IOVDbSvc.IOVDbSvcConfig                  import addFoldersSplitOnline
 from InDetConfig.InDetRecToolConfig           import makeName
+import AthenaCommon.SystemOfUnits               as   Units
 #######################################################################
 
 def copyArgs(kwargs, copy_list):
@@ -12,6 +13,12 @@ def copyArgs(kwargs, copy_list):
             dict_copy[elm]=kwargs[elm]
     return dict_copy
 
+def stripArgs(kwargs, copy_list) :
+    dict_copy = copyArgs(kwargs,copy_list)
+    for an_arg in copy_list :
+        kwargs.pop(an_arg,None)
+    return dict_copy
+
 def NeuralNetworkToHistoToolCfg(**kwargs):
     acc = ComponentAccumulator()
     name = kwargs.pop('name',"NeuralNetworkToHistoTool")
@@ -88,7 +95,7 @@ def NnClusterizationFactoryCfg(flags, name = 'NnClusterizationFactory', **kwargs
         acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/PixelClustering/PixelClusNNCalib", "/PIXEL/PixelClustering/PixelClusNNCalib", className='CondAttrListCollection'))
         acc.merge(LWTNNCondAlgCfg(flags, name='LWTNNCondAlg'))
 
-    kwargs.setdefault("doRunI", True)
+    kwargs.setdefault("doRunI", do_runI)
     kwargs.setdefault("useToT", False if do_runI else flags.InDet.doNNToTCalibration)
     kwargs.setdefault("useRecenteringNNWithoutTracks", True  if do_runI else False)
     kwargs.setdefault("useRecenteringNNWithTracks", False if do_runI else False)
@@ -144,7 +151,8 @@ def InDetPixelClusterOnTrackToolNNSplittingCfg(flags, name='InDetPixelClusterOnT
 def InDetPixelClusterOnTrackToolCfg(flags, name='InDetPixelClusterOnTrackTool', **kwargs):
     if 'LorentzAngleTool' not in kwargs :
         from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool
-        kwargs.setdefault("LorentzAngleTool", PixelLorentzAngleTool(flags, name="PixelLorentzAngleTool") )
+        tool = PixelLorentzAngleTool(flags, name="PixelLorentzAngleTool")
+        kwargs.setdefault("LorentzAngleTool", tool )
 
     if flags.InDet.doDigitalROTCreation:
         return InDetPixelClusterOnTrackToolDigitalCfg(flags, name=name, **kwargs)
@@ -155,9 +163,10 @@ def InDetSCT_ClusterOnTrackToolCfg(flags, name='InDetSCT_ClusterOnTrackTool', **
     the_name = makeName(name, kwargs)
 
     if 'LorentzAngleTool' not in kwargs :
-        from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool
-        kwargs.setdefault("LorentzAngleTool", PixelLorentzAngleTool(flags, name="PixelLorentzAngleTool") )
-
+        from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
+        SCT_LorentzAngle = SCT_LorentzAngleCfg(flags).popPrivateTools()
+        kwargs.setdefault("LorentzAngleTool", SCT_LorentzAngle )
+        
     kwargs.setdefault("CorrectionStrategy", 0 ) # do correct position bias
     kwargs.setdefault("ErrorStrategy", 2 ) # do use phi dependent errors
     return CompFactory.InDet.SCT_ClusterOnTrackTool(the_name, **kwargs)
@@ -198,13 +207,26 @@ def RIO_OnTrackErrorScalingCondAlgCfg(flags, **kwargs):
     acc.addCondAlgo(CompFactory.RIO_OnTrackErrorScalingCondAlg(**kwargs))
     return acc
 
+def LumiCondDataKeyForTRTMuScalingCfg(flags, **kwargs) :
+    acc = ComponentAccumulator()
+    LuminosityOutputKey = ''
+    if not flags.Beam.Type == 'cosmics' and False: # InDetFlags.useMuForTRTErrorScaling()  "temporary value"
+        from LumiBlockComps.LuminosityCondAlgConfig import LuminosityCondAlgCfg
+        LuminosityCondAlg = LuminosityCondAlgCfg (flags)
+        acc.merge(LuminosityCondAlg)
+        LuminosityOutputKey = LuminosityCondAlg.getCondAlgo ('LuminosityCondAlg').LuminosityOutputKey
+
+    return acc, LuminosityOutputKey
+
 def InDetTRT_DriftCircleOnTrackToolCfg(flags, name='TRT_DriftCircleOnTrackTool', **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
     kwargs.pop('isHLT',None)
     acc.merge(RIO_OnTrackErrorScalingCondAlgCfg(flags, name = 'RIO_OnTrackErrorScalingCondAlg'))
     kwargs.setdefault("TRTErrorScalingKey", '/Indet/TrkErrorScalingTRT')
-    kwargs.setdefault("LumiDataKey", '') # need to check
+    tmpAcc, LuminosityOutputKey = LumiCondDataKeyForTRTMuScalingCfg(flags)
+    acc.merge(tmpAcc)
+    kwargs.setdefault("LumiDataKey", LuminosityOutputKey)
     acc.addPublicTool(CompFactory.InDet.TRT_DriftCircleOnTrackTool(name = the_name, **kwargs), primary = True)
     return acc
 
@@ -214,7 +236,7 @@ def InDetBroadTRT_DriftCircleOnTrackToolCfg(name='InDetBroadTRT_DriftCircleOnTra
 
 def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
     acc = ComponentAccumulator()
-    strip_args=['SplitClusterMapExtension','ClusterSplitProbabilityName','RenounceInputHandles','nameSuffix']
+    strip_args=['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix']
     pix_cluster_on_track_args = copyArgs(kwargs,strip_args)
     the_name = makeName(name, kwargs)
 
@@ -323,9 +345,8 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
     acc = ComponentAccumulator()
     # makeName will remove the namePrefix in suffix from kwargs, so copyArgs has to be first
     hlt_args = copyArgs(kwargs,['isHLT','namePrefix'])
-    id_helper_args = copyArgs(kwargs,['ClusterSplitProbabilityName','RenounceInputHandles','namePrefix','nameSuffix']) if 'ClusterSplitProbabilityName' in kwargs else {}
+    id_helper_args = copyArgs(kwargs,['ClusterSplitProbabilityName','namePrefix','nameSuffix']) if 'ClusterSplitProbabilityName' in kwargs else {}
     kwargs.pop('ClusterSplitProbabilityName',None)
-    kwargs.pop('RenounceInputHandles',None)
     kwargs.pop('isHLT',None)
     the_name = makeName( name, kwargs)
     do_holes=kwargs.get("doHolesInDet",True)
@@ -333,13 +354,15 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
         id_helper_args.update(hlt_args)
 
     if 'InDetSummaryHelperTool' not in kwargs :
-        from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
-        tmpAcc =  InDetTrackSummaryHelperToolCfg(flags, **id_helper_args)
-        InDetSummaryHelper = tmpAcc.getPrimary()
-        acc.merge(tmpAcc)
-        InDetSummaryHelperNoHoleSearch = acc.popToolsAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
-        acc.addPublicTool(InDetSummaryHelperNoHoleSearch)
-        kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelper if do_holes else InDetSummaryHelperNoHoleSearch)
+        if do_holes:
+            from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
+            tmpAcc =  InDetTrackSummaryHelperToolCfg(flags, **id_helper_args)
+            InDetSummaryHelperTool = tmpAcc.getPrimary()
+            acc.merge(tmpAcc)
+        else:
+            InDetSummaryHelperTool = acc.popToolsAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
+            acc.addPublicTool(InDetSummaryHelperTool)
+        kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelperTool)
 
     #
     # Configurable version of TrkTrackSummaryTool: no TRT_PID tool needed here (no shared hits)
@@ -484,7 +507,7 @@ def InDetTRT_ElectronPidToolCfg(flags, name = "InDetTRT_ElectronPidTool", **kwar
             InDetTRT_dEdxTool = None
         kwargs.setdefault( "TRT_ToT_dEdx_Tool", InDetTRT_dEdxTool)
 
-    kwargs.setdefault( "isData", not flags.Input.isMC)
+    kwargs.setdefault( "CalculateNNPid", flags.InDet.doTRTPIDNN)
 
     InDetTRT_ElectronPidTool = CompFactory.InDet.TRT_ElectronPidToolRun2(name = the_name, **kwargs)
     return InDetTRT_ElectronPidTool
@@ -492,13 +515,12 @@ def InDetTRT_ElectronPidToolCfg(flags, name = "InDetTRT_ElectronPidTool", **kwar
 def InDetTrackSummaryToolSharedHitsCfg(flags, name='InDetTrackSummaryToolSharedHits',**kwargs):
     acc = ComponentAccumulator()
     if 'InDetSummaryHelperTool' not in kwargs :
-        copy_args=['ClusterSplitProbabilityName','RenounceInputHandles','namePrefix','nameSuffix']
+        copy_args=['ClusterSplitProbabilityName','namePrefix','nameSuffix']
         do_holes=kwargs.get("doHolesInDet",True)
         if do_holes :
             copy_args += ['isHLT']
         id_helper_args = copyArgs(kwargs,copy_args) if 'ClusterSplitProbabilityName' in kwargs else {}
         kwargs.pop('ClusterSplitProbabilityName',None)
-        kwargs.pop('RenounceInputHandles',None)
 
         InDetSummaryHelperSharedHits = acc.popToolsAndMerge(InDetSummaryHelperSharedHitsCfg(flags, **id_helper_args))
         acc.addPublicTool(InDetSummaryHelperSharedHits)
@@ -546,10 +568,329 @@ def InDetMultipleScatteringUpdatorCfg(name = "InDetMultipleScatteringUpdator", *
     acc.setPrivateTools(MultipleScatteringUpdator)
     return acc
 
-def GlobalChi2FitterCfg(flags, name ='InDetTrackFitterTRT', **kwargs):
+def InDetMeasRecalibSTCfg(flags, name='InDetMeasRecalibST', **kwargs) :
+    acc = ComponentAccumulator()
+
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+
+    if 'BroadPixelClusterOnTrackTool' not in kwargs :
+        InDetBroadPixelClusterOnTrackTool = InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args)
+        kwargs.setdefault('BroadPixelClusterOnTrackTool', InDetBroadPixelClusterOnTrackTool)
+        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
+    if 'BroadSCT_ClusterOnTrackTool' not in kwargs :
+        InDetBroadSCT_ClusterOnTrackTool = 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)
+    acc.setPrivateTools(MeasRecalibSteeringTool)
+    return acc
+
+def InDetKalmanTrackFitterBaseCfg(flags, name='InDetKalmanTrackFitterBase',**kwargs) :
+    acc = ComponentAccumulator()
+    nameSuffix=kwargs.pop('nameSuffix','')
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName'])
+    if len(pix_cluster_on_track_args)>0 and len(nameSuffix)>0 :
+        pix_cluster_on_track_args['nameSuffix']=nameSuffix
+
+    from  InDetConfig.InDetRecToolConfig import InDetExtrapolatorCfg
+    tmpAcc =  InDetExtrapolatorCfg(flags)
+    kwargs.setdefault("ExtrapolatorHandle", tmpAcc.getPrimary())
+    acc.merge(tmpAcc)
+
+    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 = InDetUpdatorCfg(flags)
+    acc.addPublicTool(InDetUpdator)
+    kwargs.setdefault('MeasurementUpdatorHandle', InDetUpdator)
+    kwargs.setdefault('KalmanSmootherHandle', InDetBKS())
+    kwargs.setdefault('KalmanOutlierLogicHandle', InDetKOL())
+    kwargs.setdefault('DynamicNoiseAdjustorHandle', None)
+    kwargs.setdefault('BrempointAnalyserHandle', None)
+    kwargs.setdefault('AlignableSurfaceProviderHandle',None)
+
+    if len(pix_cluster_on_track_args)>0 :
+        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)
+    acc.setPrivateTools(KalmanFitter)
+    return acc
+
+def InDetDNAdjustor(name='InDetDNAdjustor', **kwargs) :
+    return CompFactory.Trk.InDetDynamicNoiseAdjustment(name=name,**kwargs)
+
+def InDetDNASeparator(name='InDetDNASeparator',**kwargs) :
+    return CompFactory.InDet.InDetDNASeparator(name=name,**kwargs)
+
+def InDetAnnealBKS(name='InDetAnnealBKS',**kwargs) :
+    kwargs.setdefault('InitialCovarianceSeedFactor',200.)
+    return CompFactory.Trk.KalmanSmoother(name=name,**kwargs)
+
+def KalmanCompetingPixelClustersTool(name='KalmanCompetingPixelClustersTool',**kwargs):
+    kwargs.setdefault('WeightCutValueBarrel',5.5)
+    kwargs.setdefault('WeightCutValueEndCap',5.5)
+    return CompFactory.InDet.CompetingPixelClustersOnTrackTool(name=name, **kwargs)
+
+def KalmanCompetingSCT_ClustersTool(name='KalmanCompetingSCT_ClustersTool',**kwargs) :
+    kwargs.setdefault('WeightCutValueBarrel',5.5)
+    kwargs.setdefault('WeightCutValueEndCap',5.5)
+    return CompFactory.InDet.CompetingSCT_ClustersOnTrackTool(name=name,**kwargs)
+
+def KalmanCompetingRIOsTool(name='KalmanCompetingRIOsTool',**kwargs) :
+    kwargs.setdefault('ToolForCompPixelClusters',KalmanCompetingPixelClustersTool())
+    kwargs.setdefault('ToolForCompSCT_Clusters',KalmanCompetingSCT_ClustersTool())
+    return CompFactory.Trk.CompetingRIOsOnTrackTool(name=name,**kwargs)
+
+def KalmanInternalDAF(name='KalmanInternalDAF',**kwargs) :
+    kwargs.setdefault('CompetingRIOsOnTrackCreator',KalmanCompetingRIOsTool())
+    kwargs.setdefault('BackwardSmoother',InDetAnnealBKS())
+    return CompFactory.Trk.KalmanPiecewiseAnnealingFilter(name=name,**kwargs)
+
+def InDetAnnealFKF(name='InDetAnnealFKF',**kwargs) :
+    return CompFactory.Trk.ForwardKalmanFitter(name=name,**kwargs)
+
+def InDetFKFRef(name='InDetFKFRef',**kwargs) :
+    kwargs.setdefault('StateChi2PerNDFPreCut',30.0)
+    return InDetAnnealFKF(name=name,**kwargs)
+
+def KalmanInternalDAFRef(name='KalmanInternalDAFRef',**kwargs) :
+    kwargs.setdefault('ForwardFitter', InDetAnnealFKF())
+    kwargs.setdefault('BackwardSmoother', InDetBKS())
+    return KalmanInternalDAF(name=name,**kwargs)
+
+def InDetBroadRotCreatorCfg(flags, name='InDetBroadInDetRotCreator', **kwargs) :
+    acc = ComponentAccumulator()
+
+    if 'ToolPixelCluster' not in kwargs :
+        pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+        InDetBroadPixelClusterOnTrackTool = InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args)
+        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
+        kwargs.setdefault('ToolPixelCluster', InDetBroadPixelClusterOnTrackTool)
+
+    if 'ToolSCT_Cluster' not in kwargs :
+        InDetBroadSCT_ClusterOnTrackTool = InDetBroadSCT_ClusterOnTrackToolCfg(flags)
+        acc.addPublicTool(InDetBroadSCT_ClusterOnTrackTool)
+        kwargs.setdefault('ToolSCT_Cluster', InDetBroadSCT_ClusterOnTrackTool)
+
+    if flags.Detector.RecoTRT:
+        if 'ToolTRT_DriftCircle' not in kwargs :
+            InDetBroadTRT_DriftCircleOnTrackTool = InDetBroadTRT_DriftCircleOnTrackToolCfg()
+            acc.addPublicTool(InDetBroadTRT_DriftCircleOnTrackTool)
+            kwargs.setdefault('ToolTRT_DriftCircle', InDetBroadTRT_DriftCircleOnTrackTool)
+
+    InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name = name, **kwargs))
+    acc.setPrivateTools(InDetRotCreator)
+    return acc
+
+def KalmanFitterCfg(flags, name='KalmanFitter',**kwargs) :
+    acc = ComponentAccumulator()
+
+    kwargs.setdefault('ForwardKalmanFitterHandle', InDetFKF())
+    if flags.InDet.doBremRecovery:
+        kwargs.setdefault('DynamicNoiseAdjustorHandle', InDetDNAdjustor())
+        kwargs.setdefault('BrempointAnalyserHandle', InDetDNASeparator())
+        kwargs.setdefault('DoDNAForElectronsOnly', True)
+    else:
+        kwargs.setdefault('DynamicNoiseAdjustorHandle', None)
+        kwargs.setdefault('BrempointAnalyserHandle', None)
+
+    kwargs.setdefault('InternalDAFHandle', KalmanInternalDAF())
+
+    InDetKalmanTrackFitterBase = acc.popToolsAndMerge(InDetKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetKalmanTrackFitterBase)
+    return acc
+
+def KalmanDNAFitterCfg(flags, name='KalmanDNAFitter',**kwargs) :
+    acc = ComponentAccumulator()
+
+    kwargs.setdefault('ForwardKalmanFitterHandle', InDetFKF())
+    kwargs.setdefault('DynamicNoiseAdjustorHandle', InDetDNAdjustor())
+    kwargs.setdefault('BrempointAnalyserHandle', InDetDNASeparator())
+    kwargs.setdefault('InternalDAFHandle', KalmanInternalDAF())
+
+    InDetKalmanTrackFitterBase = acc.popToolsAndMerge(InDetKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetKalmanTrackFitterBase)
+    return acc
+
+def ReferenceKalmanFitterCfg(flags, name='ReferenceKalmanFitter',**kwargs) :
+    acc = ComponentAccumulator()
+    
+    kwargs.setdefault('ForwardKalmanFitterHandle', InDetFKFRef())
+    kwargs.setdefault('InternalDAFHandle', KalmanInternalDAFRef())
+
+    InDetKalmanTrackFitterBase = acc.popToolsAndMerge(InDetKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetKalmanTrackFitterBase)
+    return acc
+
+def DistributedKalmanFilterCfg(flags, name="DistributedKalmanFilter", **kwargs) :
+    acc = ComponentAccumulator()
+
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+
+    if 'ExtrapolatorTool' not in kwargs :
+        from  InDetConfig.InDetRecToolConfig import InDetExtrapolatorCfg
+        tmpAcc =  InDetExtrapolatorCfg(flags)
+        InDetExtrapolator = tmpAcc.getPrimary()
+        acc.merge(tmpAcc)
+        kwargs.setdefault('ExtrapolatorTool', InDetExtrapolator)
+
+    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)
+    acc.setPrivateTools(DistributedKalmanFilter)
+    return acc
+
+def InDetGlobalChi2FitterCfg(flags, name='InDetGlobalChi2Fitter', **kwargs) :
+    acc = ComponentAccumulator()
+
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+    # PHF cut during fit iterations to save CPU time
+    kwargs.setdefault('MinPHFCut', flags.InDet.Tracking.minTRTPrecFrac)
+
+    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:
+        kwargs.setdefault('StraightLine', True)
+        kwargs.setdefault('OutlierCut', 5)
+        kwargs.setdefault('RecalibrateTRT', False)
+        kwargs.setdefault('TRTExtensionCuts', False)
+        kwargs.setdefault('TrackChi2PerNDFCut', 20)
+
+    if flags.InDet.doRefit or use_broad_cluster_any is True:
+        kwargs.setdefault('RecalibrateSilicon', False)
+
+    if flags.InDet.doRefit:
+        kwargs.setdefault('BroadRotCreatorTool', None)
+        kwargs.setdefault('ReintegrateOutliers', False)
+        kwargs.setdefault('RecalibrateTRT', False)
+
+    if flags.InDet.doRobustReco:
+        kwargs.setdefault('OutlierCut', 10.0)
+        kwargs.setdefault('TrackChi2PerNDFCut', 20)
+
+    if flags.InDet.doRobustReco or flags.Beam.Type == 'cosmics':
+        kwargs.setdefault('MaxOutliers', 99)
+
+    if flags.Beam.Type == 'cosmics' or flags.InDet.doBeamHalo:
+        kwargs.setdefault('Acceleration', False)
+
+    if flags.InDet.materialInteractions and not flags.BField.solenoidOn:
+        kwargs.setdefault('Momentum', 1000.*Units.MeV)
+
+    InDetGlobalChi2FitterBase = acc.popToolsAndMerge(InDetGlobalChi2FitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetGlobalChi2FitterBase)
+    return acc
+
+def InDetGsfMaterialUpdatorCfg(name='InDetGsfMaterialUpdator', **kwargs) :
+    the_name = makeName( name, kwargs)
+    acc = ComponentAccumulator()
+
+    if 'MaximumNumberOfComponents' not in kwargs :
+        kwargs.setdefault('MaximumNumberOfComponents', 12)
+
+    GsfMaterialMixtureConvolution = CompFactory.Trk.GsfMaterialMixtureConvolution (name = the_name, **kwargs)
+    acc.setPrivateTools(GsfMaterialMixtureConvolution)
+    return acc
+
+def InDetGsfExtrapolatorCfg(flags, name='InDetGsfExtrapolator', **kwargs) :
+    the_name = makeName(name,kwargs)
+    acc = ComponentAccumulator()
+
+    if 'Propagators' not in kwargs :
+        from  InDetConfig.InDetRecToolConfig import InDetPropagatorCfg
+        InDetPropagator = acc.popToolsAndMerge(InDetPropagatorCfg(flags))
+        acc.addPublicTool(InDetPropagator)
+        kwargs.setdefault('Propagators', [ InDetPropagator ])
+
+    if 'Navigator' not in kwargs :
+        from InDetConfig.InDetRecToolConfig  import InDetNavigatorCfg
+        InDetNavigator = acc.popToolsAndMerge(InDetNavigatorCfg(flags))
+        acc.addPublicTool(InDetNavigator)
+        kwargs.setdefault('Navigator', InDetNavigator)
+
+    if 'GsfMaterialConvolution' not in kwargs :
+        InDetGsfMaterialUpdato = acc.popToolsAndMerge(InDetGsfMaterialUpdatorCfg())
+        acc.addPublicTool(InDetGsfMaterialUpdato)
+        kwargs.setdefault('GsfMaterialConvolution', InDetGsfMaterialUpdato)
+
+    kwargs.setdefault('SearchLevelClosestParameters', 10)
+    kwargs.setdefault('StickyConfiguration', True)
+    kwargs.setdefault('SurfaceBasedMaterialEffects', False)
+
+    GsfExtrapolator = CompFactory.Trk.GsfExtrapolator(name = the_name, **kwargs)
+    acc.setPrivateTools(GsfExtrapolator)
+    return acc
+
+def GaussianSumFitterCfg(flags, name='GaussianSumFitter', **kwargs) :
+    acc = ComponentAccumulator()
+
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+
+    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)
+    kwargs.setdefault('MakePerigee', True)
+    kwargs.setdefault('RefitOnMeasurementBase', True)
+    kwargs.setdefault('DoHitSorting', True)
+
+    GaussianSumFitter = CompFactory.Trk.GaussianSumFitter(name = name, **kwargs)
+    acc.setPrivateTools(GaussianSumFitter)
+    return acc
+
+def InDetTrackFitterCfg(flags, name='InDetTrackFitter', **kwargs) :
+    return {
+            'KalmanFitter'            : KalmanFitterCfg,
+            'KalmanDNAFitter'         : KalmanDNAFitterCfg,
+            'ReferenceKalmanFitter'   : ReferenceKalmanFitterCfg,
+            'DistributedKalmanFilter' : DistributedKalmanFilterCfg,
+            'GlobalChi2Fitter'        : InDetGlobalChi2FitterCfg,
+            'GaussianSumFilter'       : GaussianSumFitterCfg
+    }[flags.InDet.trackFitterType](flags, name=name, **kwargs)
+
+def InDetGlobalChi2FitterBaseCfg(flags, name='GlobalChi2FitterBase', **kwargs) :
     from InDetConfig.InDetRecToolConfig  import InDetNavigatorCfg, InDetPropagatorCfg, InDetExtrapolatorCfg
     acc = ComponentAccumulator()
 
+    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
+    acc.merge(TrackingGeometrySvcCfg(flags))
+    AtlasTrackingGeometrySvc = acc.getService('AtlasTrackingGeometrySvc')
+
     tmpAcc =  InDetExtrapolatorCfg(flags)
     InDetExtrapolator = tmpAcc.getPrimary()
     acc.merge(tmpAcc)
@@ -560,35 +901,140 @@ def GlobalChi2FitterCfg(flags, name ='InDetTrackFitterTRT', **kwargs):
     InDetPropagator = acc.popToolsAndMerge(InDetPropagatorCfg(flags))
     acc.addPublicTool(InDetPropagator)
 
-    InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags))
-    acc.addPublicTool(InDetRefitRotCreator)
-
     InDetUpdator = InDetUpdatorCfg(flags)
     acc.addPublicTool(InDetUpdator)
 
     InDetMultipleScatteringUpdator = acc.popToolsAndMerge(InDetMultipleScatteringUpdatorCfg())
     acc.addPublicTool(InDetMultipleScatteringUpdator)
 
-    if flags.InDet.doRobustReco or flags.Beam.Type == "cosmics":
-        kwargs.setdefault("MaxOutliers", 99)
-
-    if flags.InDet.materialInteractions and not flags.BField.solenoidOn:
-        from AthenaCommon.SystemOfUnits import MeV
-        kwargs.setdefault("Momentum", 1000.*MeV)
+    from InDetConfig.InDetRecToolConfig  import InDetMaterialEffectsUpdatorCfg
+    InDetMaterialEffectsUpdator = acc.popToolsAndMerge(InDetMaterialEffectsUpdatorCfg(flags))
+    acc.addPublicTool(InDetMaterialEffectsUpdator)
 
     kwargs.setdefault("ExtrapolationTool", InDetExtrapolator)
     kwargs.setdefault("NavigatorTool", InDetNavigator)
     kwargs.setdefault("PropagatorTool", InDetPropagator)
-    kwargs.setdefault("RotCreatorTool", InDetRefitRotCreator)
-    kwargs.setdefault("MeasurementUpdateTool", InDetUpdator)
     kwargs.setdefault("MultipleScatteringTool", InDetMultipleScatteringUpdator)
+    kwargs.setdefault("MeasurementUpdateTool", InDetUpdator)
+    kwargs.setdefault("TrackingGeometrySvc", AtlasTrackingGeometrySvc)
+    kwargs.setdefault("MaterialUpdateTool", InDetMaterialEffectsUpdator)
     kwargs.setdefault("StraightLine", not flags.BField.solenoidOn)
-    kwargs.setdefault("ReintegrateOutliers", False)
+    kwargs.setdefault("OutlierCut", 4)
+    kwargs.setdefault("SignedDriftRadius", True)
+    kwargs.setdefault("ReintegrateOutliers", True)
+    kwargs.setdefault("RecalibrateSilicon", True)
+    kwargs.setdefault("RecalibrateTRT", True)
+    kwargs.setdefault("TRTTubeHitCut", 1.75)
+    kwargs.setdefault("MaxIterations", 40)
+    kwargs.setdefault("Acceleration", True)
+    kwargs.setdefault("RecalculateDerivatives", flags.InDet.doMinBias or flags.Beam.Type == 'cosmics' or flags.InDet.doBeamHalo)
+    kwargs.setdefault("TRTExtensionCuts", True)
+    kwargs.setdefault("TrackChi2PerNDFCut", 7)
+
+    GlobalChi2Fitter = CompFactory.Trk.GlobalChi2Fitter(name=name, **kwargs)
+    acc.setPrivateTools(GlobalChi2Fitter)
+    return acc
+
+def InDetGlobalChi2FitterTRTCfg(flags, name='InDetGlobalChi2FitterTRT', **kwargs) :
+    acc = ComponentAccumulator()
+    '''
+    Global Chi2 Fitter for TRT segments with different settings
+    '''
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+
+    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", '')
+    kwargs.setdefault("TrackingGeometrySvc", '')
+    kwargs.setdefault("SignedDriftRadius", True)
+    kwargs.setdefault("RecalibrateSilicon", False)
+    kwargs.setdefault("RecalibrateTRT", False)
+    kwargs.setdefault("TRTTubeHitCut", 2.5)
     kwargs.setdefault("MaxIterations", 10)
+    kwargs.setdefault("Acceleration", False)
     kwargs.setdefault("RecalculateDerivatives", False)
+    kwargs.setdefault("TRTExtensionCuts", True)
     kwargs.setdefault("TrackChi2PerNDFCut", 999999)
+    kwargs.setdefault("Momentum", 1000.*Units.MeV   if flags.InDet.materialInteractions and not flags.BField.solenoidOn else  0)
+    kwargs.setdefault("OutlierCut", 5)
+    kwargs.setdefault("MaxOutliers", 99 if flags.InDet.doRobustReco or flags.Beam.Type == 'cosmics' else 10)
+    kwargs.setdefault("ReintegrateOutliers", False if flags.InDet.doRefit else False)
 
-    acc.setPrivateTools(CompFactory.Trk.GlobalChi2Fitter(name = name, **kwargs))
+    InDetGlobalChi2FitterBase = acc.popToolsAndMerge(InDetGlobalChi2FitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetGlobalChi2FitterBase)
+    return acc
+
+def InDetTrackFitterTRTCfg(flags, name='InDetTrackFitterTRT', **kwargs) :
+    acc = ComponentAccumulator()
+
+    if flags.InDet.trackFitterType != 'GlobalChi2Fitter' :
+        InDetTrackFitter = acc.popToolsAndMerge(InDetTrackFitterCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetTrackFitter)
+    else :
+        InDetGlobalChi2FitterTRT = acc.popToolsAndMerge(InDetGlobalChi2FitterTRTCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetGlobalChi2FitterTRT)
+
+    return acc
+
+def InDetGlobalChi2FitterLowPtCfg(flags, name='InDetGlobalChi2FitterLowPt', **kwargs) :
+    acc = ComponentAccumulator()
+    # @TODO TrackingGeometrySvc was not set but is set now
+    #       RotCreatorTool and BroadRotCreatorTool not set
+    pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
+
+    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)
+    kwargs.setdefault('Acceleration', False)
+    kwargs.setdefault('RecalculateDerivatives', True)
+    kwargs.setdefault('TrackChi2PerNDFCut', 10)
+
+    InDetGlobalChi2FitterBase = acc.popToolsAndMerge(InDetGlobalChi2FitterBaseCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetGlobalChi2FitterBase)
+    return acc
+
+def InDetTrackFitterLowPt(flags, name='InDetTrackFitter', **kwargs) :
+    acc = ComponentAccumulator()
+
+    if flags.InDet.trackFitterType != 'GlobalChi2Fitter' :
+        InDetTrackFitter = acc.popToolsAndMerge(InDetTrackFitterCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetTrackFitter)
+    else :
+        InDetGlobalChi2FitterLowPt = acc.popToolsAndMerge(InDetGlobalChi2FitterLowPtCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetGlobalChi2FitterLowPt)
+    return acc
+
+def InDetGlobalChi2FitterBTCfg(flags, name='InDetGlobalChi2FitterBT', **kwargs):
+    acc = ComponentAccumulator()
+    '''
+    Global Chi2 Fitter for backtracking
+    '''
+    kwargs.setdefault("MinPHFCut", 0.)
+
+    InDetGlobalChi2Fitter = acc.popToolsAndMerge(InDetGlobalChi2FitterCfg(flags, name=name, **kwargs))
+    acc.setPrivateTools(InDetGlobalChi2Fitter)
+    return acc
+
+def InDetTrackFitterBTCfg(flags, name='InDetTrackFitterBT', **kwargs) :
+    acc = ComponentAccumulator()
+
+    if flags.InDet.trackFitterType != 'GlobalChi2Fitter' :
+        InDetTrackFitter = acc.popToolsAndMerge(InDetTrackFitterCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetTrackFitter)
+    else :
+        InDetGlobalChi2Fitter = acc.popToolsAndMerge(InDetGlobalChi2FitterBTCfg(flags, name, **kwargs))
+        acc.setPrivateTools(InDetGlobalChi2Fitter)
     return acc
 
 def InDetTrackSummaryToolTRTTracksCfg(flags, name='InDetTrackSummaryToolTRTTracks',**kwargs):
@@ -613,35 +1059,6 @@ def InDetKOL(name = 'InDetKOL', **kwargs):
     kwargs.setdefault("StateChi2PerNDFCut", 12.5)
     PublicKOL = CompFactory.Trk.KalmanOutlierLogic
     return PublicKOL(name = name, **kwargs)
-
-def InDetKalmanFitterCfg(flags, name ='InDetKalmanFitter', **kwargs):
-    acc = ComponentAccumulator()
-    from InDetConfig.InDetRecToolConfig import InDetExtrapolatorCfg
-
-    tmpAcc =  InDetExtrapolatorCfg(flags)
-    InDetExtrapolator = tmpAcc.getPrimary()
-    acc.merge(tmpAcc)
-
-    InDetUpdator = InDetUpdatorCfg(flags)
-    acc.addPublicTool(InDetUpdator)
-
-    InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags))
-    acc.addPublicTool(InDetRotCreator)
-
-    kwargs.setdefault("ExtrapolatorHandle", InDetExtrapolator)
-    kwargs.setdefault("RIO_OnTrackCreatorHandle", InDetRotCreator)
-    kwargs.setdefault("MeasurementUpdatorHandle", InDetUpdator)
-    kwargs.setdefault("ForwardKalmanFitterHandle", InDetFKF())
-    kwargs.setdefault("KalmanSmootherHandle", InDetBKS())
-    kwargs.setdefault("KalmanOutlierLogicHandle", InDetKOL())
-    kwargs.setdefault("DynamicNoiseAdjustorHandle", None)
-    kwargs.setdefault("BrempointAnalyserHandle", None)
-    kwargs.setdefault("AlignableSurfaceProviderHandle", None)
-    kwargs.setdefault("RecalibratorHandle", None)
-    kwargs.setdefault("InternalDAFHandle", None)
-
-    acc.setPrivateTools(CompFactory.Trk.KalmanFitter(name = name, **kwargs))
-    return acc
 #############################################################################################
 #TRTSegmentFinder
 #############################################################################################
@@ -823,7 +1240,7 @@ def TRT_DetElementsRoadCondAlgCfg(**kwargs):
 def InDetRotCreatorDigitalCfg(flags, name='InDetRotCreatorDigital', **kwargs) :
     acc = ComponentAccumulator()
     if 'ToolPixelCluster' not in kwargs :
-        pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','RenounceInputHandles','nameSuffix'])
+        pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
 
         ToolPixelCluster = InDetPixelClusterOnTrackToolDigitalCfg(flags, **pix_cluster_on_track_args)
         kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
@@ -925,11 +1342,16 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name='InDetSiComTrackFinder', **kwar
     InDetRotCreatorDigital = acc.popToolsAndMerge(InDetRotCreatorDigitalCfg(flags))
     acc.addPublicTool(InDetRotCreatorDigital)
 
+    from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
+    InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
+    acc.addPublicTool(InDetBoundaryCheckTool)
+
     kwargs.setdefault("PropagatorTool",  InDetPatternPropagator)
     kwargs.setdefault("UpdatorTool", InDetPatternUpdator)
+    kwargs.setdefault("BoundaryCheckTool", InDetBoundaryCheckTool)
     kwargs.setdefault("RIOonTrackTool", InDetRotCreatorDigital)
     kwargs.setdefault("usePixel", flags.Detector.RecoPixel) #DetFlags.haveRIO.pixel_on()
-    kwargs.setdefault("useSCT", flags.Detector.RecoSCT) #DetFlags.haveRIO.SCT_on()
+    kwargs.setdefault("useSCT", False)
     kwargs.setdefault("PixelClusterContainer", 'PixelClusters') #InDetKeys.PixelClusters()
     kwargs.setdefault("SCT_ClusterContainer", 'SCT_Clusters') # InDetKeys.SCT_Clusters()
 
@@ -1016,7 +1438,7 @@ def InDetPixelClusterOnTrackToolDBMCfg(flags, name='InDetPixelClusterOnTrackTool
 def InDetRotCreatorDBMCfg(flags, name='InDetRotCreatorDBM', **kwargs) :
     acc = ComponentAccumulator()
     if 'ToolPixelCluster' not in kwargs :
-        pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','RenounceInputHandles','nameSuffix'])
+        pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
 
         if flags.InDet.loadRotCreator and flags.Detector.RecoPixel:
             ToolPixelCluster = InDetPixelClusterOnTrackToolDBMCfg(flags, pix_cluster_on_track_args)