diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
index 7cfa439e715db4e7e321452d621fe964055bf0cf..51afbededbef64319ff0f060e64cfdc1a0a24a1a 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <algorithm>
@@ -197,7 +197,7 @@ StatusCode TrigBmumuxComboHypo::mergeMuonsFromViews(TrigBmumuxState& state) cons
 
   // for each muon we extract DecisionIDs stored in the associated Decision objects and copy them at muon.decisionIDs
   for (auto& item : muons) {
-    for (const auto& decisionEL : item.decisionLinks) {
+    for (const ElementLink<xAOD::TrigCompositeContainer> decisionEL : item.decisionLinks) {
       TrigCompositeUtils::decisionIDs(*decisionEL, item.decisionIDs);
     }
   }
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx
index e180b07e4c626c32f3085e33839d28ae534edcce..d9b1e1004016fee2c584e1d1514ee3a6cd2ae06b 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // vim: tabstop=2:shiftwidth=2:expandtab
@@ -460,7 +460,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
 
 
     // OI : here we probably should check that electron object has passed identification at the previous step
-    for ( const auto& muel : lepContainerEF1 ) {
+    for ( const ElementLink<xAOD::ElectronContainer> muel : lepContainerEF1 ) {
    
       //if ( (*muel)->lepType() != xAOD::Lep::Combined && (*muel)->lepType() != xAOD::Lep::SegmentTagged) {
       //  ATH_MSG_DEBUG("Lep from roi1 is neither Combined or SegmentTagged - reject" );
@@ -497,7 +497,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
     }
     ATH_MSG_DEBUG("Found LepContainer, Got LepEF (2) Feature, size = " << lepContainerEF2.size());
     
-    for ( const auto& muel : lepContainerEF2 ) {
+    for ( const ElementLink<xAOD::ElectronContainer> muel : lepContainerEF2 ) {
       //if ( (*muel)->lepType() != xAOD::Electron::Combined && (*muel)->lepType() != xAOD::Electron::SegmentTagged) {
       //  ATH_MSG_DEBUG("Lep from roi2 is neither Combined or SegmentTagged - reject" );
       //  continue;
@@ -519,14 +519,14 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
     
     // build a map of the tracks and corresponding leps
     std::map<const xAOD::TrackParticle*, ElementLink<xAOD::ElectronContainer> > mapTrkToLeps;
-    for (const auto& mu : lepContainerEF1) {
+    for (const ElementLink<xAOD::ElectronContainer> mu : lepContainerEF1) {
             auto idtp  = (*mu)->trackParticleLink();
             if (!idtp.isValid()) continue;
             if (!*idtp) continue;
             //if (!(*idtp)->track()) continue;
             mapTrkToLeps[(*idtp)] = mu;
     } // lepContainerEF1
-    for (const auto& mu : lepContainerEF2) {
+    for (const ElementLink<xAOD::ElectronContainer> mu : lepContainerEF2) {
             auto idtp  = (*mu)->trackParticleLink();
             if (!idtp.isValid()) continue;
             if (!*idtp) continue;
@@ -711,7 +711,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
                 std::map<const xAOD::TrackParticle*, ElementLink<xAOD::TrackParticleContainer> > mapTrackToEL;
                 
                 int idCounter(0);
-                for (const auto& trk: tracksRoiI1) {
+                for (const ElementLink<xAOD::TrackParticleContainer> trk: tracksRoiI1) {
                     // merged_tracks.push_back(trk);
                     addUnique(merged_tracks,*trk);
                     ElIndex tmp;
@@ -722,7 +722,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
                     ++idCounter;
                 }
                 idCounter = 0;
-                for (const auto& trk: tracksRoiI2) {
+                for (const ElementLink<xAOD::TrackParticleContainer> trk: tracksRoiI2) {
                     // merged_tracks.push_back(trk);
                     addUnique(merged_tracks,*trk);
                     ElIndex tmp;
@@ -1130,7 +1130,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
         ATH_MSG_WARNING("Failed to getFeaturesLinks trigBphys_X Collection in outputTE" );
         } else {
             if(msgLvl() <= MSG::DEBUG)
-            for ( const auto& eltp: ELvecTBPh) {
+              for ( const ElementLink<xAOD::TrigBphysContainer> eltp: ELvecTBPh) {
               msg() << MSG::DEBUG << "  ===== TrigBphys Container ElementLinks : " 
               << " index: "  << eltp.index()
               << " sgkey: "  << eltp.dataID()
@@ -1147,7 +1147,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE
               ElementLink<xAOD::TrigBphysContainer> secEL;
 //               secEL.resetWithKeyAndIndex(KEY,(*BPobj)->secondaryDecayLink().index());
               // match transient secondary decay ELs with those from persistified container
-              for(const auto& persistentSecEL : ELvecTBPh ) {
+              for(const ElementLink<xAOD::TrigBphysContainer> persistentSecEL : ELvecTBPh ) {
                 if(*persistentSecEL == *(*BPobj)->secondaryDecayLink())
                   secEL = persistentSecEL;
               }
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx
index ba3b44411cc3e39be7b3ba4141746a329cf116da..c402da9a5849d5dac2d407d0fa730b23761b6931 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**************************************************************************
@@ -326,7 +326,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
             // loop over the vector of muon containers
             msg() << MSG::DEBUG << "MuonContainer, Got MuonEF " << ic << " Feature, size = " << muelv.size() << endmsg;
             int i(0);
-            for ( const auto& muel: muelv) {
+            for ( const ElementLink<xAOD::MuonContainer> muel: muelv) {
                 msg() << MSG::DEBUG << "ELLink: " << i++
                     << " index: "  << muel.index()
                     << " sgkey: "  << muel.dataID()
@@ -354,7 +354,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
         for ( const auto& tpelv : vec_elv_tps) {
             msg() << MSG::DEBUG <<  "SATrackParticleContainer, Got MUSA " << ic << " Feature, size = " << tpelv.size() << endmsg;
             int i(0);
-            for ( const auto& tpel: tpelv) {
+            for ( const ElementLink<xAOD::TrackParticleContainer> tpel: tpelv) {
                 msg() << MSG::DEBUG << "ELLink: " << i++
                     << " index: "  << tpel.index()
                     << " sgkey: "  << tpel.dataID()
@@ -369,7 +369,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
     
     // for each of the two roi's make muons selection (not roi2 has m_noID complexity)
     std::vector<const xAOD::Muon*> muons0, muons1, muonsAll;
-    for (const auto& muel: vec_elv_muons[0]){
+    for (const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[0]){
         if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) {
             ATH_MSG_DEBUG("Muon from roi1 is neither Combined or SegmentTagged - reject" );
             continue;
@@ -379,7 +379,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
         m_bphysHelperTool->addUnique(*muel, muonsAll,0.005,0.005,10, m_muonParticleType);
     } // roi1
     if(vec_elv_muons.size() > 1) {
-      for (const auto& muel: vec_elv_muons[1]){
+      for (const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[1]){
           // special case if noId set
           if (m_noId) {
               // no check needed for the noID
@@ -428,7 +428,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
                 xAOD::TrigBphys * bphys = m_resultsHolder.back();
                 ElementLink<xAOD::IParticleContainer> ptl1EL,ptl2EL;
                 bool foundMu0(false), foundMu1(false);
-                for ( const auto& muel: vec_elv_muons[0] ) {
+                for ( const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[0] ) {
                     if ( *muel == mu0) {
                         ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index());
                         foundMu0 = true;
@@ -440,7 +440,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
                     if (foundMu0 && foundMu1) break; // found both links
                 }
                 if(vec_elv_muons.size() > 1) {
-                  for ( const auto& muel: vec_elv_muons[1] ) {
+                  for ( const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[1] ) {
                       if ( *muel == mu0) {
                           ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index());
                           foundMu0 = true;
@@ -481,7 +481,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
                 xAOD::TrigBphys * bphys = m_resultsHolder.back();
                 ElementLink<xAOD::IParticleContainer> ptl1EL,ptl2EL;
                 bool foundMu0(false), foundMu1(false);
-                for ( const auto& muel: vec_elv_muons[0] ) {
+                for ( const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[0] ) {
                     if ( *muel == mu0) {
                         ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index());
                         foundMu0 = true;
@@ -493,7 +493,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
                     if (foundMu0 && foundMu1) break; // found both links
                 }
                 if(vec_elv_muons.size() > 1) {
-                  for ( const auto& muel: vec_elv_muons[1] ) {
+                  for ( const ElementLink<xAOD::MuonContainer> muel: vec_elv_muons[1] ) {
                       if ( *muel == mu0) {
                           ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index());
                           foundMu0 = true;
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx
index afd2b59da5e88cc9ef43893cfdaab35975b33f41..02c4c102422bb674286d45ccc50134afa8962d60 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // vim: tabstop=2:shiftwidth=2:expandtab
@@ -870,7 +870,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
     }
     ATH_MSG_DEBUG("Found MuonContainer, Got MuonEF (1) Feature, size = " << muonContainerEF1.size());
     
-    for ( const auto& muel : muonContainerEF1 ) {
+    for ( const ElementLink<xAOD::MuonContainer> muel : muonContainerEF1 ) {
       if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) {
         ATH_MSG_DEBUG("Muon from roi1 is neither Combined or SegmentTagged - reject" );
         continue;
@@ -905,7 +905,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
     }
     ATH_MSG_DEBUG("Found MuonContainer, Got MuonEF (2) Feature, size = " << muonContainerEF2.size());
     
-    for ( const auto& muel : muonContainerEF2 ) {
+    for ( const ElementLink<xAOD::MuonContainer> muel : muonContainerEF2 ) {
       if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) {
         ATH_MSG_DEBUG("Muon from roi2 is neither Combined or SegmentTagged - reject" );
         continue;
@@ -928,7 +928,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
     // build a map of the tracks and corresponding muons
     std::map<const xAOD::TrackParticle*, ElementLink<xAOD::MuonContainer> > mapTrkToMuons;
     //for (auto& muCont: muonContainerEF1) {
-        for (const auto& mu : muonContainerEF1) {
+        for (const ElementLink<xAOD::MuonContainer> mu : muonContainerEF1) {
             auto idtp  = (*mu)->inDetTrackParticleLink();
             if (!idtp.isValid()) continue;
             if (!*idtp) continue;
@@ -937,7 +937,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
         } // muCont
     //} // muonContainerEF1
     //for (auto& muCont: muonContainerEF2) {
-        for (const auto& mu : muonContainerEF2) {
+        for (const ElementLink<xAOD::MuonContainer> mu : muonContainerEF2) {
             auto idtp  = (*mu)->inDetTrackParticleLink();
             if (!idtp.isValid()) continue;
             if (!*idtp) continue;
@@ -1135,7 +1135,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
                 std::map<const xAOD::TrackParticle*, ElementLink<xAOD::TrackParticleContainer> > mapTrackToEL;
                 
                 int idCounter(0);
-                for (const auto& trk: tracksRoiI1) {
+                for (const ElementLink<xAOD::TrackParticleContainer> trk: tracksRoiI1) {
                     // merged_tracks.push_back(trk);
                     addUnique(merged_tracks,*trk);
                     ElIndex tmp;
@@ -1146,7 +1146,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
                     ++idCounter;
                 }
                 idCounter = 0;
-                for (const auto& trk: tracksRoiI2) {
+                for (const ElementLink<xAOD::TrackParticleContainer> trk: tracksRoiI2) {
                     // merged_tracks.push_back(trk);
                     addUnique(merged_tracks,*trk);
                     ElIndex tmp;
@@ -2223,7 +2223,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
         ATH_MSG_WARNING( "Failed to getFeaturesLinks trigBphys_X Collection in outputTE" );
         } else {
             if(msgLvl() <= MSG::DEBUG){
-              for ( const auto& eltp: ELvecTBPh) {
+              for ( const ElementLink<xAOD::TrigBphysContainer> eltp: ELvecTBPh) {
                 msg() << MSG::DEBUG << "  ===== TrigBphys Container ElementLinks : " 
                   << " index: "  << eltp.index()
                   << " sgkey: "  << eltp.dataID()
@@ -2241,7 +2241,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge
               ElementLink<xAOD::TrigBphysContainer> secEL;
 //               secEL.resetWithKeyAndIndex(KEY,(*BPobj)->secondaryDecayLink().index());
               // match transient secondary decay ELs with those from persistified container
-              for(const auto& persistentSecEL : ELvecTBPh ) {
+              for(const ElementLink<xAOD::TrigBphysContainer> persistentSecEL : ELvecTBPh ) {
                 if(*persistentSecEL == *(*BPobj)->secondaryDecayLink())
                   secEL = persistentSecEL;
               }
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx
index 9aaa4601d8cd83dae5ce3852d284b489f3799765..51863a5ddc74b93ffe3f45eb7d8ae85b5aaa57a1 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**************************************************************************
@@ -259,7 +259,7 @@ void TrigEFMultiMuFex::processTriMuon(HLT::TEConstVec& inputTE, xAOD::TrigBphysC
             // loop over the vector of muon containers
             msg() << MSG::DEBUG << "MuonContainer, Got MuonEF " << ic << " Feature, size = " << muelv.size() << endmsg;
             int i(0);
-            for ( const auto& muel: muelv) {
+            for ( const ElementLink<xAOD::MuonContainer> muel: muelv) {
                 msg() << MSG::DEBUG << "ELLink: " << i++
                     << " index: "  << muel.index()
                     << " sgkey: "  << muel.dataID()
@@ -289,7 +289,7 @@ void TrigEFMultiMuFex::processTriMuon(HLT::TEConstVec& inputTE, xAOD::TrigBphysC
     std::vector<const xAOD::Muon*> uniqueMuons;
     // add all the unique muons into a single container
     for ( const auto& muelv : vec_elv_muons) {
-        for ( const auto& muel : muelv ) {
+        for ( const ElementLink<xAOD::MuonContainer> muel : muelv ) {
             m_bphysHelperTool->addUnique( *muel, uniqueMuons, 0.005,0.005,10,xAOD::Muon::InnerDetectorTrackParticle);
         } // loop over muonEL in each roi
     } // loop over rois
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx
index 10e6bd6c1351e6c89c3729fa0d2d7a5e89859da8..1005ddeae15383108c69e6edea0a102372d4f10c 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // ********************************************************************
@@ -293,7 +293,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement*  inputTE
     }
     if(msgLvl() <= MSG::DEBUG) { // print debug
         msg() << MSG::DEBUG << "Found MuonContainer, Got MuonEF size = " << elvmuon.size() << endmsg;
-        for ( const auto& muel: elvmuon) {
+        for ( const ElementLink<xAOD::MuonContainer> muel: elvmuon) {
             msg() << MSG::DEBUG << "ELLink: "
                 << " index: "  << muel.index()
                 << " sgkey: "  << muel.dataID()
@@ -302,7 +302,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement*  inputTE
                 << " ptr: "    << (muel.isValid() ? *muel : nullptr)
                 << endmsg;
         }
-        for ( const auto& muel: elvmuon) {
+        for ( const ElementLink<xAOD::MuonContainer> muel: elvmuon) {
             if (!muel.isValid()) continue;
             msg() << MSG::DEBUG << "Muon:   "
                 << " pt: " <<  (*muel)->pt()
@@ -343,7 +343,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement*  inputTE
 
     if(msgLvl() <= MSG::DEBUG) { // print debug
         msg() << MSG::DEBUG << "Found TrackParticleContainer, size: " << elvtps.size() << endmsg;
-        for ( const auto& eltp: elvtps) {
+        for ( const ElementLink<xAOD::TrackParticleContainer> eltp: elvtps) {
             msg() << MSG::DEBUG << "ELLink: "
                 << " index: "  << eltp.index()
                 << " sgkey: "  << eltp.dataID()
@@ -384,7 +384,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement*  inputTE
     //#FIXME - remember to implement the scenario of (tracks matched to roi + tracks)
     std::vector<ElementLink<xAOD::MuonContainer> > muons;
     std::vector<ElementLink<xAOD::TrackParticleContainer> > tracks;
-    for (const auto& muel: elvmuon) {
+    for (const ElementLink<xAOD::MuonContainer> muel: elvmuon) {
         if (!muel.isValid()) continue;
         const xAOD::TrackParticle * mutrk = (*muel)->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
         if (!mutrk) continue;
@@ -427,7 +427,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement*  inputTE
         
         muons.push_back(muel);
     } // optimize? addUnique?
-    for (const auto& trkel: elvtps)  {
+    for (const ElementLink<xAOD::TrackParticleContainer> trkel: elvtps)  {
         const xAOD::TrackParticle * trk = *trkel;
         if (!trk) continue;
         if (trk->definingParametersCovMatrixVec().size() == 0) {
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx
index 91e67cfed12d86ef3a00e439064a3b35edb1dbce..efd211282268af220ee44e4e9645dc921db3df3b 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // *******************************************************************
@@ -852,7 +852,7 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
         } else {
             ATH_MSG_DEBUG("Comb muon container: " << muonContainerComb1.size() );
         }
-        for (const auto& el: muonContainerComb1) {
+        for (const ElementLink<xAOD::L2CombinedMuonContainer> el: muonContainerComb1) {
             ATH_MSG_DEBUG("Comb muon container: " << el.dataID() << " " << el.index() );
         }
         if (HLT::OK != getFeaturesLinks<xAOD::L2CombinedMuonContainer,xAOD::L2CombinedMuonContainer>(inputTE[1],muonContainerComb2,m_combinedMuonKey)) {
@@ -860,7 +860,7 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass
         } else {
             ATH_MSG_DEBUG("Comb muon container: " << muonContainerComb2.size() );
         }
-        for (const auto& el: muonContainerComb2) {
+        for (const ElementLink<xAOD::L2CombinedMuonContainer> el: muonContainerComb2) {
             ATH_MSG_DEBUG("Comb muon container: " << el.dataID() << " " << el.index() );
         }
         ElementLink<xAOD::IParticleContainer> ptl1EL = remap_container(muonXEL[0],muonContainerComb1);
@@ -1126,7 +1126,7 @@ ElementLink<xAOD::TrackParticleContainer> TrigL2BMuMuFex::remap_container(const
     if (!oldElink.isValid()) return oldElink;
     const auto tp  = *oldElink;
 
-    for (const auto& elink : newContainer) {
+    for (const ElementLink<xAOD::TrackParticleContainer> elink : newContainer) {
         if (!elink.isValid()) continue;
         const auto el  = *elink;
 
@@ -1163,7 +1163,7 @@ ElementLink<xAOD::IParticleContainer> TrigL2BMuMuFex::remap_container(const Elem
     if (!oldElink.isValid()) return iptlELold;
     const auto tp  = *oldElink;
     
-    for (const auto& elink : newContainer) {
+    for (const ElementLink<xAOD::L2CombinedMuonContainer> elink : newContainer) {
         if (!elink.isValid()) continue;
         const auto el  = *elink;
         
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx
index fe60a1fc94a44db4ef2d80328e81da467065f5f3..e5a3b6ae965b67c7a4e76a480c07140cc91a5253 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**************************************************************************
@@ -431,7 +431,7 @@ StatusCode TrigMultiTrkComboHypo::executeEF(const EventContext& context) const {
     auto itr = legDecisionIDsMap.find( leg.second );
     if (itr == legDecisionIDsMap.end()) {
       DecisionIDContainer legDecisionIDs;
-      for (const ElementLink<DecisionContainer>& decisionEL : leg.second) {
+      for (const ElementLink<DecisionContainer> decisionEL : leg.second) {
         TrigCompositeUtils::decisionIDs(*decisionEL, legDecisionIDs);
       }
       legDecisionIDsMap[leg.second] = legDecisionIDs;
@@ -448,7 +448,7 @@ StatusCode TrigMultiTrkComboHypo::executeEF(const EventContext& context) const {
     std::vector<const DecisionIDContainer*> previousDecisionIDs;
     for (size_t itrk : trigBphysTrackIdx[idx]) {
       // attach all previous decisions: if the same previous decision is called twice, that's fine - internally takes care of that
-      for (const ElementLink<DecisionContainer>& previousDecisionEL : tracks[itrk].second) {
+      for (const ElementLink<DecisionContainer> previousDecisionEL : tracks[itrk].second) {
         TrigCompositeUtils::linkToPrevious(decision, *previousDecisionEL, context);
       }
       auto& legDecisionIDs = legDecisionIDsMap[tracks[itrk].second];
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx
index 8e62f011bfa067ff1e89c62c4f144f743b172ea1..019fa776baacff1d488aacc07ad6baa7fc35e4d2 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**************************************************************************
@@ -140,7 +140,7 @@ bool TrigMultiTrkFex::passNTracks(int nObjMin,
       ATH_MSG_DEBUG(  " TE input  " << j );
       if(getFeaturesLinks<xAOD::TrackParticleContainer,xAOD::TrackParticleContainer>(inputTE[i][j], inVecColl, collectionKey)==HLT::OK ) {
 	ATH_MSG_DEBUG(  "got track container  " << inVecColl.size() );
-	for( const auto & efmu : inVecColl){	//auto const & inVec: inVecColl ) 
+	for( const ElementLink<xAOD::TrackParticleContainer> efmu : inVecColl){	//auto const & inVec: inVecColl ) 
 	  // check for overlap
 	  bool found = false;
 	  for(const auto& part : outVec ){