diff --git a/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py b/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py
index 1fad0d2474dae16be1732a4619edff3654b6194a..da41bee45c997d31d500cc909a7bb1a25e29aacf 100644
--- a/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py
+++ b/Trigger/TrigAlgorithms/TrigMuSuperEF/python/TrigMuSuperEFConfig.py
@@ -70,12 +70,12 @@ class TrigMuSuperEFConfig(TrigMuSuperEF):
         from AthenaCommon.CfgGetter import getPublicTool,getPublicToolClone
         self.StauCreatorTool = getPublicToolClone("TMEF_StauCreatorTool","TMEF_MuonCreatorTool",BuildStauContainer=True)
         # only add TrigMuGirl monitoring if it is run
-        if doTrigMuGirl:
-            self.MuGirlTool = getPublicTool("TMEF_MuonInsideOutRecoTool")
-            #from TrigMuGirl.TrigMuGirlMonitoring import TrigMuGirlToolMonitoring
-            #montool = TrigMuGirlToolMonitoring()
-            #print montool
-            #monTools.append( montool )
+        # if doTrigMuGirl:
+        kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonInsideOutRecoTool"))
+        #from TrigMuGirl.TrigMuGirlMonitoring import TrigMuGirlToolMonitoring
+        #montool = TrigMuGirlToolMonitoring()
+        #print montool
+        #monTools.append( montool )
 
         # turn off PrepRawData decoders in MuGirl
         if doTrigMuGirl:
@@ -124,8 +124,7 @@ def TrigMuSuperEF_MGonly(name="TrigMuSuperEF_MGonly",**kwargs):
     kwargs.setdefault("doOutsideIn", False)
     kwargs.setdefault("UseL2Info",False)
     kwargs.setdefault("DoCache", False)
-    #kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonStauRecoTool"))
-    kwargs.setdefault("MuGirlTool", "TMEF_MuonStauRecoTool")
+    kwargs.setdefault("MuGirlTool", getPublicTool("TMEF_MuonStauRecoTool"))
     return TrigMuSuperEFConfig(name,**kwargs)
 
 
diff --git a/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx b/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx
index 3ce3e3c9274ec931b9d627c1e321c6711ef2f69c..085a08c9815e036a9d00f814618f70f01e9a6347 100644
--- a/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx
+++ b/Trigger/TrigAlgorithms/TrigMuSuperEF/src/TrigMuSuperEF.cxx
@@ -100,7 +100,7 @@ TrigMuSuperEF::TrigMuSuperEF(const std::string& name, ISvcLocator* pSvcLocator)
   m_debug(false),
   m_verbose(false),
   m_muonCombinedTool("MuonCombined::MuonCombinedTool/MuonCombinedTool"),
-  m_muGirlTool("MuonCombined::MuGirlTagTool/MuGirlTagTool"),
+  m_muGirlTool("TMEF_MuonInsideOutRecoTool"),
   m_caloTagTool("TrigMuSuperEF_MuonCaloTagTool"),
   m_muonSegmentTagTool("MuonCombined::MuonCombinedTool/MuonSegmentTagTool"),
   m_TrackToTrackParticleConvTool("TrackToTrackParticleConvTool",this),
diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py
index b32d4188fcd65e945acb58c1b9bb88a6c014c306..b6cdbc3cb5e2a02cb91cc81c017ebe5465b783a4 100755
--- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py
+++ b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py
@@ -417,11 +417,10 @@ def TMEF_MuonInsideOutRecoTool(name="TMEF_MuonInsideOutRecoTool",**kwargs):
 ### Stau late trigger configs
 
 def TMEF_MuonStauRecoTool( name='TMEF_MuonStauRecoTool', **kwargs ):
-   kwargs.setdefault('DoSummary', True)
-   kwargs.setdefault('OutputLevel', 'VERBOSE')
+   # kwargs.setdefault('DoSummary', True)
+   kwargs.setdefault('DoSummary', muonCombinedRecFlags.printSummary() )
    kwargs.setdefault('ConsideredPDGs', [13,-13,1000015,-1000015])
    kwargs.setdefault('DoTruth', rec.doTruth() )
-   kwargs.setdefault('DoSummary', muonCombinedRecFlags.printSummary() )
    kwargs.setdefault('MuonSegmentMaker', CfgGetter.getPublicTool('DCMathStauSegmentMaker') )
    kwargs.setdefault('MuonInsideOutRecoTool', CfgGetter.getPublicTool('TMEF_MuonStauInsideOutRecoTool') )
    return CfgMgr.MuonCombined__MuonStauRecoTool(name,**kwargs )
diff --git a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx
index 741690789c12cf62d8d5f830ef1ceb2e80bdaa3b..44ce39833cee23eab8bd047751d8a28db03b33b7 100644
--- a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx
+++ b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.cxx
@@ -24,12 +24,14 @@ TrigMuonRoITool::TrigMuonRoITool(const std::string& type,
   m_time_stamp(0),
   m_time_stamp_ns_offset(0),
   m_lumi_block(0),
-  m_robDataProviderSvc( "ROBDataProviderSvc", name )
+  m_robDataProviderSvc( "ROBDataProviderSvc", name ),
+  m_decodeMuCTPiFromROB(false)
 {
   declareInterface <ITrigMuonRoITool> ( this );
 
   // Declare the properties
   declareProperty("DaqMuCTPiROBid",m_daqMuCTPiROBid=0x760000);
+  declareProperty("DecodeMuCTPiFromROB",m_decodeMuCTPiFromROB=false);
 }
 
 
@@ -94,189 +96,180 @@ std::vector< std::pair<ROIB::MuCTPIRoI,int> >::const_iterator TrigMuonRoITool::e
 /// helper to decode MuCTPi information
 void TrigMuonRoITool::decodeMuCTPi() {
 
-  //std::cout<<"Calling TrigMuonRoITool::decodeMuCTPi"<<std::endl;
-
-   // save input stream flags
-  //std::ios_base::fmtflags log_flags_save = (msg().stream()).flags();
-  //char log_fill_char_save = (msg().stream()).fill();
+  // save input stream flags
+  std::ios_base::fmtflags log_flags_save = (msg().stream()).flags();
+  char log_fill_char_save = (msg().stream()).fill();
 
+  /////////////////////////////////////
   // check if data are still valid
+  /////////////////////////////////////
+
   // retrieve the event info information and check its validity
-  // get EventInfo
-  // const EventInfo* p_EventInfo(0);
-  // // StatusCode sc = m_storeGateSvc->retrieve(p_EventInfo);
-  // StatusCode sc = evtStore()->retrieve(p_EventInfo);
-
-  // if ((sc.isFailure()) || (p_EventInfo == 0)) {
-  //   msg(MSG::WARNING) << "Can't get EventInfo object for checking data validity." << endreq;
-  //   m_inTime_muCTPIRoIs.clear();
-  //   m_outOfTime_muCTPIRoIs.clear();
-  //   return;
-  // } else {
-  //   // check event parameters for validity. The check for run/event number is not sufficient since
-  //   // in L2 the event number = L1 ID, which may be identical to a previous one after an ECR.
-  //   // Only if all parameters match the present info is still valid
-  //   if ( (m_run_no               == p_EventInfo->event_ID()->run_number()) &&
-  // 	 (m_event_number         == p_EventInfo->event_ID()->event_number()) &&
-  // 	 (m_bunch_crossing_id    == p_EventInfo->event_ID()->bunch_crossing_id()) &&
-  // 	 (m_time_stamp           == p_EventInfo->event_ID()->time_stamp()) &&
-  // 	 (m_time_stamp_ns_offset == p_EventInfo->event_ID()->time_stamp_ns_offset()) &&
-  // 	 (m_lumi_block           == p_EventInfo->event_ID()->lumi_block()) ) {
-  //     // information is still valid
-  //     if (msgLvl(MSG::DEBUG)) {
-  // 	msg(MSG::DEBUG) << " decodeMuCTPi: Stored information is still valid. Complete EventID = " 
-  // 	    << *(p_EventInfo->event_ID()) << endreq; 
-  //     }
-  //     return ;
-  //   } else {
-  //     // information is outdated
-  //     if (msgLvl(MSG::DEBUG)) {
-  // 	msg(MSG::DEBUG) << " decodeMuCTPi: Stored information needs to be updated. Complete EventID = " 
-  // 	    << *(p_EventInfo->event_ID()) << endreq; 
-  //     }
-  //   }
-  // }
-
-  //
-  // --- Update information from DAQ ROB
-  //
+  const EventInfo* p_EventInfo(0);
+  StatusCode sc = evtStore()->retrieve(p_EventInfo);
+  if ((sc.isFailure()) || (p_EventInfo == 0)) {
+    msg(MSG::WARNING) << "Can't get EventInfo object for checking data validity." << endreq;
+    m_inTime_muCTPIRoIs.clear();
+    m_outOfTime_muCTPIRoIs.clear();
+    return;
+  } else {
+    // check event parameters for validity. The check for run/event number is not sufficient since
+    // in L2 the event number = L1 ID, which may be identical to a previous one after an ECR.
+    // Only if all parameters match the present info is still valid
+    if ( (m_run_no               == p_EventInfo->event_ID()->run_number()) &&
+  	 (m_event_number         == p_EventInfo->event_ID()->event_number()) &&
+  	 (m_bunch_crossing_id    == p_EventInfo->event_ID()->bunch_crossing_id()) &&
+  	 (m_time_stamp           == p_EventInfo->event_ID()->time_stamp()) &&
+  	 (m_time_stamp_ns_offset == p_EventInfo->event_ID()->time_stamp_ns_offset()) &&
+  	 (m_lumi_block           == p_EventInfo->event_ID()->lumi_block()) ) {
+      // information is still valid
+      if (msgLvl(MSG::DEBUG)) {
+  	msg(MSG::DEBUG) << " decodeMuCTPi: Stored information is still valid. Complete EventID = " 
+  	    << *(p_EventInfo->event_ID()) << endreq; 
+      }
+      return; // no need to decode again MUCTPI, already done for current event
+    } else {
+      // information is outdated
+      if (msgLvl(MSG::DEBUG)) {
+  	msg(MSG::DEBUG) << " decodeMuCTPi: Stored information needs to be updated. Complete EventID = " 
+  	    << *(p_EventInfo->event_ID()) << endreq; 
+      }
+    }
+  }
+
+  /////////////////////////////////////
+  // decode MUCTPI
+  /////////////////////////////////////
+
   // reset the containers and fill them with new data
   m_inTime_muCTPIRoIs.clear();
   m_outOfTime_muCTPIRoIs.clear();
 
+  // save event parameters
+  m_run_no               = p_EventInfo->event_ID()->run_number();
+  m_event_number         = p_EventInfo->event_ID()->event_number();
+  m_bunch_crossing_id    = p_EventInfo->event_ID()->bunch_crossing_id();
+  m_time_stamp           = p_EventInfo->event_ID()->time_stamp();
+  m_time_stamp_ns_offset = p_EventInfo->event_ID()->time_stamp_ns_offset();
+  m_lumi_block           = p_EventInfo->event_ID()->lumi_block();
 
-  /*
-
-  // in L2 the DAQ muCTPi ROB needs to be retreived first from the ROS
-  m_robDataProviderSvc->addROBData(m_muCTPiRobIds);
-
-  // get the muCTPi ROB fragment
-  std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> muCTPiRobFragmentVec;
-
-  std::cout<<"m_muCTPiRobIds.size() = "<<m_muCTPiRobIds.size()<<std::endl;
-
-  muCTPiRobFragmentVec.reserve(m_muCTPiRobIds.size());
-
-  m_robDataProviderSvc->getROBData(m_muCTPiRobIds,muCTPiRobFragmentVec);
-
+  // MuCTPi pointer
+  const MuCTPI_RDO* daqmuCTPIResult = 0;
   
-
-  if (muCTPiRobFragmentVec.size()==0) {
-    if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " decodeMuCTPi: No muCTPi ROB found." << endreq;
-    return;
-  }
-
-  // check for received ROB id and return if it doesn't match the DAQ MuCTPI ROB
-  if (msgLvl(MSG::DEBUG)) {
-    msg(MSG::DEBUG)
+  // Build muCTPi from DAQ ROB
+  ///////////////////////////////
+  if(m_decodeMuCTPiFromROB) {
+  
+    // in L2 the DAQ muCTPi ROB needs to be retreived first from the ROS
+    m_robDataProviderSvc->addROBData(m_muCTPiRobIds);
+
+    // get the muCTPi ROB fragment
+    std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> muCTPiRobFragmentVec;
+    muCTPiRobFragmentVec.reserve(m_muCTPiRobIds.size());
+    m_robDataProviderSvc->getROBData(m_muCTPiRobIds,muCTPiRobFragmentVec);
+    
+    if (muCTPiRobFragmentVec.size()==0) {
+      if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " decodeMuCTPi: No muCTPi ROB found." << endmsg;
+      return;
+    }
+      
+    // check for received ROB id and return if it doesn't match the DAQ MuCTPI ROB
+    if (msgLvl(MSG::DEBUG)) {
+      msg(MSG::DEBUG)
 	<< " decodeMuCTPi: ROB id = 0x" 
 	<< std::setw(6)  << MSG::hex << muCTPiRobFragmentVec[0]->source_id() << MSG::dec 
 	<< endreq;
-  }
-
-  if (muCTPiRobFragmentVec[0]->source_id() != (uint32_t)m_daqMuCTPiROBid.value()) {
-    if (msgLvl(MSG::DEBUG)) {
-      msg(MSG::DEBUG)
+    }
+    
+    if (muCTPiRobFragmentVec[0]->source_id() != (uint32_t)m_daqMuCTPiROBid.value()) {
+      if (msgLvl(MSG::DEBUG)) {
+	msg(MSG::DEBUG)
 	  << " decodeMuCTPi: received ROB id = 0x"
 	  << std::setw(6) << MSG::hex << muCTPiRobFragmentVec[0]->source_id() << MSG::dec
 	  << " does not match requested ROB id = 0x"
 	  << std::setw(6) << MSG::hex << m_daqMuCTPiROBid.value() << MSG::dec
 	  << endreq;
+      }
+      // reset msg() stream flags to original values
+      msg().flags(log_flags_save);
+      return; 
     }
-    // reset msg() stream flags to original values
-    msg().flags(log_flags_save);
-    return; 
-  }
-
-  //
-  // --- Save event parameters
-  //
-  m_run_no               = p_EventInfo->event_ID()->run_number();
-  m_event_number         = p_EventInfo->event_ID()->event_number();
-  m_bunch_crossing_id    = p_EventInfo->event_ID()->bunch_crossing_id();
-  m_time_stamp           = p_EventInfo->event_ID()->time_stamp();
-  m_time_stamp_ns_offset = p_EventInfo->event_ID()->time_stamp_ns_offset();
-  m_lumi_block           = p_EventInfo->event_ID()->lumi_block();
-
-  // decode now the ROB
-  uint32_t formatVersion = muCTPiRobFragmentVec[0]->rod_version();
-  uint32_t evtNum        = muCTPiRobFragmentVec[0]->rod_lvl1_id();
-  uint32_t robFragSize   = muCTPiRobFragmentVec[0]->fragment_size_word();
-  uint32_t rodFragSize   = muCTPiRobFragmentVec[0]->rod_fragment_size_word();
-  uint32_t robId         = muCTPiRobFragmentVec[0]->source_id();
-  uint32_t rodId         = muCTPiRobFragmentVec[0]->rod_source_id();
-  const uint32_t bcId    = muCTPiRobFragmentVec[0]->rod_bc_id();
-
-  const uint32_t* status;
-  muCTPiRobFragmentVec[0]->rod_status( status );
-  // nstatus, errorStat not used, cause compilation warning
-  //uint32_t nstatus = muCTPiRobFragmentVec[0]->rod_nstatus();
-  //uint32_t errorStat( 0 );
-  //if( nstatus > 0 ) errorStat = static_cast< uint32_t >( *status );
-  //
-
-  if (msgLvl(MSG::DEBUG)) {
-    msg(MSG::DEBUG) << "ROB ID 0x" << MSG::hex << robId <<  " ROD ID 0x"
-	<< rodId << MSG::dec << " ROB fragment size "
-	<< robFragSize << " ROD fragment size " << rodFragSize 
-	<< endreq;
-    msg(MSG::DEBUG) 
+    
+    // decode now the ROB
+    uint32_t formatVersion = muCTPiRobFragmentVec[0]->rod_version();
+    uint32_t evtNum        = muCTPiRobFragmentVec[0]->rod_lvl1_id();
+    uint32_t robFragSize   = muCTPiRobFragmentVec[0]->fragment_size_word();
+    uint32_t rodFragSize   = muCTPiRobFragmentVec[0]->rod_fragment_size_word();
+    uint32_t robId         = muCTPiRobFragmentVec[0]->source_id();
+    uint32_t rodId         = muCTPiRobFragmentVec[0]->rod_source_id();
+    const uint32_t bcId    = muCTPiRobFragmentVec[0]->rod_bc_id();
+    
+    const uint32_t* status;
+    muCTPiRobFragmentVec[0]->rod_status( status );
+    // nstatus, errorStat not used, cause compilation warning
+    //uint32_t nstatus = muCTPiRobFragmentVec[0]->rod_nstatus();
+    //uint32_t errorStat( 0 );
+    //if( nstatus > 0 ) errorStat = static_cast< uint32_t >( *status );
+    //
+    
+    if (msgLvl(MSG::DEBUG)) {
+      msg(MSG::DEBUG) << "ROB ID 0x" << MSG::hex << robId <<  " ROD ID 0x"
+		      << rodId << MSG::dec << " ROB fragment size "
+		      << robFragSize << " ROD fragment size " << rodFragSize 
+		      << endreq;
+      msg(MSG::DEBUG) 
 	<< " ROD Header L1 ID " << evtNum
 	<< " ROD Header BCID " << bcId
 	<< " ROD Header Format version " << formatVersion
-     	<< endreq;
-  }
- 
-  OFFLINE_FRAGMENTS_NAMESPACE::PointerType it_data;
-  muCTPiRobFragmentVec[0]->rod_data( it_data );
-  const uint32_t ndata = muCTPiRobFragmentVec[0]->rod_ndata();
-  if (msgLvl(MSG::DEBUG)) {
-    msg(MSG::DEBUG) << " Dumping RoI Words:" << endreq;
-    msg(MSG::DEBUG) << " number of data words: " << ndata << endreq;
-  }
-
-  // candidate multiplicity
-  std::vector< uint32_t > candidateMultiplicity;
-  // data words
-  std::vector< uint32_t > dataWord;
-  for( uint32_t i = 0; i < ndata; ++i, ++it_data ) {
-    if( *it_data >> MuCTPI_RDO::MULT_WORD_FLAG_SHIFT ) {
-      candidateMultiplicity.push_back( static_cast< uint32_t >( *it_data ) );
-      if (msgLvl(MSG::DEBUG)) {
-	msg(MSG::DEBUG) << "     0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' )
-	    << ( *it_data ) << " (candidate multiplicity)" << std::setfill( log_fill_char_save ) << endreq;
-      }
-    } else {
-      dataWord.push_back( static_cast< uint32_t >( *it_data ) );
-      if (msgLvl(MSG::DEBUG)) {
-	msg(MSG::DEBUG) << "     0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' )
-	    << ( *it_data ) << " (candidate word)" 
-	    << " (--> RoI word = 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) 
-	    << mirodToRoIBDataWord( *it_data ) << ")" 
-	    << std::setfill( log_fill_char_save ) << endreq;
+	<< endreq;
+    }
+    
+    OFFLINE_FRAGMENTS_NAMESPACE::PointerType it_data;
+    muCTPiRobFragmentVec[0]->rod_data( it_data );
+    const uint32_t ndata = muCTPiRobFragmentVec[0]->rod_ndata();
+    if (msgLvl(MSG::DEBUG)) {
+      msg(MSG::DEBUG) << " Dumping RoI Words:" << endreq;
+      msg(MSG::DEBUG) << " number of data words: " << ndata << endreq;
+    }
+    
+    // candidate multiplicity
+    std::vector< uint32_t > candidateMultiplicity;
+    // data words
+    std::vector< uint32_t > dataWord;
+    for( uint32_t i = 0; i < ndata; ++i, ++it_data ) {
+      if( *it_data >> MuCTPI_RDO::MULT_WORD_FLAG_SHIFT ) {
+	candidateMultiplicity.push_back( static_cast< uint32_t >( *it_data ) );
+	if (msgLvl(MSG::DEBUG)) {
+	  msg(MSG::DEBUG) << "     0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' )
+			  << ( *it_data ) << " (candidate multiplicity)" << std::setfill( log_fill_char_save ) << endreq;
+	}
+      } else {
+	dataWord.push_back( static_cast< uint32_t >( *it_data ) );
+	if (msgLvl(MSG::DEBUG)) {
+	  msg(MSG::DEBUG) << "     0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' )
+			  << ( *it_data ) << " (candidate word)" 
+			  << " (--> RoI word = 0x" << MSG::hex << std::setw( 8 ) << std::setfill( '0' ) 
+			  << mirodToRoIBDataWord( *it_data ) << ")" 
+			  << std::setfill( log_fill_char_save ) << endreq;
+	}
       }
     }
+    
+    // create MuCTPi RDO (DAQ  muCTPi Result)
+    daqmuCTPIResult = new MuCTPI_RDO( candidateMultiplicity, dataWord );
   }
-
-  // create MuCTPI RDO
-  MuCTPI_RDO daqmuCTPIResult( candidateMultiplicity, dataWord );       // DAQ  muCTPi Result
-  */
-
-
-  //std::cout<<"TrigMuonRoITool::decodeMuCTPi retreive MUCTPI_RDO from evtstore"<<std::endl;
   
-  // Retrieve the MuCTPI RDO
-  const MuCTPI_RDO* daqmuCTPIResult = 0;
-  StatusCode sc = evtStore()->retrieve(daqmuCTPIResult,"MUCTPI_RDO");
-  if ((sc.isFailure()) || (daqmuCTPIResult == 0)) {
-    msg(MSG::WARNING) << "Can't get MUCTPI_RDO object from event store." << endreq;
-    m_inTime_muCTPIRoIs.clear();
-    m_outOfTime_muCTPIRoIs.clear();
-    return;
+  // Retrieve the MuCTPi RDO from event store
+  //////////////////////////////////////////////
+  else{
+    sc = evtStore()->retrieve(daqmuCTPIResult,"MUCTPI_RDO");
+    if ((sc.isFailure()) || (daqmuCTPIResult == 0)) {
+      msg(MSG::WARNING) << "Can't get MUCTPI_RDO object from event store." << endreq;
+      m_inTime_muCTPIRoIs.clear();
+      m_outOfTime_muCTPIRoIs.clear();
+      return;
+    }
   }
-
-  //std::cout<<"TrigMuonRoITool::decodeMuCTPi retreived MUCTPI_RDO from evtstore !!!!"<<std::endl;
-
   
   // print contents
   if (msgLvl(MSG::DEBUG)) {
@@ -293,14 +286,12 @@ void TrigMuonRoITool::decodeMuCTPi() {
   uint16_t roiEventBCID = MuCTPI_MultiplicityWord_Decoder(daqmuCTPIResult->candidateMultiplicity()).getBCID();
   uint16_t roiEventNCan = MuCTPI_MultiplicityWord_Decoder(daqmuCTPIResult->candidateMultiplicity()).getNCandidates();
 
-  // std::cout<<"TrigMuonRoITool::decodeMuCTPi roiEventBCID "<<roiEventBCID<<std::endl;
-  // std::cout<<"TrigMuonRoITool::decodeMuCTPi roiEventNCan "<<roiEventNCan<<std::endl;
-  
   m_inTime_muCTPIRoIs.reserve( roiEventNCan );
   m_outOfTime_muCTPIRoIs.reserve( roiEventNCan );
 
   for(std::vector< uint32_t >::const_iterator it = daqmuCTPIResult->dataWord().begin();
       it != daqmuCTPIResult->dataWord().end(); ++it) {
+
     // decode the RDO data word
     MuCTPI_DataWord_Decoder daqRoI(*it);
 
@@ -309,17 +300,13 @@ void TrigMuonRoITool::decodeMuCTPi() {
 
     if (roiEventBCID == daqRoI.getBCID()) { // RoI matches event BCID
       m_inTime_muCTPIRoIs.push_back(roI);
-
-      ////////////////////////////////
-      ///// TEST TO BE REMOVED!!!!!
-      //m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) );
-      ////////////////////////////////
-
+      // The line below is meant to enable testing late particles trigger chains with in-time RoIs
+      /////m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) );
     } else {
       m_outOfTime_muCTPIRoIs.push_back( std::pair<ROIB::MuCTPIRoI,int>(roI,(int(daqRoI.getBCID())-int(roiEventBCID))) );
     }
   } // end loop over data words
-
+  
   // print contents of RoI arrays
   if (msgLvl(MSG::DEBUG)) {
     msg(MSG::DEBUG) << "=================================================" << endreq;
@@ -339,8 +326,11 @@ void TrigMuonRoITool::decodeMuCTPi() {
     }
   }
 
-  // reset msg() stream flags to original values
-  //msg().flags(log_flags_save);
+  //reset msg() stream flags to original values
+  msg().flags(log_flags_save);
+
+  if(m_decodeMuCTPiFromROB)
+    delete daqmuCTPIResult;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
diff --git a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h
index 97e30e2be7fcbb89086cc7670dc8dcb1e84718fc..ba8cfde88ce8cc0c60a4420f8d27d344429f31ce 100644
--- a/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h
+++ b/Trigger/TrigTools/TrigMuonRoITools/src/TrigMuonRoITool.h
@@ -77,6 +77,9 @@ class TrigMuonRoITool: public AthAlgTool,
 
     /// Helper to print contents of a muCTPi RoIB data word
     void dumpRoIBDataWord(uint32_t data_word );
+
+    /// Configurable to decide how to decode muCTPi
+    bool m_decodeMuCTPiFromROB;
 };
 
 #endif  // TRIGMUONROITOOL_H