diff --git a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
index 26f6a5b5c483f06578c5e00fdfc3171a1792850b..9e51a95f7036244662b70554598ab0189b48298b 100644
--- a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
+++ b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
@@ -1460,33 +1460,51 @@ def getSolenoidalIntersector(name="SolenoidalIntersector", **kwargs) :
     from TrkExSolenoidalIntersector.TrkExSolenoidalIntersectorConf import Trk__SolenoidalIntersector
     return Trk__SolenoidalIntersector(the_name, **setDefaults(kwargs, SolenoidParameterizationKey = 'SolenoidParametrization'))
 
-def hasSplitProb(key) :
-    # @TODO find better solution,
-    import re
-    pat=re.compile('.*Dense.*')
-    from AthenaCommon.AppMgr import ToolSvc
-    for a_tool in ToolSvc.getChildren() :
-        if pat.match( a_tool.getFullName() ) != None :
-            print ('DEBUG split prob probabily set by %s' % a_tool.getFullName() )
-            return True
+def searchProb(prob_val) :
+    def iterateComp() :
+       from AthenaCommon.AppMgr import ToolSvc
+       from AthenaCommon.Configurable import ConfigurableAlgTool
+
+       for a_tool in ToolSvc.getChildren() :
+           yield a_tool
+       from AthenaCommon.AlgSequence import AlgSequence
+       topSequence = AlgSequence()
+       for an_alg in topSequence.getChildren() :
+           yield an_alg
+           for name,prop in an_alg.getProperties().items() :
+               if isinstance(prop,ConfigurableAlgTool) and not prop.isInToolSvc() :
+                   yield prop
+
+    for a_comp in iterateComp() :
+        for name,prop in a_comp.getProperties().items() :
+            if isinstance(prop ,str) and prop == prob_val :
+                return True
+    return False
 
+def hasSplitProb(key) :
+    # @TODO find better solution than searching through a huge number of properties
     from RecExConfig.AutoConfiguration import IsInInputFile
     if IsInInputFile('Trk::ClusterSplitProbabilityContainer',key) :
-        print ('DEBUG split prob  %s in inputfile ' % key )
         return True
 
-    print ('DEBUG split prob is not set.' )
+    if searchProb(key) :
+        return True
     return False
 
 def combinedClusterSplitProbName() :
-    # precisely mimics the configuration in InDetRec_jobOptions
-    # chaings in InDetRec_jobOptions to the ClusterSplitProbContainer also have to be implemented here
-    # @TODO find a better way to provide the final name of ClusterSplitProbContainer used for the combined InDetTrackParticles
-    ClusterSplitProbContainer=''
-    from AthenaCommon.BeamFlags import jobproperties
-    from InDetRecExample.InDetJobProperties import InDetFlags
+  # precisely mimics the configuration in InDetRec_jobOptions
+  # chaings in InDetRec_jobOptions to the ClusterSplitProbContainer also have to be implemented here
+  # To synchronise with InDetRec_jobOptions the logic can be extracted with
+  # grep "CombinedInDetClusterSplitProbContainer\|ClusterSplitProbContainer\|[[:space:]]\(el\|\)if\([[:space:]]\|(\)\|[[:space:]]else[[:space:]]*:\|ConfiguredNewTrackingCuts" 
+  #    InnerDetector/InDetExample/InDetRecExample/share/InDetRec_jobOptions.py
+  # @TODO find a better way to provide the final name of ClusterSplitProbContainer used for the combined InDetTrackParticles
+  from AthenaCommon.BeamFlags import jobproperties
+  from InDetRecExample.InDetJobProperties import InDetFlags
+  CombinedInDetClusterSplitProbContainer = ''
+  ClusterSplitProbContainer=''
+  if InDetFlags.Enabled():
+    from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
     if ('InDetNewTrackingCuts' not in dir()):
-      from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
       if InDetFlags.doDBMstandalone():
         InDetNewTrackingCuts      = ConfiguredNewTrackingCuts("DBM")
       elif InDetFlags.doVtxLumi():
@@ -1509,22 +1527,27 @@ def combinedClusterSplitProbName() :
         InDetNewTrackingCuts      = ConfiguredNewTrackingCuts("R3LargeD0")
       else:
         InDetNewTrackingCuts      = ConfiguredNewTrackingCuts("Offline")
-
     if InDetFlags.doTrackSegmentsPixel():
       if ('InDetNewTrackingCutsPixel' not in dir()):
         InDetNewTrackingCutsPixel = ConfiguredNewTrackingCuts("Pixel")
       ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsPixel.extension()
+      # @TODO CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doTrackSegmentsSCT():
       if ('InDetNewTrackingCutsSCT' not in dir()):
         InDetNewTrackingCutsSCT = ConfiguredNewTrackingCuts("SCT")
       ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsSCT.extension()
+      # @TODO CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doTRTPhaseCalculation() and not jobproperties.Beam.beamType()=="collisions" and InDetFlags.doNewTracking():
-      ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension()
-    if InDetFlags.doNewTracking() and ( not InDetFlags.doTRTPhaseCalculation() or jobproperties.Beam.beamType()=="collisions"):
-      ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension()
+        ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension()
+        CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
+    if InDetFlags.doNewTracking() and (not InDetFlags.doTRTPhaseCalculation() or jobproperties.Beam.beamType()=="collisions"):
+        ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension()
+        CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doBackTracking():
       ClusterSplitProbContainer = 'InDetTRT_SeededAmbiguityProcessorSplitProb'+InDetNewTrackingCuts.extension()
-    if (InDetFlags.doLargeD0() or InDetFlags.doR3LargeD0() or InDetFlags.doLowPtLargeD0() ) and  InDetFlags.doDVRetracking():
+      CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
+    ClusterSplitProbContainerLargeD0=''
+    if InDetFlags.doLargeD0() or InDetFlags.doR3LargeD0() or InDetFlags.doLowPtLargeD0():
       if ('InDetNewTrackingCutsLargeD0' not in dir()):
         if InDetFlags.doLowPtLargeD0():
           InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("LowPtLargeD0")
@@ -1532,40 +1555,52 @@ def combinedClusterSplitProbName() :
           InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("R3LargeD0")
         else:
           InDetNewTrackingCutsLargeD0 = ConfiguredNewTrackingCuts("LargeD0")
-      ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLargeD0.extension()
+      ClusterSplitProbContainerLargeD0 = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLargeD0.extension()
+      if not InDetFlags.storeSeparateLargeD0Container():
+        ClusterSplitProbContainer = ClusterSplitProbContainerLargeD0
+        CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainerLargeD0
     if InDetFlags.doLowPt():
       if ('InDetNewTrackingCutsLowPt' not in dir()):
         InDetNewTrackingCutsLowPt = ConfiguredNewTrackingCuts("LowPt")
       ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsLowPt.extension()
+      CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doVeryLowPt():
       if ('InDetNewTrackingCutsVeryLowPt' not in dir()):
         InDetNewTrackingCutsVeryLowPt = ConfiguredNewTrackingCuts("VeryLowPt")
       ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsVeryLowPt.extension()
+      CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
+    if InDetFlags.doTRTStandalone():
+      CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doForwardTracks() and InDetFlags.doSLHC():
       if InDetFlags.doSLHCVeryForward():
        if ('InDetNewTrackingCutsForwardTracks' not in dir()):
-         from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
          InDetNewTrackingCutsForwardTracks = ConfiguredNewTrackingCuts("VeryForwardSLHCTracks")
          ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension()
+         CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
       else:
        if ('InDetNewTrackingCutsForwardTracks' not in dir()):
-        from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
         InDetNewTrackingCutsForwardTracks = ConfiguredNewTrackingCuts("ForwardSLHCTracks")
         ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension()
+        CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
     if InDetFlags.doSLHCConversionFinding() and InDetFlags.doSLHC():
       if ('InDetNewTrackingCutsSLHCConversionFinding' not in dir()):
-        from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
         InDetNewTrackingCutsSLHCConversionFinding = ConfiguredNewTrackingCuts("SLHCConversionFinding")
-      ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsForwardTracks.extension()
-    if InDetFlags.doBeamGas() and jobproperties.Beam.beamType() == "singlebeam":
+      ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsSLHCConversionFinding.extension()
+      CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
+    if InDetFlags.doBeamGas():
       if ('InDetNewTrackingCutsBeamGas' not in dir()):
-        from InDetRecExample.ConfiguredNewTrackingCuts import ConfiguredNewTrackingCuts
         InDetNewTrackingCutsBeamGas = ConfiguredNewTrackingCuts("BeamGas")
       ClusterSplitProbContainer = 'InDetAmbiguityProcessorSplitProb'+InDetNewTrackingCutsBeamGas.extension()
-    if InDetFlags.doCosmics() and InDetFlags.doNewTracking() :
-      ClusterSplitProbContainer = '' # @TODO correct  ?
-
-    return ClusterSplitProbContainer if hasSplitProb(ClusterSplitProbContainer) else ''
+      if jobproperties.Beam.beamType() == "singlebeam":
+        CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer
+    if InDetFlags.doCosmics() and InDetFlags.doNewTracking() : # @TODO should also consider: and len(InputCombinedInDetTracks) > 1:
+      CombinedInDetClusterSplitProbContainer = ''  # @TODO really no split prob container ?
+    if InDetFlags.doNewTrackingPattern() or InDetFlags.doBeamHalo():
+      if InDetFlags.useExistingTracksAsInput():
+          pass # CombinedInDetClusterSplitProbContainer = ClusterSplitProbContainer # @TODO handle cluster splitting probability ?
+      if InDetFlags.doDBMstandalone():
+          CombinedInDetClusterSplitProbContainer=''
+  return CombinedInDetClusterSplitProbContainer if hasSplitProb(CombinedInDetClusterSplitProbContainer) else ''
 
 def pixelClusterSplitProbName() :
     ClusterSplitProbContainer=combinedClusterSplitProbName()