diff --git a/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx b/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx
index 1c31a75dea4e8f18dcc9fbce4574dca44b276417..0f47344b65ba830d262c349ec5047e35c0fdf39c 100644
--- a/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx
+++ b/Trigger/TrigMonitoring/TrigSteerMonitor/src/TrigSignatureMoniMT.cxx
@@ -179,11 +179,13 @@ StatusCode TrigSignatureMoniMT::stop() {
 
       std::string stepName = stepNameMatch[0];
       stepName[0] = std::toupper(stepName[0]); // fix for "step1" names
-      chainToSteps[chain.name()].insert( stepName );
-      chainToStepsId[chain.name()].insert( nstep );
-      //check that the step name is set with the same position in the execution
-      if ("Step"+std::to_string(nstep) != stepName)
-	ATH_MSG_INFO("Sequence "<<seqName<<" (step "<<stepName<<") used at step "<<nstep<<" in chain "<<chain.name());
+      //check that the step name is set with the same position in the execution (empty steps support)
+      if ("Step"+std::to_string(nstep) == stepName) {
+        chainToSteps[chain.name()].insert( stepName );
+        chainToStepsId[chain.name()].insert( nstep );
+      } else {
+      	ATH_MSG_INFO("Missing step" << nstep << " in chain " << chain.name());
+      }
       nstep++;
     }
   }
@@ -196,9 +198,12 @@ StatusCode TrigSignatureMoniMT::stop() {
         // skip steps where chain wasn't active
         // ybins are for all axis labes, steps are in bins from 3 to stepsSize + 2
         const std::string chainName = m_passHistogram->GetXaxis()->GetBinLabel(xbin);
-        ybin < 3 || ybin > stepsSize + 2 || chainToStepsId[chainName].find(ybin - 2) != chainToStepsId[chainName].end() ?
-	  v += fixedWidth( std::to_string( int(hist->GetBinContent( xbin, ybin ))) , 11 )
-          : v += fixedWidth( "-", 11 );
+
+        if( ybin < 3 || ybin > stepsSize + 2 || chainToStepsId[chainName].count(ybin - 2) != 0 ) {
+	        v += fixedWidth( std::to_string( int(hist->GetBinContent( xbin, ybin ))) , 11 );
+        } else {
+          v += fixedWidth( "-", 11 );
+        }
       } else {
         v += fixedWidth( " ", 11 );
       }
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py
index 7fe9fd952164c11cbc348883fea90a38e48d2ce9..7e2c2389efc8c8dfc386cab8cd3f4743a90455b4 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py
@@ -112,8 +112,9 @@ def traverse(acc, startCollectionName, functor):
 
 def generateDecisionTree(chains):
     acc = ComponentAccumulator()
-    mainSequenceName = 'HLTAllSteps'
-    acc.addSequence( seqAND(mainSequenceName) )
+    mainSequence = seqAND('HLTAllSteps')
+    mainSequence.StopOverride=False
+    acc.addSequence( mainSequence )
 
     @lru_cache(None)
     def getFiltersStepSeq( stepNumber ):
@@ -124,7 +125,7 @@ def generateDecisionTree(chains):
         if stepNumber > 1:
             getRecosStepSeq( stepNumber -1 ) # make sure steps sequencers are correctly made: Step1_filter, Step1_recos, Step2_filters, Step2_recos ...
         seq = parOR( name )
-        acc.addSequence( seq, parentName = mainSequenceName )
+        acc.addSequence( seq, parentName = mainSequence.name )
         return acc.getSequence(seq.name)
 
     @lru_cache(None)
@@ -135,14 +136,14 @@ def generateDecisionTree(chains):
         getFiltersStepSeq( stepNumber ) # make sure there is always filters step before reco
         name = 'Step{}{}'.format(stepNumber, CFNaming.RECO_POSTFIX)
         seq = parOR( name )
-        acc.addSequence( seq, parentName = mainSequenceName )
+        acc.addSequence( seq, parentName = mainSequence.name )
         return acc.getSequence(seq.name)
 
     @lru_cache(None)
     def getSingleMenuSeq( stepNumber, stepName ):
         """
         """
-        name = "Menu{}_{}".format(stepNumber, stepName)
+        name = "Step{}_menu_{}".format(stepNumber, stepName)
         seq = seqAND( name )
 
         allRecoSeqName = getRecosStepSeq( stepNumber ).name
@@ -177,10 +178,10 @@ def generateDecisionTree(chains):
             filterAlg = CompFactory.PassFilter(CFNaming.filterName("Pass"))
         else:
             filterAlg = CompFactory.RoRSeqFilter(CFNaming.filterName(stepName))
-        acc.addEventAlgo(filterAlg, sequenceName=filtersStep.name)
+            acc.addEventAlgo(filterAlg, sequenceName=filtersStep.name)
         acc.addEventAlgo(filterAlg, sequenceName=singleMenuSeq.name)
 
-        log.debug('Creted filter {}'.format(filterAlg.name))
+        log.debug('Created filter {}'.format(filterAlg.name))
         return acc.getEventAlgo(filterAlg.name)
 
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py
index 6a5e441f9072220368940c15b72da42b0f48ff56..974b487c5df17f95abf8a3a1861408e7b16e7f1d 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTMenuJSON.py
@@ -36,12 +36,9 @@ def __getChainSequencers(stepsData, chainName):
         Return a list of the per-Step name() of the Sequencer which is unlocked by the Chain's Filter in the Step.
     """
     sequencers = []
-    counter = 0
     from DecisionHandling.TrigCompositeUtils import chainNameFromLegName
-    for step in stepsData:
-        counter += 1
+    for counter, step in enumerate(stepsData, 1):
         mySequencer = None
-        endOfChain = False
         for sequencer in step:
             sequencerFilter = getSequenceChildren( sequencer )[0] # Always the first child in the step
             if hasattr(sequencerFilter, "Chains") and any(chainName in chainNameFromLegName(fChain) for fChain in sequencerFilter.Chains):
@@ -49,16 +46,11 @@ def __getChainSequencers(stepsData, chainName):
                     __log.error( "Multiple Filters found (corresponding Sequencers %s, %s) for %s in Step %i!",
                         mySequencer.getName(), sequencer.getName(), chainName, counter)
                 mySequencer = sequencer
-        if mySequencer is None:
-            endOfChain = True
-            if counter == 1 and  'noalg' not in chainName:
-                __log.info("No Filter found for %s in Step 1", chainName)
-        else:
-            if endOfChain is True:
-                __log.error( "Found another Step, (Step %i) for chain %s "
-                    "which looked like it had already finished after %i Steps!", 
-                    counter, chainName, len(sequencers))
-            sequencers.append(mySequencer.getName())
+
+        sequencers.append(mySequencer.getName() if mySequencer else "")
+    # drop trailing empty names
+    while len(sequencers) != 0 and sequencers[-1] == "":
+        del sequencers[-1]
     return sequencers
 
 def __getSequencerAlgs(stepsData):