diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/EventAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/EventAlgorithmsTest_eljob.py
index 3613a13ea98a6cff01b461e90910a26884e48522..483a3be31291cb35c8220e31af626f533b141442 100755
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/EventAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/EventAlgorithmsTest_eljob.py
@@ -54,10 +54,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import makeEventAlgorithmsSequence
 algSeq = makeEventAlgorithmsSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/GeneratorAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/GeneratorAlgorithmsTest_eljob.py
index 254cd1baea8708348f8661960255af3b838c570d..9406cda8fdfe2eb90d169e4452e0eb3f7adb482e 100755
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/GeneratorAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/GeneratorAlgorithmsTest_eljob.py
@@ -53,10 +53,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import makeGeneratorAlgorithmsSequence
 algSeq = makeGeneratorAlgorithmsSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/OverlapAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/OverlapAlgorithmsTest_eljob.py
index eca0e2c2cbecbd6a5a728b67a3462677561bd601..125f781502503ec1dce7f57c7b9d85a13bfd6546 100755
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/OverlapAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/OverlapAlgorithmsTest_eljob.py
@@ -54,11 +54,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import makeOverlapSequence
 algSeq = makeOverlapSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq :
-    job.algsAdd( alg )
-    pass
-
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/share/EgammaAnalysisAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/share/EgammaAnalysisAlgorithmsTest_eljob.py
index 00417db13f4114e74573efd85ac0b9e0c20e0643..a3b97edcd10ec0abc8a48c320a0cfc0bd6d90577 100755
--- a/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/share/EgammaAnalysisAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/share/EgammaAnalysisAlgorithmsTest_eljob.py
@@ -62,10 +62,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from EgammaAnalysisAlgorithms.EgammaAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType, not useDNNeID)
-print algSeq # For debugging
-for alg in algSeq :
-    job.algsAdd( alg )
-    pass
+print (algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Find the right output directory:
 submitDir = options.submission_dir
diff --git a/PhysicsAnalysis/Algorithms/FTagAnalysisAlgorithms/share/FTagAnalysisAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/FTagAnalysisAlgorithms/share/FTagAnalysisAlgorithmsTest_eljob.py
index 8e5dc5c5ca34b08c194eeb4f4cc5be7346450c69..08246606b4d67d9043dff3737ea63fb01702bb05 100755
--- a/PhysicsAnalysis/Algorithms/FTagAnalysisAlgorithms/share/FTagAnalysisAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/FTagAnalysisAlgorithms/share/FTagAnalysisAlgorithmsTest_eljob.py
@@ -59,10 +59,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from FTagAnalysisAlgorithms.FTagAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print (algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Find the right output directory:
 submitDir = options.submission_dir
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_EMTopo_eljob.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_EMTopo_eljob.py
index 578869c2dc7838a568a247508d1176d8ed255c0d..ea1401ea043281267ff60814fe03d4698fb07eac 100755
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_EMTopo_eljob.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_EMTopo_eljob.py
@@ -56,10 +56,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from JetAnalysisAlgorithms.JetAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType, jetContainer)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print (algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_PFlow_eljob.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_PFlow_eljob.py
index c04132ff157e6b4078f10ec183390a1a2b018610..9dff29ea1ff1f637162f7ad418c0995a171f13ce 100755
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_PFlow_eljob.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/share/JetAnalysisAlgorithmsTest_PFlow_eljob.py
@@ -56,10 +56,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from JetAnalysisAlgorithms.JetAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType, jetContainer)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print (algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/MetAnalysisAlgorithms/share/MetAnalysisAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/MetAnalysisAlgorithms/share/MetAnalysisAlgorithmsTest_eljob.py
index 8f25b24403557ce64615b2eb9e70b1a845a37d9d..bdf6216a3e32d63126803e501ab65321cf66bef1 100755
--- a/PhysicsAnalysis/Algorithms/MetAnalysisAlgorithms/share/MetAnalysisAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/MetAnalysisAlgorithms/share/MetAnalysisAlgorithmsTest_eljob.py
@@ -61,10 +61,8 @@ job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
 
 from MetAnalysisAlgorithms.MetAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print (algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Find the right output directory:
 submitDir = options.submission_dir
diff --git a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/share/MuonAnalysisAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/share/MuonAnalysisAlgorithmsTest_eljob.py
index bbf22561bd6c148442bf7f943f1fb454085830e0..99ec9533255c0ee34ea43804e88c3485bb1e0d9a 100755
--- a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/share/MuonAnalysisAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/share/MuonAnalysisAlgorithmsTest_eljob.py
@@ -59,10 +59,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from MuonAnalysisAlgorithms.MuonAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
 
 # Make sure that both the ntuple and the xAOD dumper have a stream to write to.
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/share/TauAnalysisAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/share/TauAnalysisAlgorithmsTest_eljob.py
index 737e283bb7e160c5e89a78c2a7c2ca5d522be5b6..846e1766fe4d71c35c43b2ab35a666349b4325b0 100755
--- a/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/share/TauAnalysisAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/TauAnalysisAlgorithms/share/TauAnalysisAlgorithmsTest_eljob.py
@@ -58,10 +58,8 @@ job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
 
 from TauAnalysisAlgorithms.TauAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
 
 # Find the right output directory:
 submitDir = options.submission_dir
diff --git a/PhysicsAnalysis/Algorithms/TriggerAnalysisAlgorithms/share/TriggerAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/TriggerAnalysisAlgorithms/share/TriggerAlgorithmsTest_eljob.py
index ba7d3e5d54141007a7966e9a392cbb7b91878772..401432b334cb85fb78d0894876f5f38b6e470077 100755
--- a/PhysicsAnalysis/Algorithms/TriggerAnalysisAlgorithms/share/TriggerAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/TriggerAnalysisAlgorithms/share/TriggerAlgorithmsTest_eljob.py
@@ -55,10 +55,8 @@ job.options().setString( ROOT.EL.Job.optSubmitDirMode, "unique" )
 
 from TriggerAnalysisAlgorithms.TriggerAnalysisAlgorithmsTest import makeSequence
 algSeq = makeSequence (dataType)
-print algSeq # For debugging
-for alg in algSeq:
-    job.algsAdd( alg )
-    pass
+print(algSeq) # For debugging
+algSeq.addSelfToJob( job )
 
 # Set up an output file for the job:
 job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
diff --git a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py
index 35054350dbac8a170003e8020b4c2004cfa0265b..600dcf97b84d3e2423da571e29f37cb707378733 100644
--- a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py
+++ b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AlgSequence.py
@@ -54,6 +54,17 @@ except ImportError:
 
             return self.__iadd__( algOrSeq, index = index )
 
+        def addSelfToJob( self, job ):
+            """add a copy of this config to the EventLoop job object
+
+            Keyword arguments:
+              job      -- The job object to add ourself to
+            """
+            for alg in self:
+                alg.addSelfToJob (job)
+                pass
+            pass
+
         def __getitem__( self, index ):
             """Return one algorithm/sequence from the sequence by index
 
diff --git a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/PythonConfig.py b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/PythonConfig.py
index 50e0c9b815640e88df952c4b9258e94ffb4fc0af..7a68661bbb4fd9fc66869778ea58e2ff463c09f9 100644
--- a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/PythonConfig.py
+++ b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/PythonConfig.py
@@ -80,6 +80,15 @@ class PythonConfig( ROOT.EL.PythonConfigBase ):
 
         return self.type()
 
+    def addSelfToJob( self, job ):
+        """add a copy of this config to the EventLoop job object
+
+        Keyword arguments:
+          job      -- The job object to add ourself to
+        """
+        job.algsAdd( self )
+        pass
+
     def __getattr__( self, name ):
         """Get a previously set property value from the configuration