diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS.py
index 1e03201d749994b588da9f7f84295c7e58d82221..557c8a2777e3dfc98fb7ebb1d6d4d05a1d8f45c0 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYS.py
@@ -20,89 +20,27 @@ def PHYSKernelCfg(ConfigFlags, name='PHYSKernel', **kwargs):
     from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
     acc.merge(PhysCommonAugmentationsCfg(ConfigFlags, TriggerListsHelper = kwargs['TriggerListsHelper']))
 
-    # Thinning tools...
-    from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg, MuonTrackParticleThinningCfg, TauTrackParticleThinningCfg, DiTauTrackParticleThinningCfg, TauJetLepRMParticleThinningCfg
-    from DerivationFrameworkTools.DerivationFrameworkToolsConfig import GenericObjectThinningCfg
-
-    # Inner detector group recommendations for indet tracks in analysis
-    # https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/DaodRecommendations
-    PHYS_thinning_expression = "InDetTrackParticles.DFCommonTightPrimary && abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta) < 3.0*mm && InDetTrackParticles.pt > 10*GeV"
-    PHYSTrackParticleThinningTool = acc.getPrimaryAndMerge(TrackParticleThinningCfg(
-        ConfigFlags,
-        name                    = "PHYSTrackParticleThinningTool",
-        StreamName              = kwargs['StreamName'], 
-        SelectionString         = PHYS_thinning_expression,
-        InDetTrackParticlesKey  = "InDetTrackParticles"))
-    
-    # Include inner detector tracks associated with muons
-    PHYSMuonTPThinningTool = acc.getPrimaryAndMerge(MuonTrackParticleThinningCfg(
-        ConfigFlags,
-        name                    = "PHYSMuonTPThinningTool",
-        StreamName              = kwargs['StreamName'],
-        MuonKey                 = "Muons",
-        InDetTrackParticlesKey  = "InDetTrackParticles"))
-    
-    # disable tau thinning for now
-    tau_thinning_expression = "(TauJets.ptFinalCalib >= 0)"
-    PHYSTauJetsThinningTool = acc.getPrimaryAndMerge(GenericObjectThinningCfg(ConfigFlags,
-        name            = "PHYSTauJetThinningTool",
-        StreamName      = kwargs['StreamName'],
-        ContainerName   = "TauJets",
-        SelectionString = tau_thinning_expression))
-    
-    # Only keep tau tracks (and associated ID tracks) classified as charged tracks
-    PHYSTauTPThinningTool = acc.getPrimaryAndMerge(TauTrackParticleThinningCfg(
-        ConfigFlags,
-        name                   = "PHYSTauTPThinningTool",
-        StreamName             = kwargs['StreamName'],
-        TauKey                 = "TauJets",
-        InDetTrackParticlesKey = "InDetTrackParticles",
-        DoTauTracksThinning    = True,
-        TauTracksKey           = "TauTracks"))
-    
-    tau_murm_thinning_expression = tau_thinning_expression.replace('TauJets', 'TauJets_MuonRM')
-    PHYSTauJetMuonRMParticleThinningTool = acc.getPrimaryAndMerge(TauJetLepRMParticleThinningCfg(
-        ConfigFlags,
-        name                   = "PHYSTauJets_MuonRMThinningTool",
-        StreamName             = kwargs['StreamName'],
-        originalTauKey         = "TauJets",
-        LepRMTauKey            = "TauJets_MuonRM",
-        InDetTrackParticlesKey = "InDetTrackParticles",
-        TauTracksKey           = "TauTracks_MuonRM",
-        SelectionString        = tau_murm_thinning_expression))
-
-    # ID tracks associated with high-pt di-tau
-    PHYSDiTauTPThinningTool = acc.getPrimaryAndMerge(DiTauTrackParticleThinningCfg(
-        ConfigFlags,
-        name                    = "PHYSDiTauTPThinningTool",
-        StreamName              = kwargs['StreamName'],
-        DiTauKey                = "DiTauJets",
-        InDetTrackParticlesKey  = "InDetTrackParticles"))
-
-    ## Low-pt di-tau thinning
-    PHYSDiTauLowPtThinningTool = acc.getPrimaryAndMerge(GenericObjectThinningCfg(ConfigFlags,
-                                                                                 name            = "PHYSDiTauLowPtThinningTool",
-                                                                                 StreamName      = kwargs['StreamName'],
-                                                                                 ContainerName   = "DiTauJetsLowPt",
-                                                                                 SelectionString = "DiTauJetsLowPt.nSubjets > 1"))
-    
-    # ID tracks associated with low-pt ditau
-    PHYSDiTauLowPtTPThinningTool = acc.getPrimaryAndMerge(DiTauTrackParticleThinningCfg(ConfigFlags,
-                                                                                        name                    = "PHYSDiTauLowPtTPThinningTool",
-                                                                                        StreamName              = kwargs['StreamName'],
-                                                                                        DiTauKey                = "DiTauJetsLowPt",
-                                                                                        InDetTrackParticlesKey  = "InDetTrackParticles",
-                                                                                        SelectionString         = "DiTauJetsLowPt.nSubjets > 1"))
-
-    # Finally the kernel itself
-    thinningTools = [PHYSTrackParticleThinningTool,
-                     PHYSMuonTPThinningTool,
-                     PHYSTauJetsThinningTool,
-                     PHYSTauTPThinningTool,
-                     PHYSTauJetMuonRMParticleThinningTool,
-                     PHYSDiTauTPThinningTool,
-                     PHYSDiTauLowPtThinningTool,
-                     PHYSDiTauLowPtTPThinningTool ]
+    # Thinning tools
+    # These are set up in PhysCommonThinningConfig. Only thing needed here the list of tools to schedule 
+    thinningToolsArgs = {
+        'TrackParticleThinningToolName'       : "PHYSTrackParticleThinningTool",
+        'MuonTPThinningToolName'              : "PHYSMuonTPThinningTool",
+        'TauJetThinningToolName'              : "PHYSTauJetThinningTool",
+        'TauTPThinningToolName'               : "PHYSTauTPThinningTool",
+        'TauJets_MuonRMThinningToolName'      : "PHYSTauJets_MuonRMThinningTool",
+        'DiTauTPThinningToolName'             : "PHYSDiTauTPThinningTool",
+        'DiTauLowPtThinningToolName'          : "PHYSDiTauLowPtThinningTool",
+        'DiTauLowPtTPThinningToolName'        : "PHYSDiTauLowPtTPThinningTool",
+    } 
+    # Configure the thinning tools
+    from DerivationFrameworkPhys.PhysCommonThinningConfig import PhysCommonThinningCfg
+    acc.merge(PhysCommonThinningCfg(ConfigFlags, StreamName = kwargs['StreamName'], **thinningToolsArgs))
+    # Get them from the CA so they can be added to the kernel
+    thinningTools = []
+    for key in thinningToolsArgs:
+        thinningTools.append(acc.getPublicTool(thinningToolsArgs[key]))
+
+    # The kernel algorithm itself
     DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
     acc.addEventAlgo(DerivationKernel(name, ThinningTools = thinningTools))       
     return acc
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
index a387250ab2d53e62984ffea974950ee5a5014f4b..c857420d70caed0b7b031ec10dc0374ed3c20ea9 100755
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
@@ -16,143 +16,43 @@ def PHYSLITEKernelCfg(ConfigFlags, name='PHYSLITEKernel', **kwargs):
     """Configure the derivation framework driving algorithm (kernel) for PHYSLITE"""
     acc = ComponentAccumulator()
 
-    # This block does the common physics augmentation and thinning, which isn't needed (or possible) for PHYS->PHYSLITE
+    # This block does the common physics augmentation  which isn't needed (or possible) for PHYS->PHYSLITE
     # Ensure block only runs for AOD input
-    thinningTools = []
     if 'StreamAOD' in ConfigFlags.Input.ProcessingTags:
-
         # Common augmentations
         from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
         acc.merge(PhysCommonAugmentationsCfg(ConfigFlags, TriggerListsHelper = kwargs['TriggerListsHelper']))
 
-        # Thinning tools...
-        from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg, MuonTrackParticleThinningCfg, TauTrackParticleThinningCfg, DiTauTrackParticleThinningCfg, TauJetLepRMParticleThinningCfg
-        from DerivationFrameworkTools.DerivationFrameworkToolsConfig import GenericObjectThinningCfg
-        from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import CaloClusterThinningCfg
-
-        # Inner detector group recommendations for indet tracks in analysis
-        # https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/DaodRecommendations
-        PHYSLITE_thinning_expression = "InDetTrackParticles.DFCommonTightPrimary && abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta) < 3.0*mm && InDetTrackParticles.pt > 10*GeV"
-        PHYSLITETrackParticleThinningTool = acc.getPrimaryAndMerge(TrackParticleThinningCfg(
-            ConfigFlags,
-            name                    = "PHYSLITETrackParticleThinningTool",
-            StreamName              = kwargs['StreamName'], 
-            SelectionString         = PHYSLITE_thinning_expression,
-            InDetTrackParticlesKey  = "InDetTrackParticles"))
-        
-        # Include inner detector tracks associated with muons
-        PHYSLITEMuonTPThinningTool = acc.getPrimaryAndMerge(MuonTrackParticleThinningCfg(
-            ConfigFlags,
-            name                    = "PHYSLITEMuonTPThinningTool",
-            StreamName              = kwargs['StreamName'],
-            MuonKey                 = "Muons",
-            InDetTrackParticlesKey  = "InDetTrackParticles"))
-        
-        # disable tau thinning for now
-        tau_thinning_expression = "(TauJets.ptFinalCalib >= 0)"
-        PHYSLITETauJetsThinningTool = acc.getPrimaryAndMerge(GenericObjectThinningCfg(ConfigFlags,
-            name            = "PHYSLITETauJetThinningTool",
-            StreamName      = kwargs['StreamName'],
-            ContainerName   = "TauJets",
-            SelectionString = tau_thinning_expression))
-        
-        # Only keep tau tracks (and associated ID tracks) classified as charged tracks
-        PHYSLITETauTPThinningTool = acc.getPrimaryAndMerge(TauTrackParticleThinningCfg(
-            ConfigFlags,
-            name                   = "PHYSLITETauTPThinningTool",
-            StreamName             = kwargs['StreamName'],
-            TauKey                 = "TauJets",
-            InDetTrackParticlesKey = "InDetTrackParticles",
-            DoTauTracksThinning    = True,
-            TauTracksKey           = "TauTracks"))
-        
-        tau_murm_thinning_expression = tau_thinning_expression.replace('TauJets', 'TauJets_MuonRM')
-        PHYSLITETauJetMuonRMParticleThinningTool = acc.getPrimaryAndMerge(TauJetLepRMParticleThinningCfg(
-            ConfigFlags,
-            name                   = "PHYSLITETauJets_MuonRMThinningTool",
-            StreamName             = kwargs['StreamName'],
-            originalTauKey         = "TauJets",
-            LepRMTauKey            = "TauJets_MuonRM",
-            InDetTrackParticlesKey = "InDetTrackParticles",
-            TauTracksKey           = "TauTracks_MuonRM",
-            SelectionString        = tau_murm_thinning_expression))
-
-        # ID tracks associated with high-pt di-tau
-        PHYSLITEDiTauTPThinningTool = acc.getPrimaryAndMerge(DiTauTrackParticleThinningCfg(
-            ConfigFlags,
-            name                    = "PHYSLITEDiTauTPThinningTool",
-            StreamName              = kwargs['StreamName'],
-            DiTauKey                = "DiTauJets",
-            InDetTrackParticlesKey  = "InDetTrackParticles"))
-
-        ## Low-pt di-tau thinning
-        PHYSLITEDiTauLowPtThinningTool = acc.getPrimaryAndMerge(GenericObjectThinningCfg(ConfigFlags,
-                                                                                     name            = "PHYSLITEDiTauLowPtThinningTool",
-                                                                                     StreamName      = kwargs['StreamName'],
-                                                                                     ContainerName   = "DiTauJetsLowPt",
-                                                                                     SelectionString = "DiTauJetsLowPt.nSubjets > 1"))
-        
-        # ID tracks associated with low-pt ditau
-        PHYSLITEDiTauLowPtTPThinningTool = acc.getPrimaryAndMerge(DiTauTrackParticleThinningCfg(ConfigFlags,
-                                                                                            name                    = "PHYSLITEDiTauLowPtTPThinningTool",
-                                                                                            StreamName              = kwargs['StreamName'],
-                                                                                            DiTauKey                = "DiTauJetsLowPt",
-                                                                                            InDetTrackParticlesKey  = "InDetTrackParticles",
-                                                                                            SelectionString         = "DiTauJetsLowPt.nSubjets > 1"))
-
-        # keep calo clusters around electrons
-        PHYSLITEElectronCaloClusterThinningTool = acc.getPrimaryAndMerge(CaloClusterThinningCfg(
-            ConfigFlags,
-            name="PHYSLITEElectronCaloClusterThinningTool",
-            StreamName=kwargs['StreamName'],
-            SGKey="AnalysisElectrons",
-            CaloClCollectionSGKey="egammaClusters",
-            ConeSize=-1.0))
-
-        # keep calo clusters around photons
-        PHYSLITEPhotonCaloClusterThinningTool = acc.getPrimaryAndMerge(CaloClusterThinningCfg(
-            ConfigFlags,
-            name="PHYSLITEPhotonCaloClusterThinningTool",
-            StreamName=kwargs['StreamName'],
-            SGKey="AnalysisPhotons",
-            CaloClCollectionSGKey="egammaClusters",
-            ConeSize=-1.0))
-
-        # GSF tracks associated to electrons
-        PHYSLITEElectronGSFTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
-            name = 'PHYSLITEElectronGSFTPThinningTool',
-            StreamName = kwargs['StreamName'],
-            SGKey = 'AnalysisElectrons',
-            GSFTrackParticlesKey = 'GSFTrackParticles',
-            InDetTrackParticlesKey = '',
-            BestMatchOnly = True)
-        acc.addPublicTool(PHYSLITEElectronGSFTPThinningTool)
-
-        # GSF tracks associated to photons
-        PHYSLITEPhotonGSFTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
-            name = 'PHYSLITEPhotonGSFTPThinningTool',
-            StreamName = kwargs['StreamName'],
-            SGKey = 'AnalysisPhotons',
-            GSFTrackParticlesKey = 'GSFTrackParticles',
-            InDetTrackParticlesKey = '',
-            BestMatchOnly = True)
-        acc.addPublicTool(PHYSLITEPhotonGSFTPThinningTool)
-
-        # Collect the thinning tools
-        thinningTools = [PHYSLITETrackParticleThinningTool,
-                         PHYSLITEMuonTPThinningTool,
-                         PHYSLITETauJetsThinningTool,
-                         PHYSLITETauTPThinningTool,
-                         PHYSLITETauJetMuonRMParticleThinningTool,
-                         PHYSLITEDiTauTPThinningTool,
-                         PHYSLITEDiTauLowPtThinningTool,
-                         PHYSLITEDiTauLowPtTPThinningTool,
-                         PHYSLITEElectronCaloClusterThinningTool,
-                         PHYSLITEPhotonCaloClusterThinningTool,
-                         PHYSLITEElectronGSFTPThinningTool,
-                         PHYSLITEPhotonGSFTPThinningTool ]
+    # Thinning tools
+    # These are set up in PhysCommonThinningConfig. Only thing needed here the list of tools to schedule 
+    # This differs depending on whether the input is AOD or PHYS
+    # These are needed whatever the input since they are not applied in PHYS
+    thinningToolsArgs = {
+        'ElectronCaloClusterThinningToolName' : "PHYSLITEElectronCaloClusterThinningTool",
+        'PhotonCaloClusterThinningToolName'   : "PHYSLITEPhotonCaloClusterThinningTool",     
+        'ElectronGSFTPThinningToolName'       : "PHYSLITEElectronGSFTPThinningTool",
+        'PhotonGSFTPThinningToolName'         : "PHYSLITEPhotonGSFTPThinningTool"
+    }
+    # whereas these are only needed if the input is AOD since they are applied already in PHYS
+    if 'StreamAOD' in ConfigFlags.Input.ProcessingTags:
+        thinningToolsArgs.update({
+            'TrackParticleThinningToolName'       : "PHYSLITETrackParticleThinningTool",
+            'MuonTPThinningToolName'              : "PHYSLITEMuonTPThinningTool",
+            'TauJetThinningToolName'              : "PHYSLITETauJetThinningTool",
+            'TauTPThinningToolName'               : "PHYSLITETauTPThinningTool",
+            'TauJets_MuonRMThinningToolName'      : "PHYSLITETauJets_MuonRMThinningTool",
+            'DiTauTPThinningToolName'             : "PHYSLITEDiTauTPThinningTool",
+            'DiTauLowPtThinningToolName'          : "PHYSLITEDiTauLowPtThinningTool",
+            'DiTauLowPtTPThinningToolName'        : "PHYSLITEDiTauLowPtTPThinningTool",
+        })
+    # Configure the thinning tools
+    from DerivationFrameworkPhys.PhysCommonThinningConfig import PhysCommonThinningCfg
+    acc.merge(PhysCommonThinningCfg(ConfigFlags, StreamName = kwargs['StreamName'], **thinningToolsArgs))
+    # Get them from the CA so they can be added to the kernel
+    thinningTools = []
+    for key in thinningToolsArgs:
+        thinningTools.append(acc.getPublicTool(thinningToolsArgs[key]))
 
-    # End of block that should only be executed for AOD input
 
     #==============================================================================
     # Analysis-level variables 
@@ -268,8 +168,11 @@ def PHYSLITECfg(ConfigFlags):
     from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
     PHYSLITETriggerListsHelper = TriggerListsHelper()
 
+    # Set the stream name - varies depending on whether the input is AOD or DAOD_PHYS
+    streamName = 'StreamDAOD_PHYSLITE' if 'StreamAOD' in ConfigFlags.Input.ProcessingTags else 'StreamD2AOD_PHYSLITE' 
+
     # Common augmentations
-    acc.merge(PHYSLITEKernelCfg(ConfigFlags, name="PHYSLITEKernel", StreamName = 'StreamDAOD_PHYSLITE', TriggerListsHelper = PHYSLITETriggerListsHelper))
+    acc.merge(PHYSLITEKernelCfg(ConfigFlags, name="PHYSLITEKernel", StreamName = streamName, TriggerListsHelper = PHYSLITETriggerListsHelper))
 
     # ============================
     # Define contents of the format
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonThinningConfig.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonThinningConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..429822d5f412462f0e132814626a0e4c23c3544d
--- /dev/null
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonThinningConfig.py
@@ -0,0 +1,141 @@
+# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+
+# PhysCommonThinningConfig
+# Contains the configuration for the thinning for PHYS(LITE)
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+def PhysCommonThinningCfg(ConfigFlags, StreamName = "StreamDAOD_PHYS", **kwargs):
+    """Configure the common augmentation"""
+    acc = ComponentAccumulator()
+
+    # Thinning tools...
+    from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg, MuonTrackParticleThinningCfg, TauTrackParticleThinningCfg, DiTauTrackParticleThinningCfg, TauJetLepRMParticleThinningCfg
+    from DerivationFrameworkTools.DerivationFrameworkToolsConfig import GenericObjectThinningCfg
+    from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import CaloClusterThinningCfg
+
+    # Inner detector group recommendations for indet tracks in analysis
+    # https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/DaodRecommendations
+    if "TrackParticleThinningToolName" in kwargs:
+        tp_thinning_expression = "InDetTrackParticles.DFCommonTightPrimary && abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta) < 3.0*mm && InDetTrackParticles.pt > 10*GeV"
+        acc.merge(TrackParticleThinningCfg(
+            ConfigFlags,
+            name                    = kwargs['TrackParticleThinningToolName'],
+            StreamName              = StreamName, 
+            SelectionString         = tp_thinning_expression,
+            InDetTrackParticlesKey  = "InDetTrackParticles"))
+        
+    # Include inner detector tracks associated with muons
+    if "MuonTPThinningToolName" in kwargs:
+        acc.merge(MuonTrackParticleThinningCfg(
+            ConfigFlags,
+            name                    = kwargs['MuonTPThinningToolName'],
+            StreamName              = StreamName,
+            MuonKey                 = "Muons",
+            InDetTrackParticlesKey  = "InDetTrackParticles"))
+    
+    # disable tau thinning for now
+    if "TauJetThinningToolName" in kwargs:
+        tau_thinning_expression = "(TauJets.ptFinalCalib >= 0)"
+        acc.merge(GenericObjectThinningCfg(ConfigFlags,
+            name            = kwargs['TauJetThinningToolName'],
+            StreamName      = StreamName,
+            ContainerName   = "TauJets",
+            SelectionString = tau_thinning_expression))
+    
+    # Only keep tau tracks (and associated ID tracks) classified as charged tracks
+    if "TauTPThinningToolName" in kwargs:
+        acc.merge(TauTrackParticleThinningCfg(
+            ConfigFlags,
+            name                   = kwargs['TauTPThinningToolName'],
+            StreamName             = StreamName,
+            TauKey                 = "TauJets",
+            InDetTrackParticlesKey = "InDetTrackParticles",
+            DoTauTracksThinning    = True,
+            TauTracksKey           = "TauTracks"))
+    
+    if "TauJets_MuonRMThinningToolName" in kwargs:
+        tau_murm_thinning_expression = tau_thinning_expression.replace('TauJets', 'TauJets_MuonRM')
+        acc.merge(TauJetLepRMParticleThinningCfg(
+            ConfigFlags,
+            name                   = kwargs["TauJets_MuonRMThinningToolName"],
+            StreamName             = StreamName,
+            originalTauKey         = "TauJets",
+            LepRMTauKey            = "TauJets_MuonRM",
+            InDetTrackParticlesKey = "InDetTrackParticles",
+            TauTracksKey           = "TauTracks_MuonRM",
+            SelectionString        = tau_murm_thinning_expression))
+ 
+    # ID tracks associated with high-pt di-tau
+    if "DiTauTPThinningToolName" in kwargs:
+        acc.merge(DiTauTrackParticleThinningCfg(
+            ConfigFlags,
+            name                    = kwargs['DiTauTPThinningToolName'],
+            StreamName              = StreamName,
+            DiTauKey                = "DiTauJets",
+            InDetTrackParticlesKey  = "InDetTrackParticles"))
+ 
+    ## Low-pt di-tau thinning
+    if "DiTauLowPtThinningToolName" in kwargs:
+        acc.merge(GenericObjectThinningCfg(
+            ConfigFlags,
+            name            = kwargs['DiTauLowPtThinningToolName'],
+            StreamName      = StreamName,
+            ContainerName   = "DiTauJetsLowPt",
+            SelectionString = "DiTauJetsLowPt.nSubjets > 1"))
+    
+    # ID tracks associated with low-pt ditau
+    if "DiTauLowPtTPThinningToolName" in kwargs:
+        acc.merge(DiTauTrackParticleThinningCfg(
+            ConfigFlags,
+            name                    = kwargs['DiTauLowPtTPThinningToolName'],
+            StreamName              = StreamName,
+            DiTauKey                = "DiTauJetsLowPt",
+            InDetTrackParticlesKey  = "InDetTrackParticles",
+            SelectionString         = "DiTauJetsLowPt.nSubjets > 1"))
+ 
+    # keep calo clusters around electrons
+    if "ElectronCaloClusterThinningToolName" in kwargs:
+        acc.merge(CaloClusterThinningCfg(
+            ConfigFlags,
+            name                  = kwargs['ElectronCaloClusterThinningToolName'],
+            StreamName            = StreamName,
+            SGKey                 = "AnalysisElectrons",
+            CaloClCollectionSGKey = "egammaClusters",
+            ConeSize              = -1.0))
+ 
+    # keep calo clusters around photons
+    if "PhotonCaloClusterThinningToolName" in kwargs:
+        acc.merge(CaloClusterThinningCfg(
+            ConfigFlags,
+            name                  = kwargs['PhotonCaloClusterThinningToolName'],
+            StreamName            = StreamName,
+            SGKey                 = "AnalysisPhotons",
+            CaloClCollectionSGKey = "egammaClusters",
+            ConeSize=-1.0))
+ 
+    # GSF tracks associated to electrons
+    if "ElectronGSFTPThinningToolName" in kwargs:
+        ElectronGSFTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
+            name                   = kwargs['ElectronGSFTPThinningToolName'],
+            StreamName             = StreamName,
+            SGKey                  = "AnalysisElectrons",
+            GSFTrackParticlesKey   = "GSFTrackParticles",
+            InDetTrackParticlesKey = "",
+            BestMatchOnly          = True)
+        acc.addPublicTool(ElectronGSFTPThinningTool)
+ 
+    # GSF tracks associated to photons
+    if "PhotonGSFTPThinningToolName" in kwargs:
+        PhotonGSFTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
+            name                   = kwargs['PhotonGSFTPThinningToolName'],
+            StreamName             = StreamName,
+            SGKey                  = "AnalysisPhotons",
+            GSFTrackParticlesKey   = "GSFTrackParticles",
+            InDetTrackParticlesKey = "",
+            BestMatchOnly          = True)
+        acc.addPublicTool(PhotonGSFTPThinningTool)
+
+    return acc
+