diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
index 332937a981273a16655eccbd48e785abc1435053..a7b7e50fd373e0d17f5413830999ca60a10bd8e1 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
@@ -3,7 +3,7 @@
 # @author Nils Krumnack
 
 from AnaAlgorithm.AlgSequence import AlgSequence
-from AnaAlgorithm.DualUseConfig import createAlgorithm, createService
+from AnaAlgorithm.DualUseConfig import createAlgorithm, createService, addPrivateTool
 from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import pileupConfigFiles
 from AnalysisAlgorithmsConfig.ConfigSequence import ConfigSequence
 from AnalysisAlgorithmsConfig.ConfigAccumulator import ConfigAccumulator
@@ -15,8 +15,35 @@ triggerChains = [
     'HLT_2e17_lhvloose_nod0'
 ]
 
+muonMinPt = None
+muonMaxEta = None
 
-def makeSequenceOld (dataType, algSeq, forCompare) :
+def addOutputCopyAlgorithms (algSeq, postfix, inputContainer, outputContainer, selection) :
+    """add a uniformly filtered set of deep copies based on the
+    systematics dependent selection"""
+
+    if postfix[0] != '_' :
+        postfix = '_' + postfix
+
+    if selection != '' :
+        unionalg = createAlgorithm( 'CP::AsgUnionSelectionAlg', 'UnionSelectionAlg' + postfix)
+        unionalg.preselection = selection
+        unionalg.particles = inputContainer
+        unionalg.selectionDecoration = 'outputSelect'
+        algSeq += unionalg
+
+    copyalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg', 'DeepCopyAlg' + postfix )
+    copyalg.input = inputContainer
+    copyalg.output = outputContainer
+    if selection != '' :
+        copyalg.selection = ['outputSelect']
+    else :
+        copyalg.selection = []
+    copyalg.deepCopy = True
+    algSeq += copyalg
+
+
+def makeSequenceOld (dataType, algSeq, vars, forCompare) :
 
     # Include, and then set up the pileup analysis sequence:
     prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
@@ -32,35 +59,49 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
 
     # Add the pileup sequence to the job:
     algSeq += pileupSequence
+    vars += [ 'EventInfo.runNumber     -> runNumber',
+             'EventInfo.eventNumber   -> eventNumber', ]
 
 
     # Include, and then set up the jet analysis algorithm sequence:
     from JetAnalysisAlgorithms.JetAnalysisSequence import makeJetAnalysisSequence
     jetContainer = 'AntiKt4EMPFlowJets'
-    jetSequence = makeJetAnalysisSequence( dataType, jetContainer, enableCutflow=True, enableKinematicHistograms=True )
+    jetSequence = makeJetAnalysisSequence( dataType, jetContainer, enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False )
 
     from FTagAnalysisAlgorithms.FTagAnalysisSequence import makeFTagAnalysisSequence
     makeFTagAnalysisSequence( jetSequence, dataType, jetContainer, noEfficiency = True, legacyRecommendations = True,
                               enableCutflow=True )
 
-    jetSequence.configure( inputName = jetContainer, outputName = 'AnaJetsBase_%SYS%' )
+    jetSequence.configure( inputName = jetContainer, outputName = 'AnaJets_%SYS%' )
+
 
     # Include, and then set up the jet analysis algorithm sequence:
     from JetAnalysisAlgorithms.JetJvtAnalysisSequence import makeJetJvtAnalysisSequence
-    jvtSequence = makeJetJvtAnalysisSequence( dataType, jetContainer, enableCutflow=True )
-    jvtSequence.configure( inputName = { 'jets'      : 'AnaJetsBase_%SYS%' },
-                           outputName = { 'jets'      : 'AnaJets_%SYS%' } )
+    jvtSequence = makeJetJvtAnalysisSequence( dataType, jetContainer, enableCutflow=True, shallowViewOutput = False )
+    jvtSequence.configure( inputName = { 'jets'      : 'AnaJets_%SYS%' },
+                           outputName = {  } )
 
     # Add the sequences to the job:
     algSeq += jetSequence
     algSeq += jvtSequence
+    if not forCompare :
+        vars += ['OutJets_%SYS%.pt  -> jet_pt_%SYS%',
+                 'OutJets_NOSYS.phi -> jet_phi',
+                 'OutJets_NOSYS.eta -> jet_eta', ]
+        if dataType != 'data':
+            vars += [
+                # 'EventInfo.jvt_effSF_%SYS% -> jvtSF_%SYS%',
+                # 'EventInfo.fjvt_effSF_%SYS% -> fjvtSF_%SYS%',
+                'OutJets_%SYS%.jvt_effSF_%SYS% -> jet_jvtEfficiency_%SYS%',
+                # 'OutJets_%SYS%.fjvt_effSF_NOSYS -> jet_fjvtEfficiency_%SYS%',
+            ]
 
 
     # Include, and then set up the muon analysis algorithm sequence:
     from MuonAnalysisAlgorithms.MuonAnalysisSequence import makeMuonAnalysisSequence
     muonSequenceMedium = makeMuonAnalysisSequence( dataType, deepCopyOutput = False, shallowViewOutput = False,
                                                    workingPoint = 'Medium.NonIso', postfix = 'medium',
-                                                   enableCutflow=True, enableKinematicHistograms=True )
+                                                   enableCutflow=True, enableKinematicHistograms=True, ptSelectionOutput = True )
     muonSequenceMedium.configure( inputName = 'Muons',
                                   outputName = 'AnaMuonsMedium_%SYS%' )
 
@@ -69,13 +110,21 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
 
     muonSequenceTight = makeMuonAnalysisSequence( dataType, deepCopyOutput = False, shallowViewOutput = False,
                                                   workingPoint = 'Tight.NonIso', postfix = 'tight',
-                                                  enableCutflow=True, enableKinematicHistograms=True )
+                                                  enableCutflow=True, enableKinematicHistograms=True, ptSelectionOutput = True )
     muonSequenceTight.removeStage ("calibration")
     muonSequenceTight.configure( inputName = 'AnaMuonsMedium_%SYS%',
                                  outputName = 'AnaMuons_%SYS%')
 
     # Add the sequence to the job:
     algSeq += muonSequenceTight
+    vars += [ 'OutMuons_NOSYS.eta -> mu_eta',
+              'OutMuons_NOSYS.phi -> mu_phi',
+              'OutMuons_%SYS%.pt  -> mu_pt_%SYS%',
+              'OutMuons_%SYS%.baselineSelection_medium -> mu_select_medium_%SYS%',
+              'OutMuons_%SYS%.baselineSelection_tight  -> mu_select_tight_%SYS%', ]
+    if dataType != 'data':
+        vars += [ 'OutMuons_%SYS%.muon_effSF_medium_%SYS% -> mu_effSF_medium_%SYS%',
+                  'OutMuons_%SYS%.muon_effSF_tight_%SYS% -> mu_effSF_tight_%SYS%', ]
 
 
     # Include, and then set up the electron analysis sequence:
@@ -88,30 +137,46 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
     else:
         workingpoint = 'LooseDNNElectron.Loose_VarRad'
     electronSequence = makeElectronAnalysisSequence( dataType, workingpoint, postfix = 'loose',
-                                                     recomputeLikelihood=recomputeLikelihood, enableCutflow=True, enableKinematicHistograms=True )
+                                                     recomputeLikelihood=recomputeLikelihood, enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False )
     electronSequence.configure( inputName = 'Electrons',
                                 outputName = 'AnaElectrons_%SYS%' )
     algSeq += electronSequence
+    if not forCompare :
+        vars += [ 'OutElectrons_%SYS%.pt  -> el_pt_%SYS%',
+                  'OutElectrons_NOSYS.phi -> el_phi',
+                  'OutElectrons_NOSYS.eta -> el_eta',
+                  'OutElectrons_%SYS%.baselineSelection_loose -> el_select_loose_%SYS%', ]
 
 
     # Include, and then set up the photon analysis sequence:
     from EgammaAnalysisAlgorithms.PhotonAnalysisSequence import \
         makePhotonAnalysisSequence
     photonSequence = makePhotonAnalysisSequence( dataType, 'Tight.FixedCutTight', postfix = 'tight',
-                                                 recomputeIsEM=False, enableCutflow=True, enableKinematicHistograms=True )
+                                                 recomputeIsEM=False, enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False )
     photonSequence.configure( inputName = 'Photons',
                               outputName = 'AnaPhotons_%SYS%' )
     algSeq += photonSequence
+    if not forCompare :
+        vars += [ 'OutPhotons_%SYS%.pt  -> ph_pt_%SYS%',
+                  'OutPhotons_NOSYS.phi -> ph_phi',
+                  'OutPhotons_NOSYS.eta -> ph_eta',
+                  'OutPhotons_%SYS%.baselineSelection_tight -> ph_select_tight_%SYS%', ]
 
 
     # Include, and then set up the tau analysis algorithm sequence:
     from TauAnalysisAlgorithms.TauAnalysisSequence import makeTauAnalysisSequence
     tauSequence = makeTauAnalysisSequence( dataType, 'Tight', postfix = 'tight',
-                                           enableCutflow=True, enableKinematicHistograms=True )
+                                           enableCutflow=True, enableKinematicHistograms=True, shallowViewOutput = False )
     tauSequence.configure( inputName = 'TauJets', outputName = 'AnaTauJets_%SYS%' )
 
     # Add the sequence to the job:
     algSeq += tauSequence
+    if not forCompare :
+        vars += [ 'OutTauJets_%SYS%.pt  -> tau_pt_%SYS%',
+                'OutTauJets_NOSYS.phi -> tau_phi',
+                  'OutTauJets_NOSYS.eta -> tau_eta',
+                  'OutTauJets_%SYS%.baselineSelection_tight -> tau_select_tight_%SYS%', ]
+
 
     # temporarily disabled until di-taus are supported in R22
     # # Include, and then set up the tau analysis algorithm sequence:
@@ -124,62 +189,164 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
     # algSeq += diTauSequence
 
 
-    from AnaAlgorithm.DualUseConfig import addPrivateTool, createAlgorithm
-    # Set up a selection alg for demonstration purposes
-    # Also to avoid warnings from building MET with very soft electrons
+    # set up pt-eta selection for all the object types
+    # currently disabling most cuts, but leaving these as placeholders
+    # the cuts I have are mostly to silence MET building warnings
 
-    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'METEleSelAlg' )
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserElectronsSelectionAlg' )
     addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
     selalg.selectionTool.minPt = 10e3
-    selalg.selectionTool.maxEta = 2.47
+    #selalg.selectionTool.maxEta = 2.47
     selalg.selectionDecoration = 'selectPtEta'
     selalg.particles = 'AnaElectrons_%SYS%'
     algSeq += selalg
 
-    # Now make a view container holding only the electrons for the MET calculation
-    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METEleViewAlg' )
-    viewalg.selection = [ 'selectPtEta' ]
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserPhotonsSelectionAlg' )
+    addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
+    selalg.selectionTool.minPt = 10e3
+    #selalg.selectionTool.maxEta = 2.47
+    selalg.selectionDecoration = 'selectPtEta'
+    selalg.particles = 'AnaPhotons_%SYS%'
+    algSeq += selalg
+
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserMuonsSelectionAlg' )
+    addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
+    if muonMinPt :
+        selalg.selectionTool.minPt = muonMinPt
+    if muonMaxEta :
+        selalg.selectionTool.maxEta = muonMaxEta
+    selalg.selectionDecoration = 'selectPtEta'
+    selalg.particles = 'AnaMuons_%SYS%'
+    algSeq += selalg
+
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserTauJetsSelectionAlg' )
+    addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
+    #selalg.selectionTool.minPt = 10e3
+    #selalg.selectionTool.maxEta = 2.47
+    selalg.selectionDecoration = 'selectPtEta'
+    selalg.particles = 'AnaTauJets_%SYS%'
+    algSeq += selalg
+
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserJetsSelectionAlg' )
+    addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
+    #selalg.selectionTool.minPt = 10e3
+    #selalg.selectionTool.maxEta = 2.47
+    selalg.selectionDecoration = 'selectPtEta'
+    selalg.particles = 'AnaJets_%SYS%'
+    algSeq += selalg
+
+
+
+    # Now make view containers for the inputs to the met calculation
+    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METElectronsViewAlg' )
+    viewalg.selection = [ 'selectPtEta', 'baselineSelection_loose,as_char' ]
     viewalg.input = 'AnaElectrons_%SYS%'
     viewalg.output = 'METElectrons_%SYS%'
     algSeq += viewalg
 
+    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METPhotonsViewAlg' )
+    viewalg.selection = [ 'selectPtEta', 'baselineSelection_tight,as_char' ]
+    viewalg.input = 'AnaPhotons_%SYS%'
+    viewalg.output = 'METPhotons_%SYS%'
+    algSeq += viewalg
+
+    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METMuonsViewAlg' )
+    viewalg.selection = [ 'selectPtEta', 'baselineSelection_medium,as_char' ]
+    viewalg.input = 'AnaMuons_%SYS%'
+    viewalg.output = 'METMuons_%SYS%'
+    algSeq += viewalg
+
+    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METTauJetsViewAlg' )
+    viewalg.selection = [ 'selectPtEta', 'baselineSelection_tight,as_char' ]
+    viewalg.input = 'AnaTauJets_%SYS%'
+    viewalg.output = 'METTauJets_%SYS%'
+    algSeq += viewalg
+
+    viewalg = createAlgorithm( 'CP::AsgViewFromSelectionAlg','METJetsViewAlg' )
+    viewalg.selection = [ 'selectPtEta' ]
+    viewalg.input = 'AnaJets_%SYS%'
+    viewalg.output = 'METJets_%SYS%'
+    algSeq += viewalg
+
     # Include, and then set up the met analysis algorithm sequence:
     from MetAnalysisAlgorithms.MetAnalysisSequence import makeMetAnalysisSequence
     metSequence = makeMetAnalysisSequence( dataType, metSuffix = jetContainer[:-4] )
-    metSequence.configure( inputName = { 'jets'      : 'AnaJets_%SYS%',
-                                         'muons'     : 'AnaMuons_%SYS%',
-                                         'electrons' : 'METElectrons_%SYS%' },
+    metSequence.configure( inputName = { 'jets'      : 'METJets_%SYS%',
+                                         'taus'      : 'METTauJets_%SYS%',
+                                         'muons'     : 'METMuons_%SYS%',
+                                         'electrons' : 'METElectrons_%SYS%',
+                                         'photons'   : 'METPhotons_%SYS%' },
                            outputName = 'AnaMET_%SYS%' )
 
     # Add the sequence to the job:
     algSeq += metSequence
+    if not forCompare :
+        vars += [
+            'AnaMET_%SYS%.mpx   -> met_mpx_%SYS%',
+            'AnaMET_%SYS%.mpy   -> met_mpy_%SYS%',
+            'AnaMET_%SYS%.sumet -> met_sumet_%SYS%',
+            'AnaMET_%SYS%.name  -> met_name_%SYS%',
+        ]
+
+
+    # Make view containers holding as inputs for OR
+    selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORElectronsSelectAlg' )
+    selectalg.preselection = 'selectPtEta&&baselineSelection_loose,as_char'
+    selectalg.particles = 'AnaElectrons_%SYS%'
+    selectalg.selectionDecoration = 'preselectOR,as_char'
+    algSeq += selectalg
+
+    selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORPhotonsSelectAlg' )
+    selectalg.preselection = 'selectPtEta&&baselineSelection_tight,as_char'
+    selectalg.particles = 'AnaPhotons_%SYS%'
+    selectalg.selectionDecoration = 'preselectOR,as_char'
+    algSeq += selectalg
+
+    selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORMuonsSelectAlg' )
+    selectalg.preselection = 'selectPtEta&&baselineSelection_medium,as_char'
+    selectalg.particles = 'AnaMuons_%SYS%'
+    selectalg.selectionDecoration = 'preselectOR,as_char'
+    algSeq += selectalg
+
+    selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORTauJetsSelectAlg' )
+    selectalg.preselection = 'selectPtEta&&baselineSelection_tight,as_char'
+    selectalg.particles = 'AnaTauJets_%SYS%'
+    selectalg.selectionDecoration = 'preselectOR,as_char'
+    algSeq += selectalg
+
+    selectalg = createAlgorithm( 'CP::AsgSelectionAlg','ORJetsSelectAlg' )
+    selectalg.preselection = 'selectPtEta'
+    selectalg.particles = 'AnaJets_%SYS%'
+    selectalg.selectionDecoration = 'preselectOR,as_char'
+    algSeq += selectalg
 
 
     # Include, and then set up the overlap analysis algorithm sequence:
     from AsgAnalysisAlgorithms.OverlapAnalysisSequence import \
         makeOverlapAnalysisSequence
-    overlapSequence = makeOverlapAnalysisSequence( dataType, doMuPFJetOR=True, doTaus=False, enableCutflow=True )
+    overlapSequence = makeOverlapAnalysisSequence( dataType, doMuPFJetOR=True, doTaus=False, enableCutflow=True, shallowViewOutput = False, inputLabel = 'preselectOR', outputLabel = 'passesOR' )
     overlapSequence.configure(
         inputName = {
             'electrons' : 'AnaElectrons_%SYS%',
             'photons'   : 'AnaPhotons_%SYS%',
             'muons'     : 'AnaMuons_%SYS%',
             'jets'      : 'AnaJets_%SYS%',
-            # 'taus'      : 'AnaTauJets_%SYS%'
+            'taus'      : 'AnaTauJets_%SYS%'
         },
-        outputName = {
-            'electrons' : 'AnaElectronsOR_%SYS%',
-            'photons'   : 'AnaPhotonsOR_%SYS%',
-            'muons'     : 'AnaMuonsOR_%SYS%',
-            'jets'      : 'AnaJetsOR_%SYS%',
-            # 'taus'      : 'AnaTauJetsOR_%SYS%'
-        } )
+        outputName = { } )
 
     # FIX ME: temporarily disabling this for data, as there are some
     # errors with missing primary vertices
     if dataType != 'data' :
         algSeq += overlapSequence
-
+        if not forCompare :
+            vars += [
+                'OutJets_%SYS%.passesOR_%SYS% -> jet_select_or_%SYS%',
+                'OutElectrons_%SYS%.passesOR_%SYS% -> el_select_or_%SYS%',
+                'OutPhotons_%SYS%.passesOR_%SYS% -> ph_select_or_%SYS%',
+                'OutMuons_%SYS%.passesOR_%SYS% -> mu_select_or_%SYS%',
+                'OutTauJets_%SYS%.passesOR_%SYS% -> tau_select_or_%SYS%',
+            ]
 
     if dataType != 'data' :
         # Include, and then set up the generator analysis sequence:
@@ -187,6 +354,8 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
             makeGeneratorAnalysisSequence
         generatorSequence = makeGeneratorAnalysisSequence( dataType, saveCutBookkeepers=True, runNumber=284500, cutBookkeepersSystematics=True )
         algSeq += generatorSequence
+        if not forCompare :
+            vars += [ 'EventInfo.generatorWeight_%SYS% -> generatorWeight_%SYS%', ]
 
 
     # Include, and then set up the trigger analysis sequence:
@@ -199,10 +368,26 @@ def makeSequenceOld (dataType, algSeq, forCompare) :
     # decision without throwing away events.
     if not forCompare :
         algSeq += triggerSequence
+        vars += ['EventInfo.trigPassed_' + t + ' -> trigPassed_' + t for t in triggerChains]
 
 
 
-def makeSequenceBlocks (dataType, algSeq, forCompare) :
+    # make filtered output containers
+
+    addOutputCopyAlgorithms (algSeq, 'Electrons', 'AnaElectrons_%SYS%', 'OutElectrons_%SYS%',
+                             'selectPtEta&&baselineSelection_loose,as_char')
+    addOutputCopyAlgorithms (algSeq, 'Photons', 'AnaPhotons_%SYS%', 'OutPhotons_%SYS%',
+                             'selectPtEta&&baselineSelection_tight,as_char')
+    addOutputCopyAlgorithms (algSeq, 'Muons', 'AnaMuons_%SYS%', 'OutMuons_%SYS%',
+                             'selectPtEta&&baselineSelection_medium,as_char')
+    addOutputCopyAlgorithms (algSeq, 'TauJets', 'AnaTauJets_%SYS%', 'OutTauJets_%SYS%',
+                             'selectPtEta&&baselineSelection_tight,as_char')
+    addOutputCopyAlgorithms (algSeq, 'Jets', 'AnaJets_%SYS%', 'OutJets_%SYS%',
+                             'selectPtEta')
+
+
+
+def makeSequenceBlocks (dataType, algSeq, vars, forCompare) :
 
     # Include, and then set up the pileup analysis sequence:
     prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
@@ -218,6 +403,8 @@ def makeSequenceBlocks (dataType, algSeq, forCompare) :
 
     # Add the pileup sequence to the job:
     algSeq += pileupSequence
+    vars += [ 'EventInfo.runNumber     -> runNumber',
+              'EventInfo.eventNumber   -> eventNumber', ]
 
 
     # Include, and then set up the muon analysis algorithm sequence:
@@ -228,11 +415,32 @@ def makeSequenceBlocks (dataType, algSeq, forCompare) :
     makeMuonCalibrationConfig (configSeq, 'AnaMuons')
     makeMuonWorkingPointConfig (configSeq, 'AnaMuons', workingPoint='Medium.Iso', postfix='medium')
     makeMuonWorkingPointConfig (configSeq, 'AnaMuons', workingPoint='Tight.Iso', postfix='tight')
+    vars += [ 'OutMuons_NOSYS.eta -> mu_eta',
+              'OutMuons_NOSYS.phi -> mu_phi',
+              'OutMuons_%SYS%.pt  -> mu_pt_%SYS%',
+              'OutMuons_%SYS%.baselineSelection_medium -> mu_select_medium_%SYS%',
+              'OutMuons_%SYS%.baselineSelection_tight  -> mu_select_tight_%SYS%', ]
+    if dataType != 'data':
+        vars += [ 'OutMuons_%SYS%.muon_effSF_medium_%SYS% -> mu_effSF_medium_%SYS%', ]
+        vars += [ 'OutMuons_%SYS%.muon_effSF_tight_%SYS% -> mu_effSF_tight_%SYS%', ]
 
     configAccumulator = ConfigAccumulator (dataType, algSeq)
     configSeq.fullConfigure (configAccumulator)
 
 
+    selalg = createAlgorithm( 'CP::AsgSelectionAlg', 'UserMuonsSelectionAlg' )
+    addPrivateTool( selalg, 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
+    if muonMinPt :
+        selalg.selectionTool.minPt = muonMinPt
+    if muonMaxEta :
+        selalg.selectionTool.maxEta = muonMaxEta
+    selalg.selectionDecoration = 'selectPtEta'
+    selalg.particles = 'AnaMuons_%SYS%'
+    algSeq += selalg
+    addOutputCopyAlgorithms (algSeq, 'Muons', 'AnaMuons_%SYS%', 'OutMuons_%SYS%',
+                             'selectPtEta&&baselineSelection_medium,as_char')
+
+
 
 def makeSequence (dataType, useBlocks, forCompare) :
 
@@ -242,71 +450,20 @@ def makeSequence (dataType, useBlocks, forCompare) :
     sysService = createService( 'CP::SystematicsSvc', 'SystematicsSvc', sequence = algSeq )
     sysService.sigmaRecommended = 1
 
+    vars = []
     if not useBlocks :
-        makeSequenceOld (dataType, algSeq, forCompare=forCompare)
+        makeSequenceOld (dataType, algSeq, vars=vars, forCompare=forCompare)
     else :
-        makeSequenceBlocks (dataType, algSeq, forCompare=forCompare)
+        makeSequenceBlocks (dataType, algSeq, vars=vars, forCompare=forCompare)
 
 
     # Add an ntuple dumper algorithm:
     treeMaker = createAlgorithm( 'CP::TreeMakerAlg', 'TreeMaker' )
     treeMaker.TreeName = 'analysis'
     algSeq += treeMaker
-    ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMakerEventInfo' )
+    ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMaker' )
     ntupleMaker.TreeName = 'analysis'
-    ntupleMaker.Branches = [ 'EventInfo.runNumber     -> runNumber',
-                             'EventInfo.eventNumber   -> eventNumber', ]
-    algSeq += ntupleMaker
-    ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMakerMuons' )
-    ntupleMaker.TreeName = 'analysis'
-    ntupleMaker.Branches = [ 'EventInfo.runNumber   -> runNumber',
-                             'EventInfo.eventNumber -> eventNumber',
-                             'AnaMuons_NOSYS.eta -> muon_eta',
-                             'AnaMuons_NOSYS.phi -> muon_phi',
-                             'AnaMuons_%SYS%.pt  -> muon_pt_%SYS%', ]
-
-    # These branches are temporarily excluded for the comparison
-    # between sequences and blocks as they are either not yet
-    # implemented or make the test fail.  The differences between
-    # sequence and block configuration need to be addressed and then
-    # these need to be reenabled.
-    if not forCompare and not useBlocks :
-        ntupleMaker.Branches += [
-            'AnaJets_%SYS%.pt  -> jet_%SYS%_pt',
-            'AnaJets_NOSYS.phi -> jet_phi',
-            'AnaJets_NOSYS.eta -> jet_eta',
-            'AnaMuons_%SYS%.baselineSelection_medium -> muon_select_medium_%SYS%',
-            'AnaMuons_%SYS%.baselineSelection_tight  -> muon_select_tight_%SYS%',
-            'AnaElectrons_%SYS%.pt  -> electron_%SYS%_pt',
-            'AnaElectrons_NOSYS.phi -> electron_phi',
-            'AnaElectrons_NOSYS.eta -> electron_eta',
-            'AnaElectrons_%SYS%.baselineSelection_loose -> electron_select_loose_%SYS%',
-            'AnaPhotons_%SYS%.pt  -> photon_%SYS%_pt',
-            'AnaPhotons_NOSYS.phi -> photon_phi',
-            'AnaPhotons_NOSYS.eta -> photon_eta',
-            'AnaPhotons_%SYS%.baselineSelection_tight -> photon_select_tight_%SYS%',
-            'AnaTauJets_%SYS%.pt  -> tau_jet_%SYS%_pt',
-            'AnaTauJets_NOSYS.phi -> tau_jet_phi',
-            'AnaTauJets_NOSYS.eta -> tau_jet_eta',
-            'AnaTauJets_%SYS%.baselineSelection_tight -> tau_select_tight_%SYS%',
-        ]
-        if dataType != 'data':
-            ntupleMaker.Branches += [
-                # 'EventInfo.jvt_effSF_%SYS% -> jvtSF_%SYS%',
-                # 'EventInfo.fjvt_effSF_%SYS% -> fjvtSF_%SYS%',
-                'AnaJets_%SYS%.jvt_effSF_%SYS% -> jet_%SYS%_jvtEfficiency',
-                # 'AnaJets_%SYS%.fjvt_effSF_NOSYS -> jet_%SYS%_fjvtEfficiency',
-                'AnaMET_%SYS%.mpx   -> met_%SYS%_mpx',
-                'AnaMET_%SYS%.mpy   -> met_%SYS%_mpy',
-                'AnaMET_%SYS%.sumet -> met_%SYS%_sumet',
-                'AnaMET_%SYS%.name  -> met_%SYS%_name',
-            ]
-
-        ntupleMaker.Branches += ['EventInfo.trigPassed_' + t + ' -> trigPassed_' + t for t in triggerChains]
-        if dataType != 'data':
-            ntupleMaker.Branches += [ 'EventInfo.generatorWeight_%SYS% -> generatorWeight_%SYS%', ]
-            ntupleMaker.Branches += [ 'AnaMuons_%SYS%.muon_effSF_medium_%SYS% -> muon_effSF_medium_%SYS%' ]
-            ntupleMaker.Branches += [ 'AnaMuons_%SYS%.muon_effSF_tight_%SYS% -> muon_effSF_tight_%SYS%' ]
+    ntupleMaker.Branches = vars
     # ntupleMaker.OutputLevel = 2  # For output validation
     algSeq += ntupleMaker
     treeFiller = createAlgorithm( 'CP::TreeFillerAlg', 'TreeFiller' )
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/share/BlockConfigurationAthenaTest.sh b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/share/BlockConfigurationAthenaTest.sh
index 4ce807978229e4a72a216728c159bc3d3242ea98..0a6742a1329255a278537ddfce95b477e77c563e 100755
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/share/BlockConfigurationAthenaTest.sh
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/share/BlockConfigurationAthenaTest.sh
@@ -13,4 +13,4 @@ athena.py AnalysisAlgorithmsConfig/FullCPAlgorithmsTest_jobOptions.py --evtMax=5
 athena.py AnalysisAlgorithmsConfig/FullCPAlgorithmsTest_jobOptions.py --evtMax=500 - --data-type $dataType --for-compare --block-config
 
 
-acmd.py diff-root --enforce-leaves -t analysis FullCPAlgorithmsTest.$dataType.hist.root FullCPAlgorithmsConfigTest.$dataType.hist.root
+acmd.py diff-root --error-mode resilient --enforce-leaves -t analysis FullCPAlgorithmsTest.$dataType.hist.root FullCPAlgorithmsConfigTest.$dataType.hist.root
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgPtEtaSelectionTool.cxx b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgPtEtaSelectionTool.cxx
index ac027c17a21afc77702f5b37739e0774e52ba6e3..2c85a0f159a82841aca469e437b0015a2e3ca975 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgPtEtaSelectionTool.cxx
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgPtEtaSelectionTool.cxx
@@ -150,7 +150,14 @@ namespace CP
       }
 
       if (m_minPtCutIndex >= 0) {
-        m_accept.setCutResult (m_minPtCutIndex, pt >= m_minPt);
+        if (!std::isfinite(pt) || pt <= 0.)
+        {
+          ANA_MSG_WARNING ("invalid pt value, setting object to fail pt-cut: " << pt);
+          m_accept.setCutResult (m_minPtCutIndex, false);
+        } else
+        {
+          m_accept.setCutResult (m_minPtCutIndex, pt >= m_minPt);
+        }
       }
       if (m_maxPtCutIndex >= 0) {
         m_accept.setCutResult (m_maxPtCutIndex, pt < m_maxPt);
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisSequence.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisSequence.py
index a0a0c3fa655a86186addfa1b20a7fb5413685604..7df0266191cdbaf0ddfdef042e61d7212435a2af 100644
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisSequence.py
@@ -220,7 +220,7 @@ def makeSmallRJetAnalysisSequence( seq, dataType, jetCollection,
             "Invalid combination of reduction and JEROption settings: "
             "reduction: {0}, JEROption: {1}".format(reduction, JEROption) )
 
-    alg = createAlgorithm( 'CP::JetUncertaintiesAlg', 'JetUncertaintiesTool'+postfix )
+    alg = createAlgorithm( 'CP::JetUncertaintiesAlg', 'JetUncertaintiesAlg'+postfix )
     addPrivateTool( alg, 'uncertaintiesTool', 'JetUncertaintiesTool' )
     alg.uncertaintiesTool.JetDefinition = jetCollection[:-4]
     # Add the correct directory on the front
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
index d3ad13d53bb728e288d0bded7433ee5b6258477a..730018a3de302f1d46d032748a12d4331e0a9e50 100644
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
@@ -9,6 +9,7 @@ def makeJetJvtAnalysisSequence( dataType, jetCollection,
                                 disableFJvt = False,
                                 globalSF = True,
                                 runSelection = True,
+                                shallowViewOutput = True,
                                 enableCutflow = False ):
     """Create a jet JVT analysis algorithm sequence
 
@@ -68,10 +69,11 @@ def makeJetJvtAnalysisSequence( dataType, jetCollection,
 
         # Set up an algorithm that makes a view container using the selections
         # performed previously:
-        alg = createAlgorithm( 'CP::AsgViewFromSelectionAlg', 'JetJvtViewFromSelectionAlg' )
-        seq.append( alg, inputPropName = { 'jets' : 'input' },
-                    outputPropName = { 'jets' : 'output' },
-                    dynConfig = {'selection' : lambda meta : meta["selectionDecorNames"][:]} )
+        if shallowViewOutput :
+            alg = createAlgorithm( 'CP::AsgViewFromSelectionAlg', 'JetJvtViewFromSelectionAlg' )
+            seq.append( alg, inputPropName = { 'jets' : 'input' },
+                        outputPropName = { 'jets' : 'output' },
+                        dynConfig = {'selection' : lambda meta : meta["selectionDecorNames"][:]} )
 
     # Return the sequence:
     return seq
diff --git a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisConfig.py b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisConfig.py
index d53dff2b75c93fd89336f9eb6d4d6825c8d8c1b4..8ea868597ce7158bbbd155e62fee65220d273dd9 100644
--- a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisConfig.py
+++ b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisConfig.py
@@ -145,7 +145,12 @@ class MuonWorkingPointConfig (ConfigBlock) :
             alg.muons = config.readName (self.containerName)
             alg.preselection = config.getSelection (self.containerName, self.selectionName)
 
-
+        # Set up an algorithm used for decorating baseline muon selection:
+        alg = config.createAlgorithm( 'CP::AsgSelectionAlg',
+                                      'MuonSelectionSummary' + postfix )
+        alg.selectionDecoration = 'baselineSelection' + postfix + ',as_char'
+        alg.particles = config.readName (self.containerName)
+        alg.preselection = config.getSelection (self.containerName, self.selectionName)
 
 
 
diff --git a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AnaAlgSequence.py b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AnaAlgSequence.py
index 882357f6c60356c85a946e18d8ca58cd0f102445..37197ed4c5d1d4ce129e3eb6d917edc27cbd971f 100644
--- a/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AnaAlgSequence.py
+++ b/PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/AnaAlgSequence.py
@@ -175,11 +175,10 @@ class AnaAlgSequence( AlgSequence ):
 
             # Set up the input name(s) of the algorithm correctly, in case this
             # is needed...
-            for inputLabel, inputKey in meta.inputPropName.iteritems():
-                if inputLabel in currentOutputs.keys():
-                    setattr( alg, inputKey, currentOutputs[ inputLabel ] )
-                    pass
-                pass
+            if meta.inputPropName :
+                for inputLabel, inputKey in meta.inputPropName.items():
+                    if inputLabel in currentOutputs:
+                        setattr( alg, inputKey, currentOutputs[ inputLabel ] )
 
             pass