diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXFPGA.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXFPGA.h
index d2753e1d767405f4032cac7002391e008f50e3e3..7552b150a0f944d219cb6a0c5de196defee8b7bc 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXFPGA.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXFPGA.h
@@ -24,6 +24,7 @@
 #include "CaloIdentifier/CaloIdManager.h"
 #include "CaloIdentifier/CaloCell_SuperCell_ID.h"
 #include "L1CaloFEXSim/eFEXOutputCollection.h"
+#include <vector>
 
 namespace LVL1 {
   
@@ -55,6 +56,8 @@ namespace LVL1 {
 
     virtual void SetTowersAndCells_SG( int [][6] ) override ;
 
+    virtual void SetIsoWP(std::vector<unsigned int> &, std::vector<unsigned int> &, unsigned int &) override ;
+
     /** Internal data */
   private:
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXegAlgo.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXegAlgo.h
index 88adfe9581cd4cb1e50492c306a6b9ba4b939768..b21a74fc04703a40a0617c3ab9b6b438b6142982 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXegAlgo.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/eFEXegAlgo.h
@@ -46,7 +46,7 @@ namespace LVL1 {
     virtual StatusCode safetyTest() override;
     virtual void setup(int inputTable[3][3]) override; 
 
-    virtual std::vector<unsigned int> getReta() override;
+    virtual void getReta(std::vector<unsigned int> & ) override;
     virtual void getRhad(std::vector<unsigned int> & ) override;
     virtual void getWstot(std::vector<unsigned int> & ) override;
     virtual void getRealPhi(float & phi) override;
@@ -59,7 +59,7 @@ namespace LVL1 {
     virtual void getCoreEMTowerET(unsigned int & et) override;
     virtual void getCoreHADTowerET(unsigned int & et) override;
   private:
-    virtual void setSeed() override;
+    void setSeed();
     bool m_seed_UnD = false; 
     unsigned int m_seedID = 999;
     int m_eFEXegAlgoTowerID[3][3];
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXFPGA.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXFPGA.cxx
index 94e6609d10348be5558781bab26f46309c8c7e7b..69c66efb0c6f68d3a6f392eabbd33710d3575e28 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXFPGA.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXFPGA.cxx
@@ -114,9 +114,28 @@ StatusCode eFEXFPGA::execute(){
       // temporarily(?) removed for debugging
       //if (eFEXFPGA_egAlgo->haveSeed() == false) continue;
       
-      std::vector<unsigned int> RetaND = m_eFEXegAlgoTool->getReta();
-      std::vector<unsigned int> RhadND; m_eFEXegAlgoTool->getRhad(RhadND);
+      // Get Reta and Rhad outputs
+      std::vector<unsigned int> RetaCoreEnv; 
+      m_eFEXegAlgoTool->getReta(RetaCoreEnv);
+      std::vector<unsigned int> RhadCoreEnv; 
+      m_eFEXegAlgoTool->getRhad(RhadCoreEnv);
+      std::vector<unsigned int> WstotCoreEnv;
+      m_eFEXegAlgoTool->getWstot(WstotCoreEnv);
+
+      // temp thresholds that will come from Trigger menu
+      std::vector<unsigned int> tempThrs;
+      tempThrs.push_back(40);
+      tempThrs.push_back(30);
+      tempThrs.push_back(20);
       
+      // Set Reta, Rhad and Wstot WP
+      unsigned int RetaWP = 0;
+      unsigned int RhadWP = 0;
+      unsigned int WstotWP = 0;
+      SetIsoWP(RetaCoreEnv,tempThrs,RetaWP);
+      SetIsoWP(RhadCoreEnv,tempThrs,RhadWP);
+      SetIsoWP(WstotCoreEnv,tempThrs,WstotWP);
+
       std::unique_ptr<eFEXegTOB> tmp_tob = m_eFEXegAlgoTool->geteFEXegTOB();
       
       tmp_tob->setFPGAID(m_id);
@@ -200,6 +219,45 @@ void eFEXFPGA::SetTowersAndCells_SG(int tmp_eTowersIDs_subset[][6]){
   }
   
 }
+
+void eFEXFPGA::SetIsoWP(std::vector<unsigned int> & CoreEnv, std::vector<unsigned int> & thresholds, unsigned int & workingPoint) {
+
+  bool CoreOverflow = false;
+  bool EnvOverflow = false;
+  bool ThrEnvOverflowL = false;
+  bool ThrEnvOverflowM = false;
+  bool ThrEnvOverflowT = false;
+
+  if (CoreEnv[0] > 0xffff) CoreOverflow = true;
+  if (CoreEnv[1] > 0xffff) EnvOverflow = true;
+  if (CoreEnv[1]*thresholds[0] > 0xffff) ThrEnvOverflowL = true;
+  if (CoreEnv[1]*thresholds[1] > 0xffff) ThrEnvOverflowM = true;
+  if (CoreEnv[1]*thresholds[2] > 0xffff) ThrEnvOverflowT = true;
+
+  if (CoreOverflow == false) {
+    if (EnvOverflow == false) {
+      if ( (CoreEnv[0] > (thresholds[2]*CoreEnv[1])) && ThrEnvOverflowT == false ) {
+	workingPoint = 3;
+      } 
+      else if ( (CoreEnv[0] > (thresholds[1]*CoreEnv[1])) && ThrEnvOverflowM == false ) {
+	workingPoint = 2;
+      } 
+      else if ( (CoreEnv[0] > (thresholds[0]*CoreEnv[1])) && ThrEnvOverflowL == false ) {
+	workingPoint = 1;
+      }
+      else { 
+	workingPoint = 0;
+      }
+    } else {
+      workingPoint = 0; //env overflow
+    }
+  } 
+  else {
+    workingPoint = 3; // core overflow 
+  }
+
+}
+
   
 } // end of namespace bracket
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXegAlgo.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXegAlgo.cxx
index a99a3773f035631f7981d692eb992134a186e415..5689f0ab5873cbe95a01b7232d712173adabe842 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXegAlgo.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/eFEXegAlgo.cxx
@@ -100,9 +100,8 @@ void LVL1::eFEXegAlgo::getRealEta(float & eta) {
 
 }
 
-std::vector<unsigned int> eFEXegAlgo::getReta() {
+void eFEXegAlgo::getReta(std::vector<unsigned int> & retavec) {
 
-  std::vector<unsigned int> retavec;
   unsigned int coresum  = 0;   // 3x2 L2 sum : core
   unsigned int totalsum = 0;   // 7x3 L2 sum : total
   unsigned int envsum   = 0;   // total - core : env
@@ -141,7 +140,6 @@ std::vector<unsigned int> eFEXegAlgo::getReta() {
   retavec.push_back(coresum);
   retavec.push_back(envsum);
 
-  return retavec;
 }
 
 void eFEXegAlgo::getRhad(std::vector<unsigned int> & rhadvec) {
@@ -196,8 +194,9 @@ void LVL1::eFEXegAlgo::getWstot(std::vector<unsigned int> & output){
       den += eT;
     }
   }
-  output.push_back(numer);
+
   output.push_back(den);
+  output.push_back(numer);
 
 }
 
@@ -238,7 +237,7 @@ std::unique_ptr<eFEXegTOB> LVL1::eFEXegAlgo::geteFEXegTOB() {
   getRhad(temvector);
   out->setRhadNum(temvector[1]);
   out->setRhadDen(temvector[0] + temvector[1]);
-  temvector = getReta();
+  getReta(temvector);
   out->setRetaNum(temvector[0]);
   out->setRetaDen(temvector[0] + temvector[1]);
   out->setSeedUnD(m_seed_UnD);
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXFPGA.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXFPGA.h
index b8ee1663a1a489b860b214292b925c7c20d340cc..b862b6eafd5dfc32bbcd04048636e04a729e361d 100644
--- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXFPGA.h
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXFPGA.h
@@ -40,6 +40,8 @@ Interface definition for eFEXFPGA
     virtual int ID() = 0;
 
     virtual void SetTowersAndCells_SG(int [][6]) = 0;
+    
+    virtual void SetIsoWP(std::vector<unsigned int> &, std::vector<unsigned int> &, unsigned int &) = 0;
 
   private:
 
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXegAlgo.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXegAlgo.h
index 4df595db7d02103c054e4878754acd465e2cd2ae..dc66d529eb5969a96590d80d1965a934eefc019f 100644
--- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXegAlgo.h
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IeFEXegAlgo.h
@@ -31,7 +31,7 @@ Interface definition for eFEXegAlgo
     virtual StatusCode safetyTest() = 0;
     virtual void setup(int inputTable[3][3]) = 0;
 
-    virtual std::vector<unsigned int> getReta() = 0;
+    virtual void getReta(std::vector<unsigned int> & ) = 0;
     virtual void getRhad(std::vector<unsigned int> & ) = 0;
     virtual void getWstot(std::vector<unsigned int> & ) = 0;
     virtual void getRealPhi(float & phi) = 0;
@@ -43,9 +43,6 @@ Interface definition for eFEXegAlgo
     virtual void getCoreEMTowerET(unsigned int & et) = 0;
     virtual void getCoreHADTowerET(unsigned int & et) = 0;
 
-  private:
-    virtual void setSeed() = 0;
-
   };
 
   inline const InterfaceID& LVL1::IeFEXegAlgo::interfaceID()