diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
index f2a67b336b9324019173ebb2d6f9fea8e969dd13..81e31ee22aa9721584feb530268bd746f1dcfa46 100644
--- a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
+++ b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
@@ -72,32 +72,6 @@ def createL1PrescalesFileFromMenu( flags ):
         log.info("Generated default L1 prescale set %s", outfile.name)
 
 
-# Creates an HLT Prescale file from the menu
-# this is a temporary solution, in the final version the HLTPrescalesSet file should come from the menu
-def createHLTPrescalesFileFromMenu( flags ):
-    log = logging.getLogger('TrigConfigSvcCfg')
-    menuFN = getHLTMenuFileName( flags )
-    with open(menuFN,'r') as fh:
-        data = json.load(fh, object_pairs_hook = odict)
-        pso = odict()
-        pso['filetype'] = 'hltprescale'
-        pso['name'] = data['name']
-        pso['prescales'] = odict()
-        ps = pso['prescales']
-        for name, chain in data['chains'].items():
-            ps[name] = odict([
-                ("name", name),
-                ("counter", chain['counter']),
-                ("hash", chain['nameHash']),
-                ("prescale", 1),
-                ("enabled", 1)
-            ])
-    psFN = getHLTPrescalesSetFileName( flags )
-    with open(psFN, 'w') as outfile:
-        json.dump(pso, outfile, indent = 4)
-        log.info("Generated default HLT prescale set %s", outfile.name)
-
-
 def getTrigConfigFromFlag( flags ):
     log = logging.getLogger('TrigConfigSvcCfg')
     tcflag = flags.Trigger.triggerConfig
diff --git a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py
index 0e39664b7c4196cf5404cdb6c3e61a43a983e210..2ae87b96f41ca1f63b71536a632095a0070d807f 100644
--- a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py
+++ b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py
@@ -90,6 +90,9 @@ def makeChain( name, L1Thresholds, ChainSteps, Streams="physics:Main", Groups=["
     chainDict["chainCounter"] = chainsCounter
     chainsCounter += 1
 
+    #set default chain prescale
+    chainDict['prescale'] = 1
+
     from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain
     chainConfig = Chain( name=name, L1Thresholds=L1Thresholds, ChainSteps=ChainSteps )
 
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py
index cf9d891678107b0fe6b2947103fd981a0c1913d3..a44e40225d6898f8f95da5c7e149b17572aa5d9b 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py
@@ -199,10 +199,22 @@ def createTriggerFlags():
     # generate or not the L1 configuration
     flags.addFlag('Trigger.generateL1Menu', False)
     
-    # L1 XML file name 
-    flags.addFlag('Trigger.LVL1ConfigFile',
-                  lambda prevFlags: 'LVL1config_'+prevFlags.Trigger.triggerMenuSetup+'_' + prevFlags.Trigger.menuVersion + '.xml')
+    def _deriveL1ConfigName(prevFlags):
+        import re
+        log = logging.getLogger('TrigConfigSvcCfg')
+        pattern = re.compile(r'_v\d+|DC14')
+        menuName=prevFlags.Trigger.triggerMenuSetup
+        patternPos = pattern.search(menuName)
+        if patternPos:
+            menuName=menuName[:patternPos.end()]
+        else:
+            log.info('Can\'t find pattern to shorten menu name, either non-existent in name or not implemented.')
+        
+        return "LVL1config_"+menuName+"_" + prevFlags.Trigger.menuVersion + ".xml"
 
+    # L1 XML file name 
+    flags.addFlag('Trigger.LVL1ConfigFile', _deriveL1ConfigName)
+   
     # L1 Json file name 
     flags.addFlag('Trigger.L1MenuFile',
                   lambda prevFlags: 'L1Menu_'+prevFlags.Trigger.triggerMenuSetup+'_' + prevFlags.Trigger.menuVersion + '.json')
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py
index 08064a737568a4eafd3eea7091fdb2566ad4ec5f..dc2a5217125fd6158593a5eb475a5afb7e62826b 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py
@@ -1,5 +1,6 @@
 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
+import re
 
 from AthenaCommon.Logging import logging
 log = logging.getLogger( 'TriggerJobOpts.TriggerFlags' )
@@ -631,7 +632,7 @@ class outputLVL1configFile(JobProperty):
 
     def __call__(self):
         if self.get_Value() == "":
-            return "LVL1config_"+TriggerFlags.triggerMenuSetup()+"_" + TriggerFlags.menuVersion() + ".xml"
+            return "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml"
         else:
             return self.get_Value()
         
@@ -699,12 +700,22 @@ class inputLVL1configFile(JobProperty):
 
     def __call__(self):
         if self.get_Value() == "":
-            return "LVL1config_"+TriggerFlags.triggerMenuSetup()+"_" + TriggerFlags.menuVersion() + ".xml"
+            return "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml"
         else:
             return self.get_Value()
-        
+
 _flags.append(inputLVL1configFile)
 
+# remove prescale suffixes
+def _getMenuBaseName( menuName):
+    log = logging.getLogger('TrigConfigSvcCfg')
+    pattern = re.compile(r'_v\d+|DC14')
+    patternPos = pattern.search(menuName)
+    if patternPos:
+        menuName=menuName[:patternPos.end()]
+    else:
+        log.info('Can\'t find pattern to shorten menu name, either non-existent in name or not implemented.')
+    return menuName
 
 
 class inputHLTconfigFile(JobProperty):
@@ -828,6 +839,7 @@ class triggerMenuSetup(JobProperty):
         'Dev_HI_run3_v1', # Dev_HI_run3 for AthenaMT
         'MC_pp_v8', 'Physics_pp_v8', 'MC_pp_v8_no_prescale', 'MC_pp_v8_tight_mc_prescale', 'MC_pp_v8_tightperf_mc_prescale', 'MC_pp_v8_loose_mc_prescale','Physics_pp_v8_tight_physics_prescale',
         'Cosmic_run3_v1',
+        'LS2_v1_TriggerValidation_mc_prescale'
         ]
 
     _default_menu='Physics_pp_v7_primaries'
@@ -852,7 +864,7 @@ class triggerMenuSetup(JobProperty):
             
         # filenames for LVL1 and HLT
         if TriggerFlags.readLVL1configFromXML() is True:
-            TriggerFlags.inputLVL1configFile = "LVL1config_"+self.get_Value()+"_" + TriggerFlags.menuVersion() + ".xml"
+            TriggerFlags.inputLVL1configFile = "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml"
         if TriggerFlags.readHLTconfigFromXML() is True and (TriggerFlags.inputHLTconfigFile=="" or TriggerFlags.inputHLTconfigFile is None):
             TriggerFlags.inputHLTconfigFile = "HLTconfig_"+self.get_Value()+"_" + TriggerFlags.menuVersion() + ".xml"
 
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py
index b57e441fd0b8be64327b54c81ad6627c0ab8c8f1..08d7d249d3b66b3ee7ab6975ebb51ac960043327 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py
@@ -489,6 +489,11 @@ if not opt.createHLTMenuExternally:
     # generating the HLT structure requires
     # the L1Decoder to be defined in the topSequence
     menu.generateMT()
+    # Note this will also create the requested HLTPrescale JSON
+    # - the default file (with all prescales set to 1) is not really needed.
+    # - If no file is provided all chains are either enabled or disabled,
+    #   depending on the property L1Decoder.PrescalingTool.KeepUnknownChains being True or False
+
 
     if opt.endJobAfterGenerate:
         import sys
@@ -505,14 +510,6 @@ svcMgr.MessageSvc.infoLimit=10000
 from TrigConfigSvc.TrigConfigSvcCfg import getHLTConfigSvc
 svcMgr += conf2toConfigurable( getHLTConfigSvc(ConfigFlags) )
 
-if not opt.createHLTMenuExternally:
-    # the generation of the prescale set file from the menu (with all prescales set to 1)
-    # is not really needed. If no file is provided all chains are either enabled or disabled,
-    # depending on the property L1Decoder.PrescalingTool.KeepUnknownChains being True or False
-    from TrigConfigSvc.TrigConfigSvcCfg import createHLTPrescalesFileFromMenu
-    createHLTPrescalesFileFromMenu(ConfigFlags)
-
-
 
 # ---------------------------------------------------------------
 # Monitoring
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
index 6f49fdccfbba7f4d8bc07270177010bc636089ae..7e0d8a6407f5b482542da2dc2e6e8cc1ab74b857 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
+++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
@@ -153,6 +153,6 @@ atlas_build_lvl1_trigger_menu( MC_pp_run3_v1 )
 atlas_build_lvl1_trigger_menu( Cosmic_run3_v1 )
 atlas_build_lvl1_trigger_menu( PhysicsP1_HI_run3_v1 )
 atlas_build_lvl1_trigger_menu( Dev_HI_run3_v1 )
-
+atlas_build_lvl1_trigger_menu( LS2_v1_TriggerValidation_mc_prescale )
 
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
index 3ad2a6e75e0030781b64dafb8d1bb3d660b1e7e5..8b6283e8a729cfa87a75997cb491ab84ffc42c23 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
@@ -14,9 +14,10 @@ from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT  import TriggerConfigHLT
 from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
 from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import dictFromChainName
 from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitInterSignatureChainDict
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import MenuPrescaleConfig
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import MenuPrescaleConfig, applyHLTPrescale
 from TriggerMenuMT.HLTMenuConfig.Menu.ChainMerging import mergeChainDefs
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuAlignmentTools import analyseCombinations, groupSignatures, setChainSignatures
+
 from AthenaCommon.Logging import logging
 log = logging.getLogger( __name__ )
 
@@ -101,8 +102,6 @@ class GenerateMenuMT(object):
         == Setup of menu in terms of prescales and overwrite function
         """
         # go over the slices and put together big list of signatures requested
-        #(L1Prescales, HLTPrescales, streamConfig) = MenuPrescaleConfig(self.triggerPythonConfig)
-        # that does not seem to work
         (self.L1Prescales, self.HLTPrescales) = MenuPrescaleConfig(TriggerConfigHLT)
         global _func_to_modify_signatures
         if _func_to_modify_signatures is not None:
@@ -177,6 +176,9 @@ class GenerateMenuMT(object):
             chainCounter += 1
             chainDict['chainCounter'] = chainCounter
 
+            #set default chain prescale
+            chainDict['prescale'] = 1
+
             log.debug("Next: getting chain configuration for chain %s ", chain.name) 
             chainConfig,lengthOfChainConfigs = self.__generateChainConfig(chainDict)
             
@@ -533,7 +535,13 @@ class GenerateMenuMT(object):
         makeHLTTree(newJO=False, triggerConfigHLT = TriggerConfigHLT)
         # the return values used for debugging, might be removed later
 
+        # Having built the Menu add prescales for disabling items (e.g. MC production)
+        applyHLTPrescale(TriggerConfigHLT, self.HLTPrescales, self.signaturesOverwritten)
+
         from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON
         generateJSON()
 
+        from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON as generatePrescaleJSON
+        generatePrescaleJSON()
+
         return finalListOfChainConfigs
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py
index 2cf1db244a2acaa1c642002f8103fed2ef3f5512..46d1bc651051194cb1a99f5fc18242182e947c1c 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py
@@ -75,6 +75,9 @@ def generateMenu( flags ):
             counter += 1
             mainChainDict['chainCounter'] = counter
 
+            #set default chain prescale
+            mainChainDict['prescale'] = 1
+
             allChainDicts.append(mainChainDict)
 
             chainDicts = splitInterSignatureChainDict(mainChainDict)
@@ -124,6 +127,9 @@ def generateMenu( flags ):
     from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON_newJO    
     generateJSON_newJO( allChainDicts, menuChains, menuAcc.getSequence("HLTAllSteps") )
 
+    from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON_newJO as generatePrescaleJSON_newJO
+    generatePrescaleJSON_newJO( allChainDicts, menuChains )
+
     return menuAcc
 
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py
new file mode 100644
index 0000000000000000000000000000000000000000..ca03f5a7ac1a562ac8dc4ddd45492a183de944ed
--- /dev/null
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py
@@ -0,0 +1,69 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+import json
+from collections import OrderedDict as odict
+from TrigConfigSvc.TrigConfigSvcCfg import getHLTPrescalesSetFileName
+from AthenaCommon.Logging import logging
+__log = logging.getLogger( __name__ )
+
+
+def __generateJSON( chainDicts, chainConfigs, menuName, fileName ):
+    """ Generates JSON given the ChainProps and sequences
+    """
+    # Prescale dictionary that is used to create the JSON content
+    prescaleDict = odict([ ("filetype", "hltprescale"), ("name", menuName), ("prescales", odict()) ])
+
+    from TriggerMenuMT.HLTMenuConfig.Menu import StreamInfo
+    for chain in chainDicts:
+        # Prepare information for stream list
+        chainStreamTags = []
+        for streamName in chain["stream"]:
+            streamTag = StreamInfo.getStreamTag(streamName)
+            # Stream needs to have been defined in StreamInfo.py otherwise is not added to JSON
+            if streamTag is None:
+                __log.error('Stream %s does not have StreamTags defined excluding from JSON', streamName)
+                continue
+            # Add stream to the chain
+            chainStreamTags.append(streamName)
+
+        # Enabled flag is what determines disabling (here is based on prescale list from MenuPrescaleConfig)
+        chainEnabled = True
+        if (int(chain["prescale"]) <= 0):
+            chainEnabled = False
+
+        # Now have all information to write the chain to the prescale dictionary
+        chainName = chain["chainName"]
+        prescaleDict["prescales"][chainName] = odict([
+            ("name", chainName),
+            ("counter", chain["chainCounter"]),
+            ("hash", chain["chainNameHash"]),
+            ("prescale", chain["prescale"]),
+            ("enabled", chainEnabled)
+            # stream information to be added with other changes (ATR-21324)
+            #("streams", chainStreamTags)
+        ])
+
+    # Prescale dictionary now completed, write to JSON
+    __log.info( "Writing HLT Prescale JSON to %s", fileName )
+    with open( fileName, 'w' ) as fp:
+        json.dump( prescaleDict, fp, indent=4, sort_keys=False )
+
+
+def generateJSON():
+    __log.info("Generating HLT Prescale JSON in the rec-ex-common job")
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT
+
+    return __generateJSON( TriggerConfigHLT.dictsList(),
+                           TriggerConfigHLT.configsList(),
+                           ConfigFlags.Trigger.triggerMenuSetup,
+                           getHLTPrescalesSetFileName(ConfigFlags) )
+
+def generateJSON_newJO( chainDicts, chainConfigs ):
+    __log.info("Generating HLT Prescale JSON in the new JO")
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+
+    return __generateJSON( chainDicts,
+                           chainConfigs,
+                           ConfigFlags.Trigger.triggerMenuSetup,
+                           getHLTPrescalesSetFileName(ConfigFlags) )
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
index 8115f3e9848b5eeb3e20c9f797333fc6b2a412c5..2244ec9d621eda4d54aac06f2fb2066b5c212df6 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
@@ -9,7 +9,7 @@
 #['name', 'L1chainParts'=[], 'stream', 'groups', 'merging'=[], 'topoStartFrom'=False],
 
 from TriggerMenuMT.HLTMenuConfig.Menu.ChainDefInMenu import ChainProp
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import addSliceChainsToPrescales
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import addSliceChainsToPrescales,disableChains
 
 import TriggerMenuMT.HLTMenuConfig.Menu.MC_pp_run3_v1 as mc_menu
 import TriggerMenuMT.HLTMenuConfig.Menu.PhysicsP1_pp_run3_v1 as p1_menu
@@ -302,9 +302,26 @@ def setupMenu():
     # Random Seeded EB chains which select at the HLT based on L1 TBP bits
     TriggerFlags.EnhancedBiasSlice.signatures = TriggerFlags.EnhancedBiasSlice.signatures() + [ ]
 
+    # --------------------------------------------------
+    # ---- Defining specific prescales to this menu ----
+    # --------------------------------------------------
+
+    Prescales = mc_menu.Prescales
+
+    ## Cosmics
 
     addSliceChainsToPrescales(TriggerFlags, Prescales.HLTPrescales_cosmics)
 
+    ## Trigger Validation (disabling high CPU chains)
+
+    Prescales.L1Prescales_trigvalid_mc_prescale  = dict([(ctpid,1) for ctpid in Prescales.L1Prescales])  # setting all L1 prescales to 1
+
+    Prescales.HLTPrescales_trigvalid_mc_prescale = {}
+
+    disableChains(TriggerFlags, Prescales.HLTPrescales_trigvalid_mc_prescale, "Online")
+    
+    # --------------------------------------------------
+
+    return Prescales
 
-Prescales = mc_menu.Prescales
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py
index 2ebceda799a869d0973cec35e6f00f17be20aff3..80d99bff0061505104f2556932ec7165b9f80adf 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py
@@ -1,7 +1,7 @@
 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
 from TriggerJobOpts.TriggerFlags import TriggerFlags
-#from TriggerMenu.menu.MenuUtil import applyHLTPrescale, resetAllPrescales
+from six import iteritems
 
 from AthenaCommon.Logging import logging
 log = logging.getLogger( __name__ )
@@ -25,14 +25,17 @@ def MenuPrescaleConfig(triggerConfigHLT):
 
     if menu_name.startswith('LS2_v1'):
         log.info('LS2_v1 menu setup')
-        from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu, Prescales
-        setupMenu()
+        from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu
+        Prescales = setupMenu()
         if 'cosmics_prescale' in menu_name:
             L1Prescales = Prescales.L1Prescales_cosmics
             HLTPrescales = Prescales.HLTPrescales_cosmics
         elif 'tight_mc_prescale' in menu_name:
             L1Prescales = Prescales.L1Prescales_tight_mc_prescale
             HLTPrescales = Prescales.HLTPrescales_tight_mc_prescale
+        elif 'TriggerValidation_mc_prescale' in menu_name:
+            L1Prescales = Prescales.L1Prescales_trigvalid_mc_prescale
+            HLTPrescales = Prescales.HLTPrescales_trigvalid_mc_prescale
         else:
             L1Prescales = Prescales.L1Prescales
             HLTPrescales = Prescales.HLTPrescales        
@@ -109,8 +112,8 @@ def MenuPrescaleConfig(triggerConfigHLT):
 
     elif menu_name.startswith('LS2_emu_v1'):
         log.info('LS2_v1 menu setup')
-        from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu, Prescales
-        setupMenu()
+        from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu
+        Prescales = setupMenu()
         if 'cosmics_prescale' in menu_name:
             L1Prescales = Prescales.L1Prescales_cosmics
             HLTPrescales = Prescales.HLTPrescales_cosmics
@@ -153,3 +156,39 @@ def addSliceChainsToPrescales(flags, cosmic_prescales):
     combined.update(cosmic_prescales)
     from copy import deepcopy
     cosmic_prescales = deepcopy(combined)
+
+def disableChains(flags, trigvalid_prescales, type_group):
+    signatures = []
+    slice_props = [prop for prop in dir(flags) if prop.endswith("Slice")]
+    for slice_prop in slice_props:
+        slice = getattr(flags, slice_prop)
+        if slice.signatures():
+            signatures.extend(slice.signatures())
+        else:
+            log.debug('SKIPPING ' + str(slice_prop))
+
+    chain_online_list=[]
+
+    for chain in signatures:
+        if type_group in chain.groups:
+            chain_online_list.append(chain.name)
+
+    trigvalid_prescales.update(zip(chain_online_list,len(chain_online_list)*[ [-1, 0,-1] ]))
+
+
+def applyHLTPrescale(triggerPythonConfig, HLTPrescale, signaturesOverwritten):
+    for item, prescales in iteritems(HLTPrescale):
+        # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale]
+        if item not in triggerPythonConfig.dicts().keys():
+            if signaturesOverwritten:
+                log.warning('Attempt to set prescales for nonexisting chain: %s', item)
+                continue
+            else:
+                log.error('Attempt to set prescales for nonexisting chain: %s', item)
+                continue
+        n = len(prescales)
+        hltchain = triggerPythonConfig.dicts()[item]
+        if n > 0:
+            hltchain['prescale'] = str(prescales[0])
+        log.info('Applied HLTPS to the item '+item+': PS'+ hltchain['prescale'])
+       
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py
index 17f31b2d8ffc2eda9ce0f0e7b0eba06a79320382..3c965544e20f73645211a33fffdbe37024367e35 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py
@@ -4,58 +4,6 @@ from TriggerJobOpts.TriggerFlags import TriggerFlags
 from AthenaCommon.Logging import logging
 log = logging.getLogger(__name__)
 
-def getStreamTagForRerunChains(triggerPythonConfig, HLTPrescale):
-    list=[]
-    for item, prescales in HLTPrescale.iteritems():
-        # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale]
-        if item not in triggerPythonConfig.allChains.keys():
-            log.debug('Signature %s not registered to TriggerPythonConfig', item)
-            continue
-        n = len(prescales)
-        hltchain = None
-        for ch in triggerPythonConfig.allChains[item]:
-            if ch.level == 'HLT': 
-                hltchain = ch
-            if n > 3  and hltchain:
-                if hltchain.prescale != "0":
-                    log.warning("chain %s in rerun mode with special strema tag does not have the correct HLT PS [=0] ",
-                                hltchain.chain_name)
-                if hltchain.rerun_prescale !=  "1":
-                    log.error("chain %s has special stream tag but it's not in rerun mode", hltchain.chain_name)
-                list.append( "%s:%s", hltchain.chain_name, prescales[3] )
-            
-
-    return list
-
-                
-
-
-def applyHLTPrescale(triggerPythonConfig, HLTPrescale):
-    for item, prescales in HLTPrescale.iteritems():
-        # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale]
-        if item not in triggerPythonConfig.allChains.keys():
-            if triggerPythonConfig.signaturesOverwritten:
-                log.warning('Attempt to set prescales for nonexisting chain: %s', item)
-                continue
-            else:
-                log.error('Attempt to set prescales for nonexisting chain: %s', item)
-                continue
-        n = len(prescales)
-        hltchain = None
-        for ch in triggerPythonConfig.allChains[item]:
-            if ch.level == 'HLT': 
-                hltchain = ch
-        if n > 0  and hltchain:
-            hltchain.prescale = str(prescales[0])
-        if n > 1  and hltchain:
-            hltchain.pass_through = str(prescales[1])
-        if n > 2  and hltchain:
-            hltchain.rerun_prescale = str(prescales[2])
-       
-        log.info('Applied HLTPS to the item '+item+': PS'+ hltchain.prescale+" PT"+hltchain.pass_through+" RerunPS"+hltchain.rerun_prescale)
-
-
-
 def checkGroups(triggerPythonConfig):
     """ Make sure the groups used in Physics and MC menu exists
     """
@@ -153,19 +101,6 @@ def checkStreamConsistency(triggerPythonConfig):
                 already_used_robs[rob_id]=stream
                 
 
-def resetAllPrescales(triggerPythonConfig):
-    for sig in triggerPythonConfig.allChains.values():
-        for chain in sig:
-            if float(chain.prescale) > 0.:
-                chain.prescale = '1'
-            if float(chain.pass_through) > 0.:
-                chain.pass_through = '1'
-            if float(chain.rerun_prescale) > 0.:   
-                chain.rerun_prescale = '1'
-    for item in triggerPythonConfig.allItems.values():
-        if float(item.prescale) > 0.:
-            item.prescale = '1'
-        
 def allSignatures():
     sigs = []
     slices = (
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
index 1d6a987438854cd9b439711fe8d121a39491d1e6..a3b2b3fc8704a2c912047030db54d52344982a81 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
@@ -56,7 +56,7 @@ def addP1Signatures():
           #ChainProp(name='HLT_beamspot_trkFS_trkfast_L1J15',  l1SeedThresholds=['FSNOSEED'], stream=['BeamSpot'], groups=['RATE:BeamSpot',  'BW:BeamSpot']),
     ]   
     TriggerFlags.MinBiasSlice.signatures   = TriggerFlags.MinBiasSlice.signatures() + [
-        ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup),
+        ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['Online',MinBiasGroup]),
     ]
     TriggerFlags.CalibSlice.signatures     = TriggerFlags.CalibSlice.signatures() + []
     TriggerFlags.CosmicSlice.signatures    = TriggerFlags.CosmicSlice.signatures() + [
@@ -135,7 +135,7 @@ def addP1Signatures():
     ]
     TriggerFlags.MonitorSlice.signatures   = TriggerFlags.MonitorSlice.signatures() + [
           ChainProp(name='HLT_costmonitor_CostMonDS_L1All',        l1SeedThresholds=['FSNOSEED'], stream=['CostMonitoring'], groups=['RATE:Monitoring','BW:Other']),
-          ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['RATE:DISCARD','BW:DISCARD']),
+          ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['Online','RATE:DISCARD','BW:DISCARD']),
     ]
 
     # Random Seeded EB chains which select at the HLT based on L1 TBP bits
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
index 9b516dd2d7ee7ac3bc08b3424f3f666af267ea88..c5007019874393bafe8b8735384ef2641f23c0ea 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
@@ -149,7 +149,7 @@ class Prescales(object):
     L1Prescales = {}
 
     #   Signature name   | [ HLTprescale, HLTpass-through, rerun]
-    #   - Prescale values should be a positive integer (default=1)
+    #   - Chains only need adding if have a Prescale value different from 1 (default)
     #   - If the current pass_through value is non-zero,
     #     the value given here will be used as pass_through rate
     #     Assuming that pass through chains are configured so
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
index accecd09b2630cc7a273478bec61baa466df9193..f0d0639369a2e0b6316256237faa092839dba865 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
@@ -42,7 +42,7 @@ class ItemDef:
         # differently in different menus
 
         # define local flag for menu version
-        isV8 = '_v8' in menuName or 'LS2_v1'==menuName or 'run3_v1' in menuName
+        isV8 = '_v8' in menuName or 'LS2_v1' in menuName or 'run3_v1' in menuName
         isHIV5 = 'HI_v5' in menuName
         isPhaseII = '_PhaseII' in menuName
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
index 56e590f3c1ea90fd333d727d05113dd01264cd56..9e03f031f72d35aa760a3f182c03f46722767853 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
@@ -17,5 +17,6 @@ menuMap = {
     "MC_HI_v4" : "MC_pp_v8",
     "PhysicsP1_pp_run3_v1" : "MC_pp_v8",
     "PhysicsP1_HI_run3_v1" : "MC_pp_v8",
-    "Dev_HI_run3_v1" : "MC_pp_v8"
+    "Dev_HI_run3_v1" : "MC_pp_v8",
+    "LS2_v1_TriggerValidation_mc_prescale" : "MC_pp_v8"
 }
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py
index bea915b129bd6ed4a98e60b8aea6f8cdf32ddafb..c76ae391ba8f4d1c06038067943fc0180978b62a 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py
@@ -291,9 +291,8 @@ makeHLTTree( triggerConfigHLT=TriggerConfigHLT )
 from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON
 generateJSON()
 
-from TrigConfigSvc.TrigConfigSvcCfg import createHLTPrescalesFileFromMenu
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
-createHLTPrescalesFileFromMenu(ConfigFlags)
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON as generatePrescaleJSON
+generatePrescaleJSON()
    
 from AthenaCommon.AlgSequence import dumpSequence, AthSequencer
 dumpSequence(topSequence)