diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
index 89d66912cc6f4811394b5e05177e95af7c1e1a3a..b98f40be728b55ee414d06090634d5695f08c917 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastSteering.cxx
@@ -324,7 +324,6 @@ HLT::ErrorCode MuFastSteering::hltFinalize() {
 HLT::ErrorCode MuFastSteering::hltExecute(const HLT::TriggerElement* inputTE, 
                                           HLT::TriggerElement* outputTE)
 {
-  StatusCode sc = StatusCode::SUCCESS;
   // Initialize monitored variables;
   m_inner_mdt_hits  = -1;
   m_middle_mdt_hits = -1;
@@ -380,6 +379,7 @@ HLT::ErrorCode MuFastSteering::hltExecute(const HLT::TriggerElement* inputTE,
   p_roids = roids.begin();
   for (p_roi=muonRoIs.begin(); p_roi!=muonRoIs.end(); ++p_roi) {
 
+    StatusCode sc = StatusCode::SUCCESS;
     double roiEta = (*p_roi)->eta();
     double roiPhi = (*p_roi)->phi();
 
diff --git a/Trigger/TrigAlgorithms/TrigmuRoI/src/TrigmuRoI.cxx b/Trigger/TrigAlgorithms/TrigmuRoI/src/TrigmuRoI.cxx
index 217673e74bca492c46a3cc1b966fef72043e4bdf..df27cb9bd1c041d9c8060d483cc4156de8765496 100644
--- a/Trigger/TrigAlgorithms/TrigmuRoI/src/TrigmuRoI.cxx
+++ b/Trigger/TrigAlgorithms/TrigmuRoI/src/TrigmuRoI.cxx
@@ -223,12 +223,22 @@ HLT::ErrorCode TrigmuRoI::hltExecute(std::vector<std::vector<HLT::TriggerElement
 
        if ((*it).second >= m_minValueForOutOfTimeBC &&
            (*it).second <= m_maxValueForOutOfTimeBC    ) {
+
+           // generic TrigRoiDescriptor
            HLT::TriggerElement* te;
 	   TrigRoiDescriptor* roiDescriptor = 
 	     new TrigRoiDescriptor( ((*it).first).roIWord(), 0, roi_id, eta, etamin, etamax, phi, phimin, phimax,0,-255,255);
 
            te = addRoI(type_out, roiDescriptor);
            te->setActiveState(true);
+
+           // MuFaststeering also requires a RecMuonRoI
+           std::vector< TrigConf::TriggerThreshold* > dummy_thresholds;
+	   LVL1::RecMuonRoI* muonroi =
+	     new LVL1::RecMuonRoI( ((*it).first).roIWord(), &( *m_recRPCRoiSvc ), &( *m_recTGCRoiSvc ), &dummy_thresholds );
+
+	   if( attachFeature( te, muonroi, "L1MuRoI" ) != HLT::OK ) return HLT::ERROR;
+
 	   if(m_log.level() <= MSG::DEBUG) {
 	       m_log << MSG::DEBUG << "New RoI descriptor for "
 	             << region << " created from word 0x"
diff --git a/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py b/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py
index 274572428117b1c898e8fa549559eed123d989ba..95876bffccf4e79db13194610917c3631f1ca120 100755
--- a/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py
+++ b/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py
@@ -2254,6 +2254,17 @@ class L2EFChain_mu(L2EFChainDef):
     from TrigInDetConf.TrigInDetSequence import TrigInDetSequence
     [trkfast, trkprec] = TrigInDetSequence("Muon", "muon", "IDTrig").getSequence()
 
+    L2AlgName = self.getL2AlgName()
+    muFastThresh = self.getMuFastThresh()
+
+    #--- L2 algos ---
+    if "l2muonSA" in self.chainPart['L2SAAlg']:
+       theL2StandAloneAlg  = TrigL2MuonSAConfig(L2AlgName)
+       theL2StandAloneHypo = MufastHypoConfig(L2AlgName, muFastThresh)
+    else:
+       log.error("Chain built with %s but so far only l2muonSA is supported." % (self.chainPart['L2SAAlg']))
+       return False
+
     ########### EF algos  #################
     print self.chainPart['EFAlg']
     if 'SuperEF' in self.chainPart['EFAlg']:
@@ -2273,30 +2284,40 @@ class L2EFChain_mu(L2EFChainDef):
     if "inTimeRoI" not in self.chainPart['addInfo']:
       from TrigmuRoI.TrigmuRoIConfig import TrigmuRoIConfig
       Roimaker = TrigmuRoIConfig("TrigMuRoIMGonly")
-      self.EFsequenceList += [[ '' , [Roimaker], 'EF_mu_step2a' ]]
-      self.EFsequenceList += [[ 'EF_mu_step2a' , trkfast+trkprec, 'EF_mu_step2b']]
+      self.L2sequenceList += [[ '', [Roimaker], 'L2_mu_step0']]
+      self.L2sequenceList += [[ 'L2_mu_step0', [theL2StandAloneAlg], 'L2_mu_step1']]
     else:
-      self.EFsequenceList += [[ self.L2InputTE , trkfast+trkprec, 'EF_mu_step2b']]
-    self.EFsequenceList += [[ 'EF_mu_step2b' , [theEFAlg], 'EF_mu_step2']]
-    self.EFsequenceList += [[ 'EF_mu_step2'  , [theTrigMuonEFCombinerHypoConfig], 'EF_mu_step3']]
+      self.L2sequenceList += [[ self.L2InputTE, [theL2StandAloneAlg], 'L2_mu_step1']]
+
+    self.L2sequenceList += [[ 'L2_mu_step1' , [theL2StandAloneHypo], 'L2_mu_hypo1']]
+    self.EFsequenceList += [[ 'L2_mu_hypo1' , trkfast+trkprec, 'EF_mu_step1']]
+    self.EFsequenceList += [[ 'EF_mu_step1' , [theEFAlg], 'EF_mu_step2']]
+    self.EFsequenceList += [[ 'EF_mu_step2' , [theTrigMuonEFCombinerHypoConfig], 'EF_mu_step3']]
 
     if "inTimeRoI" not in self.chainPart['addInfo']:
-      self.EFsignatureList += [ [['EF_mu_step2a']] ]
-    self.EFsignatureList += [ [['EF_mu_step2b']] ]
+      self.L2signatureList += [ [['L2_mu_step0']] ]
+
+    self.L2signatureList += [ [['L2_mu_step1']] ]
+    self.L2signatureList += [ [['L2_mu_hypo1']] ]
+    self.EFsignatureList += [ [['EF_mu_step1']] ]
     self.EFsignatureList += [ [['EF_mu_step2']] ]
     self.EFsignatureList += [ [['EF_mu_step3']] ]
 
     if "inTimeRoI" not in self.chainPart['addInfo']:
       self.TErenamingDict = {
-        'EF_mu_step2a': mergeRemovingOverlap('EF_SuperEF_MGOnly_L1x',  self.L2InputTE ),
-        'EF_mu_step2b': mergeRemovingOverlap('EF_SuperEF_MGOnly_',  '2b' + self.L2InputTE ),
-        'EF_mu_step2':  mergeRemovingOverlap('EF_SuperEF_MGOnly',  self.chainPartNameNoMult),
+        'L2_mu_step0':  mergeRemovingOverlap('L2_mu_SA_MGOnly_',       "TrigMuRoIMGonly_L1x"+self.L2InputTE ),
+        'L2_mu_step1':  mergeRemovingOverlap('L2_mu_SA_MGOnly_',       L2AlgName+"_L1x"+self.L2InputTE ),
+        'L2_mu_hypo1':  mergeRemovingOverlap('L2_mu_SA_MGOnly_',       L2AlgName+"_"+muFastThresh+"_L1x"+self.L2InputTE ),
+        'EF_mu_step1':  mergeRemovingOverlap('EF_SuperEF_MGOnly_L1x',  self.L2InputTE ),
+        'EF_mu_step2':  mergeRemovingOverlap('EF_SuperEF_MGOnly_L1x',  self.chainPartNameNoMult),
         'EF_mu_step3':  mergeRemovingOverlap('EF_SuperEFHypo_MGOnly',  self.chainPartNameNoMult)
       }
     else:
       self.TErenamingDict = {
-        'EF_mu_step2b': mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI_',  '2b' + self.L2InputTE ),
-        'EF_mu_step2':  mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI',  self.chainPartNameNoMult),
+        'L2_mu_step1':  mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI_',     L2AlgName+"_L1x"+self.L2InputTE ),
+        'L2_mu_hypo1':  mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI_',     L2AlgName+"_"+muFastThresh+"_L1x"+self.L2InputTE ),
+        'EF_mu_step1':  mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI_',     self.L2InputTE ),
+        'EF_mu_step2':  mergeRemovingOverlap('EF_SuperEF_MGOnly_inTimeRoI_',     self.chainPartNameNoMult),
         'EF_mu_step3':  mergeRemovingOverlap('EF_SuperEFHypo_MGOnly_inTimeRoI',  self.chainPartNameNoMult)
       }