diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TilePaterMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TilePaterMonTool.h
index da2a4e784e661a6ab1694b919d00a52d052fe8a5..f70817c0711e1efd18c4e9b756d415b9498746ae 100644
--- a/TileCalorimeter/TileMonitoring/TileMonitoring/TilePaterMonTool.h
+++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TilePaterMonTool.h
@@ -66,14 +66,14 @@ class TilePaterMonTool: public ManagedMonitorToolBase
 
 protected:
 /// Implicit version of book1D 
-  TH1D* book1D(const std::string& nam, const std::string& tit, 
+  TH1D* book1D(const std::string& nam, const std::string& tit,
                int nx, double xmin, double xmax) 
   { 
     return book1D(m_path, nam, tit, nx, xmin, xmax); 
   }
 
 /// Implicit version of book2D 
-  TH2D* book2D(const std::string& nam, const std::string& tit, 
+  TH2D* book2D(const std::string& nam, const std::string& tit,
                int nx, double xmin, double xmax, 
                int ny, double ymin, double ymax)
  {
@@ -100,6 +100,11 @@ protected:
                Interval_t interval = run, MgmtAttr_t attribute = ATTRIB_MANAGED,
                std::string trigChain = "", std::string mergeAlgo = "");
 
+  TH1S* book1Sx(std::string dir, std::string nam, std::string tit,
+               int nx, const Double_t *xlgbins,
+               Interval_t interval = run, MgmtAttr_t attribute = ATTRIB_MANAGED,
+               std::string trigChain = "", std::string mergeAlgo = "");
+
   TH1C* book1C(std::string dir, std::string nam, std::string tit, 
                int nx, double xmin, double xmax,
                Interval_t interval = run, MgmtAttr_t attribute = ATTRIB_MANAGED,
@@ -205,12 +210,12 @@ protected:
   using ManagedMonitorToolBase::regGraph;
 
   template <typename T>
-  void regHist(const std::string& subDir, T* hist, 
+  void regHist(const std::string& subDir, T* hist,
                Interval_t interval = run, MgmtAttr_t attribute = ATTRIB_MANAGED, 
                std::string trigChain = "", std::string mergeAlgo = "" );
 
   template <typename T>
-  void regGraph(const std::string& subDir, T* graph, 
+  void regGraph(const std::string& subDir, T* graph,
                 Interval_t interval = run, MgmtAttr_t attribute = ATTRIB_MANAGED, 
                 std::string trigChain = "", std::string mergeAlgo = "" );
   
diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
index f79a9f4684e4e0da3b803a0144190e741df16185..e52ef8673a3e788c3549009a9c73b45b31b24c45 100644
--- a/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
+++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
@@ -64,6 +64,7 @@ class TileRawChannelMonTool: public TilePaterMonTool {
 
     bool m_bookAll;
     bool m_book2D;
+    bool m_overlaphists;
     int m_runType;
     std::string m_contName;
     std::string m_contNameDSP;
@@ -170,6 +171,7 @@ class TileRawChannelMonTool: public TilePaterMonTool {
     const TileInfo* m_tileInfo;
     bool m_is12bit;
     SG::ReadHandleKey<TileDQstatus> m_DQstatusKey;
+    int m_intCalibUnit;
 };
 
 #endif
diff --git a/TileCalorimeter/TileMonitoring/src/TilePaterMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TilePaterMonTool.cxx
index a17126cae70eb08572d2f509c640577876e34d50..3ceed64524bff02ea97f853d58db1efe276efa5d 100644
--- a/TileCalorimeter/TileMonitoring/src/TilePaterMonTool.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TilePaterMonTool.cxx
@@ -176,6 +176,17 @@ TH1S * TilePaterMonTool::book1S(std::string subdir, std::string nam, std::string
   return hist;
 }
 
+TH1S * TilePaterMonTool::book1Sx(std::string subdir, std::string nam, std::string tit,
+                                int nx, const Double_t *xlgbins,
+                                Interval_t interval, MgmtAttr_t attribute,
+                                std::string trigChain, std::string mergeAlgo)
+{
+
+  TH1S* hist = new TH1S(TString(nam), TString(tit), nx, xlgbins);
+  regHist(subdir, hist, interval, attribute, trigChain, mergeAlgo);
+  return hist;
+}
+
 TH1I* TilePaterMonTool::book1I(std::string subdir, std::string nam, std::string tit,
                                  int nx, double xmin, double xmax,
                                  Interval_t interval, MgmtAttr_t attribute,
diff --git a/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
index b1b714954716dc647412cfb13787f012fdfb8c5f..982abee17b35798dae3f8e51a9271cc37df1411c 100644
--- a/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
@@ -54,6 +54,7 @@ TileRawChannelMonTool::TileRawChannelMonTool(const std::string & type, const std
   declareInterface<IMonitorToolBase>(this);
 
   declareProperty("bookAllDrawers", m_bookAll = false);
+  declareProperty("overlaphists", m_overlaphists = false);
   declareProperty("book2D", m_book2D = true);
 
   // run type 1 - phys, 2 - las, 4 - ped, 8 - cis
@@ -79,6 +80,7 @@ TileRawChannelMonTool::TileRawChannelMonTool(const std::string & type, const std
   declareProperty("MinAmpForCorrectedTime", m_minAmpForCorrectedTime = 0.5);
   declareProperty("TileInfoName", m_infoName = "TileInfo");
   declareProperty("TileDQstatus", m_DQstatusKey = "TileDQstatus");
+  declareProperty("CalibUnit", m_intCalibUnit = (int)TileRawChannelUnit::Invalid);
 }
 
 /*---------------------------------------------------------*/
@@ -123,10 +125,16 @@ StatusCode TileRawChannelMonTool::bookHists()
     msg(MSG::DEBUG) << "Using base path " << m_path << endmsg;
   }
 
-  if ((m_runType == LasRun) || (m_runType == PhysRun) || (m_runType == LedRun)) {
-    m_calibUnit = TileRawChannelUnit::CesiumPicoCoulombs;
-  } else
-    m_calibUnit = TileRawChannelUnit::PicoCoulombs;
+  if (m_intCalibUnit>=0 && m_intCalibUnit<=3) {
+    m_calibUnit = (TileRawChannelUnit::UNIT)m_intCalibUnit;
+  }
+  if (m_calibUnit == TileRawChannelUnit::Invalid) {
+    if (m_runType == PhysRun) {
+      m_calibUnit = TileRawChannelUnit::CesiumPicoCoulombs;
+    } else {
+      m_calibUnit = TileRawChannelUnit::PicoCoulombs;
+    }
+  }
 
   if (m_bookAll) {
     for (int ros = 1; ros < 5; ++ros) {
@@ -214,9 +222,9 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
         if (m_book2D) {
           std::string Hist2DName[4] = { "_amp_vs_q_100", "_amp_vs_q_5", "_time_vs_time_100", "_time_vs_time_5" };
           std::string Hist2DTitle[4] = { " amp vs charge 100 pF", " amp vs charge 5 pF", " time vs time 100 pF", " time vs time 5 pF" };
-	  float factor_charge = m_is12bit ? 2. : 1.;
-	  float factor_adc    = m_is12bit ? 4. : 1.;
-	  // Below, static_cast<float> is used to avoid warnings from -Wnarrowing
+          float factor_charge = m_is12bit ? 2. : 1.;
+          float factor_adc    = m_is12bit ? 4. : 1.;
+          // Below, static_cast<float> is used to avoid warnings from -Wnarrowing
           float LowX_low2D[4] = { -4., -0.5, -0.25, -0.25 };
           float HighX_low2D[4] = { 804., 50.5, 25.25, 25.25 };
           float LowX_hi2D[4] = { static_cast<float>(-0.0625 * factor_charge), static_cast<float>(-0.0625 * factor_charge), -0.25, -0.25 };
@@ -276,10 +284,27 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
         } else {
           switch (gn) {
             case 0: // low gain
-              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 1101, -50.5, 1050.5));
+              if (m_overlaphists) {
+                const Int_t nlg1 = 49;
+                const Int_t nlg2 = 500;
+                const Int_t nlg3 = 1027;
+                Double_t xlgbin[nlg1 + nlg2 + nlg3 + 1];
+                for(Int_t i = 0; i <= nlg1; ++i)
+                  xlgbin[i] = -50.5+1.0*i;
+                for(Int_t i = 1; i <= nlg2; ++i)
+                  xlgbin[i + nlg1] = -1.5 + 0.05 * i;
+                for(Int_t i = 1; i <= nlg3; ++i)
+                  xlgbin[i + nlg1 + nlg2] = 23.5 + 1.0 * i;
+                m_data->m_hist1[ros][drawer][ch][gn].push_back(book1Sx(subDir, histName, histTitle, nlg1 + nlg2 + nlg3, xlgbin));
+              } else {
+                m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 1101, -50.5, 1050.5));
+              }
               break;
             case 1: // high gain
-              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 826, -1.01, 15.51));
+              if (m_overlaphists)
+                m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 500, -1.5, 23.5));
+              else
+                m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 826, -1.01, 15.51));
               break;
             default: // single gain mode
               if (m_runType == PhysRun) {
@@ -1153,7 +1178,14 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
               //Lukas
 
               if (m_data->m_hist1[ros][drawer][ch][adc][0]->GetEntries() > 0) {
-                m_data->m_hist1[ros][drawer][ch][adc][0]->Fit("g", "NQ");
+                if (adc == 0 && m_overlaphists) { // We have for LB histograms with variable-width bins, not suitable for a fit
+                  TH1S *h4fit=new TH1S(*(m_data->m_hist1[ros][drawer][ch][adc][0]));
+                  h4fit->Scale(1,"width");
+                  h4fit->Fit("g", "NQ");
+                  delete(h4fit);
+                } else {
+                  m_data->m_hist1[ros][drawer][ch][adc][0]->Fit("g", "NQ");
+                }
                 Sigma = fit_gaus->GetParameter(2);
                 ErrS = fit_gaus->GetParError(2);
               }