diff --git a/Calorimeter/CaloCondPhysAlgs/src/CaloCellCalcEnergyCorr.cxx b/Calorimeter/CaloCondPhysAlgs/src/CaloCellCalcEnergyCorr.cxx
index 9671307f60032055e7ef39b6aa30bee13507b2b2..a4f1d71692960f0d160635d3d29cd4329783f4c5 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/CaloCellCalcEnergyCorr.cxx
+++ b/Calorimeter/CaloCondPhysAlgs/src/CaloCellCalcEnergyCorr.cxx
@@ -17,11 +17,9 @@
 #include "CaloDetDescr/CaloDetectorElements.h"
 #include "LArReadoutGeometry/EMBCell.h"
 #include "LArHV/EMBHVElectrode.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArReadoutGeometry/EMECCell.h"
 #include "LArHV/EMECHVElectrode.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
 #include "LArHV/EMECPresamplerHVModule.h"
 #include "LArReadoutGeometry/HECCell.h"
 #include "LArHV/HECHVSubgap.h"
@@ -237,14 +235,14 @@ std::vector<int> CaloCellCalcEnergyCorr::GetHVLines(const Identifier& id) {
       const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(m_calodetdescrmgr->get_element(id));
       if (!embElement) std::abort();
       const EMBCellConstLink cell = embElement->getEMBCell();
-      const EMBPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule();
-      for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule->hvLineNo(igap));
+      const EMBPresamplerHVModule& hvmodule = cell->getPresamplerHVModule();
+      for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule.hvLineNo(igap));
     } else {
       const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(m_calodetdescrmgr->get_element(id));
       if (!emecElement) std::abort();
       const EMECCellConstLink cell = emecElement->getEMECCell();
-      const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
-      for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule->hvLineNo(igap));
+      const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
+      for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule.hvLineNo(igap));
     }
   }
 
diff --git a/LArCalorimeter/LArCafJobs/src/LArNoiseBursts.cxx b/LArCalorimeter/LArCafJobs/src/LArNoiseBursts.cxx
index 6d295483c3da738bbb5f635de8d78da43a45bda5..4f22392f7c6af8e467abe3051d7a0ec23117deeb 100644
--- a/LArCalorimeter/LArCafJobs/src/LArNoiseBursts.cxx
+++ b/LArCalorimeter/LArCafJobs/src/LArNoiseBursts.cxx
@@ -51,11 +51,9 @@
 #include "CaloDetDescr/CaloDetectorElements.h"
 #include "LArReadoutGeometry/EMBCell.h"
 #include "LArHV/EMBHVElectrode.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArReadoutGeometry/EMECCell.h"
 #include "LArHV/EMECHVElectrode.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
 #include "LArHV/EMECPresamplerHVModule.h"
 #include "LArReadoutGeometry/HECCell.h"
 #include "LArHV/HECHVSubgap.h"
@@ -1433,8 +1431,8 @@ std::vector<int>* LArNoiseBursts::GetHVLines(const Identifier& id)
         return 0;
       }
       const EMBCellConstLink cell = embElement->getEMBCell();
-      const EMBPresamplerHVModuleConstLink hvmodule =  cell->getPresamplerHVModule();
-      for(igap=0;igap<2;igap++) tmplines.push_back(hvmodule->hvLineNo(igap));
+      const EMBPresamplerHVModule& hvmodule =  cell->getPresamplerHVModule();
+      for(igap=0;igap<2;igap++) tmplines.push_back(hvmodule.hvLineNo(igap));
 
     } else {
       
@@ -1442,8 +1440,8 @@ std::vector<int>* LArNoiseBursts::GetHVLines(const Identifier& id)
       if (!emecElement)
         return 0;
       const EMECCellConstLink cell = emecElement->getEMECCell();
-      const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule();
-      for(igap=0;igap<2;igap++) tmplines.push_back(hvmodule->hvLineNo(igap));
+      const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule();
+      for(igap=0;igap<2;igap++) tmplines.push_back(hvmodule.hvLineNo(igap));
 
     }
   } else {
diff --git a/LArCalorimeter/LArCondUtils/src/LArHV2Ntuple.cxx b/LArCalorimeter/LArCondUtils/src/LArHV2Ntuple.cxx
index c910c6274c3164038d61b9a993483788ba390b78..05f9cce8c1684dd807240b29d5c2c3a0cac6755d 100644
--- a/LArCalorimeter/LArCondUtils/src/LArHV2Ntuple.cxx
+++ b/LArCalorimeter/LArCondUtils/src/LArHV2Ntuple.cxx
@@ -19,10 +19,8 @@
 #include "LArHV/FCALHVManager.h"
 #include "LArHV/EMBPresamplerHVManager.h"
 #include "LArHV/EMBPresamplerHVModule.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMECPresamplerHVManager.h"
 #include "LArHV/EMECPresamplerHVModule.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
 #include "CaloIdentifier/CaloCell_ID.h"
 #include "LArIdentifier/LArOnlineID.h"
 #include "CaloDetDescr/CaloDetDescrManager.h"
@@ -165,16 +163,16 @@
       }
     } //EMBHVManager
 
-    const EMBPresamplerHVManager* hvManager_EMBPS=manager->getEMBPresamplerHVManager();
-    for (unsigned int iSide=hvManager_EMBPS->beginSideIndex();iSide<hvManager_EMBPS->endSideIndex();iSide++) { // loop over HV modules
-      for (unsigned int iPhi=hvManager_EMBPS->beginPhiIndex();iPhi<hvManager_EMBPS->endPhiIndex();iPhi++) {
-         for (unsigned int iEta=hvManager_EMBPS->beginEtaIndex();iEta<hvManager_EMBPS->endEtaIndex();iEta++) { //0 to 7
-            EMBPresamplerHVModuleConstLink hvMod = hvManager_EMBPS->getHVModule(iSide,iEta,iPhi);
+    const EMBPresamplerHVManager& hvManager_EMBPS=manager->getEMBPresamplerHVManager();
+    for (unsigned int iSide=hvManager_EMBPS.beginSideIndex();iSide<hvManager_EMBPS.endSideIndex();iSide++) { // loop over HV modules
+      for (unsigned int iPhi=hvManager_EMBPS.beginPhiIndex();iPhi<hvManager_EMBPS.endPhiIndex();iPhi++) {
+         for (unsigned int iEta=hvManager_EMBPS.beginEtaIndex();iEta<hvManager_EMBPS.endEtaIndex();iEta++) { //0 to 7
+            const EMBPresamplerHVModule& hvMod = hvManager_EMBPS.getHVModule(iSide,iEta,iPhi);
             for (int iGap=0;iGap<2;iGap++) {
-             float hv = hvMod->voltage(iGap);
-             float current =hvMod->current(iGap);
-             float eta = 0.5*(hvMod->getEtaMin()+hvMod->getEtaMax()); 
-             float phi= 0.5*(hvMod->getPhiMin()+hvMod->getPhiMax());
+             float hv = hvMod.voltage(iGap);
+             float current =hvMod.current(iGap);
+             float eta = 0.5*(hvMod.getEtaMin()+hvMod.getEtaMax()); 
+             float phi= 0.5*(hvMod.getPhiMin()+hvMod.getPhiMax());
 
              m_bec=0;
              m_isPresampler=1;
@@ -184,7 +182,7 @@
              m_gap = iGap;
              m_hv = hv; 
              m_current= current;
-             m_hvline = hvMod->hvLineNo(iGap);
+             m_hvline = hvMod.hvLineNo(iGap);
 
              if(m_addcells) {
                   for(unsigned i=0; i<m_hvonlId_map[m_hvline].size(); ++i) {
@@ -202,15 +200,15 @@
       }
     } //EMBPresampler
 
-    const EMECPresamplerHVManager* hvManager_EMECPS=manager->getEMECPresamplerHVManager();
-    for (unsigned int iSide=hvManager_EMECPS->beginSideIndex();iSide<hvManager_EMECPS->endSideIndex();iSide++) { // loop over HV modules
-      for (unsigned int iPhi=hvManager_EMECPS->beginPhiIndex();iPhi<hvManager_EMECPS->endPhiIndex();iPhi++) {
-            EMECPresamplerHVModuleConstLink hvMod = hvManager_EMECPS->getHVModule(iSide,iPhi);
+    const EMECPresamplerHVManager& hvManager_EMECPS=manager->getEMECPresamplerHVManager();
+    for (unsigned int iSide=hvManager_EMECPS.beginSideIndex();iSide<hvManager_EMECPS.endSideIndex();iSide++) { // loop over HV modules
+      for (unsigned int iPhi=hvManager_EMECPS.beginPhiIndex();iPhi<hvManager_EMECPS.endPhiIndex();iPhi++) {
+            const EMECPresamplerHVModule& hvMod = hvManager_EMECPS.getHVModule(iSide,iPhi);
             for (int iGap=0;iGap<2;iGap++) {
-             float hv = hvMod->voltage(iGap);
-             float current =hvMod->current(iGap);
-             float eta = 0.5*(hvMod->getEtaMin()+hvMod->getEtaMax());
-             float phi=0.5*(hvMod->getPhiMin()+hvMod->getPhiMax());
+             float hv = hvMod.voltage(iGap);
+             float current =hvMod.current(iGap);
+             float eta = 0.5*(hvMod.getEtaMin()+hvMod.getEtaMax());
+             float phi=0.5*(hvMod.getPhiMin()+hvMod.getPhiMax());
 
              m_bec=1;
              m_isPresampler=1;
@@ -220,7 +218,7 @@
              m_gap = iGap;
              m_hv = hv;   
              m_current= current;
-             m_hvline = hvMod->hvLineNo(iGap);
+             m_hvline = hvMod.hvLineNo(iGap);
 
              if(m_addcells) {
                   for(unsigned i=0; i<m_hvonlId_map[m_hvline].size(); ++i) {
@@ -473,14 +471,14 @@ std::vector<int> LArHV2Ntuple::GetHVLines(const Identifier& id) {
        const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(m_calodetdescrmgr->get_element(id));
        if (!embElement) std::abort();
        const EMBCellConstLink cell = embElement->getEMBCell();
-       const EMBPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule();
-       for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule->hvLineNo(igap));
+       const EMBPresamplerHVModule& hvmodule = cell->getPresamplerHVModule();
+       for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule.hvLineNo(igap));
      } else {
        const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(m_calodetdescrmgr->get_element(id));
        if (!emecElement) std::abort();
        const EMECCellConstLink cell = emecElement->getEMECCell();
-       const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
-       for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule->hvLineNo(igap));
+       const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
+       for (unsigned int igap=0;igap<2;igap++) hv.insert(hvmodule.hvLineNo(igap));
      }
    }
  
diff --git a/LArCalorimeter/LArCondUtils/src/LArHVPathologyDbAlg.cxx b/LArCalorimeter/LArCondUtils/src/LArHVPathologyDbAlg.cxx
index 8b6acfa012f2443c15c968ab46434ed6373cc9d5..ececa8c4aaa241eac7d78dae43216f1340f41bc2 100644
--- a/LArCalorimeter/LArCondUtils/src/LArHVPathologyDbAlg.cxx
+++ b/LArCalorimeter/LArCondUtils/src/LArHVPathologyDbAlg.cxx
@@ -19,11 +19,9 @@
 #include "CaloDetDescr/CaloDetectorElements.h"
 #include "LArReadoutGeometry/EMBCell.h"
 #include "LArHV/EMBHVElectrode.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArReadoutGeometry/EMECCell.h"
 #include "LArHV/EMECHVElectrode.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
 #include "LArHV/EMECPresamplerHVModule.h"
 #include "LArReadoutGeometry/HECCell.h"
 #include "LArHV/HECHVSubgap.h"
@@ -384,9 +382,9 @@ std::vector<unsigned int> LArHVPathologyDbAlg::getElectInd(const Identifier & id
      if (abs(m_larem_id->barrel_ec(id))==1 &&  m_larem_id->sampling(id)==0) {
        if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(m_calodetdescrmgr->get_element(id))) {
         const EMBCellConstLink cell = embElement->getEMBCell();
-        const EMBPresamplerHVModuleConstLink hvmodule =  cell->getPresamplerHVModule ();
+        const EMBPresamplerHVModule& hvmodule =  cell->getPresamplerHVModule ();
         for (unsigned int igap=0;igap<2;igap++) {
-           if (hvmodule->hvLineNo(igap)==HVline) {
+           if (hvmodule.hvLineNo(igap)==HVline) {
              list.push_back(igap);
            }
         }
@@ -396,9 +394,9 @@ std::vector<unsigned int> LArHVPathologyDbAlg::getElectInd(const Identifier & id
     if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id)==0) {
       if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(m_calodetdescrmgr->get_element(id))) {
        const EMECCellConstLink cell = emecElement->getEMECCell();
-       const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
+       const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
        for (unsigned int igap=0;igap<2;igap++) {
-        if (hvmodule->hvLineNo(igap)==HVline) {
+        if (hvmodule.hvLineNo(igap)==HVline) {
           list.push_back(igap);
         }
        }
@@ -478,12 +476,12 @@ int LArHVPathologyDbAlg::getHVline(const Identifier & id, short unsigned int Ele
      if (abs(m_larem_id->barrel_ec(id))==1 &&  m_larem_id->sampling(id)==0) {
        if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(m_calodetdescrmgr->get_element(id))) {
         const EMBCellConstLink cell = embElement->getEMBCell();
-        const EMBPresamplerHVModuleConstLink hvmodule =  cell->getPresamplerHVModule ();
+        const EMBPresamplerHVModule& hvmodule =  cell->getPresamplerHVModule ();
         if(ElectInd >= 2) {
             msg(MSG::ERROR) << "Wrong igap "<<ElectInd<<" for EMBPS cell "<<id.get_identifier32().get_compact() <<endmsg;
             return -1;
         } else {
-            return hvmodule->hvLineNo(ElectInd);
+            return hvmodule.hvLineNo(ElectInd);
         }
        }
      }
@@ -491,12 +489,12 @@ int LArHVPathologyDbAlg::getHVline(const Identifier & id, short unsigned int Ele
     if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id)==0) {
       if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(m_calodetdescrmgr->get_element(id))) {
        const EMECCellConstLink cell = emecElement->getEMECCell();
-       const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
+       const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
         if(ElectInd >= 2) {
             msg(MSG::ERROR) << "Wrong igap "<<ElectInd<<" for EMECPS cell "<<id.get_identifier32().get_compact() <<endmsg;
             return -1;
         } else {
-            return hvmodule->hvLineNo(ElectInd);
+            return hvmodule.hvLineNo(ElectInd);
         }
       }
     }
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
index c09787ba0dd062a891edce8296fc190ffb2a8cee..01b946b710686f3760579fd519d086b973c0e03c 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorFactory.cxx
@@ -400,7 +400,8 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
     
     
     emecDetectorManager  = new EMECDetectorManager(&(m_hvManager->getEMECHVManager(EMECHVModule::INNER))
-						   ,&(m_hvManager->getEMECHVManager(EMECHVModule::OUTER)));
+						   ,&(m_hvManager->getEMECHVManager(EMECHVModule::OUTER))
+						   ,&(m_hvManager->getEMECPresamplerHVManager()));
     
     // Here is a table of min and max eta for different sampling layers, radial part (i/o) and region.
     
@@ -539,7 +540,7 @@ void LArGeo::LArDetectorFactory::create( GeoPhysVol* a_container )
 
   try
   { 
-    embDetectorManager  = new EMBDetectorManager(m_hvManager->getEMBHVManager());
+    embDetectorManager  = new EMBDetectorManager(m_hvManager->getEMBHVManager(),m_hvManager->getEMBPresamplerHVManager());
     int firstEndcap=m_testbeam==0 ? 0:1, endEndcap=2;
     for (int e= firstEndcap ;e<endEndcap;e++) {
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
index cce45b888b2ba9dc030653509cb45713dafc072e..c0933118732b8391330510432084b723bb180f44 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
@@ -28,8 +28,6 @@
 #include "GeoModelUtilities/StoredPhysVol.h"
 #include "GeoModelKernel/GeoFullPhysVol.h"
 #include "LArHV/LArHVManager.h"
-#include "LArHV/EMBPresamplerHVManager.h"
-#include "LArHV/EMECPresamplerHVManager.h"
 
 #include "AthenaKernel/ClassID_traits.h"
 #include "SGTools/DataProxy.h"
@@ -70,10 +68,7 @@ LArDetectorToolNV::~LArDetectorToolNV()
 StatusCode LArDetectorToolNV::create()
 { 
   // Initialize the HV System:
-  const EMBPresamplerHVManager *embPSHV = new EMBPresamplerHVManager();
-  const EMECPresamplerHVManager *emecPSHV = new EMECPresamplerHVManager();
-
-  LArHVManager *hvManager= new LArHVManager(embPSHV, emecPSHV);
+  LArHVManager *hvManager= new LArHVManager();
 
   ATH_CHECK(detStore()->record(hvManager,"LArHVManager"));  
 
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVDescriptor.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVDescriptor.h
index eaa6880a50fdb8514e75992b2419434f8f7db2b1..00ef3f16008a47e80f62197d0ef6df2c9c5c6072 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVDescriptor.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVDescriptor.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBPresamplerHVDESCRIPTOR_H_HEADER_INCLUDED_F36D906D
-#define EMBPresamplerHVDESCRIPTOR_H_HEADER_INCLUDED_F36D906D
+#ifndef LARHV_EMBPRESAMPLERHVDESCRIPTOR_H
+#define LARHV_EMBPRESAMPLERHVDESCRIPTOR_H
 
 #include "GeoModelKernel/CellBinning.h"
 #include "GeoModelKernel/CellPartitioning.h"
@@ -11,36 +11,26 @@
 class EMBPresamplerHVDescriptor
 {
  public:
-  // Constructor
   EMBPresamplerHVDescriptor(const CellPartitioning &etaPartitioning, const CellBinning &phiBinning);
-  
-  virtual ~EMBPresamplerHVDescriptor();
+  ~EMBPresamplerHVDescriptor();
   
   const CellPartitioning &getEtaPartitioning() const
-    {
-      return m_etaPartitioning;
-    }
-  
+  {
+    return m_etaPartitioning;
+  }
   
   const CellBinning &getPhiBinning() const
-    {
-      return m_phiBinning;
-    }
+  {
+    return m_phiBinning;
+  }
   
  private:
-  
-  
+  // Illegal operations
   EMBPresamplerHVDescriptor(const EMBPresamplerHVDescriptor& right);
-  
   EMBPresamplerHVDescriptor& operator=(const EMBPresamplerHVDescriptor& right);
   
-  
   const CellPartitioning m_etaPartitioning;
-  
   const CellBinning m_phiBinning;
-  
 };
 
-
-
-#endif /* EMBPresamplerHVDESCRIPTOR_H_HEADER_INCLUDED_F36D906D */
+#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVManager.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVManager.h
index 3e53bfa4f455562bbe9bf9e129ea74c3d48b775d..7cdfb8fc4071f753c43d0879e50e3e1517c81445 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVManager.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVManager.h
@@ -1,88 +1,68 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBPresamplerHVMANAGER_H_HEADER_INCLUDED_EA5D07D1
-#define EMBPresamplerHVMANAGER_H_HEADER_INCLUDED_EA5D07D1
+#ifndef LARHV_EMBPRESAMPLERHVMANAGER_H
+#define LARHV_EMBPRESAMPLERHVMANAGER_H
 
-#include "GeoModelKernel/RCBase.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMBPresamplerHVModule.h"
-
 class EMBPresamplerHVDescriptor;
-
-
-// This class provides direct access to information on the HV 
-// electrodes within the barrels.  The information may be accessed either
-// directly or iteratively.  Direct access is provided by the getHVModule()
-// method.  Iterative access
-// is by looping over valid side, eta, phi, and sector indices to
-// retrieve a HV module.  From the high voltage modules one
-// can obtain a list of electrodes (iteratively or directly).
-// 
-
 struct EMBPresamplerHVPayload;
 
-class EMBPresamplerHVManager : public RCBase
+/**
+ * @class EMBPresamplerHVManager
+ *
+ * @brief This class provides direct access to information on the HV 
+ * electrodes within the barrels.  The information may be accessed either
+ * directly or iteratively.  Direct access is provided by the getHVModule()
+ * method.  Iterative access
+ * is by looping over valid side, eta, phi, and sector indices to
+ * retrieve a HV module.  From the high voltage modules one
+ * can obtain a list of electrodes (iteratively or directly).
+ *
+ * The manager owns the pointers to the HV Modules.
+ */
+
+class EMBPresamplerHVManager
 {
-  public:
-
-    // Constructor
-    EMBPresamplerHVManager();
-
-    // Gets the descriptor.  (Not generally for users but nothing to hide
-    // here).
-    const EMBPresamplerHVDescriptor *getDescriptor() const;
-
-    // Begin phi index
-    unsigned int beginPhiIndex() const;
+ public:
+  EMBPresamplerHVManager();
+  ~EMBPresamplerHVManager();
 
-    // End phi index
-    unsigned int endPhiIndex() const;
+  const EMBPresamplerHVDescriptor *getDescriptor() const;
 
-    // Begin eta index
-    unsigned int beginEtaIndex() const;
+  unsigned int beginPhiIndex() const;
+  unsigned int endPhiIndex() const;
 
-    // End eta index
-    unsigned int endEtaIndex() const;
+  unsigned int beginEtaIndex() const;
+  unsigned int endEtaIndex() const;
 
-    // Returns a high voltage module
-    EMBPresamplerHVModuleConstLink getHVModule(unsigned int iSide, unsigned int iEta, unsigned int iPhi) const;
+  // Returns a high voltage module
+  const EMBPresamplerHVModule& getHVModule(unsigned int iSide
+					   , unsigned int iEta
+					   , unsigned int iPhi) const;
 
-    // Begin side index (0=negative and 1= positive)
-    unsigned int beginSideIndex() const;
+  // Begin/end side index (0=negative and 1= positive)
+  unsigned int beginSideIndex() const;
+  unsigned int endSideIndex() const;
 
-    // End side index (0=negative and 1= positive)
-    unsigned int endSideIndex() const;
+  // Refresh from the database if needed
+  void update() const;
 
-    // Refresh from the database if needed
-    void update() const;
+  // Make the data stale.  Force update of data.
+  void reset() const;
 
-    // Make the data stale.  Force update of data.
-    void reset() const;
-
-    // Get the database payload
-    EMBPresamplerHVPayload *getPayload(const EMBPresamplerHVModule &) const;
-
-  private:
-    // Destructor
-    //##ModelId=475533F7019B
-    virtual ~EMBPresamplerHVManager();
-
-    // Illegal operation
-    //##ModelId=475533F70154
-    EMBPresamplerHVManager(const EMBPresamplerHVManager& right);
-
-    // Illegal operation
-    //##ModelId=475533F701B8
-    EMBPresamplerHVManager& operator=(const EMBPresamplerHVManager& right);
-
-    friend class ImaginaryFriend;
-    class Clockwork;
-    Clockwork *m_c;
+  // Get the database payload
+  EMBPresamplerHVPayload *getPayload(const EMBPresamplerHVModule &) const;
 
+ private:
+  // Illegal operations
+  EMBPresamplerHVManager(const EMBPresamplerHVManager& right);
+  EMBPresamplerHVManager& operator=(const EMBPresamplerHVManager& right);
+  
+  friend class ImaginaryFriend;
+  class Clockwork;
+  Clockwork *m_c;
 };
 
-
-
-#endif /* EMBPresamplerHVMANAGER_H_HEADER_INCLUDED_EA5D07D1 */
+#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModule.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModule.h
index e16a0c4c8057b6d4fe84cfa497a15ca810876295..5b9c62c612606144c4732ad33a0abe0d6806429e 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModule.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModule.h
@@ -1,76 +1,60 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMBPresamplerHVMODULE_H_HEADER_INCLUDED_C40C54F8
-#define EMBPresamplerHVMODULE_H_HEADER_INCLUDED_C40C54F8
-#include "GeoModelKernel/RCBase.h"
-#include "GeoModelKernel/ConstLink.h"
-class EMBPresamplerHVManager;
-
-class EMBPresamplerHVModule : public RCBase
-{
-  public:
-
-  // Constructor:
-  EMBPresamplerHVModule(const EMBPresamplerHVManager *manager, unsigned int iSide, unsigned int iEta, unsigned int iPhi);
-
-    // Get eta Index
-    unsigned int getEtaIndex() const;
-
-    // Get phi index
-    unsigned int getPhiIndex() const;
-
-    // Side Index (0=Negative, 1=Positive)
-    unsigned int getSideIndex() const;
-
-    double getEtaMin() const;
-
-
-    double getEtaMax() const;
+#ifndef LARHV_EMBPRESAMPLERHVMODULE_H
+#define LARHV_EMBPRESAMPLERHVMODULE_H
 
+class EMBPresamplerHVManager;
 
-    double getPhiMin() const;
+/**
+ * @class EMBPresamplerHVModule
+ *
+ * @brief Describes one HV Module within the EMB Presampler
+ *
+ */
 
+class EMBPresamplerHVModule
+{
+ public:
+  EMBPresamplerHVModule(const EMBPresamplerHVManager *manager
+			, unsigned int iSide
+			, unsigned int iEta
+			, unsigned int iPhi);
+ ~EMBPresamplerHVModule();
+
+  unsigned int getEtaIndex() const;
+  unsigned int getPhiIndex() const;
+
+  // Side Index (0=Negative, 1=Positive)
+  unsigned int getSideIndex() const;
+
+  double getEtaMin() const;
+  double getEtaMax() const;
+  double getPhiMin() const;
+  double getPhiMax() const;
+
+  // HV Status
+  bool hvOn(int iGap) const;
   
-    double getPhiMax() const;
-
-    // HV Status
-    bool hvOn(int iGap) const;
-    
-    // Voltage
-    double voltage(int iGap) const;
+  double voltage(int iGap) const;
+  double current(int iGap) const;
 
-    // Current
-    double current(int iGap) const;
-
-    // Both at the same time...
-    void voltage_current(int iGap, double& v, double& i) const;
-
-    // HVLine no
-    int hvLineNo(int iGap) const;
-
-    const EMBPresamplerHVManager *getManager() const;
+  // Voltage and current at the same time...
+  void voltage_current(int iGap, double& v, double& i) const;
   
+  int hvLineNo(int iGap) const;
 
-  private:
-
-    // Destructor
-    virtual ~EMBPresamplerHVModule();
-
-
-    // Illegal operation
-    EMBPresamplerHVModule& operator=(const EMBPresamplerHVModule& right);
-
-    // Illegal operation
-    EMBPresamplerHVModule(const EMBPresamplerHVModule& right);
-
-    class Clockwork;
-    Clockwork *m_c;
-
-    friend class ImaginaryFriend;
-
-
+  const EMBPresamplerHVManager& getManager() const;
+  
+ private:
+  // Illegal operations
+  EMBPresamplerHVModule& operator=(const EMBPresamplerHVModule& right);
+  EMBPresamplerHVModule(const EMBPresamplerHVModule& right);
+
+  friend class ImaginaryFriend;  
+  class Clockwork;
+  Clockwork *m_c;
 };
 
-#endif /* EMBPresamplerHVMODULE_H_HEADER_INCLUDED_C40C54F8 */
+#endif 
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModuleConstLink.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModuleConstLink.h
deleted file mode 100644
index 6ebf305fa2f328df748213055e95ffcd83becce8..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMBPresamplerHVModuleConstLink.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef _EMBPresamplerHVModuleConstLink_h_
-#define _EMBPresamplerHVModuleConstLink_h_
-#include "GeoModelKernel/ConstLink.h"
-class EMBPresamplerHVModule;
-typedef ConstLink<EMBPresamplerHVModule> EMBPresamplerHVModuleConstLink;
-#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVManager.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVManager.h
index 391c600b1335c0116b48a96f2d7b6e21b85bbae5..5687ead3093b96d725a12c68cd64c4c1c6cef8aa 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVManager.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVManager.h
@@ -1,70 +1,64 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECPresamplerHVMANAGER_H_HEADER_INCLUDED_994115CA
-#define EMECPresamplerHVMANAGER_H_HEADER_INCLUDED_994115CA
-class EMECPresamplerHVDescriptor;
-#include "GeoModelKernel/RCBase.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
+#ifndef LARHV_EMECPRESAMPLERHVMANAGER_H
+#define LARHV_EMECPRESAMPLERHVMANAGER_H
+
 #include "LArHV/EMECPresamplerHVModule.h"
-//##ModelId=47530759003A
 
 struct EMECPresamplerHVPayload;
 class CellBinning;
 
-class EMECPresamplerHVManager : public RCBase
+/**
+ * @class EMECPresamplerHVManager
+ *
+ * @brief This class provides direct access to information on the HV 
+ * electrodes within the EMEC.  The information may be accessed either
+ * directly or iteratively.  Direct access is provided by the getHVModule()
+ * method.  Iterative access
+ * is by looping over valid side, eta, phi, and sector indices to
+ * retrieve a HV module.  From the high voltage modules one
+ * can obtain a list of electrodes (iteratively or directly).
+ *
+ * The manager owns the pointers to the HV Modules.
+ */
+
+class EMECPresamplerHVManager
 {
-  public:
-
-  // Constructor
-    EMECPresamplerHVManager();
-
+ public:
+  EMECPresamplerHVManager();
+  ~EMECPresamplerHVManager();
     
-    const CellBinning *getPhiBinning() const;
-
-
-    unsigned int beginPhiIndex() const;
+  const CellBinning *getPhiBinning() const;
 
+  unsigned int beginPhiIndex() const;
+  unsigned int endPhiIndex() const;
 
-    unsigned int endPhiIndex() const;
-
-
-    // Begin side index (0=negative and 1= positive)
-    unsigned int beginSideIndex() const;
-    
-    // End side index (0=negative and 1= positive)
-    unsigned int endSideIndex() const;
-
-    // Get a link to the HV module:
-    EMECPresamplerHVModuleConstLink getHVModule(unsigned int iSide, unsigned int iPhi) const;
-
-    // Refresh from the database if needed
-    void update() const;
-
-    // Make the data stale.  Force update of data.
-    void reset() const;
-
-    // Get the database payload
-    EMECPresamplerHVPayload *getPayload(const EMECPresamplerHVModule &) const;
-
-
-  private:
-
-    
-    virtual ~EMECPresamplerHVManager();
-
+  // Begin/end side index (0=negative and 1= positive)
+  unsigned int beginSideIndex() const;
+  unsigned int endSideIndex() const;
 
-    EMECPresamplerHVManager& operator=(const EMECPresamplerHVManager& right);
+  // Get a link to the HV module:
+  const EMECPresamplerHVModule& getHVModule(unsigned int iSide, unsigned int iPhi) const;
 
-    EMECPresamplerHVManager(const EMECPresamplerHVManager& right);
+  // Refresh from the database if needed
+  void update() const;
 
+  // Make the data stale.  Force update of data.
+  void reset() const;
 
-    class Clockwork;
-    Clockwork *m_c;
+  // Get the database payload
+  EMECPresamplerHVPayload *getPayload(const EMECPresamplerHVModule &) const;
 
+ private:
+  // Illegal operations
+  EMECPresamplerHVManager& operator=(const EMECPresamplerHVManager& right);
+  EMECPresamplerHVManager(const EMECPresamplerHVManager& right);
 
+  class Clockwork;
+  Clockwork *m_c;
 };
 
 
-#endif /* EMECPresamplerHVMANAGER_H_HEADER_INCLUDED_994115CA */
+#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModule.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModule.h
index 2280097e7c8297e267b14a183632543aa9671fa7..6255346adaeff2f6d17d4249227b49b62e56441d 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModule.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModule.h
@@ -1,64 +1,58 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef EMECPresamplerHVMODULE_H_HEADER_INCLUDED_8AB76742
-#define EMECPresamplerHVMODULE_H_HEADER_INCLUDED_8AB76742
-#include "GeoModelKernel/RCBase.h"
-class EMECPresamplerHVManager;
-// Describes one HV Module within the EMECPresampler
-class EMECPresamplerHVModule : public RCBase
-{
-  public:
+#ifndef LARHV_EMECPRESAMPLERHVMODULE_H
+#define LARHV_EMECPRESAMPLERHVMODULE_H
 
+class EMECPresamplerHVManager;
 
-    EMECPresamplerHVModule(const EMECPresamplerHVManager *manager, unsigned int iSide, unsigned int iPhi);
-
-    double getEtaMin() const;
+/**
+ * @class EMECPresamplerHVModule
+ *
+ * @brief Describes one HV Module within the EMEc Presampler
+ *
+ */
 
-    double getEtaMax() const;
+class EMECPresamplerHVModule
+{
+ public:
+  EMECPresamplerHVModule(const EMECPresamplerHVManager *manager
+			 , unsigned int iSide
+			 , unsigned int iPhi);
+  ~EMECPresamplerHVModule();
 
-    double getPhiMin() const;
-  
-    double getPhiMax() const;
+  double getEtaMin() const;
+  double getEtaMax() const;
 
-    unsigned int getPhiIndex() const;
+  double getPhiMin() const;
+  double getPhiMax() const;
 
-    // Side Index (0=Negative, 1=Positive)
-    unsigned int getSideIndex() const;
+  unsigned int getPhiIndex() const;
 
+  // Side Index (0=Negative, 1=Positive)
+  unsigned int getSideIndex() const;
 
-    // HV Status
-    bool hvOn(int iGap) const;
+  // HV Status
+  bool hvOn(int iGap) const;
     
-    // Voltage
-    double voltage(int iGap) const;
-
-    // Current
-    double current(int iGap) const;
-
-    // Current and voltage at the same time:
-    void voltage_current(int iGap, double& v, double& i) const;
+  double voltage(int iGap) const;
+  double current(int iGap) const;
 
-    // HVLine no
-    int hvLineNo(int iGap) const;
+  // Current and voltage at the same time:
+  void voltage_current(int iGap, double& v, double& i) const;
 
-    const EMECPresamplerHVManager *getManager() const;
-
-
-  private:
-
-    virtual ~EMECPresamplerHVModule();
-
-    EMECPresamplerHVModule(const EMECPresamplerHVModule& right);
-
-    EMECPresamplerHVModule& operator=(const EMECPresamplerHVModule& right);
+  int hvLineNo(int iGap) const;
+  
+  const EMECPresamplerHVManager& getManager() const;
 
-    class Clockwork;
-    Clockwork *m_c;
+ private:
+  // Illegal operations 
+  EMECPresamplerHVModule(const EMECPresamplerHVModule& right);
+  EMECPresamplerHVModule& operator=(const EMECPresamplerHVModule& right);
 
+  class Clockwork;
+  Clockwork *m_c;  
 };
 
-
-
-#endif /* EMECPresamplerHVMODULE_H_HEADER_INCLUDED_8AB76742 */
+#endif 
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModuleConstLink.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModuleConstLink.h
deleted file mode 100644
index 73f4a12fff176b3cd3bbcb4a4b275d9e3c511a21..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/EMECPresamplerHVModuleConstLink.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef _EMECPresamplerHVModuleConstLink_h_
-#define _EMECPresamplerHVModuleConstLink_h_
-#include "GeoModelKernel/ConstLink.h"
-class EMECPresamplerHVModule;
-typedef ConstLink<EMECPresamplerHVModule> EMECPresamplerHVModuleConstLink;
-#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/HECHVSubgapConstLink.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/HECHVSubgapConstLink.h
deleted file mode 100644
index 0439c4871c234cb292f0ba8b8c687c8587ff7b19..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/HECHVSubgapConstLink.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef _HECHVSubgapConstLink_h_
-#define _HECHVSubgapConstLink_h_
-#include "GeoModelKernel/ConstLink.h"
-class HECHVSubgap;
-typedef ConstLink<HECHVSubgap> HECHVSubgapConstLink;
-#endif
diff --git a/LArCalorimeter/LArGeoModel/LArHV/LArHV/LArHVManager.h b/LArCalorimeter/LArGeoModel/LArHV/LArHV/LArHVManager.h
index f256077eff5b887e2b13e9be8c8d78fecf91ff24..4ea6a3c16b33aa151190bdfafe7e94201c0e2ddf 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/LArHV/LArHVManager.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/LArHV/LArHVManager.h
@@ -5,16 +5,12 @@
 #ifndef LARHV_LARHVMANAGER_H
 #define LARHV_LARHVMANAGER_H
 
-class EMBPresamplerHVManager;
-class EMECPresamplerHVManager;
-
 #include "LArHV/EMBHVManager.h"
 #include "LArHV/EMECHVManager.h"
 #include "LArHV/HECHVManager.h"
 #include "LArHV/FCALHVManager.h"
-
-#include "IOVSvc/IOVSvc.h"
-#include "StoreGate/DataHandle.h"
+#include "LArHV/EMBPresamplerHVManager.h"
+#include "LArHV/EMECPresamplerHVManager.h"
  
 /**
  * @class LArHVManager
@@ -26,54 +22,48 @@ class EMECPresamplerHVManager;
 
 class LArHVManager
 {
-  public:
+ public:
   
-    typedef EMECHVManager::IOType IOType;
+  typedef EMECHVManager::IOType IOType;
   
-    // Constructor
-    // 
-    LArHVManager(const EMBPresamplerHVManager *embPreManager, const EMECPresamplerHVManager *emecPreManager);
+  LArHVManager();
+  ~LArHVManager();
     
-    //  Destructor
-    virtual ~LArHVManager();
-    
-    // Returns the EMBHVManager
-    const EMBHVManager& getEMBHVManager() const;
-
-    // Returns the Barrel Presampler Manager:
-    const EMBPresamplerHVManager *getEMBPresamplerHVManager() const;
+  // Returns the EMBHVManager
+  const EMBHVManager& getEMBHVManager() const;
   
-    // Returns the EMECHVManager
-    const EMECHVManager& getEMECHVManager(IOType IO) const;
+  // Returns the Barrel Presampler Manager:
+  const EMBPresamplerHVManager& getEMBPresamplerHVManager() const;
   
-    // Returns the Endcap Presampler Manager:
-    const EMECPresamplerHVManager *getEMECPresamplerHVManager() const;
+  // Returns the EMECHVManager
+  const EMECHVManager& getEMECHVManager(IOType IO) const;
   
-    // Returns the HECHVManager
-    const HECHVManager& getHECHVManager() const;
+  // Returns the Endcap Presampler Manager:
+  const EMECPresamplerHVManager& getEMECPresamplerHVManager() const;
+  
+  // Returns the HECHVManager
+  const HECHVManager& getHECHVManager() const;
+  
+  // Returns the FCALHVManager
+  const FCALHVManager& getFCALHVManager() const;
+  
+  void reset() const;
   
-    // Returns the FCALHVManager
-    const FCALHVManager& getFCALHVManager() const;
-    
-    void reset() const;
-    
  protected:
-
-    LArHVManager& operator=(const LArHVManager& right);
-    
+  
+  LArHVManager& operator=(const LArHVManager& right);
+  
  private:
 
   LArHVManager(const LArHVManager& right);
   
-
-  EMBHVManager   m_embHV;
-  EMECHVManager  m_emecHVInner;
-  EMECHVManager  m_emecHVOuter;
-  HECHVManager   m_hecHV;
-  FCALHVManager  m_fcalHV;
-  const EMBPresamplerHVManager  *m_embPreHV;
-  const EMECPresamplerHVManager *m_emecPreHV;
-
+  EMBHVManager            m_embHV;
+  EMECHVManager           m_emecHVInner;
+  EMECHVManager           m_emecHVOuter;
+  HECHVManager            m_hecHV;
+  FCALHVManager           m_fcalHV;
+  EMBPresamplerHVManager  m_embPreHV;
+  EMECPresamplerHVManager m_emecPreHV;
 };
 
 #include "AthenaKernel/CLASS_DEF.h"
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMBHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/EMBHVPayload.h
index 4833fb6892f2815b21bc9a43fc82e00de77e4992..cc04799758c940585427fa36049f782e09ca7acc 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMBHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMBHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _EMBHVPayload_h_
-#define _EMBHVPayload_h_
+#ifndef LARHV_EMBHVPAYLOAD_H
+#define LARHV_EMBHVPAYLOAD_H
 #include <iostream>
 struct EMBHVPayload {
   double         voltage[2];
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVDescriptor.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVDescriptor.cpp
index 880cb832985761fbee90d5f5bbe72d09d532dce6..bb6e14daf8ceaaf9840c1d06b7c5dc09c30128d3 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVDescriptor.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVDescriptor.cpp
@@ -1,20 +1,16 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHV/EMBPresamplerHVDescriptor.h"
 
-EMBPresamplerHVDescriptor::~EMBPresamplerHVDescriptor()
+EMBPresamplerHVDescriptor::EMBPresamplerHVDescriptor(const CellPartitioning &etaPartitioning
+						     , const CellBinning &phiBinning)
+  : m_etaPartitioning(etaPartitioning)
+  , m_phiBinning(phiBinning)	 
 {
 }
 
-
-EMBPresamplerHVDescriptor::EMBPresamplerHVDescriptor(const CellPartitioning &etaPartitioning, const CellBinning &phiBinning)
-:m_etaPartitioning(etaPartitioning),m_phiBinning(phiBinning)	 
+EMBPresamplerHVDescriptor::~EMBPresamplerHVDescriptor()
 {
 }
-
-
-
-
-
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVManager.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVManager.cpp
index afb12dd110a339d97a0486dacc4f1e344f7b60b6..f89180a8ff988a604e4ddc9d28df7c1721f493bd 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVManager.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVManager.cpp
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHV/EMBPresamplerHVManager.h"
@@ -30,38 +30,48 @@
 
 class EMBPresamplerHVManager::Clockwork {
 public:
-  EMBPresamplerHVDescriptor      *descriptor;
-  EMBPresamplerHVModuleConstLink  linkArray[2][4][32];
+  Clockwork(const EMBPresamplerHVManager* manager) {
+    CellPartitioning etaPartitioning;
+    for (unsigned int i= 0; i<4; i++)  etaPartitioning.addValue(i*0.4);
+    etaPartitioning.addValue(1.525);
+    descriptor = new EMBPresamplerHVDescriptor(etaPartitioning,CellBinning(0.0, 2*M_PI, 32));
+
+    for(int iSide=0; iSide<2; ++iSide) {
+      for(int iEta=0; iEta<4; ++iEta) {
+	for(int iPhi=0; iPhi<32; ++iPhi) {
+	  moduleArray[iSide][iEta][iPhi] = new EMBPresamplerHVModule(manager, iSide, iEta,iPhi);
+	}
+      }
+    }
+  }
+  ~Clockwork() {
+    delete descriptor;
+    for(int iSide=0; iSide<2; ++iSide) {
+      for(int iEta=0; iEta<4; ++iEta) {
+	for(int iPhi=0; iPhi<32; ++iPhi) {
+	  delete moduleArray[iSide][iEta][iPhi];
+	}
+      }
+    }
+  }
+  EMBPresamplerHVDescriptor*      descriptor;
+  const EMBPresamplerHVModule*    moduleArray[2][4][32];
   std::atomic<bool>               init{false};
   std::mutex                      mtx;
   std::vector<EMBPresamplerHVPayload> payloadArray;
 };
 
-
-
-
-
 EMBPresamplerHVManager::EMBPresamplerHVManager()
-:m_c(new Clockwork)
+  : m_c(new Clockwork(this))
 {
-
-  CellPartitioning etaPartitioning;
-  for (unsigned int i= 0; i<4; i++)  etaPartitioning.addValue(i*0.4);
-  etaPartitioning.addValue(1.525);
-  
-  m_c->descriptor = new EMBPresamplerHVDescriptor(etaPartitioning,CellBinning(0.0, 2*M_PI, 32));	
-  m_c->init=false;
-
 }
 
-
 EMBPresamplerHVManager::~EMBPresamplerHVManager()
 {
-  delete m_c->descriptor;
   delete m_c;
 }
 
-const EMBPresamplerHVDescriptor *EMBPresamplerHVManager::getDescriptor() const
+const EMBPresamplerHVDescriptor* EMBPresamplerHVManager::getDescriptor() const
 {
   return m_c->descriptor;
 }
@@ -86,10 +96,9 @@ unsigned int EMBPresamplerHVManager::endEtaIndex() const
   return m_c->descriptor->getEtaPartitioning().getFirstDivisionNumber() + m_c->descriptor->getEtaPartitioning().getNumDivisions();
 }
 
-EMBPresamplerHVModuleConstLink EMBPresamplerHVManager::getHVModule(unsigned int iSide, unsigned int iEta,unsigned int iPhi) const
+const EMBPresamplerHVModule& EMBPresamplerHVManager::getHVModule(unsigned int iSide, unsigned int iEta,unsigned int iPhi) const
 {
-  if (!m_c->linkArray[iSide][iEta][iPhi]) m_c->linkArray[iSide][iEta][iPhi] = EMBPresamplerHVModuleConstLink(new EMBPresamplerHVModule(this, iSide, iEta,iPhi));
-  return m_c->linkArray[iSide][iEta][iPhi];
+  return *(m_c->moduleArray[iSide][iEta][iPhi]);
 }
 
 unsigned int EMBPresamplerHVManager::beginSideIndex() const
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVModule.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVModule.cpp
index c4a387185e86af3917e2cd19f7a8cb4fdd7ff710..cf7fb75358d3982e3bb15adc281f5bb385dbfd4f 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVModule.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVModule.cpp
@@ -1,63 +1,57 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArHV/EMBPresamplerHVManager.h"
 #include "LArHV/EMBPresamplerHVDescriptor.h"
 #include "EMBPresamplerHVPayload.h"
-class EMBPresamplerHVModule::Clockwork {
 
+class EMBPresamplerHVModule::Clockwork {
 public:
-
-  const EMBPresamplerHVManager *       manager;
-  
+  Clockwork(const EMBPresamplerHVManager* managerPtr
+	    , unsigned int side
+	    , unsigned int eta
+	    , unsigned int phi)
+    : manager(managerPtr)
+    , iSide(side)
+    , iEta(eta)
+    , iPhi(phi)
+  {}
+  const EMBPresamplerHVManager* manager;
   unsigned int iSide;
-  
   unsigned int iEta;
-  
   unsigned int iPhi;
-
 };
 
-//##ModelId=475656A60228
-EMBPresamplerHVModule::EMBPresamplerHVModule(const EMBPresamplerHVManager *manager, unsigned int iSide, unsigned int iEta, unsigned int iPhi):m_c(new Clockwork)
+EMBPresamplerHVModule::EMBPresamplerHVModule(const EMBPresamplerHVManager *manager
+					     , unsigned int iSide
+					     , unsigned int iEta
+					     , unsigned int iPhi)
+  : m_c(new Clockwork(manager,iSide,iEta,iPhi))
 {
-  // Might need to ref the manager here.?? 
-  m_c->manager=manager;
-  m_c->iSide=iSide;
-  m_c->iEta=iEta;
-  m_c->iPhi=iPhi;
 }
 
+EMBPresamplerHVModule::~EMBPresamplerHVModule() 
+{
+  delete m_c;
+}
 
-//##ModelId=475659560392
 unsigned int EMBPresamplerHVModule::getEtaIndex() const
 {
   return m_c->iEta;
 }
 
-//##ModelId=4756597E0324
 unsigned int EMBPresamplerHVModule::getPhiIndex() const
 {
   return m_c->iPhi;
 }
 
-//##ModelId=475656A60278
-EMBPresamplerHVModule::~EMBPresamplerHVModule() 
-{
-  delete m_c;
-}
-
-
-
-//##ModelId=479BBABD034D
 unsigned int EMBPresamplerHVModule::getSideIndex() const
 {
   return m_c->iSide;
 }
 
-//##ModelId=47AA68EE020D
 double EMBPresamplerHVModule::getEtaMin() const
 {
   if (m_c->iSide==0) {
@@ -68,7 +62,6 @@ double EMBPresamplerHVModule::getEtaMin() const
   }
 }
 
-//##ModelId=47AA68EE0223
 double EMBPresamplerHVModule::getEtaMax() const
 {
   if (m_c->iSide==0) {
@@ -79,51 +72,44 @@ double EMBPresamplerHVModule::getEtaMax() const
   }
 }
 
-//##ModelId=47AA68EE0236
 double EMBPresamplerHVModule::getPhiMin() const
 {
-  return 
-    m_c->manager->getDescriptor()->getPhiBinning().binLower(m_c->iPhi);
+  return m_c->manager->getDescriptor()->getPhiBinning().binLower(m_c->iPhi);
 }
 
-//##ModelId=47AA68EE024B
 double EMBPresamplerHVModule::getPhiMax() const
 {
-  return 
-    m_c->manager->getDescriptor()->getPhiBinning().binUpper(m_c->iPhi);
-
+  return m_c->manager->getDescriptor()->getPhiBinning().binUpper(m_c->iPhi);
 }
 
-
-
-const EMBPresamplerHVManager *EMBPresamplerHVModule::getManager() const {
-  return m_c->manager;
+const EMBPresamplerHVManager& EMBPresamplerHVModule::getManager() const 
+{
+  return *(m_c->manager);
 }
 
 bool EMBPresamplerHVModule::hvOn(int iGap) const
 {
-  EMBPresamplerHVPayload *payload = getManager()->getPayload(*this);
-  if (payload->voltage[iGap]<-9999) return false;
-  else return true;
+  EMBPresamplerHVPayload *payload = m_c->manager->getPayload(*this);
+  return (payload->voltage[iGap]>=-9999);
 }
 
 double EMBPresamplerHVModule::voltage(int iGap) const {
-  EMBPresamplerHVPayload *payload = getManager()->getPayload(*this);
+  EMBPresamplerHVPayload *payload = m_c->manager->getPayload(*this);
   return payload->voltage[iGap];
 }
 
 double EMBPresamplerHVModule::current(int iGap) const {
-  EMBPresamplerHVPayload *payload = getManager()->getPayload(*this);
+  EMBPresamplerHVPayload *payload = m_c->manager->getPayload(*this);
   return payload->current[iGap];
 }
 
 void EMBPresamplerHVModule::voltage_current(int iGap,double& voltage, double&current) const {
- EMBPresamplerHVPayload *payload = getManager()->getPayload(*this);
+ EMBPresamplerHVPayload *payload = m_c->manager->getPayload(*this);
  voltage = payload->voltage[iGap];
  current = payload->current[iGap];
 }
 
 int EMBPresamplerHVModule::hvLineNo(int iGap) const {
-  EMBPresamplerHVPayload *payload = getManager()->getPayload(*this);
+  EMBPresamplerHVPayload *payload = m_c->manager->getPayload(*this);
   return payload->hvLineNo[iGap];
 }
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVPayload.h
index 46df2661c96e2ac5109710498b2cfa11f213f3a5..2f97804b80ab7b61f9dcb9e85d8e1b767e15e947 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMBPresamplerHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _EMBPresamplerHVPayload_h_
-#define _EMBPresamplerHVPayload_h_
+#ifndef LARHV_EMBPRESAMPLERHVPAYLOAD_H
+#define LARHV_EMBPRESAMPLERHVPAYLOAD_H
 #include <iostream>
 struct EMBPresamplerHVPayload {
   double         voltage[2];
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMECHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/EMECHVPayload.h
index 8c710d73e9c1ff3d8fe9e9468282e76a08b12aee..d61e6fc3157006af7b2a3e7d4b267a2b4156db21 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMECHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMECHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _EMECHVPayload_h_
-#define _EMECHVPayload_h_
+#ifndef LARHV_EMECHVPAYLOAD_H
+#define LARHV_EMECHVPAYLOAD_H
 #include <iostream>
 struct EMECHVPayload {
   double         voltage[2];
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVManager.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVManager.cpp
index 04d9c85c64c806b6db517a60533a5e8fae30b00e..2b885177ecbbfc5b9e55dd7baaaec173509b4158 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVManager.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVManager.cpp
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHV/EMECPresamplerHVManager.h"
@@ -30,73 +30,67 @@
 
 class EMECPresamplerHVManager::Clockwork {
 public:
-  CellBinning *phiBinning;
-  EMECPresamplerHVModuleConstLink linkArray[2][64]; // not dense
-  std::atomic<bool>          init{false};
-  std::mutex                 mtx;
+  Clockwork(const EMECPresamplerHVManager* manager) {
+    for(int iSide=0; iSide<2; ++iSide) {
+      for(int iPhi=0; iPhi<64; ++iPhi) {
+	moduleArray[iSide][iPhi] = new EMECPresamplerHVModule(manager, iSide, iPhi);
+      }
+    }
+  }
+  ~Clockwork() {
+    for(int iSide=0; iSide<2; ++iSide) {
+      for(int iPhi=0; iPhi<64; ++iPhi) {
+	delete moduleArray[iSide][iPhi];
+      }
+    }    
+  }
+  CellBinning                   phiBinning{0.0, 2*M_PI, 64};
+  const EMECPresamplerHVModule* moduleArray[2][64]; // not dense
+  std::atomic<bool>             init{false};
+  std::mutex                    mtx;
   std::vector<EMECPresamplerHVPayload> payloadArray;
 };
 
-
-//##ModelId=43FBFC0A034F
-EMECPresamplerHVManager::EMECPresamplerHVManager():
-  m_c(new Clockwork)
+EMECPresamplerHVManager::EMECPresamplerHVManager()
+  : m_c(new Clockwork(this))
 {
-  m_c->init=false;
-
-  m_c->phiBinning = new CellBinning(0.0, 2*M_PI, 64);
 }
 
+EMECPresamplerHVManager::~EMECPresamplerHVManager()
+{
+  delete m_c;
+}
 
-
-//##ModelId=478D1079010F
 const CellBinning *EMECPresamplerHVManager::getPhiBinning() const
 {
-  return m_c->phiBinning;
+  return &(m_c->phiBinning);
 }
 
-//##ModelId=478D10790120
 unsigned int EMECPresamplerHVManager::beginPhiIndex() const
 {
-  return getPhiBinning()->getFirstDivisionNumber();
+  return m_c->phiBinning.getFirstDivisionNumber();
 }
 
-//##ModelId=478D10790129
 unsigned int EMECPresamplerHVManager::endPhiIndex() const
 {
-  return getPhiBinning()->getFirstDivisionNumber() + getPhiBinning()->getNumDivisions();
+  return m_c->phiBinning.getFirstDivisionNumber() + m_c->phiBinning.getNumDivisions();
 }
 
-//##ModelId=478D10790149
-EMECPresamplerHVModuleConstLink EMECPresamplerHVManager::getHVModule(unsigned int iSide, unsigned int iPhi) const
+const EMECPresamplerHVModule& EMECPresamplerHVManager::getHVModule(unsigned int iSide, unsigned int iPhi) const
 {
-
-  if (!m_c->linkArray[iSide][iPhi]) m_c->linkArray[iSide][iPhi] = EMECPresamplerHVModuleConstLink(new EMECPresamplerHVModule(this, iSide, iPhi));
-  return m_c->linkArray[iSide][iPhi];
-
+  return *(m_c->moduleArray[iSide][iPhi]);
 }
 
-//##ModelId=478D10790154
-EMECPresamplerHVManager::~EMECPresamplerHVManager()
-{
-  delete m_c->phiBinning;
-  delete m_c;
-}
-
-
-//##ModelId=47A07A81015E
 unsigned int EMECPresamplerHVManager::beginSideIndex() const
 {
   return 0;
 }
 
-//##ModelId=47A07A81016F
 unsigned int EMECPresamplerHVManager::endSideIndex() const
 {
   return 2;
 }
 
-
 void EMECPresamplerHVManager::update() const {
   std::lock_guard<std::mutex> lock(m_c->mtx);
   if (!(m_c->init)) {
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVModule.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVModule.cpp
index 6546af021f74c166cfe1bf1789158e95d27b5357..b5f0b8c8aec73da96188587b6f13a80b7451def7 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVModule.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVModule.cpp
@@ -1,112 +1,101 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArHV/EMECPresamplerHVModule.h"
 #include "LArHV/EMECPresamplerHVManager.h"
 #include "GeoModelKernel/CellBinning.h"
-#include <stdexcept>
-#include <iostream>
-
 #include "EMECPresamplerHVPayload.h"
 
 class EMECPresamplerHVModule::Clockwork {
-
 public:
-
+  Clockwork(const EMECPresamplerHVManager* managerPtr
+	    , unsigned int side
+	    , unsigned int phi)
+    : manager(managerPtr)
+    , iSide(side)
+    , iPhi(phi)
+  {}
   const EMECPresamplerHVManager *manager;
-  
   unsigned int iSide;
   unsigned int iPhi;
 };
 
-//##ModelId=478D18650316
-EMECPresamplerHVModule::EMECPresamplerHVModule(const EMECPresamplerHVManager *manager, unsigned int iSide, unsigned int iPhi):m_c(new Clockwork)
+EMECPresamplerHVModule::EMECPresamplerHVModule(const EMECPresamplerHVManager* manager
+					       , unsigned int iSide
+					       , unsigned int iPhi)
+  :m_c(new Clockwork(manager,iSide,iPhi))
 {
-  m_c->manager=manager;
-  m_c->iSide=iSide;
-  m_c->iPhi=iPhi;
 }
 
-//##ModelId=478D1865031B
-unsigned int EMECPresamplerHVModule::getPhiIndex() const
+EMECPresamplerHVModule::~EMECPresamplerHVModule()
 {
-  return m_c->iPhi;
+  delete m_c;
 }
 
-//##ModelId=478D18650322
-EMECPresamplerHVModule::~EMECPresamplerHVModule()
+unsigned int EMECPresamplerHVModule::getPhiIndex() const
 {
-  delete m_c;
+  return m_c->iPhi;
 }
 
-//##ModelId=47A07B14017E
 unsigned int EMECPresamplerHVModule::getSideIndex() const
 {
   return m_c->iSide;
 }
 
-
-
-//##ModelId=47A7A9AD000E
 double EMECPresamplerHVModule::getEtaMin() const
 {
   if (m_c->iSide==0) return -1.8;
   else return 1.5;
 }
 
-//##ModelId=47A7A9BF0293
 double EMECPresamplerHVModule::getEtaMax() const
 {
   if (m_c->iSide==0) return -1.5;
   else return 1.8;
 }
 
-//##ModelId=47A7A9C10344
 double EMECPresamplerHVModule::getPhiMin() const
 {
-  return 
-    m_c->manager->getPhiBinning()->binLower(m_c->iPhi);
+  return m_c->manager->getPhiBinning()->binLower(m_c->iPhi);
 }
 
-//##ModelId=47A7A9C400D5
 double EMECPresamplerHVModule::getPhiMax() const
 {
-  return 
-    m_c->manager->getPhiBinning()->binUpper(m_c->iPhi);
+  return m_c->manager->getPhiBinning()->binUpper(m_c->iPhi);
 }
 
-const EMECPresamplerHVManager *EMECPresamplerHVModule::getManager() const {
-  return m_c->manager;
+const EMECPresamplerHVManager& EMECPresamplerHVModule::getManager() const 
+{
+  return *(m_c->manager);
 }
 
-//##ModelId=47AB8A070339
 bool EMECPresamplerHVModule::hvOn(int iGap ) const
 {
-  EMECPresamplerHVPayload *payload = getManager()->getPayload(*this);
-  if (payload->voltage[iGap]<-9999) return false;
-  else return true;
+  EMECPresamplerHVPayload *payload = getManager().getPayload(*this);
+  return (payload->voltage[iGap]>=-9999);
 }
 
 double EMECPresamplerHVModule::voltage(int iGap) const {
-  EMECPresamplerHVPayload *payload = getManager()->getPayload(*this);
+  EMECPresamplerHVPayload *payload = getManager().getPayload(*this);
   return payload->voltage[iGap];
 }
 
 double EMECPresamplerHVModule::current(int iGap) const {
-  EMECPresamplerHVPayload *payload = getManager()->getPayload(*this);
+  EMECPresamplerHVPayload *payload = getManager().getPayload(*this);
   return payload->current[iGap];
 }
 
-void EMECPresamplerHVModule::voltage_current(int iGap,double& voltage, double&current) const {
- EMECPresamplerHVPayload *payload = getManager()->getPayload(*this);
+void EMECPresamplerHVModule::voltage_current(int iGap,double& voltage, double&current) const 
+{
+ EMECPresamplerHVPayload *payload = getManager().getPayload(*this);
  voltage = payload->voltage[iGap];
  current = payload->current[iGap];
 }
 
-
-int EMECPresamplerHVModule::hvLineNo(int iGap) const {
-  EMECPresamplerHVPayload *payload = getManager()->getPayload(*this);
+int EMECPresamplerHVModule::hvLineNo(int iGap) const 
+{
+  EMECPresamplerHVPayload *payload = getManager().getPayload(*this);
   return payload->hvLineNo[iGap];
 }
 
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVPayload.h
index 31b6418543403ee803998b2e8806bd7e9d01541b..a4796090e4e3ccbe5a2ce559b8c286aa3da9b469 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/EMECPresamplerHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _EMECPresamplerHVPayload_h_
-#define _EMECPresamplerHVPayload_h_
+#ifndef LARHV_EMECPRESAMPLERHVPAYLOAD_H
+#define LARHV_EMECPRESAMPLERHVPAYLOAD_H
 #include <iostream>
 struct EMECPresamplerHVPayload {
   double         voltage[2];
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/FCALHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/FCALHVPayload.h
index 7ec1d0bad13ddf4a0f06d52d8c480dddb11c7777..cfff045575b8043399dc0f226e91a921c452add5 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/FCALHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/FCALHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _FCALHVPayload_h_
-#define _FCALHVPayload_h_
+#ifndef LARHV_FCALHVPAYLOAD_H
+#define LARHV_FCALHVPAYLOAD_H
 #include <iostream>
 struct FCALHVPayload {
   double         voltage;
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/HECHVPayload.h b/LArCalorimeter/LArGeoModel/LArHV/src/HECHVPayload.h
index 63e37df66ff9c092059f3a2c24ca7254fbfeec72..977dff9d7984b159ceafa46d2837091c8bb3ea02 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/HECHVPayload.h
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/HECHVPayload.h
@@ -1,9 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef _HECHVPayload_h_
-#define _HECHVPayload_h_
+#ifndef LARHV_HECHVPAYLOAD_H
+#define LARHV_HECHVPAYLOAD_H
 #include <iostream>
 struct HECHVPayload {
   double         voltage;
diff --git a/LArCalorimeter/LArGeoModel/LArHV/src/LArHVManager.cpp b/LArCalorimeter/LArGeoModel/LArHV/src/LArHVManager.cpp
index 7ca4f6d91024a217cd6ed1c67327e87bbbddea8a..1bcef1d250729d8e3c43a22017a9538118d038d2 100644
--- a/LArCalorimeter/LArGeoModel/LArHV/src/LArHVManager.cpp
+++ b/LArCalorimeter/LArGeoModel/LArHV/src/LArHVManager.cpp
@@ -10,19 +10,15 @@
 #include "LArHV/EMECPresamplerHVManager.h"
 #include "LArHV/LArHVManager.h"
 
-LArHVManager::LArHVManager(const EMBPresamplerHVManager *embPreHV
-			   , const EMECPresamplerHVManager *emecPreHV)
+LArHVManager::LArHVManager()
   : m_embHV()
   , m_emecHVInner(EMECHVModule::INNER)
   , m_emecHVOuter(EMECHVModule::OUTER)
   , m_hecHV()
   , m_fcalHV()
-  , m_embPreHV(embPreHV)
-  , m_emecPreHV(emecPreHV)
+  , m_embPreHV()
+  , m_emecPreHV()
 {
-  if (m_embPreHV)  m_embPreHV->ref();
-  if (m_emecPreHV) m_emecPreHV->ref();
-
 }
 
 void LArHVManager::reset() const
@@ -32,17 +28,13 @@ void LArHVManager::reset() const
   m_emecHVOuter.reset();
   m_hecHV.reset();
   m_fcalHV.reset();
-  if (m_embPreHV)  m_embPreHV->reset();
-  if (m_emecPreHV) m_emecPreHV->reset(); 
- return;
+  m_embPreHV.reset();
+  m_emecPreHV.reset(); 
 }
 
 
 LArHVManager::~LArHVManager()
 {
-  if (m_embPreHV)  m_embPreHV->unref();
-  if (m_emecPreHV) m_emecPreHV->unref();
-
 }
 
 const EMBHVManager& LArHVManager::getEMBHVManager() const
@@ -65,13 +57,12 @@ const FCALHVManager& LArHVManager::getFCALHVManager() const
   return m_fcalHV;
 }
 
-const EMBPresamplerHVManager *LArHVManager::getEMBPresamplerHVManager() const
+const EMBPresamplerHVManager& LArHVManager::getEMBPresamplerHVManager() const
 {
   return m_embPreHV;
 }
 
-
-const EMECPresamplerHVManager *LArHVManager::getEMECPresamplerHVManager() const
+const EMECPresamplerHVManager& LArHVManager::getEMECPresamplerHVManager() const
 {
   return m_emecPreHV;
 }
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
index cf397141a610b566970dad5e69a675df50db4618..9bb3b3f94335f60c652d6b3daa755c41a0faa08d 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBCell.h
@@ -7,13 +7,13 @@
 
 #include "LArReadoutGeometry/EMBDetDescr.h"
 #include "LArReadoutGeometry/EMBHVPathologies.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
-#include "LArHV/EMBPresamplerHVModule.h"
 #include "LArHV/EMBHVElectrode.h"
 #include <cmath>
 #include "GeoModelKernel/RCBase.h"
 #include <vector>
 
+class EMBPresamplerHVModule;
+
 /**
  * @class EMBCell
  *
@@ -154,7 +154,7 @@ class EMBCell : public RCBase
       /**
        * @Get HVModule (presampler cells)
        */
-      const EMBPresamplerHVModuleConstLink & getPresamplerHVModule () const;
+      const EMBPresamplerHVModule& getPresamplerHVModule () const;
 
 
       /**
@@ -176,7 +176,7 @@ class EMBCell : public RCBase
       // The cell does NOT own the pointers to its electrodes
       mutable std::vector<const EMBHVElectrode*> m_electrode;
 
-      mutable EMBPresamplerHVModuleConstLink m_presamplerModule;
+      mutable const EMBPresamplerHVModule* m_presamplerModule{nullptr};
 
       mutable std::vector<EMBHVPathologiesConstLink> m_hvPathologies;
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
index 4c81ef13bc55f6c5f5d1f86316d4c50cb59d1422..c9a5d238544d76133686dee35b198a236045ef72 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMBDetectorManager.h
@@ -9,10 +9,11 @@
 #include "GeoModelKernel/GeoVDetectorManager.h"
 #include "LArReadoutGeometry/EMBAccordionDetails.h"
 #include "LArHV/EMBHVManager.h"
+#include "LArHV/EMBPresamplerHVManager.h"
+
 class EMBDetDescr;
 class EMBDetectorRegion;
 class EMBBasicReadoutNumbers;
-class EMBPresamplerHVManager;
 
 /**
  * @class EMBDetectorManager
@@ -38,7 +39,7 @@ class EMBDetectorManager : public GeoVDetectorManager
   /**
    * @brief Constructor
    */
-  EMBDetectorManager(const EMBHVManager& hvManager);
+  EMBDetectorManager(const EMBHVManager& hvManager, const EMBPresamplerHVManager& presamplerHVManager);
   
   /**
    * @brief Destructor
@@ -105,7 +106,7 @@ class EMBDetectorManager : public GeoVDetectorManager
   /**
    * @brief       Get the HV Manager (Presampler)
    */
-  const EMBPresamplerHVManager *getPresamplerHVManager () const;
+  const EMBPresamplerHVManager& getPresamplerHVManager () const;
   
   
  private:
@@ -127,11 +128,11 @@ class EMBDetectorManager : public GeoVDetectorManager
    *	provide iterative  access to any EMBDetectorRegion held
    *	by this manager.
    */
-  EMBDetRegionArray m_DetRegionsRandom;
-  const EMBBasicReadoutNumbers *m_basicReadoutNumbers;
-  mutable EMBAccordionDetails *m_accordionDetails;
-  const EMBHVManager&         m_hvManager;
-  mutable const EMBPresamplerHVManager *m_presamplerHVManager;
+  EMBDetRegionArray             m_DetRegionsRandom;
+  const EMBBasicReadoutNumbers* m_basicReadoutNumbers;
+  mutable EMBAccordionDetails*  m_accordionDetails;
+  const EMBHVManager&           m_hvManager;
+  const EMBPresamplerHVManager& m_presamplerHVManager;
 };
 
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
index d57e4f90195114de885911d95e6366d0d29e21aa..b69fb3d8c2b1a77457682fde949f0cf54aad1ff5 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECCell.h
@@ -9,9 +9,8 @@
 #include "LArReadoutGeometry/EMECDetectorManager.h"
 #include "GeoModelKernel/CellBinning.h"
 #include "GeoModelKernel/RCBase.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
-#include "LArHV/EMECPresamplerHVModule.h"
 #include "LArHV/EMECHVElectrode.h"
+#include "LArHV/EMECPresamplerHVModule.h"
 
 /**
  * @class EMECCell
@@ -139,7 +138,7 @@ class EMECCell : public RCBase
   /**
    * @Get HVModule (presampler cells)
    */
-  const EMECPresamplerHVModuleConstLink & getPresamplerHVModule () const;
+  const EMECPresamplerHVModule& getPresamplerHVModule () const;
 
  private:
   
@@ -157,7 +156,7 @@ class EMECCell : public RCBase
   // The cell does NOT own the pointers to its electrodes
   mutable std::vector<const EMECHVElectrode*> m_electrode;
 
-  mutable EMECPresamplerHVModuleConstLink m_presamplerModule;
+  mutable const EMECPresamplerHVModule* m_presamplerModule{nullptr};
 
   unsigned int m_clockwork;
 
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
index b177a4b087b0d4bc740969a615c2a3beb0918fb0..db4816965916c2eb3871661674434b8e5134bc20 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/EMECDetectorManager.h
@@ -42,7 +42,8 @@ class EMECDetectorManager : public GeoVDetectorManager
    * @brief  Constructor
    */
   EMECDetectorManager(const EMECHVManager* hvManagerInner=nullptr
-		      , const EMECHVManager* hvManagerOuter=nullptr);
+		      , const EMECHVManager* hvManagerOuter=nullptr
+		      , const EMECPresamplerHVManager* presamplerHVManager=nullptr);
 
   /**
    * @brief  Destructor
@@ -178,7 +179,7 @@ class EMECDetectorManager : public GeoVDetectorManager
   /**
    * @brief 	Get the HV Manager (presampler)
    */
-  const EMECPresamplerHVManager * getPresamplerHVManager() const;
+  const EMECPresamplerHVManager&  getPresamplerHVManager() const;
 
  private:
     
@@ -238,9 +239,9 @@ class EMECDetectorManager : public GeoVDetectorManager
   /**
    * @brief 	The HV Managers for the emec;
    */
-  mutable const EMECHVManager *m_HVManager[2];
+  mutable const EMECHVManager* m_HVManager[2];
 
-  mutable const EMECPresamplerHVManager *m_presamplerHVManager;
+  mutable const EMECPresamplerHVManager* m_presamplerHVManager;
 };
 
 /**
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCell.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCell.cxx
index 25d87a3a29920de8b87d5d81ac44a30d46de6549..53ea8060a8f423fff2168f9b12344b118f9d2ab9 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCell.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBCell.cxx
@@ -6,13 +6,11 @@
 #include "LArReadoutGeometry/EMBDetDescr.h"
 #include "LArReadoutGeometry/EMBDetectorManager.h"
 #include "LArHV/EMBHVManager.h"
-#include "LArHV/EMBHVDescriptor.h"
 #include "LArHV/EMBHVModule.h"
 #include "LArHV/EMBHVElectrode.h"
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArHV/EMBPresamplerHVManager.h"
 #include "LArHV/EMBPresamplerHVDescriptor.h"
-#include "LArHV/EMBPresamplerHVModule.h"
 
 EMBCell::~EMBCell()
 {
@@ -37,23 +35,23 @@ const EMBHVElectrode & EMBCell::getElectrode (unsigned int i) const {
   return *(m_electrode[i]);
 }
 
-const EMBPresamplerHVModuleConstLink & EMBCell::getPresamplerHVModule () const {
+const EMBPresamplerHVModule& EMBCell::getPresamplerHVModule () const {
   if (m_electrode.size()==0 && !m_presamplerModule) initHV();
-  return m_presamplerModule;
+  return *m_presamplerModule;
 }
 
 
 void EMBCell::initHV() const {
 
   if (getSamplingIndex()==0) {
-    const EMBPresamplerHVManager *presamplerHVManager=getDescriptor()->getManager()->getPresamplerHVManager();
+    const EMBPresamplerHVManager& presamplerHVManager=getDescriptor()->getManager()->getPresamplerHVManager();
     double phiUpper = getPhiMaxNominal();
     double phiLower = getPhiMinNominal();
     double eta=fabs(getEtaMax()+getEtaMin())/2.0;
     double phi=fabs(phiUpper+phiLower)/2.0;
 
-    const CellPartitioning & etaBinning=presamplerHVManager->getDescriptor()->getEtaPartitioning();
-    const CellBinning & phiBinning=presamplerHVManager->getDescriptor()->getPhiBinning();
+    const CellPartitioning & etaBinning=presamplerHVManager.getDescriptor()->getEtaPartitioning();
+    const CellBinning & phiBinning=presamplerHVManager.getDescriptor()->getPhiBinning();
 
     unsigned int iPhi = int((phi - phiBinning.getStart())/phiBinning.getDelta()) + phiBinning.getFirstDivisionNumber();
     unsigned int iEta = etaBinning.getFirstDivisionNumber();
@@ -67,7 +65,7 @@ void EMBCell::initHV() const {
     if (iEta==lastDivision) throw std::runtime_error ("Error in EMBCell:  Presampler HV not found");
 
     unsigned int iSide=getEndcapIndex();
-    m_presamplerModule = presamplerHVManager->getHVModule(iSide,iEta,iPhi);
+    m_presamplerModule = &(presamplerHVManager.getHVModule(iSide,iEta,iPhi));
 
   }
   else {
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorManager.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorManager.cxx
index 823af672498966e36f365a426445872808c0be81..42e1339344837ba71902f4f1ea9f30e9d4d752d8 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMBDetectorManager.cxx
@@ -28,8 +28,10 @@ public:
 
 };
 
-EMBDetectorManager::EMBDetectorManager(const EMBHVManager& hvManager)
+EMBDetectorManager::EMBDetectorManager(const EMBHVManager& hvManager
+				       , const EMBPresamplerHVManager& presamplerHVManager)
   : m_hvManager(hvManager)
+  , m_presamplerHVManager(presamplerHVManager)
 {
   setName("LArEMB");
 
@@ -45,7 +47,6 @@ EMBDetectorManager::EMBDetectorManager(const EMBHVManager& hvManager)
 
   m_basicReadoutNumbers = new EMBBasicReadoutNumbers();
   m_accordionDetails    = NULL;
-  m_presamplerHVManager = NULL;
 }
 
 
@@ -113,15 +114,7 @@ const EMBHVManager& EMBDetectorManager::getHVManager () const
 }
 
 
-const EMBPresamplerHVManager * EMBDetectorManager::getPresamplerHVManager () const
+const EMBPresamplerHVManager&  EMBDetectorManager::getPresamplerHVManager () const
 {
-
-  if (!m_presamplerHVManager) {
-    StoreGateSvc *detStore = StoreGate::pointer("DetectorStore");
-    const LArHVManager *manager = NULL;
-    if (detStore->retrieve(manager)==StatusCode::SUCCESS) {
-      m_presamplerHVManager=manager->getEMBPresamplerHVManager();
-    }
-  } 
   return m_presamplerHVManager;
 }
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECCell.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECCell.cxx
index 10682e9d2d1cb65e9acabcd5dc72f245d27619d8..29b5b3f945646f9bc8bfb637eb4e09ada521695c 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECCell.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECCell.cxx
@@ -25,23 +25,23 @@ const EMECHVElectrode& EMECCell::getElectrode (unsigned int i) const {
   return *(m_electrode[i]);
 }
 
-const EMECPresamplerHVModuleConstLink & EMECCell::getPresamplerHVModule () const {
+const EMECPresamplerHVModule& EMECCell::getPresamplerHVModule () const {
   if (m_electrode.size()==0 && !m_presamplerModule) initHV();
-  return m_presamplerModule;
+  return *m_presamplerModule;
 }
 
 void EMECCell::initHV() const {
 
   if (getSamplingIndex()==0) {
-    const EMECPresamplerHVManager *presamplerHVManager=getDescriptor()->getManager()->getPresamplerHVManager();
+    const EMECPresamplerHVManager& presamplerHVManager=getDescriptor()->getManager()->getPresamplerHVManager();
     double phiUpper = getPhiMaxNominal();
     double phiLower = getPhiMinNominal();
     double phi=fabs(phiUpper+phiLower)/2.0;
 
-    const CellBinning * phiBinning=presamplerHVManager->getPhiBinning();
+    const CellBinning * phiBinning=presamplerHVManager.getPhiBinning();
     unsigned int iPhi = int((phi - phiBinning->getStart())/phiBinning->getDelta()) + phiBinning->getFirstDivisionNumber();
     unsigned int iSide=getEndcapIndex();
-    m_presamplerModule = presamplerHVManager->getHVModule(iSide,iPhi);
+    m_presamplerModule = &(presamplerHVManager.getHVModule(iSide,iPhi));
 
   }
   else {
diff --git a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
index fec6e434a48225911737f060c4fda85f48f3b8c4..f244a4b07b6a72babc9fb6451c6828478064dad0 100755
--- a/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
+++ b/LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/EMECDetectorManager.cxx
@@ -20,8 +20,10 @@
 // Class EMECDetectorManager 
 
 EMECDetectorManager::EMECDetectorManager(const EMECHVManager* hvManagerInner
-					 , const EMECHVManager* hvManagerOuter)
-  :m_MagicNumbers(new EMECMagicNumbers())
+					 , const EMECHVManager* hvManagerOuter
+					 , const EMECPresamplerHVManager* presamplerHVManager)
+  : m_MagicNumbers(new EMECMagicNumbers())
+  , m_presamplerHVManager(presamplerHVManager)
 {
   setName("LArEMEC");
   
@@ -37,7 +39,6 @@ EMECDetectorManager::EMECDetectorManager(const EMECHVManager* hvManagerInner
 
   m_HVManager[0]=hvManagerInner;
   m_HVManager[1]=hvManagerOuter;
-  m_presamplerHVManager=NULL;
 
   // The EMEC gets and managers certain arrays needed to build descriptors.  Here is that:
   ISvcLocator *svcLocator = Gaudi::svcLocator();
@@ -138,15 +139,14 @@ const EMECHVManager& EMECDetectorManager::getHVManager (EMECHVManager::IOType io
   return *(m_HVManager[io]);
 }
 
-const EMECPresamplerHVManager * EMECDetectorManager::getPresamplerHVManager () const
+const EMECPresamplerHVManager& EMECDetectorManager::getPresamplerHVManager () const
 {
-
   if (!m_presamplerHVManager) {
     StoreGateSvc *detStore = StoreGate::pointer("DetectorStore");
-    const LArHVManager *manager = NULL;
+    const LArHVManager *manager{nullptr};
     if (detStore->retrieve(manager)==StatusCode::SUCCESS) {
-      m_presamplerHVManager=manager->getEMECPresamplerHVManager();
+      m_presamplerHVManager=&(manager->getEMECPresamplerHVManager());
     }
   } 
-  return m_presamplerHVManager;
+  return *m_presamplerHVManager;
 }
diff --git a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
index c98c881f986d35a1cbf7f4a9c7fa5b8c8b0b53f1..b0f663c2bc7d4a35bc4b161012d5caadfffb66fa 100755
--- a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
+++ b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
@@ -20,12 +20,10 @@
 #include "LArHV/EMECHVModule.h"
 #include "LArHV/EMBHVElectrode.h"
 #include "LArHV/EMBPresamplerHVManager.h"
-#include "LArHV/EMBPresamplerHVModuleConstLink.h"
 #include "LArHV/EMBPresamplerHVModule.h"
 #include "LArReadoutGeometry/EMECCell.h"
 #include "LArHV/EMECHVManager.h"
 #include "LArHV/EMECHVElectrode.h"
-#include "LArHV/EMECPresamplerHVModuleConstLink.h"
 #include "LArHV/EMECPresamplerHVModule.h"
 #include "LArReadoutGeometry/HECCell.h"
 #include "LArHV/HECHVManager.h"
@@ -425,13 +423,13 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata, const LArHVData* hvdataO
          if (!embElement) std::abort();
          const EMBCellConstLink cell = embElement->getEMBCell();
  
-         const EMBPresamplerHVModuleConstLink hvmodule =  cell->getPresamplerHVModule ();
+         const EMBPresamplerHVModule& hvmodule =  cell->getPresamplerHVModule ();
  
          double wt = 0.5;
          for (unsigned int igap=0;igap<2;igap++) {
-             const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvmodule->hvLineNo(igap));
+             const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvmodule.hvLineNo(igap));
              if(itrLine == hvlineidx.end()) { // error, could not find HVline index
-                ATH_MSG_ERROR("Do not have hvline: "<<hvmodule->hvLineNo(igap)<<" in LArHVData mapping !!!");
+                ATH_MSG_ERROR("Do not have hvline: "<<hvmodule.hvLineNo(igap)<<" in LArHVData mapping !!!");
                 return StatusCode::FAILURE;
              }
              unsigned idx = itrLine - hvlineidx.begin(); 
@@ -495,13 +493,13 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata, const LArHVData* hvdataO
          if (!emecElement) std::abort();
          const EMECCellConstLink cell = emecElement->getEMECCell();
  
-         const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
+         const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
  
          double wt = 0.5; 
          for (unsigned int igap=0;igap<2;igap++) {
-             const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvmodule->hvLineNo(igap));
+             const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvmodule.hvLineNo(igap));
              if(itrLine == hvlineidx.end()) { // error, could not find HVline index
-                ATH_MSG_ERROR("Do not have hvline: "<<hvmodule->hvLineNo(igap)<<" in LArHVData mapping !!!");
+                ATH_MSG_ERROR("Do not have hvline: "<<hvmodule.hvLineNo(igap)<<" in LArHVData mapping !!!");
                 return StatusCode::FAILURE;
              }
              unsigned idx = itrLine - hvlineidx.begin(); 
@@ -882,26 +880,26 @@ StatusCode LArHVCondAlg::searchNonNominalHV_EMB(CaloAffectedRegionInfoVec *vAffe
     } //end for iSide
 
     // barrel presampler
-    const EMBPresamplerHVManager* hvManager_EMBPS=manager->getEMBPresamplerHVManager();
+    const EMBPresamplerHVManager& hvManager_EMBPS=manager->getEMBPresamplerHVManager();
     HVnominal = HV_nominal("EMBPS",0.);
-    for (unsigned int iSide=hvManager_EMBPS->beginSideIndex();iSide<hvManager_EMBPS->endSideIndex();iSide++) { // loop over HV modules
-      for (unsigned int iPhi=hvManager_EMBPS->beginPhiIndex();iPhi<hvManager_EMBPS->endPhiIndex();iPhi++) {
-          for (unsigned int iEta=hvManager_EMBPS->beginEtaIndex();iEta<hvManager_EMBPS->endEtaIndex();iEta++) { //0 to 7
-            EMBPresamplerHVModuleConstLink hvMod = hvManager_EMBPS->getHVModule(iSide,iEta,iPhi);
+    for (unsigned int iSide=hvManager_EMBPS.beginSideIndex();iSide<hvManager_EMBPS.endSideIndex();iSide++) { // loop over HV modules
+      for (unsigned int iPhi=hvManager_EMBPS.beginPhiIndex();iPhi<hvManager_EMBPS.endPhiIndex();iPhi++) {
+          for (unsigned int iEta=hvManager_EMBPS.beginEtaIndex();iEta<hvManager_EMBPS.endEtaIndex();iEta++) { //0 to 7
+            const EMBPresamplerHVModule& hvMod = hvManager_EMBPS.getHVModule(iSide,iEta,iPhi);
             ATH_MSG_DEBUG("iSide,iPhi,iEta " << iSide << " " << iPhi << " " << iEta);
             double hv[2];
             for (int iGap=0;iGap<2;iGap++) {
-                const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvMod->hvLineNo(iGap));
+                const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvMod.hvLineNo(iGap));
                 if(itrLine == hvlineidx.end()) { // error, could not find HVline index
-                  ATH_MSG_ERROR("Do not have hvline: "<<hvMod->hvLineNo(iGap)<<" in LArHVData !!!");
+                  ATH_MSG_ERROR("Do not have hvline: "<<hvMod.hvLineNo(iGap)<<" in LArHVData !!!");
                   return StatusCode::FAILURE;
                 }
 		hv[iGap]=fabs(voltage[itrLine - hvlineidx.begin()]);
             }
-            float eta_min=hvMod->getEtaMin();
-            float eta_max=hvMod->getEtaMax();
-            float phi_min=CaloPhiRange::fix(hvMod->getPhiMin());
-            float phi_max=CaloPhiRange::fix(hvMod->getPhiMax());
+            float eta_min=hvMod.getEtaMin();
+            float eta_max=hvMod.getEtaMax();
+            float phi_min=CaloPhiRange::fix(hvMod.getPhiMin());
+            float phi_max=CaloPhiRange::fix(hvMod.getPhiMax());
             ATH_MSG_DEBUG("  HV " <<  hv[0] << " " << hv[1] << " " << "  etamin,etamax,phimin,phimax " << eta_min << " " << eta_max << " " << phi_min << " " << phi_max);
 
             //take decisions according to all the gaps HV :
@@ -1045,24 +1043,24 @@ StatusCode LArHVCondAlg::searchNonNominalHV_EMEC_OUTER(CaloAffectedRegionInfoVec
     } //end for iSide
 
     // endcap presampler
-    const EMECPresamplerHVManager* hvManager_EMECPS=manager->getEMECPresamplerHVManager();
+    const EMECPresamplerHVManager& hvManager_EMECPS=manager->getEMECPresamplerHVManager();
     float HVnominal = HV_nominal("EMECPS",0.);
-    for (unsigned int iSide=hvManager_EMECPS->beginSideIndex();iSide<hvManager_EMECPS->endSideIndex();iSide++) { // loop over HV modules
-      for (unsigned int iPhi=hvManager_EMECPS->beginPhiIndex();iPhi<hvManager_EMECPS->endPhiIndex();iPhi++) {
-            EMECPresamplerHVModuleConstLink hvMod = hvManager_EMECPS->getHVModule(iSide,iPhi);
+    for (unsigned int iSide=hvManager_EMECPS.beginSideIndex();iSide<hvManager_EMECPS.endSideIndex();iSide++) { // loop over HV modules
+      for (unsigned int iPhi=hvManager_EMECPS.beginPhiIndex();iPhi<hvManager_EMECPS.endPhiIndex();iPhi++) {
+            const EMECPresamplerHVModule& hvMod = hvManager_EMECPS.getHVModule(iSide,iPhi);
             double hv[2];
             for (int iGap=0;iGap<2;iGap++) {
-                const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvMod->hvLineNo(iGap));
+                const std::vector<unsigned int>::const_iterator itrLine=std::find(hvlineidx.begin(), hvlineidx.end(), hvMod.hvLineNo(iGap));
                 if(itrLine == hvlineidx.end()) { // error, could not find HVline index
-                  ATH_MSG_ERROR("Do not have hvline: "<<hvMod->hvLineNo(iGap)<<" in LArHVData !!!");
+                  ATH_MSG_ERROR("Do not have hvline: "<<hvMod.hvLineNo(iGap)<<" in LArHVData !!!");
                   return StatusCode::FAILURE;
                 }
 		hv[iGap]=fabs(voltage[itrLine - hvlineidx.begin()]);
             }
-            float eta_min=hvMod->getEtaMin(); 
-            float eta_max=hvMod->getEtaMax();
-            float phi_min=CaloPhiRange::fix(hvMod->getPhiMin());
-            float phi_max=CaloPhiRange::fix(hvMod->getPhiMax());
+            float eta_min=hvMod.getEtaMin(); 
+            float eta_max=hvMod.getEtaMax();
+            float phi_min=CaloPhiRange::fix(hvMod.getPhiMin());
+            float phi_max=CaloPhiRange::fix(hvMod.getPhiMax());
             ATH_MSG_DEBUG("iSide,iPhi" << iSide << " " << iPhi << "  HV " <<  hv[0] << " " << hv[1] << " "
                           << "  etamin,etamax,phimin,phimax " << eta_min << " " << eta_max << " " 
                           << phi_min << " " << phi_max);
diff --git a/LArCalorimeter/LArRecUtils/src/LArHVPathologyDbCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVPathologyDbCondAlg.cxx
index bb453b5bac37fa0b32fe2334431c5569dc22c1d6..fe2cfd60c8f9696ebcc2b8b11f063f47a2432bbc 100755
--- a/LArCalorimeter/LArRecUtils/src/LArHVPathologyDbCondAlg.cxx
+++ b/LArCalorimeter/LArRecUtils/src/LArHVPathologyDbCondAlg.cxx
@@ -5,6 +5,8 @@
 #include "LArHVPathologyDbCondAlg.h" 
 #include "LArRecConditions/LArHVPathologiesDb.h"
 #include "LArRecConditions/LArHVPathology.h"
+#include "LArHV/EMBPresamplerHVModule.h"
+#include "LArHV/EMECPresamplerHVModule.h"
 
 #include "GaudiKernel/IToolSvc.h"
 #include "GaudiKernel/MsgStream.h"
@@ -226,12 +228,12 @@ LArHVPathologyDbCondAlg::fillElectMap(const CaloDetDescrManager* calodetdescrmgr
      if (abs(m_larem_id->barrel_ec(id))==1 &&  m_larem_id->sampling(id)==0) {
        if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id))) {
         const EMBCellConstLink cell = embElement->getEMBCell();
-        const EMBPresamplerHVModuleConstLink hvmodule =  cell->getPresamplerHVModule ();
+        const EMBPresamplerHVModule& hvmodule =  cell->getPresamplerHVModule ();
         for(auto hwid:hwlineId) {
           list.clear();
           HVline = m_hvlineHelper->hv_line(hwid);
           for (unsigned int igap=0;igap<2;igap++) {
-            if ((unsigned)hvmodule->hvLineNo(igap)==HVline) {
+            if ((unsigned)hvmodule.hvLineNo(igap)==HVline) {
               list.push_back(igap);
             }
           }
@@ -244,12 +246,12 @@ LArHVPathologyDbCondAlg::fillElectMap(const CaloDetDescrManager* calodetdescrmgr
     if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id)==0) {
       if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(calodetdescrmgr->get_element(id))) {
        const EMECCellConstLink cell = emecElement->getEMECCell();
-       const EMECPresamplerHVModuleConstLink hvmodule = cell->getPresamplerHVModule ();
+       const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
        for(auto hwid:hwlineId) {
          list.clear();
          HVline = m_hvlineHelper->hv_line(hwid);
          for (unsigned int igap=0;igap<2;igap++) {
-           if ((unsigned)hvmodule->hvLineNo(igap)==HVline) {
+           if ((unsigned)hvmodule.hvLineNo(igap)==HVline) {
              list.push_back(igap);
            }
          }
diff --git a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
index e887ef28dc02c7ad950f1a1f819f1a864cfb1ea5..9342eb2d443ac4e114f3af9edb5b765b9d5d05ae 100755
--- a/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
+++ b/graphics/VP1/VP1Systems/VP1CaloReadoutSystems/src/VP1CaloReadoutSystem.cxx
@@ -839,20 +839,20 @@ void VP1CaloReadoutSystem::createHV() {
     }
   }
 
-  const EMBPresamplerHVManager *  embPreHVManager  = larHVManager->getEMBPresamplerHVManager();
-  for (unsigned int e=embPreHVManager->beginSideIndex();e!=embPreHVManager->endSideIndex();e++) {
-    for (unsigned int y=embPreHVManager->beginEtaIndex();y!=embPreHVManager->endEtaIndex();y++) {
-      for (unsigned int p=embPreHVManager->beginPhiIndex();p!=embPreHVManager->endPhiIndex();p++) {
-	EMBPresamplerHVModuleConstLink embMod=embPreHVManager->getHVModule(e,y,p);
+  const EMBPresamplerHVManager&  embPreHVManager  = larHVManager->getEMBPresamplerHVManager();
+  for (unsigned int e=embPreHVManager.beginSideIndex();e!=embPreHVManager.endSideIndex();e++) {
+    for (unsigned int y=embPreHVManager.beginEtaIndex();y!=embPreHVManager.endEtaIndex();y++) {
+      for (unsigned int p=embPreHVManager.beginPhiIndex();p!=embPreHVManager.endPhiIndex();p++) {
+	const EMBPresamplerHVModule& embMod=embPreHVManager.getHVModule(e,y,p);
 	
 	double r=1900; // Radius to draw stuff at for barrel Presampler HV.
 	
 	{
 	  int cc=0;
-	  double etaMin=embMod->getEtaMin();
-	  double etaMax=embMod->getEtaMax();
-	  double phiMin=embMod->getPhiMin();
-	  double phiMax=embMod->getPhiMax();
+	  double etaMin=embMod.getEtaMin();
+	  double etaMax=embMod.getEtaMax();
+	  double phiMin=embMod.getPhiMin();
+	  double phiMax=embMod.getPhiMax();
 	  SoVertexProperty *vtxProperty = new SoVertexProperty();
 	  vtxProperty->vertex.set1Value(cc++,  SbVec3f(r*cos(phiMin),r*sin(phiMin)  ,r*sinh(etaMin)));
 	  vtxProperty->vertex.set1Value(cc++,  SbVec3f(r*cos(phiMax),r*sin(phiMax)  ,r*sinh(etaMin)));
@@ -865,8 +865,8 @@ void VP1CaloReadoutSystem::createHV() {
 	  ls->vertexProperty=vtxProperty;
 	  m_clockwork->embPreModsSeparator->addChild(ls);
 	  
-	  double voltage0 = embMod->voltage(0);
-	  double voltage1 = embMod->voltage(1);
+	  double voltage0 = embMod.voltage(0);
+	  double voltage1 = embMod.voltage(1);
 	  double nominalVoltage = m_clockwork->ui.embPresamplerNominalSpinBox->value();
 	  bool outOfTolerance = (fabs(voltage0-nominalVoltage) > double (tolerance))  || (fabs(voltage1-nominalVoltage) > double (tolerance))  ;
 	  bool missing        = voltage0 == -99999 || voltage1 == -99999;
@@ -974,16 +974,16 @@ void VP1CaloReadoutSystem::createHV() {
     }
   }
 
-  const EMECPresamplerHVManager *  emecPreHVManager  = larHVManager->getEMECPresamplerHVManager();
-  for (unsigned int e=emecPreHVManager->beginSideIndex();e!=emecPreHVManager->endSideIndex();e++) {
+  const EMECPresamplerHVManager&  emecPreHVManager  = larHVManager->getEMECPresamplerHVManager();
+  for (unsigned int e=emecPreHVManager.beginSideIndex();e!=emecPreHVManager.endSideIndex();e++) {
     double z =  e==0 ? -3650:3650;
-    for (unsigned int p=emecPreHVManager->beginPhiIndex();p!=emecPreHVManager->endPhiIndex();p++) {
-      EMECPresamplerHVModuleConstLink emecMod=emecPreHVManager->getHVModule(e,p);
+    for (unsigned int p=emecPreHVManager.beginPhiIndex();p!=emecPreHVManager.endPhiIndex();p++) {
+      const EMECPresamplerHVModule& emecMod=emecPreHVManager.getHVModule(e,p);
       
-      double phiMin = emecMod->getPhiMin();
-      double phiMax = emecMod->getPhiMax();
-      double etaMin = emecMod->getEtaMin();
-      double etaMax = emecMod->getEtaMax();
+      double phiMin = emecMod.getPhiMin();
+      double phiMax = emecMod.getPhiMax();
+      double etaMin = emecMod.getEtaMin();
+      double etaMax = emecMod.getEtaMax();
       double rMax=fabs(z/sinh(etaMin));
       double rMin=fabs(z/sinh(etaMax));
       
@@ -1002,8 +1002,8 @@ void VP1CaloReadoutSystem::createHV() {
       ls->vertexProperty=vtxProperty;
       m_clockwork->emecPreModsSeparator->addChild(ls);
       
-      double voltage0 = emecMod->voltage(0);
-      double voltage1 = emecMod->voltage(1);
+      double voltage0 = emecMod.voltage(0);
+      double voltage1 = emecMod.voltage(1);
       double nominalVoltage = m_clockwork->ui.emecPresamplerNominalSpinBox->value();
       bool outOfTolerance = (fabs(voltage0-nominalVoltage) > double (tolerance))  || (fabs(voltage1-nominalVoltage) > double (tolerance))  ;
       bool missing        = voltage0 == -99999 || voltage1 == -99999;
@@ -1938,13 +1938,13 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
       if (element->getSamplingIndex()==0) {
 
 	 if (m_clockwork->ui.highVoltageCheckBox->isChecked()) {
-	  EMECPresamplerHVModuleConstLink module = element->getPresamplerHVModule();
+	  const EMECPresamplerHVModule& module = element->getPresamplerHVModule();
 	  std::ostringstream highVoltageStream;
 	  highVoltageStream << "Presampler cell. HV Status: " << '\n';
 	  message(highVoltageStream.str().c_str());
-	  highVoltageStream <<  "Status: "   << module->hvOn(0)    << ' ' << module->hvOn(1)    <<  '\n';
-	  highVoltageStream <<  "Current: "  << module->current(0) << ' ' << module->current(1) <<  '\n';
-	  highVoltageStream <<  "Voltage: "  << module->voltage(0) << ' ' << module->voltage(1) <<  '\n';
+	  highVoltageStream <<  "Status: "   << module.hvOn(0)    << ' ' << module.hvOn(1)    <<  '\n';
+	  highVoltageStream <<  "Current: "  << module.current(0) << ' ' << module.current(1) <<  '\n';
+	  highVoltageStream <<  "Voltage: "  << module.voltage(0) << ' ' << module.voltage(1) <<  '\n';
 	  
 	  message(highVoltageStream.str().c_str());
 	  
@@ -1970,10 +1970,10 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
 	  double z      = (element->getZLocal(pos)+
 			   element->getDescriptor()->getManager()->getFocalToRef() +
 			   element->getDescriptor()->getManager()->getRefToActive())* (element->getEndcapIndex()==0 ? -1:1);
-	  double phiMin = module->getPhiMin();
-	  double phiMax = module->getPhiMax();
-	  double etaMin = module->getEtaMin();
-	  double etaMax = module->getEtaMax();
+	  double phiMin = module.getPhiMin();
+	  double phiMax = module.getPhiMax();
+	  double etaMin = module.getEtaMin();
+	  double etaMax = module.getEtaMax();
 	  
 	  
 	  double rMax=fabs(z/sinh(etaMin));
@@ -2112,14 +2112,14 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
       //
       if (m_clockwork->ui.highVoltageCheckBox->isChecked()) {
 	if (element->getSamplingIndex()==0) {
-	  EMBPresamplerHVModuleConstLink module = element->getPresamplerHVModule();
+	  const EMBPresamplerHVModule& module = element->getPresamplerHVModule();
 	  
 	  std::ostringstream highVoltageStream;
 	  highVoltageStream << "Presampler cell. HV Status: " << '\n';
 	  message(highVoltageStream.str().c_str());
-	  highVoltageStream <<  "Status: "   << module->hvOn(0)    << ' ' << module->hvOn(1)    <<  '\n';
-	  highVoltageStream <<  "Current: "  << module->current(0) << ' ' << module->current(1) <<  '\n';
-	  highVoltageStream <<  "Voltage: "  << module->voltage(0) << ' ' << module->voltage(1) <<  '\n';
+	  highVoltageStream <<  "Status: "   << module.hvOn(0)    << ' ' << module.hvOn(1)    <<  '\n';
+	  highVoltageStream <<  "Current: "  << module.current(0) << ' ' << module.current(1) <<  '\n';
+	  highVoltageStream <<  "Voltage: "  << module.voltage(0) << ' ' << module.voltage(1) <<  '\n';
 	  
 	  message(highVoltageStream.str().c_str());
 	  
@@ -2142,10 +2142,10 @@ void VP1CaloReadoutSystem::userPickedNode(SoNode* mySelectedNode, SoPath */*pick
 	  
 	  
 	  double r      = element->getRLocal(pos);
-	  double phiMin = module->getPhiMin();
-	  double phiMax = module->getPhiMax();
-	  double etaMin = module->getEtaMin();
-	  double etaMax = module->getEtaMax();
+	  double phiMin = module.getPhiMin();
+	  double phiMax = module.getPhiMax();
+	  double etaMin = module.getEtaMin();
+	  double etaMax = module.getEtaMax();
 	  sep->addChild(white);
 	  sep->addChild(drawStyle);
 	  sep->addChild(lm);