diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
index 780ba2a2414f2dcbe25d5573425362b94d5b2ac0..404e4ca37f66fadcfa7784483fdd707c50c69fe9 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTErrMonTool.h
@@ -267,7 +267,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase
   bool psTripDCSSCT();
   bool eventVsWafer();
 
-  void fillModule( moduleGeo_t module,  TH2F* histo );
+  void fillWafer( moduleGeo_t module,  TH2F* histo );
   double calculateDetectorCoverage(const TH2F * histo );
 
   const InDetDD::SCT_DetectorManager * m_sctManager;
@@ -292,12 +292,7 @@ class SCTErrMonTool : public ManagedMonitorToolBase
   const unsigned int m_nBinsPhi;
   const double m_WafersThreshold;
 
-  TProfile * m_DisabledDetectorCoverageVsLB;
-  TProfile * m_ErrorDetectorCoverageVsLB;
-  TProfile * m_LinkDetectorCoverageVsLB;
-  TProfile * m_RODoutDetectorCoverageVsLB;
-  TProfile * m_pstripDCSDetectorCoverageVsLB;
-  TProfile * m_summaryDetectorCoverageVsLB;
+  TProfile * m_detectorCoverageVsLB[numberOfProblemForCoverage];
   TProfile * m_pstripWaferVsLB;
 
   int  m_pswafer;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index e31f8fd2d63fb932e70152161b513afa38915846..34cf408984bebda40fd004acf504af54a7f74779 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -201,12 +201,7 @@ SCTErrMonTool::SCTErrMonTool(const std::string &type, const std::string &name, c
   m_rangeEta( 2.5 ),
   m_nBinsPhi( 100 ),
   m_WafersThreshold( 3.0 ),
-  m_DisabledDetectorCoverageVsLB{},
-  m_ErrorDetectorCoverageVsLB{},
-  m_LinkDetectorCoverageVsLB{},
-  m_RODoutDetectorCoverageVsLB{},
-  m_pstripDCSDetectorCoverageVsLB{},
-  m_summaryDetectorCoverageVsLB{},
+  m_detectorCoverageVsLB{nullptr},
   m_pstripWaferVsLB{}{
     /**
      *  sroe 3 Sept 2015:
@@ -486,6 +481,7 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent()
     m_mapSCT[summary]   = new TH2F( "summaryModulesMapSCT", "Map of all error and disabled modules for SCT",
 				    m_nBinsEta, -m_rangeEta, m_rangeEta, m_nBinsPhi, -M_PI, M_PI );
     
+    //detector coverage vs lh
     for (int iProblem=0; iProblem<numberOfProblemForCoverage ; iProblem++)
       {
 	m_mapSCT[iProblem]->GetXaxis()->SetTitle("#eta");
@@ -494,64 +490,33 @@ StatusCode SCTErrMonTool::bookHistogramsRecurrent()
 	m_mapSCT[iProblem]->SetStats(0);
       }
 
-    //Disabled coverage vs lb
-    m_DisabledDetectorCoverageVsLB = new TProfile("SCTDisabledDetectorCoverageVsLbs",
-						"Ave. Disabled detector coverage per event in Lumi Block",
-						NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_DisabledDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_DisabledDetectorCoverageVsLB->GetYaxis()->SetTitle("Disabled Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_DisabledDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTDisabledDetectorCoverageConf" );
-    }
-
-    //Link error coverage vs lb
-    m_LinkDetectorCoverageVsLB = new TProfile("SCTLinkDetectorCoverageVsLbs",
-						"Ave. Link error detector coverage per event in Lumi Block",
-						NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_LinkDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_LinkDetectorCoverageVsLB->GetYaxis()->SetTitle("Link Error Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_LinkDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTLinkDetectorCoverageConf" );
-    }
-
-    //RODout coverage vs lb
-    m_RODoutDetectorCoverageVsLB = new TProfile("SCTRODoutDetectorCoverageVsLbs",
-						"Ave. ROD OUT detector coverage per event in Lumi Block",
-						NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_RODoutDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_RODoutDetectorCoverageVsLB->GetYaxis()->SetTitle("ROD OUT Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_RODoutDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTRODoutDetectorCoverageConf" );
-    }
-
-    //Bad error coverage vs lb
-    m_ErrorDetectorCoverageVsLB = new TProfile("SCTErrorDetectorCoverageVsLbs",
-						"Ave. Bad error detector coverage per event in Lumi Block",
-						NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_ErrorDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_ErrorDetectorCoverageVsLB->GetYaxis()->SetTitle("Bad Error Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_ErrorDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTErrorDetectorCoverageConf" );
-    }
-
-    //ps trip DCS coverage vs lb
-    m_pstripDCSDetectorCoverageVsLB = new TProfile("SCTPStripDCSDetectorCoverageVsLbs",
-						   "Ave. PS trip detector coverage per event in Lumi Block <DCS>",
-						   NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_pstripDCSDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_pstripDCSDetectorCoverageVsLB->GetYaxis()->SetTitle("PS trip Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_pstripDCSDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTpstripDetectorCoverageConDCS" );
-    }
-
-    //total coverage vs lb
-    m_summaryDetectorCoverageVsLB = new TProfile("SCTsummaryDetectorCoverageVsLbs",
-						 "Ave. total detector coverage per event in Lumi Block",
-						 NBINS_LBs,0.5,NBINS_LBs+0.5);
-    m_summaryDetectorCoverageVsLB->GetXaxis()->SetTitle("LumiBlock");
-    m_summaryDetectorCoverageVsLB->GetYaxis()->SetTitle("Total Detector Coverage [%]");
-    if ( monGr_shift.regHist(m_summaryDetectorCoverageVsLB).isFailure() ){
-      ATH_MSG_WARNING("Cannot book Histogram:SCTTotalDetectorCoverageConf" );
+    std::string profNames[numberOfProblemForCoverage] = {
+      "", // all
+      "SCTDisabledDetectorCoverageVsLbs", // disabled
+      "SCTLinkDetectorCoverageVsLbs", // badLinkError
+      "SCTRODoutDetectorCoverageVsLbs", // badRODError
+      "SCTErrorDetectorCoverageVsLbs", // badError
+      "SCTPStripDCSDetectorCoverageVsLbs", // psTripDCS
+      "SCTsummaryDetectorCoverageVsLbs" // summary
+    };
+    std::string profTitles[numberOfProblemForCoverage] = {
+      "", // all
+      "Ave. Disabled detector coverage per event in Lumi Block", // disabled
+      "Ave. Link error detector coverage per event in Lumi Block", // badLinkError
+      "Ave. ROD OUT detector coverage per event in Lumi Block", // badRODError
+      "Ave. Bad error detector coverage per event in Lumi Block", // badError
+      "Ave. PS trip detector coverage per event in Lumi Block <DCS>", //psTripDCS
+      "Ave. total detector coverage per event in Lumi Block" //summary
+    };
+    for (int iProblem=0; iProblem<numberOfProblemForCoverage; iProblem++) {
+      if (iProblem==all) continue;
+
+      m_detectorCoverageVsLB[iProblem] = new TProfile(profNames[iProblem].c_str(), profTitles[iProblem].c_str(), NBINS_LBs,0.5,NBINS_LBs+0.5);
+      m_detectorCoverageVsLB[iProblem]->GetXaxis()->SetTitle("LumiBlock");
+      m_detectorCoverageVsLB[iProblem]->GetYaxis()->SetTitle("Total Detector Coverage [%]");
+      if (monGr_shift.regHist(m_detectorCoverageVsLB[iProblem]).isFailure()) {
+	ATH_MSG_WARNING("Cannot book " << profNames[iProblem] << ", " << profTitles[iProblem]);
+      }
     }
 
     //ps trip number of wafer vs lb
@@ -1022,46 +987,19 @@ SCTErrMonTool::fillByteStreamErrors() {
     for (int iProblem=0; iProblem<numberOfProblemForCoverage; iProblem++)
       {
 	for (const IdentifierHash& hash: m_SCTHash[iProblem]) {
-	  fillModule( m_geo[hash], m_mapSCT[iProblem] );
+	  fillWafer( m_geo[hash], m_mapSCT[iProblem] );
 	}
       }
     
-    //disabled
-    double dis_detector_coverage = calculateDetectorCoverage(m_mapSCT[disabled]);
-    m_DisabledDetectorCoverageVsLB->Fill(static_cast<double>(current_lb), dis_detector_coverage);
-    double disabled_detector_coverage = m_DisabledDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << disabled_detector_coverage);
-
-    //bad error
-    double bad_detector_coverage = calculateDetectorCoverage(m_mapSCT[badError]);
-    m_ErrorDetectorCoverageVsLB->Fill(static_cast<double>(current_lb), bad_detector_coverage);
-    double baderror_detector_coverage = m_ErrorDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << baderror_detector_coverage);
-
-    //link
-    double link_detector_coverage = calculateDetectorCoverage(m_mapSCT[badLinkError]);
-    m_LinkDetectorCoverageVsLB->Fill(static_cast<double>(current_lb), link_detector_coverage);
-    double linkerror_detector_coverage = m_LinkDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << linkerror_detector_coverage);
-
-    //rodout
-    double rod_detector_coverage = calculateDetectorCoverage(m_mapSCT[badRODError]);
-    m_RODoutDetectorCoverageVsLB->Fill(static_cast<double>(current_lb), rod_detector_coverage);
-    //    double roderror_detector_coverage = m_RODoutDetectorCoverageVsLB->GetBinContent(current_lb);
-    double roderror_detector_coverage = m_RODoutDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << roderror_detector_coverage);
-
-    //pstrip DCS
-    double ps_detector_DCS_coverage = calculateDetectorCoverage(m_mapSCT[psTripDCS]);
-    m_pstripDCSDetectorCoverageVsLB ->Fill(static_cast<double>(current_lb), ps_detector_DCS_coverage);
-    double pstrip_detector_DCS_coverage = m_pstripDCSDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << pstrip_detector_DCS_coverage);
-
-    //total coverage                                                                                     
-    double total_detector_coverage = calculateDetectorCoverage(m_mapSCT[summary]);
-    m_summaryDetectorCoverageVsLB->Fill(static_cast<double>(current_lb), total_detector_coverage);
-    double detector_coverage = m_summaryDetectorCoverageVsLB->GetBinContent(current_lb);
-    ATH_MSG_INFO("Detector Coverage : " << detector_coverage);
+    //detector coverage
+    for (int iProblem=0; iProblem<numberOfProblemForCoverage; iProblem++) {
+      if (iProblem==all) continue;
+
+    double detector_coverage = calculateDetectorCoverage(m_mapSCT[iProblem]);
+    m_detectorCoverageVsLB[iProblem]->Fill(static_cast<double>(current_lb), detector_coverage);
+    double good_detector_coverage = m_detectorCoverageVsLB[iProblem]->GetBinContent(current_lb);
+    ATH_MSG_INFO("Detector Coverage : " << good_detector_coverage);
+    }
 
     //PStirp Wafer
     m_pstripWaferVsLB ->Fill(static_cast<double>(current_lb), m_pswafer);
@@ -2046,10 +1984,10 @@ SCTErrMonTool::isEndcapA(const int moduleNumber) {
   return moduleinEndcapA;
 }
 //====================================================================================================
-//                          SCTErrMonTool :: fillModule, Keisuke Kouda 12.09.2016
+//                          SCTErrMonTool :: fillWafer, Keisuke Kouda 12.09.2016
 //====================================================================================================
-void SCTErrMonTool::fillModule( moduleGeo_t module, TH2F * histo )
-//void SCTErrMonTool::fillModule( moduleGeo_t module, TProfile2D * profile )
+void SCTErrMonTool::fillWafer( moduleGeo_t module, TH2F * histo )
+//void SCTErrMonTool::fillWafer( moduleGeo_t module, TProfile2D * profile )
 {
   double etaMin(module.first.first), etaMax(module.first.second);
   double phiMin(module.second.first), phiMax(module.second.second);
@@ -2268,7 +2206,7 @@ double SCTErrMonTool::calculateDetectorCoverage( const TH2F * histo )
 	    }
 	  else if (waferCell > m_WafersThreshold - 1.0 )
 	    {
-	      occupancy = occupancy - m_WafersThreshold + waferCell + 1.0;
+	      occupancy += waferCell - (m_WafersThreshold - 1.0);
 //Calculating the bin occupancy which has less than 1. 
 //For example, bin have a 2.3. In this case, we can understand that 30% of the bin is coverd by 3 sides/wafers and 70% of the bin is coverd by 2 sides/wafers.
 //And it means that occupancy of the bin is 0.3 So, in this line, I take difference between m_WafersThreshold(3)-1 and waferCell, and add it to the occupancy.