diff --git a/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py b/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py
index eed1ffa27ef79b9786f1705f73e54d2e3197f11e..3ff0bd06dbe7556350998b09847b925d7b43a6fd 100644
--- a/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py
+++ b/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py
@@ -377,6 +377,15 @@ if DQMonFlags.doMonitoring():
       Steering.doTauMon=DQMonFlags.doTauMon()
       Steering.doJetTagMon=DQMonFlags.doJetTagMon()
 
+      # schedule legacy HLT monitoring if Run 2 EDM
+      if DQMonFlags.doHLTMon() and ConfigFlags.Trigger.EDMVersion == 2:
+         try:
+            include("TrigHLTMonitoring/HLTMonitoring_topOptions.py")
+            HLTMonMan = topSequence.HLTMonManager
+            HLTMonMan.FileKey = DQMonFlags.monManFileKey()  
+         except Exception:
+            treatException("DataQualitySteering_jobOptions.py: exception when setting up HLT monitoring")
+
       ConfigFlags.dump()
       ComponentAccumulator.CAtoGlobalWrapper(AthenaMonitoringCfg, ConfigFlags)
 
diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx
index a0fed546a8c4d174fd7ec69491a0a7c8e76417c3..67bd92731059fbe8d45a3e33a97020d04e1eafe1 100644
--- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx
+++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.cxx
@@ -166,7 +166,6 @@ HLTTauMonTool::HLTTauMonTool(const std::string & type, const std::string & n, co
    m_HLTTriggerCondition = 0;
    m_mu_offline = 0.;
    m_mu_online = 0;
-   m_tauCont = 0;
 
    m_counterOfdR0_Topomutau = 0;
    m_counterOfdR0_Topoeltau = 0;
@@ -197,8 +196,6 @@ StatusCode HLTTauMonTool::init() {
   m_mu_offline = 0.;
   m_mu_online = 0;
 
-  m_tauCont = 0;
-
        m_LB = -1;
  
     // put all trigger names into one arry
@@ -244,6 +241,14 @@ StatusCode HLTTauMonTool::init() {
     if(m_L1StringCondition=="allowResurrectedDecision") m_L1TriggerCondition=TrigDefs::Physics | TrigDefs::allowResurrectedDecision;
     if(m_HLTStringCondition=="allowResurrectedDecision") m_HLTTriggerCondition=TrigDefs::Physics | TrigDefs::allowResurrectedDecision;
 
+    ATH_CHECK(m_eventInfoKey.initialize());
+    ATH_CHECK(m_truthParticleKey.initialize(m_truth));
+    ATH_CHECK(m_offlineTauJetKey.initialize());
+    ATH_CHECK(m_emRoIKey.initialize());
+    ATH_CHECK(m_jetRoIKey.initialize());
+    ATH_CHECK(m_pvKey.initialize());
+    ATH_CHECK(m_jetKey.initialize());
+
     return StatusCode::SUCCESS;
 }
 ///////////////////////////////////////////////////////////////////
@@ -328,8 +333,8 @@ StatusCode HLTTauMonTool::fill() {
 
   m_muCut40Passed = (!m_domuCut40 || (m_domuCut40 && (m_mu_offline<40.)));
 
-  const xAOD::EventInfo* evtInfo = 0;
-  if( !evtStore()->retrieve(evtInfo, "EventInfo" ).isSuccess() ){
+  const xAOD::EventInfo* evtInfo = SG::get(m_eventInfoKey);
+  if( !evtInfo ){
     ATH_MSG_WARNING("Failed to retrieve EventInfo container, aborting!");
     return StatusCode::SUCCESS;
   }
@@ -342,9 +347,8 @@ StatusCode HLTTauMonTool::fill() {
   m_true_taus.clear(); 
   m_true_taus_nprong.clear();
   if(m_truth){
-   const xAOD::TruthParticleContainer* truth_cont = 0;
-   sc = evtStore()->retrieve(truth_cont, "TruthParticles" );
-   if( !sc.isSuccess() ){
+   const xAOD::TruthParticleContainer* truth_cont = SG::get(m_truthParticleKey);
+   if( !truth_cont ){
      ATH_MSG_WARNING("Failed to retrieve TruthParticle container. Exiting.");
       //return StatusCode::FAILURE;     
    }
@@ -389,16 +393,15 @@ StatusCode HLTTauMonTool::fill() {
     // good reco taus
   //m_taus.clear();
   m_taus_RNN.clear();
-  m_tauCont = 0;
-  sc = evtStore()->retrieve(m_tauCont, "TauJets");
-  if( !sc.isSuccess()  ){
+  const auto tauCont = SG::get(m_offlineTauJetKey);
+  if( !tauCont ){
     ATH_MSG_WARNING("Failed to retrieve TauJets container. Exiting!");
     //return StatusCode::FAILURE;
     //return sc;
   }
   else{
-    xAOD::TauJetContainer::const_iterator offlinetau,offlinetau_end = m_tauCont->end();
-    for(offlinetau=m_tauCont->begin();offlinetau!=offlinetau_end; ++offlinetau){
+    xAOD::TauJetContainer::const_iterator offlinetau,offlinetau_end = tauCont->end();
+    for(offlinetau=tauCont->begin();offlinetau!=offlinetau_end; ++offlinetau){
       if((*offlinetau)){
         TLorentzVector TauTLV = (*offlinetau)->p4();
         double eta_Tau = TauTLV.Eta();
@@ -657,9 +660,9 @@ StatusCode HLTTauMonTool::fillHistogramsForItem(const std::string & trigItem, co
 
   if(trigItem=="Dump"){
 
-    const xAOD::EmTauRoIContainer* l1Tau_cont = 0;
+    const xAOD::EmTauRoIContainer* l1Tau_cont = SG::get(m_emRoIKey);
 
-    if ( !evtStore()->retrieve( l1Tau_cont, "LVL1EmTauRoIs").isSuccess() ){ // retrieve arguments: container type, container key
+    if ( !l1Tau_cont ){ // retrieve arguments: container type, container key
       ATH_MSG_WARNING("Failed to retrieve LVL1EmTauRoI container. Exiting! ");
       return StatusCode::FAILURE;
     } else{
@@ -736,8 +739,8 @@ StatusCode HLTTauMonTool::fillHistogramsForItem(const std::string & trigItem, co
       std::vector< float > jet_roi_eta;
       std::vector< float > jet_roi_phi;
 
-      const xAOD::EmTauRoIContainer* l1Tau_cont = 0;
-      if ( !evtStore()->retrieve( l1Tau_cont, "LVL1EmTauRoIs").isSuccess() ){ // retrieve arguments: container type, container key
+      const xAOD::EmTauRoIContainer* l1Tau_cont = SG::get(m_emRoIKey);
+      if ( !l1Tau_cont ){ // retrieve arguments: container type, container key
         ATH_MSG_WARNING("Failed to retrieve LVL1EmTauRoI container. Exiting!");
       } else {
         ATH_MSG_DEBUG("found LVL1EmTauRoI in SG");
@@ -867,10 +870,10 @@ StatusCode HLTTauMonTool::fillHistogramsForItem(const std::string & trigItem, co
       // look at triggers seeded by L1_TAU20IM_2TAU12IM to get the jet turn-on
       if(trig_item_EF=="HLT_tau35_medium1_tracktwo_tau25_medium1_tracktwo_L1TAU20IM_2TAU12IM" && getTDT()->isPassed(trig_item_EF,m_HLTTriggerCondition)){
 
-        const xAOD::JetContainer * jet_cont = 0;
-        if(!evtStore()->retrieve(jet_cont, "AntiKt4LCTopoJets").isSuccess()) {
+        const xAOD::JetContainer * jet_cont = SG::get(m_jetKey);
+        if(!jet_cont) {
 
-          ATH_MSG_WARNING("Failed to retrieve AntiKt4EMTopoJets container");
+          ATH_MSG_WARNING("Failed to retrieve " << m_jetKey << " container");
           //return StatusCode::FAILURE;
         } else {
           float maxPt=0;
@@ -1182,8 +1185,8 @@ StatusCode HLTTauMonTool::fillL1Tau(const xAOD::EmTauRoI * aL1Tau){
   hist2("hL1EtVsPhi")->Fill(aL1Tau->tauClus()/CLHEP::GeV,aL1Tau->phi());
   hist2("hL1EtVsEta")->Fill(aL1Tau->tauClus()/CLHEP::GeV,aL1Tau->eta());
 
-  const xAOD::JetRoIContainer *l1jets = 0;
-  if ( !evtStore()->retrieve( l1jets, "LVL1JetRoIs").isSuccess() ){
+  const xAOD::JetRoIContainer *l1jets = SG::get(m_jetRoIKey);
+  if ( !l1jets ){
     ATH_MSG_WARNING("Failed to retrieve LVL1JetRoIs container. Exiting.");
     return StatusCode::FAILURE;
   } else{
@@ -2368,8 +2371,8 @@ void HLTTauMonTool::testL1TopoNavigation(const std::string & trigItem){
         combEnd = comb;
         std::advance(combEnd,100);
       }
-      const xAOD::EmTauRoIContainer* l1Tau_cont = 0;
-      if ( !evtStore()->retrieve( l1Tau_cont, "LVL1EmTauRoIs").isSuccess() ){
+      const xAOD::EmTauRoIContainer* l1Tau_cont = SG::get(m_emRoIKey);
+      if ( !l1Tau_cont ){
         ATH_MSG_WARNING("Failed to retrieve LVL1EmTauRoI container");
       } else {
         ATH_MSG_DEBUG("found LVL1EmTauRoI in SG");
@@ -2401,8 +2404,8 @@ void HLTTauMonTool::testL1TopoNavigation(const std::string & trigItem){
       const std::vector< TrigCompositeUtils::LinkInfo<xAOD::TauJetContainer> > features
          = getTDT()->features<xAOD::TauJetContainer>( trig_item_EF, m_HLTTriggerCondition, "HLT_TrigTauRecMerged_MVA" );
 
-      const xAOD::EmTauRoIContainer* l1Tau_cont = 0;
-      if ( !evtStore()->retrieve( l1Tau_cont, "LVL1EmTauRoIs").isSuccess() ){
+      const xAOD::EmTauRoIContainer* l1Tau_cont = SG::get(m_emRoIKey);
+      if ( !l1Tau_cont ){
         ATH_MSG_WARNING("Failed to retrieve LVL1EmTauRoI container");
       } else {
         ATH_MSG_DEBUG("found LVL1EmTauRoI in SG");
@@ -2463,8 +2466,8 @@ void  HLTTauMonTool::testClusterNavigation(const xAOD::TauJet *aEFTau){
 ///////////////////////////////////////////////////////////
 const xAOD::EmTauRoI * HLTTauMonTool::findLVL1_ROI(const TrigRoiDescriptor * roiDesc){
     
-    const xAOD::EmTauRoIContainer*  l1Tau_cont = 0;
-    if ( !evtStore()->retrieve( l1Tau_cont, "LVL1EmTauRoIs").isSuccess() ){ // retrieve arguments: container type, container key
+    const xAOD::EmTauRoIContainer*  l1Tau_cont = SG::get(m_emRoIKey);
+    if ( !l1Tau_cont ){ // retrieve arguments: container type, container key
         ATH_MSG_WARNING("Failed to retrieve LVL1EmTauRoI container. Exiting.");
         return 0;
     } else{
@@ -3822,8 +3825,8 @@ bool HLTTauMonTool::L1TauMatching(const std::string & trigItem, const TLorentzVe
 
 int HLTTauMonTool::PrimaryVertices(){
   int nGoodVtx(0);
-  const xAOD::VertexContainer* primary = 0;
-  if( !evtStore()->retrieve(primary, "PrimaryVertices" ).isSuccess() ){
+  const xAOD::VertexContainer* primary = SG::get(m_pvKey);
+  if( !primary ){
     ATH_MSG_DEBUG("Failed to retrieve PrimaryVertices container, returning -1!");
     return -1;
     }
diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.h b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.h
index 9ed86d39147108146ac3fd5a23c971c87eeead1f..f67b063e15a3cb11e00a88a12a90c908fa08d69c 100644
--- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.h
+++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/HLTTauMonTool.h
@@ -176,7 +176,13 @@ class HLTTauMonTool : public IHLTMonTool {
   std::vector<int> m_true_taus_nprong;
   std::vector<const xAOD::TauJet *> m_taus_BDT;
   std::vector<const xAOD::TauJet *> m_taus_RNN;
-  const xAOD::TauJetContainer* m_tauCont;
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey { this, "eventInfoKey", "EventInfo", "EventInfo key" };
+  SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthParticleKey { this, "truthParticleKey", "TruthParticles", "TruthParticleContainer key" };
+  SG::ReadHandleKey<xAOD::TauJetContainer> m_offlineTauJetKey { this, "offlineTauJetKey", "TauJets", "Offline taujet container key" };
+  SG::ReadHandleKey<xAOD::EmTauRoIContainer> m_emRoIKey { this, "emRoIKey", "LVL1EmTauRoIs", "EM Tau RoI container key" };
+  SG::ReadHandleKey<xAOD::JetRoIContainer> m_jetRoIKey { this, "jetRoIKey", "LVL1JetRoIs", "Jet RoI container key" };
+  SG::ReadHandleKey<xAOD::VertexContainer> m_pvKey { this, "pvKey", "PrimaryVertices", "Primary vertex container key" };
+  SG::ReadHandleKey<xAOD::JetContainer> m_jetKey { this, "jetKey", "AntiKt4LCTopoJets", "Offline jet container key" };
 
   unsigned int m_L1TriggerCondition;
   unsigned int m_HLTTriggerCondition;