diff --git a/Event/xAOD/xAODJet/Root/JetContainerInfo.cxx b/Event/xAOD/xAODJet/Root/JetContainerInfo.cxx
index c7aaa6b69083bbc7c326dc757055dd3d8651999e..54386f5affb7ba9c54b3a7112ea7224d0de36447 100644
--- a/Event/xAOD/xAODJet/Root/JetContainerInfo.cxx
+++ b/Event/xAOD/xAODJet/Root/JetContainerInfo.cxx
@@ -100,6 +100,7 @@ namespace xAOD {
       { "EMTopoOrigin",          EMTopoOrigin },
       { "TopoTower",             TopoTower },
       { "Tower",                 Tower },
+      { "Jet",                   Jet },
       { "Truth",                 Truth },
       { "TruthWZ",               TruthWZ },
       { "TruthDressedWZ",        TruthDressedWZ },
@@ -148,6 +149,7 @@ namespace xAOD {
       { EMTopoOrigin,          "EMTopoOrigin" },
       { TopoTower,             "TopoTower" },
       { Tower,                 "Tower" },
+      { Jet,                   "Jet" },
       { Truth,                 "Truth" },
       { TruthWZ,               "TruthWZ" },
       { TruthDressedWZ,        "TruthDressedWZ" },
diff --git a/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py b/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
index 464ba9a6138146b5d1689b34902846dfaf5a314a..57e9d3bde7ab5fbd59f9523b370e24e4ed1b2bf8 100644
--- a/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
+++ b/Reconstruction/Jet/JetCalibTools/python/JetCalibToolsConfig.py
@@ -24,29 +24,30 @@ all = ['getJetCalibTool']
 pflowcontexts = {
     "T0":("JES_MC15cRecommendation_PFlow_Aug2016_rel21.config","00-04-77","JetArea_Residual_EtaJES"),
     # Omit smearing, to avoid any efficiency loss
-    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_PFlow_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_InSitu"),
+    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_PFlow_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_Insitu"),
 }
 
 topocontexts = {
     "T0":("JES_MC15cRecommendation_May2016_rel21.config","00-04-77","JetArea_Residual_EtaJES"),
-    # Placeholder from a vague approximation of the 2017 setup?
-    "Trigger":("JES_MC15cRecommendation_May2016_Trigger.config","00-04-77","JetArea_Residual_EtaJES_InSitu"),
     # Omit smearing, to avoid any efficiency loss
-    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_EMTopo_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_InSitu"),
+    "AnalysisLatest":("JES_data2017_2016_2015_Consolidated_EMTopo_2018_Rel21.config","00-04-82","JetArea_Residual_EtaJES_GSC_Insitu"),
+    "TrigSubJES":("JES_MC15cRecommendation_May2016_Trigger.config","00-04-77","JetArea_EtaJES"),
+    "TrigSubJESIS":("JES_MC15cRecommendation_May2016_Trigger.config","00-04-77","JetArea_EtaJES_GSC_Insitu"),
 }
 
 rscanlc2 = {
-    "RScanLatest":("JES_MC16Recommendation_Rscan2LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_InSitu")
+    "RScanLatest":("JES_MC16Recommendation_Rscan2LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_Insitu")
 }
 
 rscanlc6 = {
-    "RScanLatest":("JES_MC16Recommendation_Rscan6LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_InSitu")
+    "RScanLatest":("JES_MC16Recommendation_Rscan6LC_22Feb2018_rel21.config","00-04-81","JetArea_Residual_EtaJES_GSC_Insitu")
 }
 
 fatjetcontexts = {
     "CombinedMass": ("JES_MC16recommendation_FatJet_JMS_comb_19Jan2018.config","00-04-81","EtaJES_JMS"),
     "CaloMass":     ("JES_MC16recommendation_FatJet_JMS_calo_29Nov2017.config","00-04-81","EtaJES_JMS"),
     "TAMass":       ("JES_MC16recommendation_FatJet_JMS_TA_29Nov2017.config","00-04-81","EtaJES_JMS"),
+    "TrigSubJES": ("JES_Full2012dataset_Rscan_June2014.config","00-04-77","JetArea_EtaJES"),
 }
 
 # List AFII config files separately, to avoid needing to specify a different context
@@ -61,6 +62,7 @@ calibcontexts = {
     "AntiKt4EMPFlow":pflowcontexts,
     "AntiKt4EMTopo":topocontexts,
     "AntiKt4LCTopo":topocontexts,
+    "AntiKt10LCTopo":fatjetcontexts,
     # Standard trimmed
     "AntiKt10LCTopoTrimmedPtFrac5SmallR20":fatjetcontexts,
     # R-Scan
@@ -69,7 +71,7 @@ calibcontexts = {
 
 }
 
-hasInSitu = ["AntiKt4LCTopo", "AntiKt4EMTopo", "AntiKt4EMPFlow"]
+hasInSitu = ["AntiKt4LCTopo", "AntiKt4EMTopo", "AntiKt4EMPFlow", "TrigAntiKt4EMTopo"]
 
 # This method extracts the relevant configuration, does some consistency checks,
 # then forwards the configuration to defineJetCalibTool, returning the output.
@@ -98,7 +100,7 @@ def getJetCalibTool(jetcollection, context, data_type, calibseq = ""):
         # Check that the calib sequence requests something sensible for the in situ calibration
         # Leave other checks for the tool code.
         # Might need to specialise if we decide MC trigger jets should also have in situ.
-        if calibseq_tmp.endswith("InSitu"):
+        if calibseq_tmp.endswith("Insitu"):
             if data_type == 'data':
                 if not jetcollection in hasInSitu:
                     raise ValueError("In situ calibration does not exist for {0}, context {1}".format(jetcollection,context))
@@ -141,15 +143,15 @@ def getJetCalibToolPrereqs(modspec,jetdef):
     calibcontext, data_type, calibseq = getCalibSpecsFromString(modspec)
     if calibseq=="":
         cfg, calibarea, calibseq = calibcontexts[jetdef.basename][calibcontext]
-    # For now, only dependent on calibseq -- can ignore InSitu, which is
+    # For now, only dependent on calibseq -- can ignore Insitu, which is
     # added when getting the concrete tool
     prereqs = []
     prereqs.append("mod:ConstitFourMom")
     if "JetArea" in calibseq:
         prereqs.append("input:EventDensity")
+    prereqs += ["mod:CaloEnergies"]
     if "GSC" in calibseq:
-        prereqs += ["mod:CaloEnergies",
-                    "mod:TrackMoments",
+        prereqs += ["mod:TrackMoments",
                     "ghost:MuonSegment"]
     jetcaliblog.debug("Prereqs for calibseq '{0}': {1}".format(calibseq,str(prereqs)))
     return prereqs
diff --git a/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py b/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
index 109f9fdf622d1d2e3c902b732579cc98a33ad044..e132136311ee7ca46080c0facc46ed92d37c2793 100644
--- a/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
+++ b/Reconstruction/Jet/JetRecConfig/python/ConstModHelpers.py
@@ -29,73 +29,88 @@ from PFlowUtils import PFlowUtilsConf
 
 # Maybe we need a config class in JetDefinition?
 ConstModTools = {
+    # Topoclusters
     "Origin": JetRecToolsConf.CaloClusterConstituentsOrigin,
     "EM":     JetRecToolsConf.ClusterAtEMScaleTool,
+    # Particle flow
+    "CorrectPFO":
+              JetRecToolsConf.CorrectPFOTool,
+    "CHS":    JetRecToolsConf.ChargedHadronSubtractionTool,
+    # Pileup suppression
     "Vor":    JetRecToolsConf.VoronoiWeightTool,
     "CS":     JetRecToolsConf.ConstituentSubtractorTool,
     "SK":     JetRecToolsConf.SoftKillerWeightTool
 }
 
 ConstModConfigs = {
+    # Topoclusters
     "Origin": {},
     "EM":     {},
+    # Particle flow
+    "CorrectPFO":
+              {"WeightPFOTool": PFlowUtilsConf.CP__WeightPFOTool("weightPFO")},
+    "CHS":    {},
+    # Pileup suppression
     "Vor":    {"doSpread":False, "nSigma":0},
     "CS":     {"MaxEta":5.},
     "SK":     {}
 }
 
-def ConstitModAlg(inputtype,sequence,suffix=""):
-    # May wish to pass an empty sequence for regular PFlow
-    modlist = []
+def getConstitModAlg(constit,suffix=""):
+    inputtype = constit.basetype
+
+    # Need to extend to TCC
+    if not inputtype in [xAODType.CaloCluster, xAODType.ParticleFlow]:
+        constmodlog.error("Only ParticleFlow and CaloCluster currently supported!")
+        raise TypeError("Unsupported input type {0}".format(inputtype))
+
+
+    sequence = list(constit.modifiers) # Copy, as we may make some additions
+    typename = {xAODType.CaloCluster:  "TopoCluster",
+                xAODType.ParticleFlow: "EMPFlow"
+                }[inputtype]
+
     if inputtype == xAODType.ParticleFlow:
-        weightPFO = PFlowUtilsConf.CP__WeightPFOTool("weightPFO")
-        correctPFO = JetRecToolsConf.CorrectPFOTool("correctPFO",
-            InputType = inputtype,
-            WeightPFOTool = weightPFO
-        )
-        modlist.append(correctPFO)
-    inputname = {xAODType.CaloCluster:  "TopoCluster",
-                 xAODType.ParticleFlow: "EMPFlow"
-                 }[inputtype]
+        # Always do 4mom corrections first and CHS last
+        sequence = ["CorrectPFO"] + sequence + ["CHS"]
 
+    # If no mods are needed, don't give back a tool
+    if sequence == []: return None
+
+    modlist = []
     for step in sequence:
         if step == "LC":
             continue # Nothing to do for LC clusters
         tool = None
 
-        toolname = "ConstitMod{0}_{1}{2}".format(inputname,step,suffix)
+        toolname = "ConstitMod{0}_{1}{2}".format(typename,step,suffix)
         tool = ConstModTools[step](toolname,**ConstModConfigs[step])
-        if inputtype == xAODType.ParticleFlow:
+        if inputtype == xAODType.ParticleFlow and not step in ["CorrectPFO","CHS"]:
             tool.IgnoreChargedPFO=True
             tool.ApplyToChargedPFO=False
         tool.InputType = inputtype
         modlist.append(tool)
 
     sequenceshort = "".join(sequence)
-    seqname = "ConstitMod{0}_{1}{2}".format(sequenceshort,inputname,suffix)
-    inputcontainer = ""
-    outputcontainer = ""
+    seqname = "ConstitMod{0}_{1}{2}".format(sequenceshort,typename,suffix)
+    inputcontainer = str(constit.rawname)
+    outputcontainer = str(constit.inputname)
     if inputtype==xAODType.ParticleFlow:
-        inputcontainer = "JetETMiss"
-        outputcontainer = sequenceshort if sequenceshort else "CHS"
-        chstool = JetRecToolsConf.ChargedHadronSubtractionTool("chsPFO")
-        chstool.InputType = inputtype
-        modlist.append(chstool)
-    elif inputtype==xAODType.CaloCluster:
-        inputcontainer = "CaloCalTopoClusters"
-        outputcontainer = sequenceshort+"TopoClusters"
-    else:
-        constmodlog.error("Only ParticleFlow and CaloCluster currently supported!")
-        raise TypeError("Unsupported input type {0}".format(inputtype))
-
-    # If no mods are needed, don't give back a tool
-    if not modlist: return components
+        # Tweak PF names because ConstModSequence needs to work with
+        # up to 4 containers
+        def chopPFO(thestring):
+            pfostr = "ParticleFlowObjects"
+            if thestring.endswith(pfostr):
+                return thestring[:-len(pfostr)]
+            return thestring
+        inputcontainer = chopPFO(inputcontainer)
+        outputcontainer = chopPFO(outputcontainer)
 
     modseq = JetRecToolsConf.JetConstituentModSequence(seqname,
         InputType=inputtype,
         OutputContainer = outputcontainer,
         InputContainer= inputcontainer,
-        Modifiers = [ mod for mod in modlist]
+        Modifiers = modlist
     )
 
     constitmodalg = JetRecConf.JetAlgorithm("jetalg_{0}".format(modseq.getName()))
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
index 978024c80eb44cb108367056422bd969bce460a5..9f60833da7d42b3de0621ea76cf78b8144da5e24 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
@@ -10,9 +10,6 @@
 
 __all__ =  ["JetConstit", "JetGhost", "JetDefinition","xAODType"]
 
-# Code from JetRecUtils
-# define the convention that we write R truncating the decimal point
-# if R>=1, then we write R*10
 from AthenaCommon import Logging
 jetlog = Logging.logging.getLogger('JetDefinition')
 
@@ -25,6 +22,9 @@ except:
 from ROOT import xAODType
 xAODType.ObjectType
 
+# Code from JetRecUtils
+# define the convention that we write R truncating the decimal point
+# if R>=1, then we write R*10
 def formatRvalue(parameter):
     # impose precision limits where there could be ambiguity
     if int(10*parameter)>=1 and int(100*parameter % 10):
@@ -44,12 +44,18 @@ def buildJetAlgName(finder, mainParam, variableRMassScale=None, variableRMinRadi
     return finder + formatRvalue(mainParam)
 
 # A class that defines the type of object used to build a jet
+# Normally defaults to standard offline input containers, but
+# can be overridden.
 class JetConstit(object):
-    def __init__(self, type, modifiers=[]):
-        self.__basetype = type
+    def __init__(self, objtype, modifiers=[], rawname=None, inputname=None):
+        self.__basetype = objtype
         self.__modifiers = modifiers
+        # Override for unmodified container name
+        self.__rawname = rawname
+        # Override for final container name
+        self.__inputname = inputname
 
-        self.defineLabelAndContainerName()
+        self.defineLabelAndContainerNames()
         pass
 
     def __hash__(self):
@@ -70,7 +76,7 @@ class JetConstit(object):
     @basetype.setter
     def basetype(self,basetype):
         self.__basetype = basetype
-        self.defineLabelAndContainerName()
+        self.defineLabelAndContainerNames()
 
     @property
     def modifiers(self):
@@ -78,19 +84,21 @@ class JetConstit(object):
     @modifiers.setter
     def modifiers(self,modifiers):
         self.__modifiers = modifiers
-        self.defineLabelAndContainerName()
+        self.defineLabelAndContainerNames()
 
-    def defineLabelAndContainerName(self):
+    def defineLabelAndContainerNames(self):
         labelnames = {
             xAODType.CaloCluster:      "Topo",
             xAODType.ParticleFlow:     "EMPFlow",
             xAODType.TrackParticle:    "Track",
             xAODType.TruthParticle:    "Truth",
             xAODType.TrackCaloCluster: "TrackCaloCluster",
-            xAODType.Jet:              "Jets",
+            xAODType.Jet:              "Jet",
             }
 
+        # Need capability to override label?
         self.label = ""
+        self.rawname = ""
         self.inputname = ""
 
         # Truth "modifiers" specify the selection tool config
@@ -99,24 +107,21 @@ class JetConstit(object):
         # Other "modifiers" determine the constit mods e.g.
         # origin correction, PU suppression etc
         # Topoclusters should also specify EM or LC
-        # Jets just specify the jet definition
+        # Jets could specify a filter e.g. pt cut or JVT??
         modstring = ""
         if self.__modifiers:
             for mod in self.__modifiers:
                 # Handle special case of topocluster state
                 if mod in ["EM","LC"]:
                     self.label += mod
-                    self.inputname += mod
                 else:
                     modstring += mod
 
-        if self.__basetype==xAODType.Jet:
-            self.label += labelnames[self.__basetype]
-        else:
-            self.label += labelnames[self.__basetype]
+        self.label += labelnames[self.basetype]
+        if self.basetype!=xAODType.Jet:
             self.label += modstring
-            if self.__basetype==xAODType.TruthParticle:
-                self.label = self.label.replace("NoWZ","WZ")
+        if self.basetype==xAODType.TruthParticle:
+            self.label = self.label.replace("NoWZ","WZ")
 
         containernames = {
             xAODType.CaloCluster:      "TopoClusters",
@@ -126,22 +131,36 @@ class JetConstit(object):
             xAODType.TrackCaloCluster: "TrackCaloClusters",
             xAODType.Jet:              "Jets",
             }
-        defaultaffixes = {
+        # Sometimes the unmodified container name is longer
+        defaultaffixesraw = {
             xAODType.CaloCluster:      "CaloCal",
-            xAODType.ParticleFlow:     "CHS",
-            xAODType.TrackParticle:    "",
-            xAODType.TruthParticle:    "",
+            xAODType.ParticleFlow:     "JetETMiss",
             xAODType.TrackCaloCluster: "CombinedAndNeutral",
-            xAODType.Jet:              "",
+            }
+        # Sometimes the standard contstit container has default mods not in modlist
+        defaultaffixesinput = {
+            xAODType.ParticleFlow:     "CHS",
             }
 
-        if not modstring:
-            modstring = defaultaffixes[self.__basetype]
-        modsfirst = [xAODType.TruthParticle, xAODType.TrackCaloCluster]
-        if self.__basetype in modsfirst:
-            self.inputname += containernames[self.basetype]+modstring
-        else:
-            self.inputname += modstring+containernames[self.basetype]
+        # User-specified override
+        if self.__rawname:
+            self.rawname = self.__rawname
+        else: # Default to standard container
+            if self.basetype in defaultaffixesraw.keys():
+                self.rawname = defaultaffixesraw[self.basetype]
+            self.rawname += containernames[self.basetype]
+
+        # User-specified override
+        if self.__inputname:
+            self.inputname = self.__inputname
+        else: # Default to naming with modifiers if requested, else default container
+            if not modstring and self.basetype in defaultaffixesinput.keys():
+                modstring = defaultaffixesinput[self.basetype]
+            modslast = [xAODType.TruthParticle, xAODType.TrackCaloCluster]
+            if self.basetype in modslast:
+                self.inputname = containernames[self.basetype]+modstring
+            else:
+                self.inputname = modstring+containernames[self.basetype]
 
     pass
 
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
index 1d7904371b4a0e661c13f1fb33a2f3c15b30204e..7e9832da72a59adc0360c12d378adfabd570b522 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
@@ -58,13 +58,16 @@ def JetRecCfg(jetdef, configFlags, jetnameprefix="",jetnamesuffix=""):
     # 
     # To facilitate running in serial mode, we also prepare
     # the constituent PseudoJetGetter here (needed for rho)
-    inputcomps, constitpjkey = JetInputCfgAndConstitPJName(deps["inputs"], configFlags, sequenceName=jetsfullname)
+    inputcomps = JetInputCfg(deps["inputs"], configFlags, sequenceName=jetsfullname)
+    constitpjalg = inputcomps.getPrimary()
+    constitpjkey = constitpjalg.PJGetter.OutputContainer
+
     components.merge(inputcomps)
     pjs = [constitpjkey]
 
     # Schedule the ghost PseudoJetGetterAlgs
     for ghostdef in deps["ghosts"]:
-        ghostpjalg = GhostPJGAlg( ghostdef )
+        ghostpjalg = getGhostPJGAlg( ghostdef )
         components.addEventAlgo( ghostpjalg, sequencename )
         ghostpjkey = ghostpjalg.PJGetter.OutputContainer
         pjs.append( ghostpjkey )
@@ -206,7 +209,7 @@ def expandPrereqs(reqtype,prereqs):
 #
 # This includes constituent modifications, track selection, copying of
 # input truth particles and event density calculations
-def JetInputCfgAndConstitPJName(inputdeps, configFlags, sequenceName):
+def JetInputCfg(inputdeps, configFlags, sequenceName):
     jetlog.info("Setting up jet inputs.")
     components = ComponentAccumulator(sequenceName)
 
@@ -230,13 +233,16 @@ def JetInputCfgAndConstitPJName(inputdeps, configFlags, sequenceName):
             # May need to generate constituent modifier sequences to
             # produce the input collection
             import ConstModHelpers
-            constitalg = ConstModHelpers.ConstitModAlg(constit.basetype,constit.modifiers)
-            components.addEventAlgo(constitalg)
+            constitalg = ConstModHelpers.getConstitModAlg(constit)
+            if constitalg:
+                components.addEventAlgo(constitalg)
 
     # Schedule the constituent PseudoJetGetterAlg
-    constitpjalg = ConstitPJGAlg( constit )
+    constitpjalg = getConstitPJGAlg( constit )
     constitpjkey = constitpjalg.PJGetter.OutputContainer
-    components.addEventAlgo( constitpjalg )
+    # Mark the constit PJGAlg as the primary so that the caller
+    # can access the output container name
+    components.addEventAlgo( constitpjalg, primary=True )
 
     # Track selection and vertex association kind of go hand in hand, though it's not
     # completely impossible that one might want one and not the other
@@ -308,7 +314,7 @@ def JetInputCfgAndConstitPJName(inputdeps, configFlags, sequenceName):
                 eventshapealg.EventDensityTool = rhotool
                 components.addEventAlgo(eventshapealg)
 
-    return components, constitpjkey
+    return components
 
 ########################################################################
 # Functions for generating PseudoJetGetters, including determining
@@ -335,7 +341,7 @@ def getGhostPrereqs(ghostdef):
         prereqs = ["input:JetInputTruthParticles"]
     return prereqs
 
-def ConstitPJGAlg(basedef):
+def getConstitPJGAlg(basedef):
     jetlog.debug("Getting PseudoJetAlg for label {0} from {1}".format(basedef.label,basedef.inputname))
     # 
     getter = JetRecConf.PseudoJetGetter("pjg_"+basedef.label,
@@ -352,7 +358,7 @@ def ConstitPJGAlg(basedef):
         )
     return pjgalg
 
-def GhostPJGAlg(ghostdef):
+def getGhostPJGAlg(ghostdef):
     label = "Ghost"+ghostdef.inputtype
     kwargs = {
         "OutputContainer":    "PseudoJet"+label,
diff --git a/Reconstruction/Jet/JetRecTools/Root/JetConstituentModSequence.cxx b/Reconstruction/Jet/JetRecTools/Root/JetConstituentModSequence.cxx
index e2e17de28ffb820351aed16c8bf60521156e1391..ed0d64ce732ea549799684533efb0502899a1b36 100644
--- a/Reconstruction/Jet/JetRecTools/Root/JetConstituentModSequence.cxx
+++ b/Reconstruction/Jet/JetRecTools/Root/JetConstituentModSequence.cxx
@@ -31,10 +31,6 @@ StatusCode JetConstituentModSequence::initialize() {
 
 
   ATH_CHECK( m_modifiers.retrieve() );
-  if( m_modifiers.empty() ) {
-    ATH_MSG_ERROR(" empty container !!" );
-    return StatusCode::FAILURE;
-  }
 
   // Set and initialise DataHandleKeys only for the correct input type
   // Die if the input type is unsupported
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
index de17a8cf55070bae74a2060eba0914c6b89a958b..4d9daeeebf76f4bf6d2c88e123eddc707feadf2a 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/jetDefs.py
@@ -2,99 +2,265 @@
 #  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
-from AthenaCommon.CFElements import seqAND
 
-## def jetFSInputMaker( ):
-##   """ Creates the jet inputMaker for FS"""
-##   RoIs = jetCollections.L1RoIs
-##   #'FSJETRoI'
-##   from DecisionHandling.DecisionHandlingConf import InputMakerForRoI
-##   InputMakerAlg = InputMakerForRoI("JetInputMaker", RoIsLink="initialRoI")
-##   InputMakerAlg.RoIs=RoIs
-##   return InputMakerAlg
+from AthenaCommon.CFElements import parOR, seqAND
+from AthenaCommon.Constants import ERROR
 
 
 def jetAthSequence(ConfigFlags):
     from TrigT2CaloCommon.CaloDef import clusterFSInputMaker
     InputMakerAlg= clusterFSInputMaker()
-    (recoSequence, sequenceOut) = jetRecoSequence()
 
-    JetAthSequence =  seqAND("jetAthSequence",[InputMakerAlg, recoSequence ])
+    dataOrMC = "data" 
+    #if ConfigFlags.Input.isMC:
+    #    dataOrMC = "mc"
+    # want to make this automatic.
+
+    jetDefString = ConfigFlags.jetdefinition
+    jetDefString += "_"+dataOrMC
+
+   
+    (recoSequence, sequenceOut) = jetRecoSequence( jetDefString )
+
+    JetAthSequence =  seqAND("jetAthSequence_"+jetDefString,[InputMakerAlg, recoSequence ])
     return (JetAthSequence, InputMakerAlg, sequenceOut)
 
     
-def jetRecoSequence(RoIs = 'FSJETRoI'):
-    from TrigT2CaloCommon.CaloDef import HLTFSTopoRecoSequence
-    (jetRecoSequence, caloclusters) = HLTFSTopoRecoSequence(RoIs)
+def jetRecoSequence(  jetDefString , RoIs = 'FSJETRoI'):
+
+    dataType = "data"
+    if jetDefString.endswith("mc"):
+        dataType = "mc"
+
+    # construct calibration key word.
+    calibSeq = ""
+    if "subjesis" in jetDefString:
+        calibSeq += "SubJESIS"
+    elif "subjes" in jetDefString:
+        calibSeq += "SubJES"
+    if calibSeq: calibSeq = "Trig"+calibSeq
+
+    radius = 0.4
+    if "a10_" in jetDefString:
+        radius = 1.0
+        #if calibSeq:
+        #    calibSeq += "JMS"
+
+    doLC=False
+    jetConstitName = "EM"
+    if "lcw" in jetDefString: 
+        doLC=True
+        jetConstitName = "LC"
+
+    # now avoid duplicate tool name errors for a4 emtopo and a10r chains.
+    extraSuffix = ""
+    if "a10r_" in jetDefString:
+        extraSuffix += "a10r"
+
+    cellMakerAlgo = _getHLTCellMakerAlgoForJets("cellMaker"+jetConstitName, RoIs, outputEDM='CaloCells'+jetConstitName, OutputLevel=ERROR) 
+    topoClusterMakerAlgo = _getHLTTopoClusterMakerAlgoForJets( "topoClusterMaker"+jetConstitName, inputEDM=cellMakerAlgo.CellsName, doLC=doLC, OutputLevel=ERROR)
+
+    caloMakerSequence = parOR("TopoClusterRecoSequence"+jetConstitName+extraSuffix+calibSeq, [cellMakerAlgo, topoClusterMakerAlgo]) 
+    caloclusters = topoClusterMakerAlgo.CaloClusters
+
+    from JetRecConfig.JetDefinition import JetConstit, JetDefinition, xAODType, JetModifier
+  
+    # chosen jet collection
+    prefix = "TrigAntiKt4"
+    if "a10_" in jetDefString:
+        prefix = "TrigAntiKt10"
+    jetsFullName = prefix+jetConstitName+calibSeq
+    trigJetConstit = JetConstit( xAODType.CaloCluster, [jetConstitName]) # 'EM' or 'LC' for trigger jets
+    trigJetConstit.istrigger = False
+    trigJetConstit.ptmin = 2e3
+    trigJetConstit.ptminfilter = 7e3
+    trigJetDef = JetDefinition( "AntiKt", radius, trigJetConstit)#, ptmin=trigMinPt,ptminfilter=trigMinPt)
+
+    from JetRecConfig import JetRecConfig
+
+    modList = [ (JetModifier("JetCaloEnergies", "jetens"), '') ]
+    modList += [ (JetModifier("JetSorter","jetsort"), '') ]
+    if calibSeq:
+   	 from JetCalibTools import JetCalibToolsConfig
+   	 jetCalibTool = JetCalibToolsConfig.getJetCalibTool( trigJetDef.basename, calibSeq, dataType )
+   	 modList += [(JetModifier("JetCalibrationTool", jetCalibTool.name()), calibSeq+':'+dataType)]
+    modList += [ ( JetModifier("JetFilterTool","jetptfilter"), str(int(trigJetConstit.ptminfilter)))  ]
+
+    trigJetConstit.rawname = caloclusters
+    trigJetConstit.inputname = jetConstitName+trigJetConstit.inputname
+    constitAlg = _getConstitAlg( trigJetConstit )
+    jetRecoSequence = parOR( "JetRecSeq_"+jetsFullName+"_"+extraSuffix, [constitAlg])
+
+    constitPJAlg = _getConstitPJGAlg( trigJetConstit )
+    constitPJKey = constitPJAlg.PJGetter.OutputContainer
+
+    pjs = [constitPJKey]
+
+    jetRecoSequence += constitPJAlg 
+        
+    eventShapeAlg = _getEventShapeAlg( trigJetConstit, constitPJKey )
+    jetRecoSequence += eventShapeAlg                    
 
-    from AthenaCommon.AppMgr import ToolSvc
-    # Jet Reco:
+    # Generate a JetAlgorithm to run the jet finding and modifiers
+    # (via a JetRecTool instance).
+    jetRecAlg = JetRecConfig.getJetAlgorithm(jetsFullName, trigJetDef, pjs, modList)
 
-    # PseudoJetAlgorithm uses a tool to convert IParticles (eg CaloClusters)
-    # to PseudoJets, which are the input to FastJet. The PseudoJets are
-    # stored in a PseudoJetContainer, which is written top the event store.
+    jetRecoSequence += jetRecAlg
 
-    from JetRec.JetRecConf import (PseudoJetAlgorithm,
-                                       PseudoJetGetter)
+    # check if asked for reclustering
+    if 'a10r' in jetDefString:
 
+        a10rJetsFullName = "TrigAntiKt10rSubJESIS"
+        a10rJetConstit = JetConstit( xAODType.Jet, [])
+        trigAntiKt10rJetDef = JetDefinition( "AntiKt", 1.0, a10rJetConstit)
 
-    pseudoJetGetter = PseudoJetGetter('simpleJobPJGetter')
-    pseudoJetGetter.InputContainer = caloclusters
-    pseudoJetGetter.OutputContainer = 'PseudoJetEMTopo'
-    pseudoJetGetter.Label = ''
+        a10rmodList= []
+        a10rJetConstit.inputname = jetsFullName 
 
-    ToolSvc += pseudoJetGetter
+        a10rconstitPJAlg = _getConstitPJGAlg( a10rJetConstit )
+        a10rconstitPJKey = a10rconstitPJAlg.PJGetter.OutputContainer
+        jetRecoSequence += a10rconstitPJAlg
 
-    algo3 = PseudoJetAlgorithm()
-    algo3.PJGetter = pseudoJetGetter
+        a10rpjs = [a10rconstitPJKey]
+        a10rjetRecAlg = JetRecConfig.getJetAlgorithm(a10rJetsFullName, trigAntiKt10rJetDef, a10rpjs, a10rmodList)
 
-    jetRecoSequence += algo3
+        jetRecoSequence += a10rjetRecAlg
+        jetsFullName = a10rJetsFullName
 
+    sequenceOut = jetsFullName
 
+    caloMakerSequence += jetRecoSequence
 
-    # JetAlgorithm and its Tools... Reads in PseudoJetContainers,
-    # alls FastJet to cluster PseudoJets,
-    # and then convert the output of FastJet (new pseudojets) to Atlas jets.
+    jetRecoFullSequence = caloMakerSequence
 
-    from JetRec.JetRecConf import (JetAlgorithm,
-                                   JetRecTool,
-                                   JetFromPseudojet,
-                                   JetFinder)
+    return (jetRecoFullSequence,sequenceOut)
 
+def _getConstitAlg( constit ):
+
+        from JetRecConfig import ConstModHelpers
+        constitalg = ConstModHelpers.getConstitModAlg(constit)
+        return constitalg
+
+def _getConstitPJGAlg(basedef):
+
+    from JetRec import JetRecConf
+    getter = JetRecConf.PseudoJetGetter("pjg_"+basedef.label,
+        InputContainer = basedef.inputname,
+        OutputContainer = "PseudoJet"+basedef.label,
+        Label = basedef.label,
+        SkipNegativeEnergy=True,
+        GhostScale=0.
+        )
+
+    pjgalg = JetRecConf.PseudoJetAlgorithm(
+        "pjgalg_"+basedef.label,
+        PJGetter = getter
+        )
+    return pjgalg
+
+def _getGhostPJGAlg(ghostdef):
+
+    label = "Ghost"+ghostdef.inputtype
+    kwargs = {
+        "OutputContainer":    "PseudoJet"+label,
+        "Label":              label,
+        "SkipNegativeEnergy": True,
+        "GhostScale":         1e-40
+        }
+
+    from JetRec import JetRecConf
+    pjgclass = JetRecConf.PseudoJetGetter
+    if ghostdef.inputtype=="MuonSegment":
+        # Muon segments have a specialised type
+        pjgclass = JetRecConf.MuonSegmentPseudoJetGetter
+        kwargs = {
+            "InputContainer":"MuonSegments",
+            "OutputContainer":"PseudoJet"+label,
+            "Label":label,
+            "Pt":1e-20
+            }
+    elif ghostdef.inputtype=="Track":
+        kwargs["InputContainer"] = "JetSelectedTracks"
+    elif ghostdef.inputtype.startswith("TruthLabel"):
+        truthsuffix = ghostdef.inputtype[5:]
+        kwargs["InputContainer"] = "TruthLabel"+truthsuffix
+    elif ghostdef.inputtype == "Truth":
+        kwargs["InputContainer"] = "JetInputTruthParticles"
+    else:
+        raise ValueError("Unhandled ghost type {0} received!".format(ghostdef.inputtype))
+
+    getter = pjgclass("pjg_"+label, **kwargs)
+
+    pjgalg = JetRecConf.PseudoJetAlgorithm(
+        "pjgalg_"+label,
+        PJGetter = getter
+        )
+    return pjgalg
+
+def _getTrackPrepAlg( trackPrepAlgName ):
+
+    from JetRecTools import JetRecToolsConfig
+    from JetRec import JetRecConf
+    # Jet track selection
+    jettrackselloose = JetRecToolsConfig.getTrackSelTool()
+    jettvassoc = JetRecToolsConfig.getTrackVertexAssocTool()
+
+    jettrkprepalg = JetRecConf.JetAlgorithm(trackPrepAlgName)
+    jettrkprepalg.Tools = [ jettrackselloose, jettvassoc ]
+
+    return jettrkprepalg
+
+def _getEventShapeAlg( constit, constitpjkey ):
+
+    rhokey = "Kt4"+constit.label+"EventShape"
+    rhotoolname = "EventDensity_Kt4"+constit.label
+    
+    from EventShapeTools import EventShapeToolsConf
+    rhotool = EventShapeToolsConf.EventDensityTool(rhotoolname)
+    rhotool.InputContainer = constitpjkey
+    rhotool.OutputContainer = rhokey
+    
+    eventshapealg = EventShapeToolsConf.EventDensityAthAlg("{0}Alg".format(rhotoolname))
+    eventshapealg.EventDensityTool = rhotool
 
-    name = 'simpleJob'
+    return eventshapealg
 
-    # jet from Pseudo jet takes a pseudo jet returned by FastJet
-    jetBuilder = JetFromPseudojet(name+'JetBuilder')
-    ToolSvc += jetBuilder
+def _getHLTCellMakerAlgoForJets( name, RoIs, outputEDM='CaloCells', OutputLevel=ERROR ):
 
-    jetFinder = JetFinder(name+'JetFinder')
-    jetFinder.JetBuilder = jetBuilder
-    jetFinder.JetAlgorithm = 'AntiKt'
-    jetFinder.VariableRMinRadius = -1
-    jetFinder.VariableRMassScale = -1
-    jetFinder.GhostArea = 0.01
-    jetFinder.JetRadius = 0.4
-    jetFinder.PtMin = 7000. 
-    jetFinder.RandomOption = 1  #  1: used run/evt number to make seed
+    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+    if not hasattr(svcMgr,'TrigCaloDataAccessSvc'):
+      from TrigT2CaloCommon.TrigT2CaloCommonConf import TrigCaloDataAccessSvc
+      svcMgr+=TrigCaloDataAccessSvc()
+      svcMgr.TrigCaloDataAccessSvc.OutputLevel=ERROR
+    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+    from TrigCaloRec.TrigCaloRecConfig import HLTCaloCellMaker
 
-    ToolSvc += jetFinder
+    inputEDM = RoIs
+    algo=HLTCaloCellMaker(name)
+    algo.RoIs=inputEDM
+    algo.TrigDataAccessMT=svcMgr.TrigCaloDataAccessSvc
+    algo.OutputLevel=OutputLevel
+    algo.CellsName=outputEDM
+   
+    return algo
 
-    jetRecTool = JetRecTool()
-    jetRecTool.InputContainer = ''  # name of a jet collection.
-    jetRecTool.OutputContainer = 'jets'
-    jetRecTool.JetFinder = jetFinder
-    jetRecTool.JetModifiers = []
-    jetRecTool.Trigger = False
-    jetRecTool.InputPseudoJets = ['StoreGateSvc+PseudoJetEMTopo']
+def _getHLTTopoClusterMakerAlgoForJets(name, inputEDM, doLC=False, OutputLevel=ERROR):
 
-    ToolSvc += jetRecTool
+    from TrigCaloRec.TrigCaloRecConfig import TrigCaloClusterMakerMT_topo
 
-    algo4 = JetAlgorithm()
-    algo4.Tools = [jetRecTool]
-    jetRecoSequence += algo4
+    algo = TrigCaloClusterMakerMT_topo(name, doMoments=True, doLC=doLC, cells=inputEDM)
+    algo.CaloClusters="caloclusters"
+    if doLC:
+        algo.CaloClusters+="LC"
+    algo.OutputLevel=OutputLevel
+    return algo
 
+def _getJetFilterTool( threshold ):
+	
+    from JetRec import JetRecConf
+    threshold = int(threshold)
+    jetptfilter = JetRecConf.JetFilterTool("jetptfilter_{0}mev".format(threshold))
+    jetptfilter.PtMin = threshold     
+    return jetptfilter
 
-    sequenceOut= jetRecTool.OutputContainer
 
-    return (jetRecoSequence,sequenceOut)
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
index 4bd4a78f9e01796af62818fa5e9d3b1d7d3d04f9..6d21d9a8137af419497fa4cbc3828a5d51f8b825 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
@@ -1,21 +1,23 @@
 #  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 #
 
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool, MenuSequence
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
     
-def jetMenuSequence():
+def jetMenuSequence(jet_def_string, hypoName):
     """ Function to create the jet Menu Sequence"""
-    
+   
+    ConfigFlags.jetdefinition=jet_def_string
     ## RoIs = 'FSJETRoI'
     #reco sequence
     from TrigUpgradeTest.jetDefs import jetAthSequence
-    (JetAthSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(jetAthSequence,ConfigFlags)
+    #(JetAthSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(jetAthSequence,ConfigFlags)
+    (JetAthSequence, InputMakerAlg, sequenceOut) = jetAthSequence(ConfigFlags)
      
     #hypo
     from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoAlgMT
     from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromDict
-    hypo = TrigJetHypoAlgMT("TrigJetHypoAlgMT")
+    hypo = TrigJetHypoAlgMT(hypoName)
     hypo.Jets = sequenceOut
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
index 3776af68e8e0f783c59ccb8af870f626222b096d..67e7686c709cfe99871a8f79dc7d6fdc9fabf1fa 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
@@ -118,23 +118,42 @@ if opt.doMuonSlice == True:
 # jet chains
 ##################################################################
 if opt.doJetSlice == True:
-    from TriggerMenuMT.HLTMenuConfig.Jet.JetSequenceSetup import jetMenuSequence
+    #from TriggerMenuMT.HLTMenuConfig.Jet.JetSequenceSetup import jetMenuSequence
+    from TrigUpgradeTest.jetMenuDefs import jetMenuSequence
 
-    jetSeq1 = jetMenuSequence()
-    jetstep1=ChainStep("Step1_jet", [jetSeq1])
+    # small-R jets, different calibrations
+    jetSeq_a4_emtopo = jetMenuSequence("a4_emtopo_subjesis", "TrigJetHypoAlgMT_a4_emtopo")
+    step_a4_emtopo =ChainStep("Step_jet_a4_emtopo", [jetSeq_a4_emtopo])
+
+    jetSeq_a4_emtopo_subjes = jetMenuSequence("a4_emtopo_subjes", "TrigJetHypoAlgMT_a4_emtopo_subjes")
+    step_a4_emtopo_subjes = ChainStep("Step_jet_a4_subjes_emtopo", [jetSeq_a4_emtopo_subjes])
+
+    jetSeq_a4_emtopo_nocalib = jetMenuSequence("a4_emtopo_nocalib", "TrigJetHypoAlgMT_a4_emtopo_nocalib")
+    step_a4_emtopo_nocalib=ChainStep("Step_jet_a4_nocalib_emtopo", [jetSeq_a4_emtopo_nocalib])
+
+    jetSeq_a4_lcw = jetMenuSequence("a4_lcw_subjesis", "TrigJetHypoAlgMT_a4_lcw")
+    step_a4_lcw=ChainStep("Step_jet_a4_lcw", [jetSeq_a4_lcw])
+
+    # large-R jets
+    jetSeq_a10_lcw_subjes = jetMenuSequence("a10_lcw_subjes", "TrigJetHypoAlgMT_a10_lcw_subjes")
+    step_a10_lcw_subjes=ChainStep("Step_jet_a10_subjes_lcw", [jetSeq_a10_lcw_subjes])
+
+    jetSeq_a10r = jetMenuSequence("a10r_emtopo_subjesis", "TrigJetHypoAlgMT_a10r")
+    step_a10r=ChainStep("Step_jet_a10r", [jetSeq_a10r])
     
     jetChains  = [
-      Chain(name='HLT_j85',  Seed="L1_J20",  ChainSteps=[jetstep1]  ),
-      Chain(name='HLT_j45', Seed="L1_J20",  ChainSteps=[jetstep1]  ),
-      Chain(name='HLT_j420', Seed='L1_J20', ChainSteps=[jetstep1] ),
-      Chain(name='HLT_j225_gsc420_boffperf_split', Seed='L1_J20', ChainSteps=[jetstep1] ),
-      Chain(name='HLT_j260_320eta490', Seed='L1_J20', ChainSteps=[jetstep1] ),
-
-      Chain(name='HLT_3j200', Seed='L1_J20', ChainSteps=[jetstep1] ),
-      Chain(name='HLT_5j70_0eta240_L14J15', Seed='L1_J20', ChainSteps=[jetstep1] ),
-      Chain(name='HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet', Seed='L1_J20',  ChainSteps=[jetstep1]  ),
+        Chain(name='HLT_j45', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j85', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j420', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j260_320eta490', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j225_gsc420_boffperf_split', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_j460_a10_lcw_subjes', Seed="L1_J20",  ChainSteps=[step_a10_lcw_subjes]  ),
+        Chain(name='HLT_j460_a10r', Seed="L1_J20",  ChainSteps=[step_a10r]  ),
+        Chain(name='HLT_3j200', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ),
+        Chain(name='HLT_5j70_0eta240', Seed="L1_J20",  ChainSteps=[step_a4_emtopo]  ), # 5j70_0eta240_L14J15 (J20 until multi-object L1 seeds supported) 
+        ]
 
-    ]
     testChains += jetChains
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_build.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_build.ref
index b760fd6ba46666cc0d1741d809c3ef29560c9427..7e7bfc0d024f725443f2be0cc16f22034259abea 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_build.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_build.ref
@@ -4,6 +4,7 @@ TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_g5_etcut ID#140
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_e3_etcut ID#2711808158
+TriggerSummaryStep1                     0   0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     0   0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -196,6 +197,7 @@ TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_g5_etcut ID#140
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
+TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j85 ID#3478728990
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_j45 ID#3664574289
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_g5_etcut ID#1407390618
@@ -207,18 +209,18 @@ TrigSignatureMoniMT                                INFO HLT_2mu6Comb
 TrigSignatureMoniMT                                INFO HLT_2mu6Comb decisions                            0         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_3j200                     20        20        0         0         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_3j200 decisions                               0         0         0         0         
-TrigSignatureMoniMT                                INFO HLT_5j70_0eta240_L14J15       20        20        0         0         0         0         0         
-TrigSignatureMoniMT                                INFO HLT_5j70_0eta240_L14J15 decisions                    0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_5j70_0eta240              20        20        0         0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_5j70_0eta240 decisions                        0         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_e3_etcut                  20        20        18        17        0         0         17        
-TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            54        342       0         0         
+TrigSignatureMoniMT                                INFO HLT_e3_etcut decisions                            54        343       0         0         
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step             20        20        18        0         0         0         18        
 TrigSignatureMoniMT                                INFO HLT_e3_etcut1step decisions                       54        0         0         0         
 TrigSignatureMoniMT                                INFO HLT_e3_etcut_mu6              20        20        10        0         0         0         1         
 TrigSignatureMoniMT                                INFO HLT_e3_etcut_mu6 decisions                        17        0         0         0         
 TrigSignatureMoniMT                                INFO HLT_e5_etcut                  20        20        17        16        0         0         16        
-TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        329       0         0         
+TrigSignatureMoniMT                                INFO HLT_e5_etcut decisions                            50        330       0         0         
 TrigSignatureMoniMT                                INFO HLT_e7_etcut                  20        20        15        14        0         0         14        
-TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        264       0         0         
+TrigSignatureMoniMT                                INFO HLT_e7_etcut decisions                            36        265       0         0         
 TrigSignatureMoniMT                                INFO HLT_g5_etcut                  20        20        17        17        0         0         17        
 TrigSignatureMoniMT                                INFO HLT_g5_etcut decisions                            50        50        0         0         
 TrigSignatureMoniMT                                INFO HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet20        20        0         0         0         0         0         
@@ -229,10 +231,14 @@ TrigSignatureMoniMT                                INFO HLT_j260_320eta490
 TrigSignatureMoniMT                                INFO HLT_j260_320eta490 decisions                      0         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_j420                      20        20        0         0         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_j420 decisions                                0         0         0         0         
-TrigSignatureMoniMT                                INFO HLT_j45                       20        20        4         0         0         0         4         
-TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 4         0         0         0         
-TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         0         0         0         
-TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        5         0         0         0         5         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 5         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10_lcw_subjes       20        20        0         0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10_lcw_subjes decisions                    0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10r                 20        20        0         0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10r decisions                           0         0         0         0         
+TrigSignatureMoniMT                                INFO HLT_j85                       20        20        1         0         0         0         1         
+TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 1         0         0         0         
 TrigSignatureMoniMT                                INFO HLT_mu20_ivar                 20        20        3         2         2         0         2         
 TrigSignatureMoniMT                                INFO HLT_mu20_ivar decisions                           3         2         2         0         
 TrigSignatureMoniMT                                INFO HLT_mu6                       20        20        3         2         1         1         1         
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/slice_jet.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/slice_jet.ref
index 16174a88f5d47065e30f4757445e45f0a76f329b..1dd4bad8957b121adcc0fdc67f9e399e218b6a0b 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/slice_jet.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/slice_jet.ref
@@ -1,7 +1,7 @@
 TrigSignatureMoniMT                                INFO HLT_3j200                     20        20        0         0         
 TrigSignatureMoniMT                                INFO HLT_3j200 decisions                               0         
-TrigSignatureMoniMT                                INFO HLT_5j70_0eta240_L14J15       20        20        0         0         
-TrigSignatureMoniMT                                INFO HLT_5j70_0eta240_L14J15 decisions                    0         
+TrigSignatureMoniMT                                INFO HLT_5j70_0eta240              20        20        0         0         
+TrigSignatureMoniMT                                INFO HLT_5j70_0eta240 decisions                        0         
 TrigSignatureMoniMT                                INFO HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet20        20        0         0         
 TrigSignatureMoniMT                                INFO HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet decisions                    0         
 TrigSignatureMoniMT                                INFO HLT_j225_gsc420_boffperf_split20        20        0         0         
@@ -10,7 +10,11 @@ TrigSignatureMoniMT                                INFO HLT_j260_320eta490
 TrigSignatureMoniMT                                INFO HLT_j260_320eta490 decisions                      0         
 TrigSignatureMoniMT                                INFO HLT_j420                      20        20        0         0         
 TrigSignatureMoniMT                                INFO HLT_j420 decisions                                0         
-TrigSignatureMoniMT                                INFO HLT_j45                       20        20        4         4         
-TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 4         
-TrigSignatureMoniMT                                INFO HLT_j85                       20        20        0         0         
-TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 0         
+TrigSignatureMoniMT                                INFO HLT_j45                       20        20        5         5         
+TrigSignatureMoniMT                                INFO HLT_j45 decisions                                 5         
+TrigSignatureMoniMT                                INFO HLT_j460_a10_lcw_subjes       20        20        0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10_lcw_subjes decisions                    0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10r                 20        20        0         0         
+TrigSignatureMoniMT                                INFO HLT_j460_a10r decisions                           0         
+TrigSignatureMoniMT                                INFO HLT_j85                       20        20        1         1         
+TrigSignatureMoniMT                                INFO HLT_j85 decisions                                 1         
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
index 0a824bf9359011aa01832fd445ceb5a8a041664f..5e2439bf9696b8b32435606f50f8b69ce38d08cf 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
@@ -107,10 +107,10 @@ JetChainParts = {
     'trigType'     : ['j'],
     'extra'        : [],
     'cleaning'     : ['noCleaning',],
-    'recoAlg'      : ['a4',],
-    'dataType'     : ['tc',],
-    'calib'        : ['em'],
-    'jetCalib'     : ['subjes'],
+    'recoAlg'      : ['a4', 'a10', 'a10r'],
+    'dataType'     : ['tc'],
+    'calib'        : ['em', 'lcw'],
+    'jetCalib'     : ['subjes', 'subjesIS', 'nojcalib'],
     'scan'         : ['FS',],
     'addInfo'      : ['perf'],