diff --git a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
index cf5403716c80dbb73acdf801c30c34a59f24f6bf..9fb61bddfd36a96a2b981f284255d4a6401e0a9a 100644
--- a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.cxx
@@ -87,19 +87,25 @@ StatusCode electronSuperClusterBuilder::execute(){
 
     // Seed selections
     const xAOD::CaloCluster* clus= egRec->caloCluster();
-    double emFrac(0);
-    if (!clus->retrieveMoment(xAOD::CaloCluster::ENG_FRAC_EM,emFrac)){
-      ATH_MSG_WARNING("NO ENG_FRAC_EM moment available" );
+    //The seed should have 2nd sampling   
+    if (!clus->hasSampling(CaloSampling::EMB2) && !clus->hasSampling(CaloSampling::EME2)){
+      continue;
     }
+    const double eta2 = fabs(clus->etaBE(2));
+    if(eta2>10){
+      continue;
+    }  
+    //Accordeon Energy samplings 1 to 3
+    const double EMAccEnergy= clus->energyBE(1)+clus->energyBE(2)+clus->energyBE(3);
+    const double EMAccEt = EMAccEnergy/cosh(eta2);
     //Require minimum energy for supercluster seeding.
-    if (clus->et()*emFrac < m_EtThresholdCut){
+    if (EMAccEt < m_EtThresholdCut){
       continue;
     }
     //We need tracks
     if (egRec->getNumberOfTrackParticles()==0) {
       continue;
     }
-
     //with silicon
     if (xAOD::EgammaHelpers::numberOfSiHits(egRec->trackParticle(0)) < m_numberOfSiHits){
       continue;
@@ -119,8 +125,9 @@ StatusCode electronSuperClusterBuilder::execute(){
     
     ATH_MSG_DEBUG("Creating supercluster egammaRec electron using cluster Et = " 
                   << egRec->caloCluster()->et() << " eta " << egRec->caloCluster()->eta() 
-                  << " phi "<< egRec->caloCluster()->phi()  << " EMFraction " << emFrac << " EM Et " 
-                  << egRec->caloCluster()->et()*emFrac << " pixel hits " << static_cast<unsigned int> (trkPixelHits));    
+                  << " phi "<< egRec->caloCluster()->phi()  << 
+                  " EM Accordeon Et " << EMAccEt
+                  <<" pixel hits " << static_cast<unsigned int> (trkPixelHits));    
     //Mark seed as used
     isUsed.at(i)=true;     
 
@@ -133,7 +140,7 @@ StatusCode electronSuperClusterBuilder::execute(){
     ATH_MSG_DEBUG("Find secondary clusters");
     const std::vector<std::size_t> secondaryIndices = searchForSecondaryClusters(i, 
                                                                                  egammaRecs.cptr(), 
-                                                                                 emFrac,
+                                                                                 EMAccEnergy,
                                                                                  isUsed);
     for(const auto& secIndex : secondaryIndices){
       const auto secRec = egammaRecs->at(secIndex);
@@ -169,14 +176,13 @@ StatusCode electronSuperClusterBuilder::execute(){
   if (m_doTrackMatching){
     ATH_CHECK(m_trackMatchBuilder->executeRec(Gaudi::Hive::currentContext(),newEgammaRecs.ptr()));
   }
-
   return StatusCode::SUCCESS;
 }
 
 const std::vector<std::size_t> 
 electronSuperClusterBuilder::searchForSecondaryClusters(const std::size_t electronIndex,
                                                         const EgammaRecContainer* egammaRecs,
-                                                        const double emFrac,
+                                                        const double EMEnergy,
                                                         std::vector<bool>& isUsed){
   std::vector<std::size_t>  secondaryClusters;
   if (!egammaRecs) {
@@ -188,7 +194,7 @@ electronSuperClusterBuilder::searchForSecondaryClusters(const std::size_t electr
 
   const xAOD::TrackParticle* seedTrackParticle =seedEgammaRec->trackParticle();
   float qoverp = seedTrackParticle->qOverP();
-  float seedEOverP = seedEgammaRec->caloCluster()->e() * emFrac * fabs(qoverp);
+  float seedEOverP = EMEnergy * fabs(qoverp);
   static const SG::AuxElement::Accessor<float> pgExtrapEta ("perigeeExtrapEta");
   static const SG::AuxElement::Accessor<float> pgExtrapPhi ("perigeeExtrapPhi");
   
diff --git a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.h b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.h
index f805ccecaa0cffe3ca1b1c903f93d71666357f38..75e84a630e5119c07aba8ac197941d1503c85cbe 100644
--- a/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.h
+++ b/Reconstruction/egamma/egammaAlgs/src/electronSuperClusterBuilder.h
@@ -35,7 +35,7 @@ class electronSuperClusterBuilder : public egammaSuperClusterBuilder {
 
   const std::vector<std::size_t> searchForSecondaryClusters(const size_t i,
                                                             const EgammaRecContainer*,
-                                                            const double emFrac,
+                                                            const double EMEnergy,
                                                             std::vector<bool>& isUsed);
   
   bool passesSimpleBremSearch(const xAOD::CaloCluster& sec,
@@ -56,15 +56,17 @@ class electronSuperClusterBuilder : public egammaSuperClusterBuilder {
   
   float m_maxDelEta;
   float m_maxDelPhi;
+  /** @brief Use Brem search when the seed E/P is less than thi value */ 
+  Gaudi::Property<float> m_secEOverPCut {this,
+      "BremSearchEOverPCut",  1.5,
+      "Maximum E/P seed requirement for doing brem search"};
   
+  /** @brief Delta Eta for matching a cluster to the extrapolated position of the a possible brem photon */ 
   Gaudi::Property<float> m_bremExtrapMatchDelEta {this,
       "BremExtrapDelEtaCut",  0.05,
       "maximum DelEta for brem search"};
 
-  Gaudi::Property<float> m_secEOverPCut {this,
-      "BremSearchEOverPCut",  1.5,
-      "Maximum E/P seed requirement for doing brem search"};
- 
+  /** @brief Delta Phi for matching a cluster to the extrapolated position of the a possible brem photon */ 
   Gaudi::Property<float> m_bremExtrapMatchDelPhi {this,
       "BremExtrapDelPhiCut", 0.075,
       "maximum DelPhi for brem search"};
diff --git a/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
index 8a043fde81457dae607acb698f25fa79aec20ba7..8061efc09febc466bb9e3026ed68f7550b220f94 100644
--- a/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/photonSuperClusterBuilder.cxx
@@ -87,30 +87,35 @@ StatusCode photonSuperClusterBuilder::execute(){
     //in case we fail to make a supercluser.
     std::vector<bool> isUsedRevert(isUsed);
     const auto egRec=egammaRecs->at(i);
-    const auto egClus = egRec->caloCluster();
+    const auto clus = egRec->caloCluster();
     //First some basic seed cuts
     if(isUsed.at(i)){
       continue;      
     }
-    double emFrac(0.);
-    if (!egClus->retrieveMoment(xAOD::CaloCluster::ENG_FRAC_EM,emFrac)){
-      ATH_MSG_WARNING("NO ENG_FRAC_EM moment available" );
+    //The seed should have 2nd sampling   
+    if (!clus->hasSampling(CaloSampling::EMB2) && !clus->hasSampling(CaloSampling::EME2)){
+      continue;
     }
-
+    const double eta2 = fabs(clus->etaBE(2));
+    if(eta2>10){
+      continue;
+    }  
+    //Accordeon Energy samplings 1 to 3
+    const double EMAccEnergy= clus->energyBE(1)+clus->energyBE(2)+clus->energyBE(3);
+    const double EMAccEt = EMAccEnergy/cosh(eta2);
     //Require minimum energy for supercluster seeding.
-    if (egClus->et()*emFrac < m_EtThresholdCut){
+    if (EMAccEt < m_EtThresholdCut){
       continue;
     }
- 
     //Passed preliminary custs
     ATH_MSG_DEBUG("Creating supercluster egammaRec photon object "<< 'n' 
-                  << "Using cluster Et = " << egClus->et()  << " EMFraction " 
-                  << emFrac << " EM Et " << egClus->et()*emFrac);
+                  << "Using cluster Et = " << clus->et()  
+                  << " EM Accordeon Et " << EMAccEt);
     //So it is used
     isUsed.at(i)=1;     
     //Start accumulating
     std::vector<const xAOD::CaloCluster*>  accumulatedClusters;
-    accumulatedClusters.push_back(egClus);
+    accumulatedClusters.push_back(clus);
 
     //Core Logic goes here
     ATH_MSG_DEBUG("Find secondary clusters");
diff --git a/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.cxx b/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.cxx
index 82c11a2d5d5745839df427a0f73e962f54f698ce..5d34d39b84045cd66b29f89cacc794f5f2266560 100644
--- a/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.cxx
+++ b/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.cxx
@@ -1,11 +1,10 @@
 /*
   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
-
 #include "egammaCaloClusterSelector.h"
 #include "xAODCaloEvent/CaloCluster.h"
 #include "CaloUtils/CaloCellList.h"
-#include <memory>
+
 egammaCaloClusterSelector::egammaCaloClusterSelector(const std::string& type, 
                                                      const std::string& name, 
                                                      const IInterface* parent) :
@@ -49,12 +48,6 @@ StatusCode egammaCaloClusterSelector::initialize()
     return StatusCode::FAILURE;
   }
 
-  if (m_lateralCuts.size() != 0 && m_lateralCuts.size() != numBins) {
-    ATH_MSG_FATAL("The size of LateralCuts, now " <<  m_lateralCuts.size() 
-		  << ", must be zero or the number of Et bins: " <<  numBins);
-    return StatusCode::FAILURE;
-  }
-
   if (m_RetaCuts.size() != 0 && m_RetaCuts.size() != numBins) {
     ATH_MSG_FATAL("The size of RetaCuts, now " <<  m_RetaCuts.size() 
 		  << ", must be zero or the number of Et bins: " <<  numBins);
@@ -65,8 +58,6 @@ StatusCode egammaCaloClusterSelector::initialize()
 		  << ", must be zero or the number of Et bins: " <<  numBins);
     return StatusCode::FAILURE;
   }
-
-
   return StatusCode::SUCCESS;
 }
 
@@ -75,66 +66,57 @@ StatusCode egammaCaloClusterSelector::finalize()
   return StatusCode::SUCCESS;
 }
 
-// ======================================================================
 bool egammaCaloClusterSelector::passSelection(const xAOD::CaloCluster* cluster) const
 {
-  // switch to using cluster properties, not layer 2 properties
+  /* Minimum Cluster energy*/
   if ( cluster->et() < m_ClusterEtCut ){
     ATH_MSG_DEBUG("Cluster failed Energy Cut: dont make ROI");
     return false;
   }
-  /* 
-   * If lower than the minimum one requested via the ranges
-   * return false.
-   * Only then run the  egammaCheckEnergyDepositTool or any other step.
-   */ 
-  static const  SG::AuxElement::ConstAccessor<float> acc("EMFraction");
-  double emFrac(0.);
-  if (acc.isAvailable(*cluster)) {
-    emFrac = acc(*cluster);
-  } else if (!cluster->retrieveMoment(xAOD::CaloCluster::ENG_FRAC_EM,emFrac)){
-    throw std::runtime_error("No EM fraction momement stored");
-  }
-  const double EMEt = cluster->et()*emFrac;
-  const double bin = findETBin(EMEt);
-  const double eta2   = fabs(cluster->etaBE(2));   
-
-  if (!m_EMEtRanges.empty() && bin<0){
-    ATH_MSG_DEBUG("Cluster EM Energy is lower than the lowest cut in EMEtRanges  dont make ROI");
-    return false;
-  }  
 
-  //Check energy deposit if requested
+  /*Check energy deposit if requested*/
   if( !m_egammaCheckEnergyDepositTool.empty() && 
       !m_egammaCheckEnergyDepositTool->checkFractioninSamplingCluster( cluster ) ) {
     ATH_MSG_DEBUG("Cluster failed sample check: dont make ROI");
     return false;
   }
   /*
-   * All other cuts are binned. 
-   * Pass if no binning is defined.
+   * All e/gamma cuts assume/need binning in Et. 
+   * Pass if no such binning is defined.
    */  
   if (m_EMEtRanges.empty()) {
-    // no ET bins defined, so pass
     return true;
   }
+  /*
+   * We need to have second sampling present.
+   * And calculate the EM energy and EM Et. 
+   */
+  if (!cluster->hasSampling(CaloSampling::EMB2) && !cluster->hasSampling(CaloSampling::EME2)){
+      return false;
+  }
+  const double eta2 = fabs(cluster->etaBE(2));
+  if(eta2>10){
+    return false;
+  }  
+  const double EMEnergy= cluster->energyBE(0)+cluster->energyBE(1)+cluster->energyBE(2)+cluster->energyBE(3);
+  const double EMEt = EMEnergy/cosh(eta2);
+  const double bin = findETBin(EMEt);
+  /* Check for the minimum EM Et required this should be the 0th entry in EMEtRanges*/
+  if (bin<0){
+    ATH_MSG_DEBUG("Cluster EM Et is lower than the lowest cut in EMEtRanges dont make ROI");
+    return false;
+  }
 
+  double emFrac(0);
+  if (!cluster->retrieveMoment(xAOD::CaloCluster::ENG_FRAC_EM,emFrac)){
+    throw std::runtime_error("No EM fraction momement stored");
+  }
+  /* EM fraction cut*/
   if ( m_EMFCuts.size() != 0 && emFrac < m_EMFCuts[bin] ){
     ATH_MSG_DEBUG("Cluster failed EM Fraction cut: don't make ROI");
     return false;
   }
-
-  if (m_lateralCuts.size() != 0) {
-    double lateral(0.);
-    if (!cluster->retrieveMoment(xAOD::CaloCluster::LATERAL, lateral)){
-      throw std::runtime_error("No LATERAL momement stored");
-    }
-    if ( lateral >  m_lateralCuts[bin] ){
-      ATH_MSG_DEBUG("Cluster failed LATERAL cut: dont make ROI");
-      return false;
-    }
-  }
-
+  /* Reta and Rhad cuts*/
   if (m_doReta||m_doHadLeak) {
     // retrieve the cell containers
     SG::ReadHandle<CaloCellContainer> cellcoll(m_cellsKey);
@@ -165,10 +147,10 @@ bool egammaCaloClusterSelector::passSelection(const xAOD::CaloCluster* cluster)
         ATH_MSG_WARNING("call to Iso returns failure for execute");
         return false;
       }
-      const float ethad1 = info.ethad1;
-      const float ethad  = info.ethad;
-      const float raphad1 =EMEt > 0. ? ethad1/EMEt : 0.;
-      const float raphad = EMEt > 0. ? ethad/EMEt : 0.;
+      const double ethad1 = info.ethad1;
+      const double ethad  = info.ethad;
+      const double raphad1 =EMEt != 0. ? ethad1/EMEt : 0.;
+      const double raphad = EMEt != 0. ? ethad/EMEt : 0.;
       if (eta2 >= 0.8 && eta2 < 1.37){
         if (raphad>m_HadLeakCuts[bin]){
           ATH_MSG_DEBUG("Cluster failed Hadronic Leakage test: dont make ROI");
@@ -192,5 +174,4 @@ int egammaCaloClusterSelector::findETBin(double EMEt) const
     newBin++;
   }
   return newBin - 1;
-}
-     
+}    
diff --git a/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.h b/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.h
index c6a1d1733f87f3dcff01e862be9e4be2297fc4cd..d8d2ccca27dcb4e9bc5305f8973f34eb3c509472 100644
--- a/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.h
+++ b/Reconstruction/egamma/egammaCaloTools/src/egammaCaloClusterSelector.h
@@ -41,9 +41,6 @@ private:
       "CellContainerName", "AllCalo", 
       "Names of containers which contain cells"};
 
-  //
-  // The tools
-  //
   /** @brief Pointer to the egammaCheckEnergyDepositTool*/
   ToolHandle<IegammaCheckEnergyDepositTool> m_egammaCheckEnergyDepositTool {this, 
       "egammaCheckEnergyDepositTool", "",
@@ -63,17 +60,13 @@ private:
 
   Gaudi::Property<std::vector<double> > m_EMEtRanges {this,
       "EMEtRanges", {}, 
-      "EM Et Ranges to consider, with different cuts; Low limit of ranges given"};
+      "EM Et Ranges to consider, with different cuts; Minimal EM Et cut will be the value of the 0th bin"};
 
   /// For the cuts below, the size must be 0 (meaning not applied)
   /// or equal to the number of Et ranges.
   Gaudi::Property<std::vector<double> >  m_EMFCuts {this,
       "EMFCuts", {}, "Cut on cluster EM fraction, per EM Et bin"};
 
-  Gaudi::Property<std::vector<double> >  m_lateralCuts {this,
-      "LateralCuts", {},
-      "Cut on cluster LATERAL, i.e., the second transverse moment normalized, per EM Et bin"};
-
   Gaudi::Property<std::vector<double> >  m_RetaCuts {this,
       "RetaCut", {}, "Cut on cluster Reta"};
 
@@ -83,9 +76,6 @@ private:
   // these variables are set at initialize based on the configuration
   bool m_doReta{false}; 
   bool m_doHadLeak{false};
-
-
-
 };
 
 #endif // RECONSTRUCTION/EGAMMA/EGAMMACALOTOOLS_EGAMMACALOCLUSTERSELECTOR_H