diff --git a/Calorimeter/CaloMonitoring/python/LArCellMonAlg.py b/Calorimeter/CaloMonitoring/python/LArCellMonAlg.py
index f0e1d87ec017aa9d2d75883a8c1ed3f6378cb587..4a30d038f54906dd592d4f9a8ace786da6361c58 100644
--- a/Calorimeter/CaloMonitoring/python/LArCellMonAlg.py
+++ b/Calorimeter/CaloMonitoring/python/LArCellMonAlg.py
@@ -30,12 +30,12 @@ def LArCellMonConfigOld(inputFlags):
     from CaloTools.CaloNoiseCondAlg import CaloNoiseCondAlg
     CaloNoiseCondAlg()
 
-    LArCellMonConfigCore(helper, LArCellMonAlg,inputFlags,isCosmics, isMC)
+    algo = LArCellMonConfigCore(helper, LArCellMonAlg,inputFlags,isCosmics, isMC)
 
     from AthenaMonitoring.AtlasReadyFilterTool import GetAtlasReadyFilterTool
-    helper.monSeq.LArCellMonAlg.ReadyFilterTool = GetAtlasReadyFilterTool()
+    algo.ReadyFilterTool = GetAtlasReadyFilterTool()
     from AthenaMonitoring.BadLBFilterTool import GetLArBadLBFilterTool
-    helper.monSeq.LArCellMonAlg.BadLBTool = GetLArBadLBFilterTool()
+    algo.BadLBTool = GetLArBadLBFilterTool()
 
     return helper.result()
 
@@ -46,15 +46,15 @@ def LArCellMonConfig(inputFlags):
     from AthenaMonitoring.AthMonitorCfgHelper import AthMonitorCfgHelper
     helper = AthMonitorCfgHelper(inputFlags,'LArCellMonAlgCfg')
 
+    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+    cfg=ComponentAccumulator()
+
     if not inputFlags.DQ.enableLumiAccess:
        mlog.warning('This algo needs Lumi access, returning empty config')
-       from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-       cfg=ComponentAccumulator()
-       cfg.merge(helper.result())
        return cfg
 
     from LArGeoAlgsNV.LArGMConfig import LArGMCfg
-    cfg = LArGMCfg(inputFlags)
+    cfg.merge(LArGMCfg(inputFlags))
     from TileGeoModel.TileGMConfig import TileGMCfg
     cfg.merge(TileGMCfg(inputFlags))
 
@@ -81,18 +81,17 @@ def LArCellMonConfig(inputFlags):
         algname=algname+'Cosmics'
 
     isCosmics = ( inputFlags.Beam.Type == 'cosmics' )
-    LArCellMonConfigCore(helper, lArCellMonAlg,inputFlags, isCosmics, inputFlags.Input.isMC, algname)
-
-    acc=helper.result()
+    algo = LArCellMonConfigCore(helper, lArCellMonAlg,inputFlags, isCosmics, inputFlags.Input.isMC, algname)
+    algo.useTrigger = inputFlags.DQ.useTrigger
 
     from AthenaMonitoring.AtlasReadyFilterConfig import AtlasReadyFilterCfg
-    acc.getEventAlgo(algname).ReadyFilterTool = cfg.popToolsAndMerge(AtlasReadyFilterCfg(inputFlags))
+    algo.ReadyFilterTool = cfg.popToolsAndMerge(AtlasReadyFilterCfg(inputFlags))
 
     if not inputFlags.Input.isMC:
        from AthenaMonitoring.BadLBFilterToolConfig import LArBadLBFilterToolCfg
-       acc.getEventAlgo(algname).BadLBTool=cfg.popToolsAndMerge(LArBadLBFilterToolCfg(inputFlags))
+       algo.BadLBTool=cfg.popToolsAndMerge(LArBadLBFilterToolCfg(inputFlags))
 
-    cfg.merge(acc)
+    cfg.merge(helper.result())
 
     return cfg
 
@@ -494,6 +493,7 @@ def LArCellMonConfigCore(helper, algclass, inputFlags, isCosmics=False, isMC=Fal
         cellMonGroup.defineTree('sporadicCellE,sporadicCellTime,sporadicCellQuality,sporadicCellID,lumiBlock,adoptedEThreshold;SporadicNoisyCellsTree', path=sporadic_hist_path,
                                 treedef='sporadicCellE/F:sporadicCellTime/F:sporadicCellQuality/s:sporadicCellID/l:lumiBlock/i')
 
+    return LArCellMonAlg
 
 
 if __name__=='__main__':
diff --git a/Calorimeter/CaloMonitoring/src/LArCellMonAlg.cxx b/Calorimeter/CaloMonitoring/src/LArCellMonAlg.cxx
index 044e8c6295af37856adaf2792ccab9a7a4d7176c..a01294498e3357086dc6af6a11540722106ee595 100644
--- a/Calorimeter/CaloMonitoring/src/LArCellMonAlg.cxx
+++ b/Calorimeter/CaloMonitoring/src/LArCellMonAlg.cxx
@@ -121,7 +121,7 @@ StatusCode LArCellMonAlg::initialize() {
   }
 
   //retrieve trigger decision tool and chain groups
-  if( m_useTrigger) {
+  if( m_useTrigger && !getTrigDecisionTool().empty() ) {
     const ToolHandle<Trig::TrigDecisionTool> trigTool=getTrigDecisionTool();
     ATH_MSG_INFO("TrigDecisionTool retrieved");
     for (size_t i=0;i<NOTA;++i) {
diff --git a/Control/AthenaMonitoring/share/Run3DQTestingDriver.py b/Control/AthenaMonitoring/share/Run3DQTestingDriver.py
index 30f6de92cb2dd569d34a6744149d52ff2f16f9e6..e8c450953d930697cb2cc826e4cff41c10cf3a44 100755
--- a/Control/AthenaMonitoring/share/Run3DQTestingDriver.py
+++ b/Control/AthenaMonitoring/share/Run3DQTestingDriver.py
@@ -92,12 +92,11 @@ if __name__=='__main__':
                ((ConfigFlags.DQ.Steering.InDet, "doGlobalMon") and ConfigFlags.DQ.Steering.InDet.doGlobalMon) or \
                ((ConfigFlags.DQ.Steering.InDet, "doPerfMon") and ConfigFlags.DQ.Steering.InDet.doPerfMon):
                 ConfigFlags.Detector.GeometryID = True
-        if hasattr(ConfigFlags.DQ.Steering, "doPixelMon") and ConfigFlags.DQ.Steering.doPixelMon:
-            ConfigFlags.Detector.GeometryPixel = True
-        if hasattr(ConfigFlags.DQ.Steering, "doSCTMon") and ConfigFlags.DQ.Steering.doSCTMon:
-            ConfigFlags.Detector.GeometrySCT = True
-        if hasattr(ConfigFlags.DQ.Steering, "doTRTMon") and ConfigFlags.DQ.Steering.doTRTMon:
-            ConfigFlags.Detector.GeometryTRT = True
+
+    # Just assume we want the full ID geometry, if we are reading in geometry
+    ConfigFlags.Detector.GeometryPixel = True
+    ConfigFlags.Detector.GeometrySCT = True
+    ConfigFlags.Detector.GeometryTRT = True
             
     log.info('FINAL CONFIG FLAGS SETTINGS FOLLOW')
     ConfigFlags.dump()
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTHitsNoiseMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTHitsNoiseMonAlg.py
index 21db3f66f76884bd29308615b09b2b4ca625fad8..8471afdb6e402d208a4084aa6d32f63f0152c2d3 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTHitsNoiseMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTHitsNoiseMonAlg.py
@@ -31,7 +31,7 @@ def SCTHitsNoiseMonAlgConfig(inputFlags):
     myMonAlg.TriggerChain = ""
 
     # Trigger histogram will be made only for data.
-    myMonAlg.doTrigger = (not inputFlags.Input.isMC)
+    myMonAlg.doTrigger = (not inputFlags.Input.isMC and inputFlags.DQ.useTrigger)
 
     from ROOT import SCT_Monitoring as sctMon #import SCT_MonitoringNumbers.h
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonAlg.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonAlg.cxx
index f178fe5aad0496fddb2514cf53e19d3d8c10fda3..cbcdea075d625a3047e4ac39dd14f4a87f94951c 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonAlg.cxx
@@ -130,7 +130,7 @@ StatusCode SCTHitsNoiseMonAlg::generalHistsandNoise(const std::array<std::unorde
 
   bool isSelectedTrigger{false};
   // EDAVIES - have now changed back to using L1_RD0_EMPTY
-  if (m_doTrigger) {
+  if (m_doTrigger and !m_trigDecTool.empty()) {
     if (AthMonitorAlgorithm::dataType() != AthMonitorAlgorithm::DataType_t::cosmics) {
       if (m_trigDecTool->isPassed(m_NOTriggerItem)) {
         isSelectedTrigger = true;
diff --git a/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py b/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py
index b78b5eb870c791433275d33ad34f058ecde859aa..75b9be3ebd216a1d09cfe46b1e9b2e9fbe724623 100644
--- a/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py
+++ b/LArCalorimeter/LArCellRec/python/LArCollisionTimeConfig.py
@@ -9,6 +9,11 @@ def LArCollisionTimeCfg(configFlags, cutIteration=False):
 
    result=ComponentAccumulator()
 
+   from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg
+   result.merge(BunchCrossingCondAlgCfg(configFlags))
+   from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
+   result.merge(CaloNoiseCondAlgCfg(configFlags,"totalNoise"))
+
    LArCollisionTimeAlg=CompFactory.LArCollisionTimeAlg
    result.addEventAlgo(LArCollisionTimeAlg("LArCollisionTimeAlg", 
                        isMC=configFlags.Input.isMC,
diff --git a/LArCalorimeter/LArMonitoring/src/LArFEBMonAlg.cxx b/LArCalorimeter/LArMonitoring/src/LArFEBMonAlg.cxx
index dc9494549db0e60f222b0e69c92b7fc288db9f90..7b49c6b80bfc6252eb1178ca55a910d78410b2c0 100755
--- a/LArCalorimeter/LArMonitoring/src/LArFEBMonAlg.cxx
+++ b/LArCalorimeter/LArMonitoring/src/LArFEBMonAlg.cxx
@@ -133,7 +133,7 @@ StatusCode LArFEBMonAlg::fillHistograms(const EventContext& ctx) const {
     const ToolHandle<Trig::TrigDecisionTool> trigTool=getTrigDecisionTool();
     //const Trig::TrigDecisionTool *trigTool = dynamic_cast<const Trig::TrigDecisionTool * > (&*trigHdl);
     std::vector<std::string> l1triggers;
-    if(trigTool) {   
+    if(!trigTool.empty()) {   
        const Trig::ChainGroup* allL1 = trigTool->getChainGroup("L1_.*");
        l1triggers = allL1->getListOfTriggers();
        ATH_MSG_DEBUG( "lvl1 item names: [" );
@@ -382,13 +382,15 @@ StatusCode LArFEBMonAlg::fillHistograms(const EventContext& ctx) const {
  
     auto streambin=Monitored::Scalar<float>("streamBin",-1);
       
-    unsigned ie;
+    unsigned ie(0);
     for(unsigned int str=0; str<streamsThisEvent.size(); ++str) {
       if(streamsThisEvent[str] > m_streams.size()) break;
       if(trigok && streamsThisEvent[str] < m_streams.size() && (m_streams[streamsThisEvent[str]].find("CosmicCalo") != std::string::npos)) { // test excluding events
-	for(ie=0; ie<m_excoscalo.size(); ++ie) {
-	  if(getTrigDecisionTool()->isPassed(m_excoscalo[ie])) break;
-	}
+      if (!getTrigDecisionTool().empty()) {
+        for(ie=0; ie<m_excoscalo.size(); ++ie) {
+      	  if(getTrigDecisionTool()->isPassed(m_excoscalo[ie])) break;
+	      }
+      }
 	if(ie<m_excoscalo.size()) {
 	  ATH_MSG_INFO("Skipping "<<m_excoscalo[ie]<<" for CosmicCalo ");
 	  continue; // we should skip this trigger
diff --git a/LArCalorimeter/LArMonitoring/src/LArNoiseCorrelationMonAlg.cxx b/LArCalorimeter/LArMonitoring/src/LArNoiseCorrelationMonAlg.cxx
index bce34abd1dde3711fb63d4678c1fb65f07b81f29..ad22286bf609a7f296916b0c86b681f30b96de46 100644
--- a/LArCalorimeter/LArMonitoring/src/LArNoiseCorrelationMonAlg.cxx
+++ b/LArCalorimeter/LArMonitoring/src/LArNoiseCorrelationMonAlg.cxx
@@ -136,7 +136,7 @@ LArNoiseCorrelationMonAlg::fillHistograms(const EventContext& ctx) const
     const ToolHandle<Trig::TrigDecisionTool> trigTool=getTrigDecisionTool();
 
      bool passBCID;
-     if(trigTool) {
+     if(!trigTool.empty()) {
        // BCIDs of the abort gap
        const int ABORT_GAP_START = 3446;
        const int ABORT_GAP_END   = 3563;
diff --git a/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.cxx b/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.cxx
index 0d6634bb15ad700d3454e83f9fd0c408cda86d66..0c306669a5f9e64fb3f3713587e536c95607875d 100755
--- a/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.cxx
+++ b/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.cxx
@@ -77,6 +77,7 @@ LArRODMonAlg::initialize() {
   ATH_CHECK(m_channelKey_fromDigits.initialize());
   ATH_CHECK(m_channelKey_fromBytestream.initialize());
   ATH_CHECK(m_digitContainerKey.initialize());
+  ATH_CHECK(m_headerContainerKey.initialize());
 
   ATH_CHECK(m_keyOFC.initialize());
   ATH_CHECK(m_keyShape.initialize());
@@ -220,9 +221,8 @@ StatusCode LArRODMonAlg::fillHistograms(const EventContext& ctx) const {
   std::set<HWIdentifier> ignoreFEBs;
 
   if (m_doCheckSum || m_doRodStatus) {
-     const LArFebHeaderContainer* febCont=NULL;
-     StatusCode sc = evtStore()->retrieve(febCont);
-     if (sc.isFailure() || !febCont) {
+     const LArFebHeaderContainer* febCont = SG::get(m_headerContainerKey, ctx);
+     if (!febCont) {
        ATH_MSG_WARNING( "No LArFEB container found in TDS" ); 
      } else {
        LArFebHeaderContainer::const_iterator itFEB = febCont->begin(); 
diff --git a/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.h b/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.h
index c4b0b017c55e2806fc6fb504604e3f961d532009..055398044d9b015021f9869ccbcec834169485d5 100644
--- a/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.h
+++ b/LArCalorimeter/LArMonitoring/src/LArRODMonAlg.h
@@ -26,6 +26,7 @@ class HWIdentifier;
 class LArOnOffIdMapping;
 class LArRawChannelContainer;
 class LArDigitContainer;
+class LArFebHeaderContainer;
 
 #include <atomic>
 #include <fstream>
@@ -134,6 +135,7 @@ private:
   SG::ReadHandleKey<LArRawChannelContainer> m_channelKey_fromDigits{this,"LArRawChannelKey_fromDigits","LArRawChannels_FromDigits","SG key of LArRawChannels produced offline"};
 
   SG::ReadHandleKey<LArDigitContainer> m_digitContainerKey{this,"LArDigitContainerKey","FREE","SG key of LArDigitContainer read from Bytestream"};
+  SG::ReadHandleKey<LArFebHeaderContainer> m_headerContainerKey{this,"LArFebHeaderKey","LArFebHeader","SG key of LArFebHeader"};
 
 
   SG::ReadCondHandleKey<ILArOFC>         m_keyOFC{this,"KeyOFC","LArOFC","SG key of LArOFC CDO"};
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
index 6fbcd4d033bbd2acf26d28cfbd23e29a522337e3..ad59d834352656205e340caac5c2719159baf96d 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
@@ -14,6 +14,13 @@ def TgcRawDataMonitoringConfig(inputFlags):
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
     result = ComponentAccumulator()
 
+    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
+    from AtlasGeoModel.AtlasGeoModelConfig import AtlasGeometryCfg
+    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
+    result.merge(MagneticFieldSvcCfg(inputFlags))
+    result.merge(AtlasGeometryCfg(inputFlags))
+    result.merge(TrackingGeometrySvcCfg(inputFlags))
+
     from AthenaMonitoring import AthMonitorCfgHelper
     helper = AthMonitorCfgHelper(inputFlags,'TgcRawDataMonitorCfg')
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
index cb9c2ad8fb43bc5b6f0ac08be242dc1a1ca9fc8c..052149243d102d52b619b8304a555f0007ee468f 100755
--- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
@@ -213,7 +213,8 @@ StatusCode JetTagMonitorAlgorithm::fillHistograms( const EventContext& ctx ) con
   //////////////////////
   
   bool useTriggerDecisionTool = true;
-  const auto& trigDecTool = getTrigDecisionTool();
+  const auto* trigDecTool = (getTrigDecisionTool().empty() ?
+                             nullptr : getTrigDecisionTool().operator->());
 
   // only apply trigger selection if bool is true (false for express stream) and trigDecTool is ok
   if (useTriggerDecisionTool && trigDecTool != 0) {
diff --git a/Reconstruction/MissingETMonitoring/src/METMonitorAlgorithm.cxx b/Reconstruction/MissingETMonitoring/src/METMonitorAlgorithm.cxx
index 93b116c46f913b7597992ab03209a4cef12ce4dd..3cf835bb6001165c0b2cf0a12f0c9bc02557aa9b 100644
--- a/Reconstruction/MissingETMonitoring/src/METMonitorAlgorithm.cxx
+++ b/Reconstruction/MissingETMonitoring/src/METMonitorAlgorithm.cxx
@@ -94,7 +94,8 @@ StatusCode METMonitoringAlg::fillHistograms( const EventContext& ctx ) const {
     ATH_MSG_ERROR("evtStore() does not contain METAKt4EMTopo Collection with name "<< m_metAKt4EMTopoContainerKey);
     return StatusCode::FAILURE;
   }
-  const auto& trigDecTool = getTrigDecisionTool();
+  const auto* trigDecTool = (getTrigDecisionTool().empty() ?
+                             nullptr : getTrigDecisionTool().operator->());
   bool isMETtopocalo = false;
   for (const auto& key : m_metKeys) {
     if (key == "MET_Topo") isMETtopocalo = true;    
diff --git a/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx b/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx
index 6110d41629219cbbadfbb79796ccf261d9ada604..a40df5ef72c4d204201d7030e8ef90af0fb1de79 100644
--- a/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx
+++ b/Reconstruction/tauMonitoring/src/tauMonitorAlgorithm.cxx
@@ -252,7 +252,8 @@ StatusCode tauMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const
         int panModeDummy = -1 ;
         int panModeSubstructureDummy = -1 ;
 
-        const auto& trigDecTool = getTrigDecisionTool();
+        const auto* trigDecTool = (getTrigDecisionTool().empty() ?
+                                   nullptr : getTrigDecisionTool().operator->());
 
         if (m_etaMin < std::abs(tauEta) && std::abs(tauEta) < m_etaMax){
             nTauCandidates +=1;