diff --git a/Reconstruction/eflowRec/eflowRec/PFCellEOverPTool.h b/Reconstruction/eflowRec/eflowRec/PFCellEOverPTool.h
index d378cbdd09b5bc36b02478b634ca8ec1cc04adc2..97a47d5cd1c8676a4798c19070835196800ebb21 100644
--- a/Reconstruction/eflowRec/eflowRec/PFCellEOverPTool.h
+++ b/Reconstruction/eflowRec/eflowRec/PFCellEOverPTool.h
@@ -26,22 +26,12 @@ class PFCellEOverPTool : public IEFlowCellEOverPTool {
 
  private:
 
-  std::vector<double>  m_eBinValues;
-  std::vector<double> m_etaBinBounds;
-  std::vector<std::string> m_eBinLabels;
-  std::vector<std::string> m_etaBinLabels;
-
-  static std::string_view eBinsToString(const E_BINS& e_bins) ;
-  static std::string_view etaBinsToString(const ETA_BINS& eta_bins) ;
-
-  const std::array<E_BINS,6>   m_e_bins{E001bin,E003point5bin,E010bin,E020bin,E032point5bin,E040bin};
-  const std::array<ETA_BINS,4> m_eta_bins{eta050bin,eta100bin,eta150bin,eta250bin};
-  const std::array<eflowFirstIntRegions::J1STLAYER,8> m_firstInt_bins{eflowFirstIntRegions::EMB1,eflowFirstIntRegions::EMB2,eflowFirstIntRegions::EMB3,eflowFirstIntRegions::EME1,eflowFirstIntRegions::EME2,
-  eflowFirstIntRegions::EME3,eflowFirstIntRegions::HEC,eflowFirstIntRegions::Tile};
-  const std::array<eflowCalo::LAYER,13> m_layerBins{eflowCalo::EMB1,eflowCalo::EMB2,eflowCalo::EMB3,eflowCalo::EME1,eflowCalo::EME2,eflowCalo::EME3,eflowCalo::HEC1,eflowCalo::HEC2,eflowCalo::HEC3
-  ,eflowCalo::HEC4,eflowCalo::Tile1,eflowCalo::Tile2,eflowCalo::Tile3};
+  std::vector<double>  m_energyBinLowerBoundaries;
+  std::vector<double> m_etaBinLowerBoundaries;
+  std::vector<int> m_firstIntBinLowerBoundaries;
+  std::vector<int> m_caloLayerBins;
 
   /** Location for e/p and cell ordering reference files */
-  Gaudi::Property<std::string> m_referenceFileLocation{this,"referenceFileLocation","/eos/user/m/mhodgkin/EoverP_Results/Run3_mc21_rel22/","Location for e/p and cell ordering reference files"};
+  Gaudi::Property<std::string> m_referenceFileLocation{this,"referenceFileLocation","/home/markhodgkinson.linux/Releases/RLatest_eOvperP/athena/EOverPTools/EoverpNtupleAnalysis/ResultsDir/","Location for e/p and cell ordering reference files"};
 };
 #endif
diff --git a/Reconstruction/eflowRec/src/PFCellEOverPTool.cxx b/Reconstruction/eflowRec/src/PFCellEOverPTool.cxx
index 3a57599bdf7b593980874e05a05a0516befdb80d..a1b035cbb7adce0fd3840ce11d38e0aea3e8a8fa 100644
--- a/Reconstruction/eflowRec/src/PFCellEOverPTool.cxx
+++ b/Reconstruction/eflowRec/src/PFCellEOverPTool.cxx
@@ -23,97 +23,74 @@ PFCellEOverPTool::PFCellEOverPTool(const std::string& type,
 
   declareInterface<IEFlowCellEOverPTool>(this);
 
-  m_eBinValues.push_back(  1.0*Gaudi::Units::GeV );
-  m_eBinValues.push_back( 3.5*Gaudi::Units::GeV );
-  m_eBinValues.push_back( 10.0*Gaudi::Units::GeV );
-  m_eBinValues.push_back( 25.0*Gaudi::Units::GeV );
-  m_eBinValues.push_back( 32.5*Gaudi::Units::GeV );
-  m_eBinValues.push_back( 40.0*Gaudi::Units::GeV );
-
-  for (double x = 0.0; x < 2.0; x+=0.5) {
-    m_etaBinBounds.push_back(x);
-  }
-  m_etaBinBounds.push_back(2.5);
 }
 
 StatusCode PFCellEOverPTool::initialize(){
 
-  return StatusCode::SUCCESS;
-}
-
-
-std::string_view PFCellEOverPTool::eBinsToString(const E_BINS& e_bins){
+  std::ifstream binBoundariesFile(m_referenceFileLocation+"EOverPBinBoundaries.json");
+  nlohmann::json json_binBoundaries;
+  binBoundariesFile >> json_binBoundaries;
 
-  switch(e_bins){
-    case E001bin : return "E001bin";
-    case E003point5bin: return "E003point5bin";
-    case E010bin: return "E010bin";
-    case E020bin: return "E020bin";
-    case E032point5bin: return "E032point5bin";
-    case E040bin: return "E040bin";
-    default: throw std::invalid_argument("Please choose a valid E_BINS value");
-  }
-}
+  auto fillBinBoundaries = [](auto && binBoundaries, const nlohmann::json &json_binBoundaries, const std::string &binName){
+    if (json_binBoundaries.find(binName) != json_binBoundaries.end()){
+      for (auto binBoundary : json_binBoundaries[binName]) binBoundaries.push_back(binBoundary);
+    }
+    else std::cout << "Did not find binName:" << binName << std::endl;
+  };
 
-std::string_view PFCellEOverPTool::etaBinsToString(const ETA_BINS& eta_bins) {
+  fillBinBoundaries(m_energyBinLowerBoundaries, json_binBoundaries, "energyBinBoundaries");
+  fillBinBoundaries(m_etaBinLowerBoundaries, json_binBoundaries, "etaBinBoundaries");
+  fillBinBoundaries(m_firstIntBinLowerBoundaries, json_binBoundaries, "firstIntBinBoundaries");
+  fillBinBoundaries(m_caloLayerBins, json_binBoundaries, "caloLayerBinBoundaries");
 
-  switch(eta_bins){
-    case eta050bin : return "eta050bin";
-    case eta100bin : return "eta100bin";
-    case eta150bin : return "eta150bin";
-    case eta250bin : return "eta250bin";
-    case eta350bin : return "eta350bin";
-    case eta450bin : return "eta450bin";
-    default: throw std::invalid_argument("Please choose a valid ETA_BINS value");
-  }
+  return StatusCode::SUCCESS;
 }
 
-
 StatusCode PFCellEOverPTool::fillBinnedParameters(eflowEEtaBinnedParameters *binnedParameters) const {
 
   if (binnedParameters) {
 
-    binnedParameters->initialise(m_eBinValues, m_etaBinBounds);
+    binnedParameters->initialise(m_energyBinLowerBoundaries, m_etaBinLowerBoundaries);
              
-    std::ifstream inputFile_eoverp(m_referenceFileLocation+"EOverP.json");
+    std::ifstream inputFile_eoverp(m_referenceFileLocation+"EoverP.json");
     nlohmann::json json_eoverp;
     inputFile_eoverp >> json_eoverp;  
 
-    std::ifstream inputFile_cellOrdering(m_referenceFileLocation+"CellOrdering.json");
+    std::ifstream inputFile_cellOrdering(m_referenceFileLocation+"cellOrdering.json");
     nlohmann::json json_cellOrdering;
     inputFile_cellOrdering >> json_cellOrdering;
 
     //Loop over energy, eta and first int bins
     //For each combination we set the e/p mean and width from the json file values
-    for (auto thisEBin : m_e_bins){
-      //convert string_view to string so we can combine with "" later on.
-      std::string currentEBin(eBinsToString(thisEBin));
-      for (auto thisEtaBin : m_eta_bins){
-        //convert string_view to string so we can combine with "" later on.
-        std::string currentEtaBin(etaBinsToString(thisEtaBin));
-        for (auto thisFirstIntRegionBin : m_firstInt_bins){
+    for (auto thisEBin : m_energyBinLowerBoundaries){
+      std::string currentEBin = std::to_string(thisEBin);
+      for (auto thisEtaBin : m_etaBinLowerBoundaries){
+        std::string currentEtaBin = std::to_string(thisEtaBin);
+        for (auto thisFirstIntRegionBin_Int : m_firstIntBinLowerBoundaries){
+          auto thisFirstIntRegionBin = static_cast<eflowFirstIntRegions::J1STLAYER>(thisFirstIntRegionBin_Int);
           std::string currentFirstIntBin = eflowFirstIntRegions::name(thisFirstIntRegionBin);
-          std::string eOverPBin = currentEBin+"_"+currentEtaBin+"_"+currentFirstIntBin;
+          std::string eOverPBin = "energyBinLowerBound_"+currentEBin+"_etaBinLowerBound_"+currentEtaBin+"_firstIntBinLowerBound_"+currentFirstIntBin;
           if (json_eoverp.find(eOverPBin+"_mean") != json_eoverp.end()){
             binnedParameters->setFudgeMean(thisEBin,thisEtaBin,thisFirstIntRegionBin,json_eoverp[eOverPBin+"_mean"]);
           }
           if (json_eoverp.find(eOverPBin+"_sigma") != json_eoverp.end()){
             binnedParameters->setFudgeStdDev(thisEBin,thisEtaBin,thisFirstIntRegionBin,json_eoverp[eOverPBin+"_sigma"]);
           }
-          for (auto thisLayerBin : m_layerBins){
-            std::string currentLayerBin = eflowCalo::name(thisLayerBin);            
-            std::string cellOrderingBin = currentEBin+"_"+currentEtaBin+"_"+currentFirstIntBin+"-"+currentLayerBin;
+          for (auto thisLayerBin : m_caloLayerBins){
+            eflowCalo::LAYER thisLayerBinEnum = static_cast<eflowCalo::LAYER>(thisLayerBin);   
+            std::string currentLayerBin = eflowCalo::name(thisLayerBinEnum);            
+            std::string cellOrderingBin = eOverPBin + "_caloLayer_"+currentLayerBin;
             if (json_cellOrdering.find(cellOrderingBin+"_norm1") != json_cellOrdering.end()){
-              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBin,NORM1,json_cellOrdering[cellOrderingBin+"_norm1"]);
+              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBinEnum,NORM1,json_cellOrdering[cellOrderingBin+"_norm1"]);
             }
             if (json_cellOrdering.find(cellOrderingBin+"_sigma1") != json_cellOrdering.end()){
-              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBin,WIDTH1,json_cellOrdering[cellOrderingBin+"_sigma1"]);
+              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBinEnum,WIDTH1,json_cellOrdering[cellOrderingBin+"_sigma1"]);
             }
             if (json_cellOrdering.find(cellOrderingBin+"_norm2") != json_cellOrdering.end()){
-              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBin,NORM2,json_cellOrdering[cellOrderingBin+"_norm2"]);
+              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBinEnum,NORM2,json_cellOrdering[cellOrderingBin+"_norm2"]);
             }
             if (json_cellOrdering.find(cellOrderingBin+"_sigma2") != json_cellOrdering.end()){
-              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBin,WIDTH2,json_cellOrdering[cellOrderingBin+"_sigma2"]);
+              binnedParameters->setShapeParam(thisEBin,thisEtaBin,thisFirstIntRegionBin,thisLayerBinEnum,WIDTH2,json_cellOrdering[cellOrderingBin+"_sigma2"]);
             }            
           }
         }