diff --git a/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h b/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h
index 71f230f854fe63ea71970ca743c2549d211143ed..b46f3af09dfddebcf31f1ec85ad69e8332aafb7f 100755
--- a/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h
+++ b/LArCalorimeter/LArRecConditions/LArRecConditions/LArHVData.h
@@ -19,19 +19,15 @@ class LArHVData {
   friend class LArHVCondAlg; //The conditions alg filling this object 
 
   public: 
-   LArHVData() { }
-   ~LArHVData () { } 
+  LArHVData() = default;
+  ~LArHVData () = default;
 
-  /** @brief struct for HV and weight pair 
+  /** @brief struct for HV, current and weight 
    */
   struct HV_t {
+  HV_t(float ihv, float icurr, float iweight) : 
+    hv(ihv),current(icurr),weight(iweight) {};
     float hv;
-    float weight; 
-  }; 
-
-  /** @brief  struct for Current and weight pair 
-   */
-  struct CURRENT_t {
     float current;
     float weight; 
   }; 
@@ -40,19 +36,16 @@ class LArHVData {
 
   /** brief  Given a Offline Readout ID, return values of HV and Weight 
    */
-  StatusCode getHV(const Identifier& id, std::vector< HV_t > & v  ) const ; 
-
-  /**  Given a Offline Readout ID, return values of Current and Weight 
-   */
-  StatusCode getCurrent(const Identifier& id, std::vector< CURRENT_t > & v  ) const ; 
+  const std::vector<LArHVData::HV_t> & getHV(const Identifier& id) const;
 
   typedef std::map<Identifier, std::vector<HV_t> > hvMap;
-  typedef std::map<Identifier, std::vector<CURRENT_t> > currMap;
 
   private:
   hvMap m_voltage;
-  currMap  m_current;
   std::set<Identifier> m_updatedCells;
+
+  const std::vector<LArHVData::HV_t> m_empty;
+
 };
 
 inline 
diff --git a/LArCalorimeter/LArRecConditions/src/LArHVData.cxx b/LArCalorimeter/LArRecConditions/src/LArHVData.cxx
index 7b7d2da243868e0b4ee01072a2e50d2602404aa6..a0e8aa3989fea547ad2a424fd184565fa29bfc1d 100644
--- a/LArCalorimeter/LArRecConditions/src/LArHVData.cxx
+++ b/LArCalorimeter/LArRecConditions/src/LArHVData.cxx
@@ -3,28 +3,15 @@
 */
 
 #include "LArRecConditions/LArHVData.h"
-#include "GaudiKernel/StatusCode.h"
 #include "Identifier/Identifier.h"
-#include "Identifier/HWIdentifier.h"
 
-StatusCode LArHVData::getHV(const Identifier& id, std::vector< HV_t > & v  ) const {
-
-   v.clear();
-   if(m_voltage.find(id) != m_voltage.end()) { // fill output
-         for(auto iptr : m_voltage.at(id)) v.push_back(iptr);
-         return StatusCode::SUCCESS;
-   } else { // do not have such data ?
-         return StatusCode::FAILURE;
-   }
+const std::vector<LArHVData::HV_t> & LArHVData::getHV(const Identifier& id) const {
+  const auto& it=m_voltage.find(id);
+  if (it==m_voltage.end()) 
+    return m_empty; //return empty vector
+  else {
+    return it->second;
+  }
 }
+  
 
-StatusCode LArHVData::getCurrent(const Identifier& id, std::vector< CURRENT_t > & v  ) const {
-
-   v.clear();
-   if(m_current.find(id) != m_current.end()) { // fill output
-         for(auto iptr : m_current.at(id)) v.push_back(iptr);
-         return StatusCode::SUCCESS;
-   } else { // do not have such data ?
-         return StatusCode::FAILURE;
-   }
-}
diff --git a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
index a1248a5d944d159c0524d2f1657bdd84da6cc96e..f9364d83ef6dc4812d9c3ee4044f9a6b594ef89c 100755
--- a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
+++ b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.cxx
@@ -356,7 +356,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                                      , const float* rValues) const
 {
   LArHVData::hvMap &hvmap = hvdata->m_voltage;
-  LArHVData::currMap &currmap = hvdata->m_current;
   std::set<Identifier> &updatedCells = hvdata->m_updatedCells;
 
   const CaloDetDescrManager* calodetdescrmgr = nullptr;
@@ -368,14 +367,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
 
   updatedCells.clear();
   hvmap.clear();
-  currmap.clear();
 
   std::vector<LArHVData::HV_t> v;
-  std::vector<LArHVData::CURRENT_t> ihv;
   // loop over all EM Identifiers
   for (auto id: m_larem_id->channel_ids()) {
       v.clear();
-      ihv.clear();
       if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) > 0) { // LAr EMB
          unsigned int index = (unsigned int)(m_larem_id->channel_hash(id));
          bool hasPathology=false; 
@@ -391,7 +387,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
          unsigned int nelec = cell->getNumElectrodes();
          unsigned int ngap = 2*nelec;
          double wt = 1./ngap;
-         v.clear(); ihv.clear();
+         v.clear();
          for (unsigned int i=0;i<nelec;i++) {
              const EMBHVElectrode& electrode = cell->getElectrode(i);
              //   " " << electrode->getModule()->getEtaIndex() << " " << electrode->getModule()->getPhiIndex() << 
@@ -405,8 +401,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                  // Do not bomb, but assume the HV=0
                  double hv=0;
                  double curr=0;
-                 addHV(v,hv,wt);
-                 addCurr(ihv,curr,wt);
+                 addHV(v,hv,curr,wt);
 	       } else {
                  unsigned idx = itrLine - hvlineidx.begin(); 
                  double hv=voltage[idx];
@@ -441,13 +436,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                     }
                     msg(MSG::VERBOSE) << "set hv: "<<hv<<endmsg;
                  }
-                 addHV(v,hv,wt);
-                 addCurr(ihv,curr,wt);
+                 addHV(v,hv,curr,wt);
                } 
              }
          }        
          hvmap.insert(std::make_pair(id,v));
-         currmap.insert(std::make_pair(id,ihv));
       } else if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) == 0) { // EMBPS
 
          const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id));
@@ -465,8 +458,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
 	     //return StatusCode::FAILURE;
              double hv=0;
              double curr=0;
-	     addHV(v,hv,wt);
-	     addCurr(ihv,curr,wt);
+	     addHV(v,hv,curr,wt);
 	   } else {
 	     unsigned idx = itrLine - hvlineidx.begin();
 	     double hv=voltage[idx];
@@ -483,8 +475,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                 if(curr > 0.) curr *= uAkOhm * rValues[ridx]; else curr = 0;
                 ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]);
              }
-	     addHV(v,hv,wt);
-	     addCurr(ihv,curr,wt);
+	     addHV(v,hv,curr,wt);
            }
          }
 
@@ -514,8 +505,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                    //return StatusCode::FAILURE;
                    double hv=0;
                    double curr=0;
-                   addHV(v,hv,wt);
-                   addCurr(ihv,curr,wt);
+                   addHV(v,hv,curr,wt);
                  } else {
                    unsigned idx = itrLine - hvlineidx.begin(); 
                    double hv=voltage[idx];
@@ -548,8 +538,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                          }
                       }
                    }
-                   addHV(v,hv,wt);
-                   addCurr(ihv,curr,wt);
+                   addHV(v,hv,curr,wt);
                  }
              }
          }
@@ -571,26 +560,24 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                 //return StatusCode::FAILURE;
                double hv=0;
                double curr=0;
-               addHV(v,hv,wt);
-               addCurr(ihv,curr,wt);
+               addHV(v,hv,curr,wt);
              } else {
                unsigned idx = itrLine - hvlineidx.begin(); 
                double hv=voltage[idx];
                double curr=current[idx];
-                   if(rValues) { // modify the current record
-                      unsigned ridx = m_electrodeID->electrodeHash(m_electrodeID->ElectrodeId(3,
-                                                                        hvmodule.getSideIndex(),
-                                                                        hvCabling->getCellModule(id),
-                                                                        0, // not used in EMECPS
-                                                                        0,
-                                                                        igap,
-                                                                        0 // not used in EMECPS
-                                                                    ));
-                      if(curr >0.) curr *= uAkOhm * rValues[ridx]; else curr=0.;
-                      ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]);
-                   }
-               addHV(v,hv,wt);
-               addCurr(ihv,curr,wt);
+	       if(rValues) { // modify the current record
+		 unsigned ridx = m_electrodeID->electrodeHash(m_electrodeID->ElectrodeId(3,
+											 hvmodule.getSideIndex(),
+											 hvCabling->getCellModule(id),
+											 0, // not used in EMECPS
+											 0,
+											 igap,
+											 0 // not used in EMECPS
+											 ));
+		 if(curr >0.) curr *= uAkOhm * rValues[ridx]; else curr=0.;
+		 ATH_MSG_VERBOSE("channel. "<<std::hex<<id.get_identifier32()<<std::dec <<" hvline: "<<idx<<" curr. " << curr << " R: "<<rValues[ridx]);
+	       }
+	       addHV(v,hv,curr,wt);
              }
          }
 
@@ -600,12 +587,11 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
       }
 
       hvmap.emplace(id,v);
-      currmap.emplace(id,ihv);
       if(!hvdataOld) { // all cells are updated
          updatedCells.emplace(id);
       } else { // check if it was changed
-         std::vector< LArHVData::HV_t > oldv;
-         ATH_CHECK(hvdataOld->getHV(id, oldv));
+	std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id);
+	if (oldv.size()==0) return StatusCode::FAILURE;
          if(v.size() == oldv.size()) {
             unsigned int found=0;
             for(unsigned int i=0;i<v.size();++i) {
@@ -626,7 +612,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
   // LAr HEC
   for( auto id: m_larhec_id->channel_ids()) {
     v.clear();
-    ihv.clear();
     unsigned int index = (unsigned int)(m_larhec_id->channel_hash(id));
     bool hasPathology=false;
     if (index<hasPathologyHEC.size()) {
@@ -649,8 +634,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
            //return StatusCode::FAILURE;
            double hv=0;
            double curr=0;
-           addHV(v,hv,wt);
-           addCurr(ihv,curr,wt);
+           addHV(v,hv,curr,wt);
         } else {
            unsigned idx = itrLine - hvlineidx.begin(); 
            double hv=voltage[idx];
@@ -685,17 +669,15 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
               }
            }
  
-           addHV(v,hv,wt);
-           addCurr(ihv,curr,wt);
+           addHV(v,hv,curr,wt);
         }
     }
     hvmap.emplace(id,v);
-    currmap.emplace(id,ihv);
     if(!hvdataOld) { // all cells are updated
        updatedCells.emplace(id);
     } else { // check if it was changed
-       std::vector< LArHVData::HV_t > oldv;
-       ATH_CHECK(hvdataOld->getHV(id, oldv));
+      std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id);
+      if (oldv.size()==0) return StatusCode::FAILURE;
        if(v.size() == oldv.size()) {
           unsigned int found=0;
           for(unsigned int i=0;i<v.size();++i) {
@@ -715,7 +697,6 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
    } // loop over FCAL
    for(auto id: m_larfcal_id->channel_ids()) { // LAr FCAL
       v.clear();
-      ihv.clear();
       unsigned int index = (unsigned int)(m_larfcal_id->channel_hash(id));
       bool hasPathology=false;
       if (index<hasPathologyFCAL.size()) {
@@ -745,8 +726,7 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
            //return StatusCode::FAILURE;
            double hv=0;
            double curr=0;
-           addHV(v,hv,wt);
-           addCurr(ihv,curr,wt);
+           addHV(v,hv,curr,wt);
           } else {
            unsigned idx = itrLine - hvlineidx.begin(); 
            double hv=voltage[idx];
@@ -780,18 +760,16 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
                  }
               }
            }
-           addHV(v,hv,wt);
-           addCurr(ihv,curr,wt);
+           addHV(v,hv,curr,wt);
           }
         }
       }
       hvmap.emplace(id,v);
-      currmap.emplace(id,ihv);
       if(!hvdataOld) { // all cells are updated
          updatedCells.emplace(id);
       } else { // check if it was changed
-         std::vector< LArHVData::HV_t > oldv;
-         ATH_CHECK(hvdataOld->getHV(id, oldv));
+	std::vector< LArHVData::HV_t > oldv=hvdataOld->getHV(id);
+	if (oldv.size()==0) return StatusCode::FAILURE;
          if(v.size() == oldv.size()) {
             unsigned int found=0;
             for(unsigned int i=0;i<v.size();++i) {
@@ -813,41 +791,21 @@ StatusCode LArHVCondAlg::fillPayload(LArHVData* hvdata
   return StatusCode::SUCCESS; 
 }
 
-void LArHVCondAlg::addHV(std::vector< LArHVData::HV_t > & v , double hv, double wt) const
+void LArHVCondAlg::addHV(std::vector< LArHVData::HV_t > & v , double hv, double curr, double wt) const
 {
          bool found=false;
          for (unsigned int i=0;i<v.size();i++) {
-            if (std::fabs(hv-v[i].hv) < 0.1) {
+	   if (std::fabs(hv-v[i].hv) < 0.1 && std::fabs (curr-v[i].current)<0.1) {
                found=true;  
                v[i].weight += wt;
                break;
              }
          }
          if (!found) {
-           LArHVData::HV_t hh;
-           hh.hv = hv;
-           hh.weight = wt;
-           v.push_back(hh);
+	   v.emplace_back(hv,curr,wt);
          }     // not already in the list
 }
 
-void LArHVCondAlg::addCurr(std::vector< LArHVData::CURRENT_t > & ihv , double current, double wt) const
-{
-         bool found=false;
-         for (unsigned int i=0;i<ihv.size();i++) {
-            if (std::fabs(current-ihv[i].current) < 0.1) {
-               found=true;  
-               ihv[i].weight += wt;
-               break;
-             }
-         }
-         if (!found) {
-           LArHVData::CURRENT_t ii;
-           ii.current = current;
-           ii.weight = wt;
-           ihv.push_back(ii);
-         }     // not already in the list
-}
 
 std::vector<unsigned int> LArHVCondAlg::getElecList(const Identifier& id, const LArHVPathology& pathologyContainer) const
 {
diff --git a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h
index f289427ddb5dec2d4aa37433cd8d2b07957a43c4..3a9f5b47462806ff902c4ae54c00c03f30968ec9 100755
--- a/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h
+++ b/LArCalorimeter/LArRecUtils/src/LArHVCondAlg.h
@@ -110,8 +110,8 @@ class LArHVCondAlg: public AthReentrantAlgorithm
 			 , pathVec& hasPathologyFCAL
                          , const float* rValues) const;
 
-  void addHV(std::vector< LArHVData::HV_t > & v, double hv, double wt) const;
-  void addCurr(std::vector< LArHVData::CURRENT_t > & ihv, double curr, double wt) const;
+  void addHV(std::vector< LArHVData::HV_t > & v, double hv, double curr, double wt) const;
+
   std::vector<unsigned int> getElecList(const Identifier& id, const LArHVPathology& pathologies) const;
   StatusCode fillUpdatedHVChannelsVec(std::vector<float> &voltage, std::vector<float> &current, std::vector<unsigned int> &hvlineidx, std::vector<const CondAttrListCollection* > fldvec) const;
 
diff --git a/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx b/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx
index d3971fe10491b7289855ee405dda86727d739023..86c679a8991bd6d0a0967bc23dcf5a34d15602d8 100644
--- a/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx
+++ b/LArCalorimeter/LArRecUtils/src/LArHVScaleCorrCondAlg.cxx
@@ -312,10 +312,9 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges,
       T = T - m_T0;
 
       const double E_nominal = champ_e(nominal,d);
-      std::vector<LArHVData::HV_t> hvlist;
-      StatusCode sc = hvdata->getHV(offid,hvlist);
+      const std::vector<LArHVData::HV_t>& hvlist=hvdata->getHV(offid);
 
-      if (sc.isFailure() || hvlist.size()==0) {
+      if (hvlist.size() == 0) {
 	mycorr=1.;
 	mynorm=1.;
 	ATH_MSG_WARNING( " HV value no found for cell " << m_larem_id->show_to_string(offid) );
@@ -333,15 +332,6 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges,
 	if (notfound) {
 	  ATH_MSG_WARNING( " At least one HV value not found in database for cell " << m_larem_id->show_to_string(offid) );
 	}
-        std::vector<LArHVData::CURRENT_t> currlist;
-        if(m_useCurrentEMB || m_useCurrentFCAL1 || m_useCurrentOthers) {
-             sc = hvdata->getCurrent(offid,currlist);
-             if (sc.isFailure() || currlist.size() != hvlist.size()) {
-	        ATH_MSG_WARNING( " Current values not the same size as hv for cell " << m_larem_id->show_to_string(offid) << " resetting to 0" );
-                currlist.resize(hvlist.size(),LArHVData::CURRENT_t{0,0});
-             }
-
-        }
 
 	mycorr=0.;
 	mynorm=0.;
@@ -350,20 +340,20 @@ StatusCode LArHVScaleCorrCondAlg::getScale(const HASHRANGEVEC& hashranges,
 	  if (isbarrelEM) {
 	    //const double corr = this->Scale_barrel(hvlist[i].hv)*hvlist[i].weight;
 	    //mycorr += corr;
-            if(m_useCurrentEMB) mycorr += this->Scale_barrel(hvlist[i].hv-currlist[i].current)*hvlist[i].weight;
+            if(m_useCurrentEMB) mycorr += this->Scale_barrel(hvlist[i].hv-hvlist[i].current)*hvlist[i].weight;
             else mycorr += this->Scale_barrel(hvlist[i].hv)*hvlist[i].weight;
 	  }
 //FCAL module 1
 	  else if (isFCAL1) {
 	    //const double corr = this->Scale_FCAL1(hvlist[i].hv) * hvlist[i].weight;
 	    //mycorr+=corr;
-            if(m_useCurrentFCAL1) mycorr += this->Scale_FCAL1(hvlist[i].hv-currlist[i].current) * hvlist[i].weight;
+            if(m_useCurrentFCAL1) mycorr += this->Scale_FCAL1(hvlist[i].hv-hvlist[i].current) * hvlist[i].weight;
             else mycorr += this->Scale_FCAL1(hvlist[i].hv) * hvlist[i].weight;
 	  }
 // other subdetectors
 	  else {
 	    double E;
-            if(m_useCurrentOthers) E = champ_e(hvlist[i].hv-currlist[i].current,d);
+            if(m_useCurrentOthers) E = champ_e(hvlist[i].hv-hvlist[i].current,d);
             else E = champ_e(hvlist[i].hv,d);
 
 	    // dont correct if E is very close to E nominal to avoid small glitches