diff --git a/Trigger/TrigT1/TrigT1CaloCalibUtils/python/doL1CaloHVCorrections.py b/Trigger/TrigT1/TrigT1CaloCalibUtils/python/doL1CaloHVCorrections.py
index 6d485980c0fe42f2684838a7257031a9ca9a38a4..aae275eaed59cf8672afca416188bdbd5bff1db7 100644
--- a/Trigger/TrigT1/TrigT1CaloCalibUtils/python/doL1CaloHVCorrections.py
+++ b/Trigger/TrigT1/TrigT1CaloCalibUtils/python/doL1CaloHVCorrections.py
@@ -11,7 +11,7 @@ import time
 import os
 #from ctypes import *
 import struct 
-from array import *
+import array
 
 from PyCool import cool
 from optparse import OptionParser
@@ -21,6 +21,53 @@ import PlotCalibrationHV
 
 import mergeEnergyRamps
 
+class HVCorrectionCOOLReader:
+
+  def __init__(self):
+
+    self.correctionsFromCOOL = {}
+    self.UNIX2COOL = 1000000000
+
+    # get database service and open database
+    dbSvc = cool.DatabaseSvcFactory.databaseService()
+
+    dbString = 'oracle://ATLAS_COOLPROD;schema=ATLAS_COOLONL_TRIGGER;dbname=CONDBR2'
+    try:
+      db = dbSvc.openDatabase(dbString, False)        
+    except Exception, e:
+      print 'Error: Problem opening database', e
+      sys.exit(1)
+
+    folder_name = "/TRIGGER/Receivers/Factors/HVCorrections"
+    folder=db.getFolder(folder_name)
+    ch = folder.listChannels()
+       
+    startUtime = int(time.time())
+    endUtime = int(time.time())
+    startValKey = startUtime * self.UNIX2COOL
+    endValKey = endUtime * self.UNIX2COOL
+    chsel = cool.ChannelSelection(0,sys.maxint)
+
+    try:
+      itr=folder.browseObjects(startValKey, endValKey, chsel)
+    except Exception, e:
+      print e
+      sys.exit(1)
+
+    for row in itr:
+      ReceiverId = hex(int(row.channelId()))
+      payload = row.payload()
+      HVCorrection = payload['factor']
+
+      self.correctionsFromCOOL[ReceiverId] = HVCorrection
+     
+  # close database
+    db.closeDatabase()
+
+  def getCorrection(self, receiver):
+
+    return self.correctionsFromCOOL[receiver]
+
 class HVCorrectionCalculator:
 
   def __init__(self, mapping):
@@ -237,10 +284,24 @@ if __name__ == "__main__":
 
   h_corrEmec_em  = PlotCalibrationGains.L1CaloMap("Calculated HV corrections for EM overlap (EMEC)","#eta bin","#phi bin")
   h_corrFcalHighEta_had = PlotCalibrationGains.L1CaloMap("Calculated HV corrections for HAD FCAL (high #eta)","#eta bin","#phi bin")
+#
+  h_RefcorrEmb_em  = PlotCalibrationGains.L1CaloMap("Reference HV corrections for EM  (EMB in overlap) ","#eta bin","#phi bin")
+  h_RefcorrFcalLowEta_had = PlotCalibrationGains.L1CaloMap("Reference HV corrections for HAD (FCAL low #eta)","#eta bin","#phi bin")
 
+  h_RefcorrEmec_em  = PlotCalibrationGains.L1CaloMap("Reference HV corrections for EM overlap (EMEC)","#eta bin","#phi bin")
+  h_RefcorrFcalHighEta_had = PlotCalibrationGains.L1CaloMap("Reference HV corrections for HAD FCAL (high #eta)","#eta bin","#phi bin")
+#
+  h_DiffcorrEmb_em  = PlotCalibrationGains.L1CaloMap("(calculated-reference) HV corrections for EM  (EMB in overlap) ","#eta bin","#phi bin")
+  h_DiffcorrFcalLowEta_had = PlotCalibrationGains.L1CaloMap("(calculated-reference) HV corrections for HAD (FCAL low #eta)","#eta bin","#phi bin")
+
+  h_DiffcorrEmec_em  = PlotCalibrationGains.L1CaloMap("(calculated-reference) HV corrections for EM overlap (EMEC)","#eta bin","#phi bin")
+  h_DiffcorrFcalHighEta_had = PlotCalibrationGains.L1CaloMap("(calculated-reference) HV corrections for HAD FCAL (high #eta)","#eta bin","#phi bin")
+#
     
   hv_input = PlotCalibrationHV.L1CaloHVReader(options.hv_input) 
 
+  referenceCorrectionReader = HVCorrectionCOOLReader()
+
   geometry_convertor = PlotCalibrationGains.L1CaloGeometryConvertor()
   geometry_convertor.LoadReceiverPPMMap()
 
@@ -348,33 +409,49 @@ if __name__ == "__main__":
     ### check if the channel has overall HV correction larger than the threshold
     
     predictedCorrection = correctionCalculator.GetCorrection(receiver, layer_corr, layer_names)
+    referenceCorrection = referenceCorrectionReader.getCorrection(receiver)
+
+    correctionDifference = (predictedCorrection-referenceCorrection)
+
+#    print "predictedCorrection=", predictedCorrection, "  referenceCorrection=", referenceCorrection
 
-    if abs(predictedCorrection - 1) <= options.hv_corr_diff:
+    if abs(correctionDifference) <= options.hv_corr_diff:                # we update only towers that changed
       continue # skip this receiver, the correction is not high enough
 
     calculatedCorrections[receiver] = [predictedCorrection,0]
-    print >> output_text, ("%5s %9s  %3i %2i  %.3f") % (receiver, coolid, eta_bin, phi_bin, predictedCorrection)
+    print >> output_text, ("%5s %9s  %3i %2i  %.3f (%.3f)") % (receiver, coolid, eta_bin, phi_bin, predictedCorrection,referenceCorrection)
 
 
     if geometry_convertor.isCoolEm(coolid):
       if not geometry_convertor.isPPMOverlap(coolid):
         h_corrEmb_em.Fill(eta_bin,phi_bin,predictedCorrection)
+        h_RefcorrEmb_em.Fill(eta_bin,phi_bin,referenceCorrection)
+        h_DiffcorrEmb_em.Fill(eta_bin,phi_bin,correctionDifference)
       else:
         if geometry_convertor.getOverlapLayer(receiver)=='EMB':
           h_corrEmb_em.Fill(eta_bin,phi_bin,predictedCorrection)
+          h_RefcorrEmb_em.Fill(eta_bin,phi_bin,referenceCorrection)
+          h_DiffcorrEmb_em.Fill(eta_bin,phi_bin,correctionDifference)
         else:
           h_corrEmec_em.Fill(eta_bin,phi_bin,predictedCorrection)
+          h_RefcorrEmec_em.Fill(eta_bin,phi_bin,referenceCorrection)
+          h_DiffcorrEmec_em.Fill(eta_bin,phi_bin,correctionDifference)
 
 
     if geometry_convertor.isCoolHad(coolid):
       if not geometry_convertor.isPPMFCAL(coolid):
         h_corrFcalLowEta_had.Fill(eta_bin,phi_bin,predictedCorrection)
+        h_RefcorrFcalLowEta_had.Fill(eta_bin,phi_bin,referenceCorrection)
+        h_DiffcorrFcalLowEta_had.Fill(eta_bin,phi_bin,correctionDifference)
       else:
         if geometry_convertor.getFCAL23RecEta(receiver)=='HighEta':
           h_corrFcalHighEta_had.Fill(eta_bin,phi_bin,predictedCorrection)
+          h_RefcorrFcalHighEta_had.Fill(eta_bin,phi_bin,referenceCorrection)
+          h_DiffcorrFcalHighEta_had.Fill(eta_bin,phi_bin,correctionDifference)
         else: 
           h_corrFcalLowEta_had.Fill(eta_bin,phi_bin,predictedCorrection)
-
+          h_RefcorrFcalLowEta_had.Fill(eta_bin,phi_bin,referenceCorrection)
+          h_DiffcorrFcalLowEta_had.Fill(eta_bin,phi_bin,correctionDifference)
 
   writeHVToSqlite(options.output_files+".sqlite",calculatedCorrections)
   output_text.close()
@@ -400,8 +477,53 @@ if __name__ == "__main__":
   h_corrFcalHighEta_had.SetMinimum(1.)
   h_corrFcalHighEta_had.SetMaximum(2.1)
   h_corrFcalHighEta_had.Draw()
-  c1.Print(options.output_files+".ps)")
+  c1.Print(options.output_files+".ps")
+
+  # Now corrections from COOL
+
+  h_RefcorrEmb_em.SetMinimum(1.)
+  h_RefcorrEmb_em.SetMaximum(2.1)
+  h_RefcorrEmb_em.Draw()
+  c1.Print(options.output_files+".ps")
+
+  h_RefcorrFcalLowEta_had.SetMinimum(1.)
+  h_RefcorrFcalLowEta_had.SetMaximum(2.1)
+  h_RefcorrFcalLowEta_had.Draw()
+  c1.Print(options.output_files+".ps")
+
+
+  h_RefcorrEmec_em.SetMinimum(1.)
+  h_RefcorrEmec_em.SetMaximum(2.1)
+  h_RefcorrEmec_em.Draw()
+  c1.Print(options.output_files+".ps")
+
+  h_RefcorrFcalHighEta_had.SetMinimum(1.)
+  h_RefcorrFcalHighEta_had.SetMaximum(2.1)
+  h_RefcorrFcalHighEta_had.Draw()
+  c1.Print(options.output_files+".ps")
+
+  # Now difference
+  h_DiffcorrEmb_em.SetMinimum(-0.1)
+  h_DiffcorrEmb_em.SetMaximum(0.1)
+  h_DiffcorrEmb_em.Draw()
+  c1.Print(options.output_files+".ps")
+
+  h_DiffcorrFcalLowEta_had.SetMinimum(-0.1)
+  h_DiffcorrFcalLowEta_had.SetMaximum(0.1)
+  h_DiffcorrFcalLowEta_had.Draw()
+  c1.Print(options.output_files+".ps")
 
+
+  h_DiffcorrEmec_em.SetMinimum(-0.1)
+  h_DiffcorrEmec_em.SetMaximum(0.1)
+  h_DiffcorrEmec_em.Draw()
+  c1.Print(options.output_files+".ps")
+
+  h_DiffcorrFcalHighEta_had.SetMinimum(-0.1)
+  h_DiffcorrFcalHighEta_had.SetMaximum(0.1)
+  h_DiffcorrFcalHighEta_had.Draw()
+  c1.Print(options.output_files+".ps)")
+#
   os.system("ps2pdf " + options.output_files+".ps")
  # os.system("cp HVStatus.pdf /home/jb/public_web/tmp ")