diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx
index 5620f01d6d9229eac43cc14919724fc5c5129ccd..f633f993fae9f784396e72f87f8e214e8dbea543 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.cxx
@@ -40,7 +40,6 @@ namespace InDet
     : AthAlgorithm (name, pSvcLocator),
       m_particleCreatorTool("Trk::ParticleCreatorTool"),
       m_residualCalc("Trk::ResidualPullCalculator"),
-      m_tracks(0),
       m_doIBLresidual(false),
       m_slice_name(""),
       m_mon_doSliceSpecific(true),
@@ -225,7 +224,6 @@ namespace InDet
     //const TrackCollection* allTracksFromStoreGate;
 
     //initialize monitored objects
-    m_tracks = 0;
     bool runAlg = true;
     StatusCode statCode(StatusCode::SUCCESS);
 
@@ -234,20 +232,33 @@ namespace InDet
     }
 
     //+++ DQM (SA): monitoring
-    ResetMon();
+    //    ResetMon();
 
+    auto ctx = getContext();
+    auto tpHandle =   SG::makeHandle (m_trackParticleKey, ctx);
+    
+    ATH_CHECK( tpHandle.record (std::make_unique<xAOD::TrackParticleContainer>(),
+                           std::make_unique<xAOD::TrackParticleAuxContainer>()) );
+    xAOD::TrackParticleContainer* tpCont=tpHandle.ptr();
     //
-    float tmp_eta_roi = -999;  
-    float tmp_phi_roi = -999;  
-
-    auto roiCollection = SG::makeHandle(m_roiCollectionKey);
-    TrigRoiDescriptor* roi = *(roiCollection->begin());
-    tmp_eta_roi = roi->eta();
-    tmp_phi_roi = roi->phi();
+    //float tmp_eta_roi = -999;  
+    //float tmp_phi_roi = -999;  
+    ATH_MSG_DEBUG(" Getting RoI");
+    auto roiCollection = SG::makeHandle(m_roiCollectionKey, ctx);
+    ATH_MSG_DEBUG(" Got RoICollection size "<<roiCollection->size() );
+
+    if (roiCollection->size()==0) {
+      ATH_MSG_DEBUG("RoICollection size 0");
+      //      tmp_eta_roi = 0;
+      //      tmp_phi_roi = 0;
+    } else {
 
+      TrigRoiDescriptor* roi = *(roiCollection->begin());
+      //tmp_eta_roi = roi->eta();
+      //tmp_phi_roi = roi->phi();
+    }
 
-    m_tracks = 0;
-    auto tracks = SG::makeHandle(m_trackKey);
+    auto tracks = SG::makeHandle(m_trackKey, ctx);
 
     ATH_MSG_VERBOSE(" Input track collection has size " << tracks->size());
     if ( tracks->size() == 0 ) {
@@ -257,23 +268,19 @@ namespace InDet
     
     
     //convert tracks
-    auto tpHandle =   SG::makeHandle (m_trackParticleKey);
-    xAOD::TrackParticleContainer* tpCont=tpHandle.ptr();
-    ATH_CHECK( tpHandle.record (std::make_unique<xAOD::TrackParticleContainer>(),
-                           std::make_unique<xAOD::TrackParticleAuxContainer>()) );
 
     
-    //Memory Alloc
-    //    if(doTiming()) m_timerMemAlloc->start();
-    tpCont->reserve(m_tracks->size());                                                     
-    //    if(doTiming()) m_timerMemAlloc->stop();
     
 
-    if(m_tracks && runAlg) {
-      for(unsigned int idtr=0; idtr< m_tracks->size(); ++idtr) {
-        const ElementLink<TrackCollection> trackLink(*m_tracks, idtr);
+    if(runAlg) {
+      //Memory Alloc
+      //    if(doTiming()) m_timerMemAlloc->start();
+      tpCont->reserve(tracks->size());                                                     
+      //    if(doTiming()) m_timerMemAlloc->stop();
+      for(unsigned int idtr=0; idtr< tracks->size(); ++idtr) {
+        const ElementLink<TrackCollection> trackLink(*tracks, idtr);
 
-	if (m_doIBLresidual) fillIBLResidual(m_tracks->at(idtr));
+	if (m_doIBLresidual) fillIBLResidual(tracks->at(idtr));
 
 	//	if(doTiming()) m_timerTrackConversion->start();
         xAOD::TrackParticle* tp = m_particleCreatorTool->createParticle( trackLink, tpCont);
@@ -311,14 +318,14 @@ namespace InDet
     
     ATH_MSG_DEBUG("REGTEST container size = " << tpCont->size());
 
-    for (xAOD::TrackParticleContainer::iterator itr = tpCont->begin(); itr != tpCont->end(); ++itr)  {
-      FillMonPerTrack(*itr, tmp_eta_roi, tmp_phi_roi);
-    }
+    //    for (xAOD::TrackParticleContainer::iterator itr = tpCont->begin(); itr != tpCont->end(); ++itr)  {
+    //FillMonPerTrack(*itr, tmp_eta_roi, tmp_phi_roi);
+    //}
 
     if (runAlg){
       //+++ DQM (SA): per RoI quantities
-      FillMonPerRoi(roi, tmp_eta_roi, tmp_phi_roi);
-      ++m_mon_counter;
+      //      FillMonPerRoi(roi, *tracks, tmp_eta_roi, tmp_phi_roi);
+      //++m_mon_counter;
       
       return StatusCode::SUCCESS;
     } else {
@@ -483,7 +490,7 @@ namespace InDet
   }
 
 
-  void TrigTrackingxAODCnvMT::FillMonPerRoi(const TrigRoiDescriptor* roi, const double &tmp_eta_roi, const double &tmp_phi_roi) {
+  void TrigTrackingxAODCnvMT::FillMonPerRoi(const TrigRoiDescriptor* roi, const TrackCollection* tracks, const double &tmp_eta_roi, const double &tmp_phi_roi) {
 
     //+++ Prescale
     if (m_mon_counter >= m_mon_prescale) {
@@ -494,7 +501,7 @@ namespace InDet
 
 
     //+++ Common for all slices
-    if (m_tracks) m_dqm_ntrk = m_tracks->size();
+    if (tracks) m_dqm_ntrk = tracks->size();
 
     if (roi)
     {
@@ -511,8 +518,8 @@ namespace InDet
       //+++ Bjet
       if (m_slice_name == "Bjet") {
         const Trk::Perigee* tmpMp = 0;
-	if (m_tracks) {
-          for (auto track : *m_tracks) {
+	if (tracks) {
+          for (auto track : *tracks) {
 	    tmpMp = track->perigeeParameters();
 	    if (tmpMp) {
 	      m_dqm_bj_sumpt += tmpMp->pT()/1000;
@@ -529,8 +536,8 @@ namespace InDet
 	const Trk::Track* tpL = 0;
 	const Trk::Perigee* tmpMp = 0;
 	float tmp_pt_max = 0;
-	if (m_tracks) {
-          for (auto track : *m_tracks) {
+	if (tracks) {
+          for (auto track : *tracks) {
 	    tmpMp = track->perigeeParameters();
 	    if (tmpMp) {
 	      float tmp_pt = tmpMp->pT()/1000;
@@ -581,8 +588,8 @@ namespace InDet
 	float tmp_py = 0;
 	float tmp_pz = 0;
 	float tmp_e  = 0;
-	if (m_tracks) {
-          for (auto track : *m_tracks) {
+	if (tracks) {
+          for (auto track : *tracks) {
 	    tmpLMp = track->perigeeParameters();
 	    if (tmpLMp) {
 	      float tmp_qOverP = tmpLMp->parameters()[Trk::qOverP];
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h
index 23ded38dc45a8cae8e5fefb5c1a915a85b78b396..31a5538407551f325b53e27752708020de9bd8b1 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigParticleCreation/src/TrigTrackingxAODCnvMT.h
@@ -67,7 +67,7 @@ namespace InDet
   private:
     void ResetMon();
     void FillMonPerTrack(const xAOD::TrackParticle *, const double&, const double&);
-    void FillMonPerRoi(const TrigRoiDescriptor* , const double&, const double&);
+    void FillMonPerRoi(const TrigRoiDescriptor* , const TrackCollection* tracks, const double&, const double&);
     void fillIBLResidual(const Trk::Track *track);
 
   private:
@@ -76,8 +76,6 @@ namespace InDet
     const AtlasDetectorID* m_idHelper;
     const PixelID* m_pixelId;
 
-    const TrackCollection*       m_tracks;
-
     bool                         m_doIBLresidual;
 
     //Monitoring
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx
index 1ac43dcdfb7cab3d335fd5157336ace7bec17211..1d7bd442a9fc4a33c799286289a1e8bd346df2ca 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigL2ElectronFexMT.cxx
@@ -140,17 +140,24 @@ StatusCode TrigL2ElectronFexMT::execute() {
   // NULL value is specially important to avoid crashs in monitoring
   //m_trigElecColl = NULL;
 
-  auto trigElecColl =   SG::makeHandle (m_outputElectronsKey);
+  auto ctx = getContext();
+
+  auto trigElecColl =   SG::makeHandle (m_outputElectronsKey, ctx);
   ATH_CHECK( trigElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(),
                            std::make_unique<xAOD::TrigEMClusterAuxContainer>()) );
 
-  auto roiCollection = SG::makeHandle(m_roiCollectionKey);
+  auto roiCollection = SG::makeHandle(m_roiCollectionKey, ctx);
 
   //JTB For the moment assume 1 RoI (as in TrigL2ElectronFex) - could change to SuperRoI later
 
   //TrigRoiDescriptorCollection::const_iterator roiDescriptor = roiCollection->begin();
   //TrigRoiDescriptorCollection::const_iterator roiE = roiCollection->end();
 
+  if (roiCollection->size()==0) {
+    ATH_MSG_DEBUG(" RoI collection size = 0");
+    return StatusCode::SUCCESS;
+  }
+
   TrigRoiDescriptor* roiDescriptor = *(roiCollection->begin());
 
   ATH_MSG_DEBUG(" RoI ID = "   << (roiDescriptor)->roiId()
@@ -159,7 +166,7 @@ StatusCode TrigL2ElectronFexMT::execute() {
   
   float calo_eta(999), calo_phi(999), calo_et(-1);
 
-  auto clusContainer = SG::makeHandle (m_TrigEMClusterContainerKey);
+  auto clusContainer = SG::makeHandle (m_TrigEMClusterContainerKey, ctx);
   
   
   //JTB Should only be 1 cluster in each RoI 
@@ -178,7 +185,9 @@ StatusCode TrigL2ElectronFexMT::execute() {
   ATH_MSG_DEBUG("searching a matching track: loop over tracks");
 
 
-  SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackParticleContainerKey);
+
+  SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_TrackParticleContainerKey, ctx);
+
 
   if (tracks->size() < 1){
       ATH_MSG_ERROR("No track collection, vector < 1");