diff --git a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
index 9419d22d5d1b1b369e69ebf953674d5ca0cdea4d..0c38396defde9b7a9b2712d0de51c36bee16dfd0 100644
--- a/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
+++ b/TileCalorimeter/TileMonitoring/python/TileJetMonitorAlgorithm.py
@@ -248,6 +248,8 @@ if __name__=='__main__':
     from AthenaConfiguration.TestDefaults import defaultTestFiles
     ConfigFlags.Input.Files = defaultTestFiles.ESD
     ConfigFlags.Output.HISTFileName = 'TileJetMonitorOutput.root'
+    ConfigFlags.DQ.useTrigger = False
+    ConfigFlags.DQ.enableLumiAccess = False
     ConfigFlags.lock()
 
     # Initialize configuration object, add accumulator, merge, and run.
diff --git a/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py
index 8d1ae560a0ec6a4206824404c664e8edfc1027fb..8cfede71883d36d6ba7caff973dc73774ee14a74 100644
--- a/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py
+++ b/TileCalorimeter/TileMonitoring/python/TileMBTSMonitorAlgorithm.py
@@ -52,7 +52,7 @@ def TileMBTSMonitoringConfig(flags, **kwargs):
     executeTimeGroup = helper.addGroup(tileMBTSMonAlg, 'TileMBTSMonExecuteTime', 'Tile/')
     executeTimeGroup.defineHistogram('TIME_execute', path = 'MBTS', type='TH1F',
                                      title = 'Time for execute TileMBTSMonAlg algorithm;time [#mus]',
-                                     xbins = 100, xmin = 0, xmax = 100000)
+                                     xbins = 100, xmin = 0, xmax = 1000)
 
 
     run = str(flags.Input.RunNumber[0])
@@ -216,6 +216,8 @@ if __name__=='__main__':
     from AthenaConfiguration.TestDefaults import defaultTestFiles
     ConfigFlags.Input.Files = defaultTestFiles.ESD
     ConfigFlags.Output.HISTFileName = 'TileMBTSMonitorOutput.root'
+    ConfigFlags.DQ.useTrigger = False
+    ConfigFlags.DQ.enableLumiAccess = False
     ConfigFlags.lock()
 
     # Initialize configuration object, add accumulator, merge, and run.
@@ -224,7 +226,9 @@ if __name__=='__main__':
     cfg = MainServicesSerialCfg()
     cfg.merge(PoolReadCfg(ConfigFlags))
 
-    cfg.merge( TileMBTSMonitoringConfig(ConfigFlags, TileDigitsContainer = 'TileDigitsFlt') )
+    cfg.merge( TileMBTSMonitoringConfig(ConfigFlags,
+                                        FillHistogramsPerMBTS = True,
+                                        TileDigitsContainer = 'TileDigitsFlt') )
 
     cfg.printConfig(withDetails = True, summariseProps = True)
     ConfigFlags.dump()
diff --git a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx
index 2099c12e685e0fdcf866ce422b988b964908719a..8a48c971a13a942e8e076690c50b40b5f24122de 100644
--- a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.cxx
@@ -34,7 +34,7 @@ StatusCode TileMBTSMonitorAlgorithm::initialize() {
   ATH_CHECK( detStore()->retrieve(m_tileHWID) );
 
   ATH_CHECK( m_DQstatusKey.initialize() );
-  ATH_CHECK( m_digitsContainerKey.initialize() );
+  ATH_CHECK( m_digitsContainerKey.initialize(m_fillHistogramsPerMBTS) );
   ATH_CHECK( m_mbtsCellContainerKey.initialize() );
 
   memset(m_MBTSchannels, -1, sizeof(m_MBTSchannels));
@@ -56,16 +56,17 @@ StatusCode TileMBTSMonitorAlgorithm::initialize() {
     }
   }
 
+  if (m_fillHistogramsPerMBTS) {
+    m_energyGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyMBTS", MAX_MBTS_COUNTER);
+    m_energyLBGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyLBMBTS", MAX_MBTS_COUNTER);
 
-  m_energyGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyMBTS", MAX_MBTS_COUNTER);
-  m_energyLBGroups = Monitored::buildToolMap<int>(m_tools, "TileEnergyLBMBTS", MAX_MBTS_COUNTER);
+    m_timeGroups = Monitored::buildToolMap<int>(m_tools, "TileTimeMBTS", MAX_MBTS_COUNTER);
 
-  m_timeGroups = Monitored::buildToolMap<int>(m_tools, "TileTimeMBTS", MAX_MBTS_COUNTER);
+    m_hfnGroups = Monitored::buildToolMap<int>(m_tools, "TileHFNoiseMBTS", MAX_MBTS_COUNTER);
+    m_pedestalGroups = Monitored::buildToolMap<int>(m_tools, "TilePedestalMBTS", MAX_MBTS_COUNTER);
 
-  m_hfnGroups = Monitored::buildToolMap<int>(m_tools, "TileHFNoiseMBTS", MAX_MBTS_COUNTER);
-  m_pedestalGroups = Monitored::buildToolMap<int>(m_tools, "TilePedestalMBTS", MAX_MBTS_COUNTER);
-
-  m_pulseGroups = Monitored::buildToolMap<int>(m_tools, "TileAveragePulseMBTS", MAX_MBTS_COUNTER);
+    m_pulseGroups = Monitored::buildToolMap<int>(m_tools, "TileAveragePulseMBTS", MAX_MBTS_COUNTER);
+  }
 
   return StatusCode::SUCCESS;
 }
@@ -75,7 +76,20 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
 
   // In case you want to measure the execution time
   auto timer = Monitored::Timer("TIME_execute");
-  auto lumiBlock = Monitored::Scalar<int>("lumiBlock", GetEventInfo(ctx)->lumiBlock());
+  auto timeerGroup = Monitored::Group(getGroup("TileMBTSMonExecuteTime"), timer);
+
+  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
+
+  const int Trig_b7(7);
+  uint32_t l1TriggerType(eventInfo->level1TriggerType());
+  bool physicRun = (l1TriggerType == 0) || (((l1TriggerType >> Trig_b7) & 1) == 1);
+
+  if (!physicRun) {
+    ATH_MSG_DEBUG("Calibration Event found => skip filling histograms.");
+    return StatusCode::SUCCESS;
+  }
+
+  auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock());
 
   int nHitsA(0);
   int nHitsC(0);
@@ -86,9 +100,11 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
   auto monTime = Monitored::Scalar<float>("Time", 0.0F);
 
   std::vector<float> energyCounters;
+  energyCounters.reserve(MAX_MBTS_COUNTER);
   auto monEnergyCounter = Monitored::Collection("EnergyCounter", energyCounters);
 
   std::vector<float> energies;
+  energies.reserve(MAX_MBTS_COUNTER);
   auto monSummaryEnergy = Monitored::Collection("SummaryEnergy", energies);
 
   std::vector<float> timeCounters;
@@ -207,66 +223,76 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
   std::vector<int> counters;
   auto monErrorCounters = Monitored::Collection("ErrorCounter", counters);
 
-  auto monPedestal = Monitored::Scalar<float>("Pedestal", 0.0F);
-  auto monHFN = Monitored::Scalar<float>("HFN", 0.0F);
-
   // Create instance of TileDQstatus used to check for readout errors in Tile
-  const TileDQstatus * dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get();
-
-  SG::ReadHandle<TileDigitsContainer> digitsContainer(m_digitsContainerKey, ctx);
-  ATH_CHECK( digitsContainer.isValid() );
-
-  for (const TileDigitsCollection* digitsCollection : *digitsContainer) {
-    HWIdentifier adc_id = digitsCollection->front()->adc_HWID();
-    int ros = m_tileHWID->ros(adc_id);
-    if (ros > 2) { // Extended barrel
-      int drawer = m_tileHWID->drawer(adc_id);
-      int MBTSchannel = m_MBTSchannels[ros - 3][drawer];
-
-      if (MBTSchannel >= 0) {
-        for (const TileDigits* tile_digits: *digitsCollection) {
-
-          adc_id = tile_digits->adc_HWID();
-          int channel = m_tileHWID->channel(adc_id);
-          if (channel == MBTSchannel) {  // MBTS channel found
-            int gain = m_tileHWID->adc(adc_id);
-            int counter = m_MBTScounters[ros - 3][drawer];
-
-            // Fill Readout Error histogram
-            const int dmu = 0;
-            if (!(dqStatus->isChanDQgood(ros, drawer, channel))) {
-              setDigiError(counters, errors, counter, GENERAL);
-            }
-            if (dqStatus->checkGlobalCRCErr(ros, drawer, gain)) {
-              setDigiError(counters, errors, counter, GLOBAL_CRC);
-            }
-            if (dqStatus->checkROD_CRCErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, ROD_CRC);
-            }
-            if (dqStatus->checkFE_CRCErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, FRONTEND_CRC);
-            }
-            if (dqStatus->checkBCIDErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, BCID);
-            }
-            if (dqStatus->checkHeaderFormatErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, HEADER_FORMAT);
-            }
-            if (dqStatus->checkHeaderParityErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, HEADER_PARITY);
-            }
-            if (dqStatus->checkSampleFormatErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, SAMPLE_FORMAT);
-            }
-            if (dqStatus->checkSampleParityErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, SAMPLE_PARITY);
-            }
-            if (dqStatus->checkMemoryParityErr(ros, drawer, dmu, gain)) {
-              setDigiError(counters, errors, counter, MEMORY_PARITY);
-            }
+  const TileDQstatus* dqStatus = SG::makeHandle (m_DQstatusKey, ctx).get();
 
+ // Check only low gain (in physics runs low and high gain status should identical)
+  const int gain{0};
+  for (unsigned int ros = 3; ros < Tile::MAX_ROS; ++ros) {
+    for (unsigned int drawer = 0; drawer < Tile::MAX_DRAWER; ++drawer) {
+      int channel = m_MBTSchannels[ros - 3][drawer];
+      int counter = m_MBTScounters[ros - 3][drawer];
 
-            if (m_fillHistogramsPerMBTS) {
+      if (channel > 0) {
+        // Fill Readout Error histogram
+        if (!(dqStatus->isChanDQgood(ros, drawer, channel))) {
+          setDigiError(counters, errors, counter, GENERAL);
+        }
+        if (dqStatus->checkGlobalCRCErr(ros, drawer, gain)) {
+          setDigiError(counters, errors, counter, GLOBAL_CRC);
+        }
+        if (dqStatus->checkROD_CRCErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, ROD_CRC);
+        }
+        if (dqStatus->checkFE_CRCErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, FRONTEND_CRC);
+        }
+        if (dqStatus->checkBCIDErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, BCID);
+        }
+        if (dqStatus->checkHeaderFormatErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, HEADER_FORMAT);
+        }
+        if (dqStatus->checkHeaderParityErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, HEADER_PARITY);
+        }
+        if (dqStatus->checkSampleFormatErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, SAMPLE_FORMAT);
+        }
+        if (dqStatus->checkSampleParityErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, SAMPLE_PARITY);
+        }
+        if (dqStatus->checkMemoryParityErr(ros, drawer, MBTS_DMU, gain)) {
+          setDigiError(counters, errors, counter, MEMORY_PARITY);
+        }
+      }
+    }
+  }
+
+  fill("TileErrorsMBTS", monErrorCounters, monErrors);
+
+
+  if (m_fillHistogramsPerMBTS) {
+    SG::ReadHandle<TileDigitsContainer> digitsContainer(m_digitsContainerKey, ctx);
+    ATH_CHECK( digitsContainer.isValid() );
+
+    auto monPedestal = Monitored::Scalar<float>("Pedestal", 0.0F);
+    auto monHFN = Monitored::Scalar<float>("HFN", 0.0F);
+
+    for (const TileDigitsCollection* digitsCollection : *digitsContainer) {
+      HWIdentifier adc_id = digitsCollection->front()->adc_HWID();
+      int ros = m_tileHWID->ros(adc_id);
+      if (ros > 2) { // Extended barrel
+        int drawer = m_tileHWID->drawer(adc_id);
+        int MBTSchannel = m_MBTSchannels[ros - 3][drawer];
+
+        if (MBTSchannel >= 0) {
+          for (const TileDigits* tile_digits: *digitsCollection) {
+
+            adc_id = tile_digits->adc_HWID();
+            int channel = m_tileHWID->channel(adc_id);
+            if (channel == MBTSchannel) {  // MBTS channel found
+              int counter = m_MBTScounters[ros - 3][drawer];
 
               double sampleMean = 0;
               double sampleRMS = 0;
@@ -289,6 +315,7 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
                   auto monSamples = Monitored::Collection("Samples", samples);
 
                   std::vector<int> sampleNumbers;
+                  sampleNumbers.reserve(nSamples);
                   for (unsigned int i = 0; i < nSamples; ++i) sampleNumbers.push_back(i);
                   auto monSampleNumbers = Monitored::Collection("SampleNumbers", sampleNumbers);
 
@@ -313,10 +340,6 @@ StatusCode TileMBTSMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
     }
   }
 
-  fill("TileErrorsMBTS", monErrorCounters, monErrors);
-
-  fill("TileMBTSMonExecuteTime", timer);
-
   return StatusCode::SUCCESS;
 }
 
diff --git a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h
index d97ae4ab22aee904486a25c06ed5ef9424b022b5..8d91b08fd874654a9b4f41b66b5b53c40379b59d 100644
--- a/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h
+++ b/TileCalorimeter/TileMonitoring/src/TileMBTSMonitorAlgorithm.h
@@ -48,7 +48,7 @@ class TileMBTSMonitorAlgorithm : public AthMonitorAlgorithm {
     int getMBTSCounter(Identifier mbtsID) const;
 
     Gaudi::Property<bool> m_fillHistogramsPerMBTS{this,
-        "FillHistogramsPerMBTS", true, "Switch for using per MBTS histograms"};
+        "FillHistogramsPerMBTS", false, "Switch for using per MBTS histograms"};
 
     Gaudi::Property<std::vector<float>> m_energyCut{this,
         "EnergyCuts",
@@ -97,6 +97,7 @@ class TileMBTSMonitorAlgorithm : public AthMonitorAlgorithm {
     int m_MBTScounters[Tile::MAX_ROS - 3][Tile::MAX_DRAWER];
 
     static const unsigned int MAX_MBTS_COUNTER{32};
+    static const unsigned int MBTS_DMU{0};
 };
 
 #endif // TILEMONITORING_TILEMBTSMONITORALGORITHM_H