diff --git a/TileCalorimeter/TileMonitoring/python/TileCellMonitorAlgorithm.py b/TileCalorimeter/TileMonitoring/python/TileCellMonitorAlgorithm.py
index 2df7342756236637caddb4d698e4e948b7e2abe9..90e021939a9106965adac40d129eec603b710970 100644
--- a/TileCalorimeter/TileMonitoring/python/TileCellMonitorAlgorithm.py
+++ b/TileCalorimeter/TileMonitoring/python/TileCellMonitorAlgorithm.py
@@ -136,6 +136,12 @@ def TileCellMonitoringConfig(flags, **kwargs):
                                   title = 'Occupancy Map Over Threshod 300 GeV', path = 'Tile/Cell',
                                   subDirectory = True, run = run, triggers = l1Triggers, separator = '_')
 
+    # ) Configure histograms with Tile cell energy difference maps per partition
+    addTileModuleChannelMapsArray(helper, tileCellMonAlg, name = 'TileCellEneDiffChanMod',
+                                  title = 'Tile Cell energy difference between PMTs [MeV]', path = 'Tile/Cell',
+                                  subDirectory = True, type = 'TProfile2D', value = 'energyDiff',
+                                  run = run, triggers = l1Triggers, separator = '_')
+
     # 11) Configure histograms with occupancy maps over threshold per partition
     addTileModuleChannelMapsArray(helper, tileCellMonAlg, name = 'TileCellDetailOccMapOvThrGain',
                                   weight = 'weight', title = titleMapOvThr, path = 'Tile/Cell', subDirectory = True,
@@ -313,6 +319,8 @@ if __name__=='__main__':
     ConfigFlags.Output.HISTFileName = 'TileCellMonitorOutput.root'
     ConfigFlags.DQ.useTrigger = False
     ConfigFlags.DQ.enableLumiAccess = False
+    ConfigFlags.Exec.MaxEvents = 3
+    ConfigFlags.fillFromArgs()
     ConfigFlags.lock()
 
     # Initialize configuration object, add accumulator, merge, and run.
@@ -333,7 +341,7 @@ if __name__=='__main__':
 
     cfg.store( open('TileCellMonitorAlgorithm.pkl','wb') )
 
-    sc = cfg.run(maxEvents=3)
+    sc = cfg.run()
 
     import sys
     # Success should be 0
diff --git a/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.cxx b/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.cxx
index 8fe1238535fde0035dfb90ef0d3d242af89ee095..24f94da51c625ceccf3323d382dc778bffed86cb 100644
--- a/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.cxx
@@ -75,6 +75,9 @@ StatusCode TileCellMonitorAlgorithm::initialize() {
   m_overThr300GeVOccupGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellDetailOccMapOvThr300GeV",
                                                               Tile::MAX_ROS - 1, nL1Triggers);
 
+  m_eneDiffChanModGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellEneDiffChanMod",
+                                                          Tile::MAX_ROS - 1, nL1Triggers);
+
   m_overThrOccupGainGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileCellDetailOccMapOvThrGain",
                                                                          Tile::MAX_ROS - 1, Tile::MAX_GAIN, nL1Triggers);
 
@@ -105,6 +108,7 @@ StatusCode TileCellMonitorAlgorithm::initialize() {
   m_timeBalGroups = buildToolMap<int>(m_tools, "TileCellTimeBalance", Tile::MAX_ROS - 1);
   m_energyBalGroups = buildToolMap<int>(m_tools, "TileCellEnergyBalance", Tile::MAX_ROS - 1);
 
+
   return TileMonitorAlgorithm::initialize();
 }
 
@@ -194,6 +198,10 @@ StatusCode TileCellMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
   std::vector<int> overThr300GeVOccupModule[Tile::MAX_ROS - 1];
   std::vector<int> overThr300GeVOccupChannel[Tile::MAX_ROS - 1];
 
+  std::vector<int> eneDiff[Tile::MAX_ROS - 1];
+  std::vector<int> eneDiffChannel[Tile::MAX_ROS - 1];
+  std::vector<int> eneDiffModule[Tile::MAX_ROS - 1];
+
   std::vector<int> maskedOnFlyDrawers[Tile::MAX_ROS - 1];
   std::vector<int> maskedOnFlyChannel[Tile::MAX_ROS - 1];
 
@@ -560,6 +568,14 @@ StatusCode TileCellMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
             energyBal[partition1].push_back(energyRatio);
             energyBalModule[partition1].push_back(module);
 
+            eneDiff[partition1].push_back(energyDiff);
+            eneDiffChannel[partition1].push_back(channel1);
+            eneDiffModule[partition1].push_back(module);
+
+            eneDiff[partition2].push_back(-1.0 * energyDiff);
+            eneDiffChannel[partition2].push_back(channel2);
+            eneDiffModule[partition2].push_back(module);
+
             if (fillEneAndTimeDiff) {
               sampEnergyDiff[partition1][sample].push_back(energyDiff);
             }
@@ -786,6 +802,15 @@ StatusCode TileCellMonitorAlgorithm::fillHistograms( const EventContext& ctx ) c
       }
     }
 
+    if (!eneDiff[partition].empty()) {
+      auto monEnergyDiff = Monitored::Collection("energyDiff", eneDiff[partition]);
+      auto monModule = Monitored::Collection("module", eneDiffModule[partition]);
+      auto monChannel = Monitored::Collection("channel", eneDiffChannel[partition]);
+      for (int l1TriggerIdx : l1TriggersIndices) {
+        fill(m_tools[m_eneDiffChanModGroups[partition][l1TriggerIdx]], monModule, monChannel, monEnergyDiff);
+      }
+    }
+
     for (unsigned int gain = 0; gain < Tile::MAX_GAIN; ++gain) {
       if (!overThrOccupGainModule[partition][gain].empty()) {
         auto monModule = Monitored::Collection("module", overThrOccupGainModule[partition][gain]);
diff --git a/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.h b/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.h
index a0b6a507c07e3bd192fee8137d04ba2133efbdcb..4814f13d1576ef9678092af436e5fa46404e2384 100644
--- a/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.h
+++ b/TileCalorimeter/TileMonitoring/src/TileCellMonitorAlgorithm.h
@@ -117,6 +117,7 @@ class TileCellMonitorAlgorithm : public TileMonitorAlgorithm {
     std::vector<std::vector<int>> m_overThrOccupGroups;
     std::vector<std::vector<int>> m_overThr30GeVOccupGroups;
     std::vector<std::vector<int>> m_overThr300GeVOccupGroups;
+    std::vector<std::vector<int>> m_eneDiffChanModGroups;
     std::vector<std::vector<std::vector<int>>> m_overThrOccupGainGroups;
 
     std::vector<std::vector<std::vector<int>>> m_chanTimeSampGroups;