diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
index 1a23c5bb63ea542b2fb7d9383d613de3edff4356..70014723b4fd498abb8bc27dc082bebc76eeb82c 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
+++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
@@ -1,145 +1,57 @@
-################################################################################
-# Package: TriggerMenuMT
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
 # Declare the package name:
 atlas_subdir( TriggerMenuMT )
 
-# Declare the package's dependencies: 
-atlas_depends_on_subdirs( PRIVATE
-                          Trigger/TriggerCommon/TriggerJobOpts)
-
 # External dependencies:
 find_package( six )
 
-atlas_add_test( flake8
-   SCRIPT flake8 --select=ATL,F,E7,E9,W6,E101 --enable-extension=ATL900,ATL901,ATL902
-   ${CMAKE_CURRENT_SOURCE_DIR}/python ${CMAKE_CURRENT_SOURCE_DIR}/scripts
-   POST_EXEC_SCRIPT nopost.sh )
-
-#----------------------------------
-# Function to build trigger menu:
-function( atlas_build_lvl1_trigger_menu menu )
-
-   # Don't do anything in release recompilation dryrun mode. In all other
-   # modes, proceed as usual.
-   if( ATLAS_RELEASE_RECOMPILE_DRYRUN )
-      return()
-   endif()
-
-   # Command to build trigger menu. The idea is that ${menu}.stamp gets
-   # created as the last command, should the menu generation succeed such that 
-   # after a successful menu generation it wouldn't be attempted again.
-   # In order for the installation step to not try to re-generate
-   # the menu in case it was the generation itself that failed, another
-   # stamp file, ${menu}.attempted.stamp is created as the first command.
-   # The menu is then only generated as part of the installation step if
-   # this ${menu}.attempted.stamp file doesn't even exist.
-   
-   add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp
-      COMMAND ${CMAKE_COMMAND} -E touch
-      ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp
-      COMMAND ${CMAKE_COMMAND} -E make_directory
-      ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}
-      COMMAND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/atlas_build_run.sh
-      ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh -r ${CMAKE_PROJECT_VERSION} ${menu}
-      ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}
-      COMMAND ${CMAKE_COMMAND} -E make_directory
-      ${CMAKE_XML_OUTPUT_DIRECTORY}/TriggerMenuMT
-      COMMAND ${CMAKE_COMMAND} -E copy_directory
-      ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}/
-      ${CMAKE_XML_OUTPUT_DIRECTORY}/TriggerMenuMT
-      COMMAND ${CMAKE_COMMAND} -E touch
-      ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp
-      DEPENDS "Package_$<JOIN:$<TARGET_PROPERTY:ATLAS_PACKAGES_TARGET,ATLAS_PACKAGES>,;Package_>" )
-
-   # Create custom target and add it to package dependencies
-   add_custom_target( build_menu_${menu} ALL SOURCES
-      ${CMAKE_CURRENT_BINARY_DIR}/${menu}.stamp )
-
-   # In case the file generation failed, because it wasn't even attempted
-   # (failure in another package), then try to run the generation as part
-   # of the installation. Note that apparently chaining commands inside a
-   # single execute_process(...) call doesn't work correctly during installation
-   # for some reason. Hence it's taken apart into 3 separate calls.
-   install( CODE "if( NOT EXISTS
-                     ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp )
-                     message( WARNING \"Generating trigger menu ${menu}\"
-                              \" during the installation\" )
-                     execute_process( COMMAND ${CMAKE_COMMAND} -E touch
-                        ${CMAKE_CURRENT_BINARY_DIR}/${menu}.attempted.stamp )
-                     execute_process(
-                        COMMAND ${CMAKE_COMMAND} -E make_directory
-                        ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} )
-                     execute_process(
-                        COMMAND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/atlas_build_run.sh
-                        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh
-                        -r ${CMAKE_PROJECT_VERSION} ${menu} ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} )
-                  endif()" )
-
-   # Install the generated XML files. Note that this installation rule is
-   # executed after the previous code. So by this time the files should be
-   # in place, if they could be produced.
-   install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu}/
-      DESTINATION ${CMAKE_INSTALL_XMLDIR}/TriggerMenuMT
-      USE_SOURCE_PERMISSIONS
-      FILES_MATCHING PATTERN "*.xml" )
-
-   # Create a target that will depend on all the other targets, and will
-   # print the "right message" at the end of the build. Notice that
-   # we can't rely on the Package_TriggerMenuXML target here, since
-   # the XML generation depends on all package targets being ready before
-   # it could start. So it would cause a circular dependency to make the
-   # menu targets be dependencies of the package target.
-   if( NOT TARGET TriggerMenuMTMain )
-      add_custom_target( TriggerMenuMTMain ALL
-         COMMAND ${CMAKE_COMMAND} -E echo
-         "TriggerMenuMT: Package build succeeded" )
-   endif()
-   add_dependencies( TriggerMenuMTMain build_menu_${menu} )
-
-endfunction ( atlas_build_lvl1_trigger_menu )
-
-
-
-#----------------------------------
 # Install files from the package:
 atlas_install_python_modules( python/*.py
                               python/LVL1MenuConfig
                               python/L1
                               python/HLTMenuConfig
-			      POST_BUILD_CMD ${ATLAS_FLAKE8})
-atlas_install_joboptions( share/*.py )
-
-atlas_install_scripts( scripts/generateMenuMT.py )
-atlas_install_scripts( scripts/generateL1MenuMT.sh )
-atlas_install_scripts( scripts/generateLVL1MenuMT.py )
-atlas_install_scripts( scripts/generateL1TopoMenuMT.py )
-atlas_install_scripts( scripts/test_HLTmenu.sh )
-atlas_install_scripts( scripts/generateL1MenuRun3.py )
-atlas_install_scripts( scripts/verify_menu_config.py )
-
-atlas_install_xmls( data/*.dtd data/*.xml )
-
-atlas_add_test( generateMenuMT_newJO SCRIPT python -m TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO
-                PROPERTIES TIMEOUT 500 
-              )
-
-atlas_add_test( ViewCFTest     SCRIPT python -m unittest -v TriggerMenuMT.HLTMenuConfig.Test.ViewCFTest POST_EXEC_SCRIPT nopost.sh )
-
-atlas_add_test( generateMenuMT SCRIPT bash test_HLTmenu.sh
-                PROPERTIES TIMEOUT 4000 
-              )
-
-#----------------------------------
-# List of menus to be created:
-atlas_build_lvl1_trigger_menu( LS2_v1 )
-atlas_build_lvl1_trigger_menu( Physics_pp_run3_v1 )
-atlas_build_lvl1_trigger_menu( PhysicsP1_pp_run3_v1 )
-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 )
+		                      POST_BUILD_CMD ${ATLAS_FLAKE8})
 
+atlas_install_scripts( scripts/generateMenuMT.py
+                       scripts/generateLVL1MenuMT.py
+                       scripts/generateL1TopoMenuMT.py
+                       scripts/generateL1MenuRun3.py
+                       scripts/verify_menu_config.py
+                       POST_BUILD_CMD ${ATLAS_FLAKE8} )
 
+atlas_install_scripts( scripts/generateL1MenuMT.sh )
+atlas_install_xmls( data/*.xml )
 
+# Tests in the package:
+atlas_add_test( flake8
+                SCRIPT flake8 --select=ATL,F,E7,E9,W6,E101 --enable-extension=ATL900,ATL901,ATL902
+                ${CMAKE_CURRENT_SOURCE_DIR}/python ${CMAKE_CURRENT_SOURCE_DIR}/scripts
+                POST_EXEC_SCRIPT nopost.sh )
+
+atlas_add_test( ViewCFTest
+                SCRIPT python -m unittest -v TriggerMenuMT.HLTMenuConfig.Test.ViewCFTest
+                POST_EXEC_SCRIPT nopost.sh )
+
+atlas_add_test( generateMenuMT_newJO
+                SCRIPT python -m TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO
+                PROPERTIES TIMEOUT 500 )
+
+atlas_add_test( generateMenuMT
+                SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/scripts/test_HLTmenu.sh
+                PROPERTIES TIMEOUT 4000 )
+
+# Test L1 trigger menus:
+function( atlas_test_lvl1_trigger_menu menu )
+   atlas_add_test( "L1_${menu}"
+                   SCRIPT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateL1MenuMT.sh
+                   -r ${CMAKE_PROJECT_VERSION} ${menu} ${CMAKE_CURRENT_BINARY_DIR}/Menus/${menu} )
+endfunction()
+
+atlas_test_lvl1_trigger_menu( LS2_v1 )
+atlas_test_lvl1_trigger_menu( Physics_pp_run3_v1 )
+atlas_test_lvl1_trigger_menu( PhysicsP1_pp_run3_v1 )
+atlas_test_lvl1_trigger_menu( MC_pp_run3_v1 )
+atlas_test_lvl1_trigger_menu( Cosmic_run3_v1 )
+atlas_test_lvl1_trigger_menu( PhysicsP1_HI_run3_v1 )
+atlas_test_lvl1_trigger_menu( Dev_HI_run3_v1 )
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/menu_config_tests.py b/Trigger/TriggerCommon/TriggerMenuMT/python/menu_config_tests.py
similarity index 100%
rename from Trigger/TriggerCommon/TriggerMenuMT/scripts/menu_config_tests.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/menu_config_tests.py
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh
index 705824041c53a6ec3ae836f27e525773fd6e3757..41b3b9679a7053f90602f43ac15debced29c85dd 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh
+++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuMT.sh
@@ -36,6 +36,8 @@ menu=$1
 dest=$2
 if [ -z "$dest" ]; then
     dest=$PWD
+else
+    mkdir -p $dest
 fi
 
 # Get absolute path name
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py
deleted file mode 100644
index c98b0ae0c8cec78fb52f3ff326cd241d834dabbe..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-# import flags
-doWriteRDOTrigger = False
-doWriteBS = False
-include("TriggerJobOpts/runHLT_standalone.py")  # noqa: F821
-
-#################################
-# Configure L1Decoder
-#################################
-
-# provide a minimal menu information
-from AthenaCommon.GlobalFlags import globalflags
-from AthenaCommon.AlgSequence import AlgSequence
-topSequence = AlgSequence()
-if globalflags.InputFormat.is_bytestream():
-   from AthenaCommon.Constants import DEBUG
-   topSequence.L1Decoder.ctpUnpacker.OutputLevel=DEBUG  # noqa: ATL900
-
-
-
-# this is a temporary hack to include new test chains
-# very hacky indeed, the L1 part should be in in the GenerateMenuMT part
-
-from TriggerJobOpts.TriggerFlags import TriggerFlags
-TriggerFlags.triggerMenuSetup = "LS2_v1"
-
-from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT import GenerateMenuMT
-g = GenerateMenuMT()
-
-
-
-
-
-##########################################
-# Menu and CF construction
-##########################################
-g.generateMT()
-
-
-
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh
deleted file mode 100755
index c26ea2bbdf29e7c550167f8ee7616260378954c6..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/testMenuMT.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env sh
-
-help() {
-    echo "Syntax: testMenuMT.sh [-r VERSION] MENU [DEST]"
-}
-
-if [ $# -lt 1 ]; then
-    help
-    exit 0
-fi
-
-while true; do
-    case "$1" in
-        -r)
-            release=$2
-            shift 2
-            ;;
-        -h)
-            help
-            exit 0
-            ;;
-        -*)
-            echo "Invalid parameter"
-            exit 1
-            ;;
-        *)
-            break
-    esac
-done
-
-menu=$1
-dest=$2
-if [ -z "$dest" ]; then
-    dest=$PWD
-fi
-
-# Get absolute path name
-dest=`cd $dest; pwd`
-
-if [ -z "$release" ]; then
-    release=${AtlasVersion}    # for interactive use
-fi
-
-# Temporary run directroy and cleanup traps in case of termination
-rundir=`mktemp -t -d tmxml.${menu}.XXXXXXXXXX`
-TRAPINT() {
-    rm -rf $rundir
-    return 130 # 128+SIGINT
-}
-TRAPTERM() {
-    rm -rf $rundir
-    return 143 # 128+SIGTERM
-}
-
-
-## menu generation starts here
-echo "generateHLTMenuMT: Building menu: ${menu} for ${release}"
-logfiletopo=topo${menu}.log
-logfilelvl1=lvl1${menu}.log
-logfilehlt=hlt${menu}.log
-cd $rundir
-
-generateLVL1MenuMT.py $menu &> $logfiletopo 
-generateL1TopoMenuMT.py $menu &> $logfilelvl1 
-generateMenuMT.py $menu &> $logfilehlt
-
-cp L1Topoconfig_*.xml ${dest}
-cp LVL1config_*.xml ${dest}
-#cp $logfilelvl1 $logfiletopo ${dest}
-
-if [[ -e outputLVL1config.xml ]]; then
-    cp outputLVL1config.xml ${dest}/LVL1config_${menu}_${release}.xml
-fi
-
-#this gives some more sensitivity to hidden problems
-grep --colour ERROR ${dest}/$logfile
-grep --colour -A 100 "Shortened traceback" ${dest}/$logfile
-
-rm -rf $rundir
-
-# Do not return real athena exit code as we want to pretend everything was fine
-#unset PYTHONDONTWRITEBYTECODE
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh
index bce1f232c39ffb24e91e73423ebffe21e662e314..19dfbd9ff9c76e03c9285487972e0c42476e8324 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh
+++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh
@@ -2,6 +2,6 @@
 
 set -e
 
-athena --config-only=config.pkl -l DEBUG --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TriggerMenuMT/generateMT.py;
+athena --config-only=config.pkl -l DEBUG --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" -c "setMenu='LS2_v1';doWriteBS=False;from TriggerJobOpts.TriggerFlags import TriggerFlags;TriggerFlags.generateMenuDiagnostics=True" TriggerJobOpts/runHLT_standalone.py
 
 verify_menu_config.py -f $PWD || { echo "ERROR: Menu verification failed" ; exit 1; }
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py
index d4e512a10bf513be1681a032f5abf4de3762bf9e..91a79a1ce3e2d89895f312990891c3641b7af5dd 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/verify_menu_config.py
@@ -15,7 +15,7 @@ import sys
 import argparse
 
 from AthenaCommon.Logging import logging
-from menu_config_tests import TriggerLevel, menu_tests
+from TriggerMenuMT.menu_config_tests import TriggerLevel, menu_tests
 
 log = logging.getLogger("TriggerMenuConfigTest")
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py b/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py
deleted file mode 100755
index 9f5039fe5a8d35d0942a26ec1af5698299978df6..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-setMenu             = "LS2_v1"
-doWriteRDOTrigger   = False
-doWriteBS           = False
-endJobAfterGenerate = False
-from TriggerJobOpts.TriggerFlags import TriggerFlags
-TriggerFlags.generateMenuDiagnostics = True
-include("TriggerJobOpts/runHLT_standalone.py")
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py b/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py
deleted file mode 100644
index 9f64d82acfc6014771f18b52d797af877cf8cbff..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/share/trigermenuMT_test.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Minimal example to build a trigger menu
-#
-from TriggerMenuMT.LVL1MenuConfig.TriggerConfigLVL1 import TriggerConfigLVL1            
-from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1Flags import Lvl1Flags
-from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1MenuItems import LVL1MenuItem
-from TriggerMenuMT.L1.Config.TriggerTypeDef import TT
-from TriggerMenuMT.LVL1MenuConfig.LVL1.Lvl1Condition import ThrCondition, Lvl1InternalTrigger
-from TriggerMenuMT.L1.Base.Logic import Logic
-
-# Define L1 menu thresholds and items
-Lvl1Flags.RemapThresholdsAsListed = True
-Lvl1Flags.thresholds = ['EM3','MU4']
-Lvl1Flags.items = ['L1_EM3','L1_MU4']
-
-l1menu = TriggerConfigLVL1( outputFile = 'l1menu.xml', 
-                            menuName = 'menutest',
-                            topoMenu = None )
-
-LVL1MenuItem.l1configForRegistration = l1menu
-
-# Register L1 menu
-bgrp = Logic(Lvl1InternalTrigger('BGRP0')) & Logic(Lvl1InternalTrigger('BGRP1'))
-
-EM3 = l1menu.registerThr('EM3','EM').addThrValue(3)
-LVL1MenuItem('L1_EM3'       ).setLogic( ThrCondition(EM3) & bgrp ).setTriggerType( TT.calo )
-
-MU4 = l1menu.registerThr('MU4','MUON').addThrValue(4)
-LVL1MenuItem('L1_MU4'       ).setLogic( ThrCondition(MU4) & bgrp ).setTriggerType( TT.muon )
-
-# Generate and write L1 menu
-l1menu.generateMenu()        
-l1menu.writeXML()
-
-
-from TriggerMenu.menu.TriggerPythonConfig import TriggerPythonConfig
-from TriggerMenu.menu.HLTObjects import HLTChain
-hltmenu = TriggerPythonConfig('hltmenu.xml')
-
-from TrigSteeringTest.TrigSteeringTestConf import PESA__dummyAlgo
-defalgo = PESA__dummyAlgo('Em3')
-hltmenu.addSequence("EM3" , defalgo, "em3" )
-
-chain = HLTChain( chain_name="HLT_e3", chain_counter="1", lower_chain_name="EM3", level = "HLT", prescale="1", pass_through="1")
-chain.addHLTSignature( "em3" ).addHLTSignature( "em3" )
-chain.addTriggerTypeBit('4')
-chain.addStreamTag('electrons', prescale='1', obeyLB="yes")
-chain.addStreamTag('IDCalibration', prescale='1', obeyLB="no", type="calibration")
-chain.addGroup("electrons")
-hltmenu.addHLTChain(chain)
-
-hltmenu.writeConfigFiles();
-
-import sys
-sys.exit(0)