diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/OverlapAnalysisConfig.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/OverlapAnalysisConfig.py
index 7cf189e60b549baeee28217322509d1b4f056b4d..eb4a996785f776b3cbdc430102b5d1df917a2a5a 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/OverlapAnalysisConfig.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/OverlapAnalysisConfig.py
@@ -19,6 +19,7 @@ class OverlapAnalysisConfig (ConfigBlock):
         self.addOption ('boostedLeptons', False, type=bool)
         self.addOption ('postfix', '', type=str)
         self.addOption ('nominalOnly', False, type=bool)
+        self.addOption ('nominalOnlyUnifiedSelection', False, type=bool)
         self.addOption ('jets', "", type=str)
         self.addOption ('fatJets', "", type=str)
         self.addOption ('electrons', "", type=str)
@@ -54,6 +55,18 @@ class OverlapAnalysisConfig (ConfigBlock):
         self.addOption ('doEleFatJetOR', True, type=bool)
         self.addOption ('doJetFatJetOR', True, type=bool)
 
+    def makeUnionPreselectionAlg(self, config, inputCollection):
+        """
+        Create a new selection for the inputCollection ('container.selection')
+        that is the union over all systematics of 'selection'. This allows us
+        to run nominal-only overlap removal while taking into account the impact
+        of systematics on object acceptance.
+        """
+        container, selection = config.readNameAndSelection( inputCollection )
+        alg = config.createAlgorithm( 'CP::AsgUnionSelectionAlg', 'UnionSelectionAlgForOR_' + inputCollection.split(".")[0] )
+        alg.preselection = selection
+        alg.particles = container
+        alg.selectionDecoration = 'unifiedSelectForOR'
 
     def makeAlgs (self, config) :
 
@@ -107,64 +120,88 @@ class OverlapAnalysisConfig (ConfigBlock):
 
         electrons = None
         if self.electrons != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.electrons)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORElectronsSelectAlg' + postfix )
             electrons, alg.preselection = config.readNameAndSelection (self.electrons)
             alg.particles = electrons
             alg.selectionDecoration = self.inputLabel + ',as_char'
             # if  OR added to all selections, don't need standalone selection flag
             if self.selectionName != '':
-                config.addOutputVar (self.electrons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.electrons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
         photons = None
         if self.photons != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.photons)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORPhotonsSelectAlg' + postfix )
             photons, alg.preselection = config.readNameAndSelection (self.photons)
             alg.particles = photons
             alg.selectionDecoration = self.inputLabel + ',as_char'
             if self.selectionName != '':
-                config.addOutputVar (self.photons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.photons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
         muons = None
         if self.muons != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.muons)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORMuonsSelectAlg' + postfix )
             muons, alg.preselection = config.readNameAndSelection (self.muons)
             alg.particles = muons
             alg.selectionDecoration = self.inputLabel + ',as_char'
             if self.selectionName != '':
-                config.addOutputVar (self.muons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.muons.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
         taus = None
         if self.taus != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.taus)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORTausSelectAlg' + postfix )
             taus, alg.preselection = config.readNameAndSelection (self.taus)
             alg.particles = taus
             alg.selectionDecoration = self.inputLabel + ',as_char'
             if self.selectionName != '':
-                config.addOutputVar (self.taus.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.taus.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
         jets = None
         if self.jets != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.jets)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORJetsSelectAlg' + postfix )
             jets, alg.preselection = config.readNameAndSelection (self.jets)
             alg.particles = jets
             alg.selectionDecoration = self.inputLabel + ',as_char'
             if self.selectionName != '':
-                config.addOutputVar (self.jets.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.jets.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
         fatJets = None
         if self.fatJets != "" :
+            if self.nominalOnlyUnifiedSelection:
+                self.makeUnionPreselectionAlg(config, self.fatJets)
             alg = config.createAlgorithm( 'CP::AsgSelectionAlg','ORFatJetsSelectAlg' + postfix )
             fatJets, alg.preselection = config.readNameAndSelection (self.fatJets)
             alg.particles = fatJets
             alg.selectionDecoration = self.inputLabel + ',as_char'
             if self.selectionName != '':
-                config.addOutputVar (self.fatJets.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly)
+                config.addOutputVar (self.fatJets.split('.')[0], self.outputLabel + '_%SYS%', 'select_or', noSys=self.nominalOnly or self.nominalOnlyUnifiedSelection)
+            if self.nominalOnlyUnifiedSelection:
+                alg.preselection = 'unifiedSelectForOR'
 
 
         # Create the overlap removal algorithm:
         alg = config.createAlgorithm( 'CP::OverlapRemovalAlg', 'OverlapRemovalAlg' + postfix )
         alg.OutputLabel = self.outputLabel
-        if self.nominalOnly :
+        if self.nominalOnly or self.nominalOnlyUnifiedSelection :
             alg.affectingSystematicsFilter = '.*'
         if electrons :
             alg.electrons = electrons
@@ -332,7 +369,7 @@ class OverlapAnalysisConfig (ConfigBlock):
             alg.overlapTool.JetFatJetORT.DR = 1.0
             alg.overlapTool.JetFatJetORT.OutputPassValue = True
         
-        if self.nominalOnly :
+        if self.nominalOnly or self.nominalOnlyUnifiedSelection :
             if electrons :
                 alg = config.createAlgorithm( 'CP::CopyNominalSelectionAlg', 'ORElectronsCopyAlg' + postfix)
                 alg.particles = electrons