diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXDriver.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXDriver.h
index cfce43f895aa7973182facdc345a55fe661e68a3..e6f0c861e616fef398e0d1ae3822a3309c33ee80 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXDriver.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXDriver.h
@@ -19,6 +19,7 @@
 #include "CaloIdentifier/CaloCell_SuperCell_ID.h"
 #include "L1CaloFEXSim/gFEXOutputCollection.h"
 #include "xAODTrigger/gFexJetRoIContainer.h"
+#include "xAODTrigger/gFexGlobalRoIContainer.h"
 
 class CaloIdManager;
 
@@ -46,8 +47,6 @@ class gFEXDriver : public AthAlgorithm
   //Declare that gFEXDriver class will read an object of type CaloCellContainer, xAOD::gFexJetRoIContainer, xAOD::gFexGlobalRoIContainer
   SG::ReadHandleKey<CaloCellContainer> m_scellsCollectionSGKey {this, "SCell", "SCell", "SCell"};
 
-  SG::ReadHandleKey<xAOD::gFexJetRoIContainer> m_gJetEDMKey {this, "gJetEDM", "L1_gJetRoI", "Reading container of gFEXJetRoIs"};
-
   ToolHandle<IgTowerBuilder> m_gTowerBuilderTool {this, "gTowerBuilderTool", "LVL1::gTowerBuilder", "Tool that builds gTowers for simulation"};
   ToolHandle<IgSuperCellTowerMapper> m_gSuperCellTowerMapperTool {this, "gSuperCellTowerMapperTool", "LVL1::gSuperCellTowerMapper", "Tool that maps supercells to gTowers"};
   ToolHandle<IgFEXSysSim> m_gFEXSysSimTool {this, "gFEXSysSimTool", "LVL1::gFEXSysSim", "Tool that creates the gFEX System Simulation"};
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSim.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSim.h
index d778ba6b982699c9bce71bf38fae018dd9c99681..39be69e1513ee483860cc157394eda8fae6a6bb0 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSim.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSim.h
@@ -55,7 +55,14 @@ namespace LVL1 {
 
     virtual std::vector<uint32_t> getgJetTOBs() const override;
 
-    virtual std::vector<uint32_t> getgGlobalTOBs() const override;
+    virtual std::vector<uint32_t> getgScalarEJwojTOBs() const override;
+ 
+    virtual std::vector<uint32_t> getgMETComponentsJwojTOBs() const override;
+
+    virtual std::vector<uint32_t> getgMHTComponentsJwojTOBs() const override;
+
+    virtual std::vector<uint32_t> getgMSTComponentsJwojTOBs() const override;
+
 
     /** Internal data */
   private:
@@ -70,7 +77,13 @@ namespace LVL1 {
 
     std::vector<uint32_t>  m_gJetTobWords;
 
-    std::vector<uint32_t>  m_gGlobalTobWords;
+    std::vector<uint32_t>  m_gScalarEJwojTobWords;
+
+    std::vector<uint32_t>  m_gMETComponentsJwojTobWords;
+
+    std::vector<uint32_t>  m_gMHTComponentsJwojTobWords;
+
+    std::vector<uint32_t>  m_gMSTComponentsJwojTobWords;
 
 
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSysSim.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSysSim.h
index 4be59907783a4a4523c0d374c85bd1dbc675f32c..c208026ccb329f3514a0fc9b264b8fe2183e0f5a 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSysSim.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/gFEXSysSim.h
@@ -60,7 +60,14 @@ namespace LVL1 {
 
     virtual StatusCode fillgJetEDM(uint32_t tobWord) override ;
 
-    virtual StatusCode fillgGlobalEDM(uint32_t tobWord) override ;
+    virtual StatusCode fillgScalarEJwojEDM(uint32_t tobWord) override ;
+
+    virtual StatusCode fillgMETComponentsJwojEDM(uint32_t tobWord) override ;
+
+    virtual StatusCode fillgMHTComponentsJwojEDM(uint32_t tobWord) override ;
+
+    virtual StatusCode fillgMSTComponentsJwojEDM(uint32_t tobWord) override ;
+
 
     /** Internal data */
   private:
@@ -73,8 +80,17 @@ namespace LVL1 {
     std::unique_ptr< xAOD::gFexJetRoIContainer > m_gJetContainer;
     std::unique_ptr< xAOD::gFexJetRoIAuxContainer > m_gJetAuxContainer;
 
-    std::unique_ptr< xAOD::gFexGlobalRoIContainer > m_gGlobalContainer;
-    std::unique_ptr< xAOD::gFexGlobalRoIAuxContainer > m_gGlobalAuxContainer;
+    std::unique_ptr< xAOD::gFexGlobalRoIContainer > m_gScalarEJwojContainer;
+    std::unique_ptr< xAOD::gFexGlobalRoIAuxContainer > m_gScalarEJwojAuxContainer;
+
+    std::unique_ptr< xAOD::gFexGlobalRoIContainer > m_gMETComponentsJwojContainer;
+    std::unique_ptr< xAOD::gFexGlobalRoIAuxContainer > m_gMETComponentsJwojAuxContainer;
+
+    std::unique_ptr< xAOD::gFexGlobalRoIContainer > m_gMHTComponentsJwojContainer;
+    std::unique_ptr< xAOD::gFexGlobalRoIAuxContainer > m_gMHTComponentsJwojAuxContainer;
+
+    std::unique_ptr< xAOD::gFexGlobalRoIContainer > m_gMSTComponentsJwojContainer;
+    std::unique_ptr< xAOD::gFexGlobalRoIAuxContainer > m_gMSTComponentsJwojAuxContainer;
 
 
     std::vector<gFEXSim*> m_gFEXCollection;
@@ -84,13 +100,25 @@ namespace LVL1 {
     SG::ReadHandleKey<LVL1::gTowerContainer> m_gTowerContainerSGKey {this, "MyGTowers", "gTowerContainer", "Input container for gTowers"};
     SG::ReadHandleKey<CaloCellContainer> m_scellsCollectionSGKey {this, "SCell", "SCell", "SCell"};
 
-    SG::WriteHandleKey< xAOD::gFexJetRoIContainer > m_gFexJetOutKey {this,"Key_gFexJetOutputContainer","L1_gJetRoI","Output gFexJet container"};
-    SG::WriteHandleKey< xAOD::gFexGlobalRoIContainer > m_gFexGlobalOutKey {this,"Key_gFexGlobalOutputContainer","L1_gJetRoI","Output gFexGlobal container"};
+    SG::WriteHandleKey< xAOD::gFexJetRoIContainer > m_gFexRhoOutKey {this,"Key_gFexRhoOutputContainer","L1_gFexRhoRoI","Output gFexRho (energy density) container"};
+    SG::WriteHandleKey< xAOD::gFexJetRoIContainer > m_gFexBlockOutKey {this,"Key_gFexSRJetOutputContainer","L1_gFexSRJetRoI","Output gFexBlock (small-R jet) container"};
+    SG::WriteHandleKey< xAOD::gFexJetRoIContainer > m_gFexJetOutKey {this,"Key_gFexLRJetOutputContainer","L1_gFexLRJetRoI","Output gFexJet (large-R jet) container"};
+    
+    SG::WriteHandleKey< xAOD::gFexGlobalRoIContainer > m_gScalarEJwojOutKey {this,"Key_gScalarEJwojOutputContainer","L1_gScalarEJwoj","Output Scalar MET and SumET (from Jets without Jets algo) container"};
+    SG::WriteHandleKey< xAOD::gFexGlobalRoIContainer > m_gMETComponentsJwojOutKey {this,"Key_gMETComponentsJwojOutputContainer","L1_gMETComponentsJwoj","Output total MET components (from Jets without Jets algo) container"};
+    SG::WriteHandleKey< xAOD::gFexGlobalRoIContainer > m_gMHTComponentsJwojOutKey {this,"Key_gMHTComponentsJwojOutputContainer","L1_gMHTComponentsJwoj","Output hard MET components (from Jets without Jets algo) container"};
+    SG::WriteHandleKey< xAOD::gFexGlobalRoIContainer > m_gMSTComponentsJwojOutKey {this,"Key_gMSTComponentsJwojOutputContainer","L1_gMSTComponentsJwoj","Output soft MET components (from Jets without Jets algo) container"};
+
+
 
     std::vector<uint32_t>  m_allgRhoTobs;
     std::vector<uint32_t>  m_allgBlockTobs;
     std::vector<uint32_t>  m_allgJetTobs;
-    std::vector<uint32_t>  m_allgGlobalTobs;
+
+    std::vector<uint32_t>  m_allgScalarEJwojTobs;
+    std::vector<uint32_t>  m_allgMETComponentsJwojTobs;
+    std::vector<uint32_t>  m_allgMHTComponentsJwojTobs;
+    std::vector<uint32_t>  m_allgMSTComponentsJwojTobs;
 
   };
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXDriver.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXDriver.cxx
index bee5625655ad70f702032bf82f404496962044d0..e677fc31ee0db83bfc1eafb72aa53402d865ce44 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXDriver.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXDriver.cxx
@@ -19,6 +19,9 @@
 #include "xAODTrigger/gFexJetRoI.h"
 #include "xAODTrigger/gFexJetRoIContainer.h"
 
+#include "xAODTrigger/gFexGlobalRoI.h"
+#include "xAODTrigger/gFexGlobalRoIContainer.h"
+
 #include <cassert>
 #include "SGTools/TestStore.h"
 
@@ -62,9 +65,6 @@ StatusCode gFEXDriver::initialize()
 
   ATH_CHECK( m_gTowerContainerSGKey.initialize() );
 
-  ATH_CHECK( m_gJetEDMKey.initialize() );
-
-  ATH_CHECK( m_gFEXOutputCollectionSGKey.initialize() );
 
   return StatusCode::SUCCESS;
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXJwoJAlgo.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXJwoJAlgo.cxx
index 5fc418980c68d941c9ae574ff169ce6f1507ddf5..7dccdf7bc2b334ac1bd4a48ab2c20a5181c45c27 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXJwoJAlgo.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXJwoJAlgo.cxx
@@ -8,7 +8,6 @@
 //     email                : cecilia.tosciri@cern.ch
 //***************************************************************************
 
-#define _USE_MATH_DEFINES
 #include <cmath>
 #include <vector>
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSim.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSim.cxx
index 38013afcae06c562ff2be2fe901abbc0336e94a2..5cafff7bf6b72bf0673723be8d423ebde1368ae7 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSim.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSim.cxx
@@ -48,6 +48,7 @@ namespace LVL1 {
    StatusCode gFEXSim::initialize(){
       ATH_CHECK( m_gFEXFPGA_Tool.retrieve() );
       ATH_CHECK( m_gFEXJetAlgoTool.retrieve() );
+      ATH_CHECK( m_gFEXJwoJAlgoTool.retrieve() );
       return StatusCode::SUCCESS;
    }
 
@@ -157,7 +158,7 @@ StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset){
    std::array<uint32_t, 7> BTOB1_dat = {0};
    std::array<uint32_t, 7> BTOB2_dat = {0};
 
-   // Retrieve the gFEXJetAlgoTool
+   // Use the gFEXJetAlgoTool
 
    // Pass the energy matrices to the algo tool, and run the algorithms
    auto tobs_v = m_gFEXJetAlgoTool->largeRfinder(Atwr, Btwr, CNtwr, CPtwr,
@@ -190,8 +191,7 @@ StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset){
    m_gJetTobWords[3] = BTOB2_dat[3];//leading gJet in FPGA B, eta bins (6--11)
 
 
-   // Retrieve the gFEXJetAlgoTool
-   ATH_CHECK( m_gFEXJwoJAlgoTool.retrieve() );
+   // Use the gFEXJetAlgoTool
    std::array<uint32_t, 4> outTOB = {0};
 
    m_gFEXJwoJAlgoTool->setAlgoConstant(FEXAlgoSpaceDefs::aFPGA_A, FEXAlgoSpaceDefs::bFPGA_A,
@@ -200,13 +200,17 @@ StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset){
 
    auto global_tobs = m_gFEXJwoJAlgoTool->jwojAlgo(Atwr, Btwr, outTOB);
 
-   m_gGlobalTobWords.resize(4);
+   m_gScalarEJwojTobWords.resize(1);
+   m_gMETComponentsJwojTobWords.resize(1);
+   m_gMHTComponentsJwojTobWords.resize(1);
+   m_gMSTComponentsJwojTobWords.resize(1);
+
 
    //Placing the global TOBs into a dedicated array
-   m_gGlobalTobWords[0] = outTOB[0];//
-   m_gGlobalTobWords[1] = outTOB[1];//
-   m_gGlobalTobWords[2] = outTOB[2];//
-   m_gGlobalTobWords[3] = outTOB[3];//
+   m_gScalarEJwojTobWords[0] = outTOB[0];//
+   m_gMETComponentsJwojTobWords[0] = outTOB[1];//
+   m_gMHTComponentsJwojTobWords[0] = outTOB[2];//
+   m_gMSTComponentsJwojTobWords[0] = outTOB[3];//
 
    gFEXOutputCollection* gFEXOutputs;
    ATH_CHECK(evtStore()->retrieve(gFEXOutputs, "gFEXOutputCollection"));
@@ -255,10 +259,26 @@ std::vector<uint32_t> gFEXSim::getgJetTOBs() const
   return m_gJetTobWords;
 }
 
-std::vector<uint32_t> gFEXSim::getgGlobalTOBs() const
+std::vector<uint32_t> gFEXSim::getgScalarEJwojTOBs() const
+{
+  return m_gScalarEJwojTobWords;
+}
+
+std::vector<uint32_t> gFEXSim::getgMETComponentsJwojTOBs() const
 {
-  return m_gGlobalTobWords;
+  return m_gMETComponentsJwojTobWords;
 }
 
+std::vector<uint32_t> gFEXSim::getgMHTComponentsJwojTOBs() const
+{
+  return m_gMHTComponentsJwojTobWords;
+}
+
+std::vector<uint32_t> gFEXSim::getgMSTComponentsJwojTOBs() const
+{
+  return m_gMSTComponentsJwojTobWords;
+}
+
+
 
 } // end of namespace bracket
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSysSim.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSysSim.cxx
index 40728c9fe8516248e0fa6023b93484d036b45ffc..e6b4e9d67ae1d17b62489ecb984b0bca72154d48 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSysSim.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/gFEXSysSim.cxx
@@ -42,8 +42,22 @@ namespace LVL1 {
 
       ATH_CHECK( m_gFEXSimTool.retrieve() );
 
+      ATH_CHECK(m_gFexRhoOutKey.initialize()); 
+
+      ATH_CHECK(m_gFexBlockOutKey.initialize());      
+
       ATH_CHECK(m_gFexJetOutKey.initialize());
 
+      ATH_CHECK(m_gScalarEJwojOutKey.initialize());
+
+      ATH_CHECK(m_gMETComponentsJwojOutKey.initialize());
+
+      ATH_CHECK(m_gMHTComponentsJwojOutKey.initialize());
+      
+      ATH_CHECK(m_gMSTComponentsJwojOutKey.initialize());
+
+   
+
       return StatusCode::SUCCESS;
    }
 
@@ -65,7 +79,7 @@ namespace LVL1 {
 
    StatusCode gFEXSysSim::execute()   {
 
-      SG::ReadHandle<LVL1::gTowerContainer> this_gTowerContainer(m_gTowerContainerSGKey/*,ctx*/);
+      SG::ReadHandle<LVL1::gTowerContainer> this_gTowerContainer(m_gTowerContainerSGKey);
       if(!this_gTowerContainer.isValid()){
          ATH_MSG_FATAL("Could not retrieve gTowerContainer " << m_gTowerContainerSGKey.key());
          return StatusCode::FAILURE;
@@ -75,7 +89,10 @@ namespace LVL1 {
       m_allgRhoTobs.clear();
       m_allgBlockTobs.clear();
       m_allgJetTobs.clear();
-      m_allgGlobalTobs.clear();
+      m_allgScalarEJwojTobs.clear();
+      m_allgMETComponentsJwojTobs.clear();
+      m_allgMHTComponentsJwojTobs.clear();
+      m_allgMSTComponentsJwojTobs.clear();
 
 
       // int centralNphi = 32;
@@ -205,13 +222,19 @@ namespace LVL1 {
       }
 
       ATH_CHECK(m_gFEXSimTool->executegFEXSim(tmp_gTowersIDs_subset));
+      
       m_allgRhoTobs = m_gFEXSimTool->getgRhoTOBs();
       m_allgBlockTobs = m_gFEXSimTool->getgBlockTOBs();
       m_allgJetTobs = m_gFEXSimTool->getgJetTOBs();
-      m_allgGlobalTobs = m_gFEXSimTool->getgGlobalTOBs();
-      m_gFEXSimTool->reset();
+       
+      m_allgScalarEJwojTobs = m_gFEXSimTool->getgScalarEJwojTOBs();
+      m_allgMETComponentsJwojTobs = m_gFEXSimTool->getgMETComponentsJwojTOBs();
+      m_allgMHTComponentsJwojTobs = m_gFEXSimTool->getgMHTComponentsJwojTOBs();
+      m_allgMSTComponentsJwojTobs = m_gFEXSimTool->getgMSTComponentsJwojTOBs();
 
+      m_gFEXSimTool->reset();
 
+      //Makes containers for different gFEX Jet objects
       m_gRhoContainer = std::make_unique<xAOD::gFexJetRoIContainer> ();
       m_gRhoAuxContainer = std::make_unique<xAOD::gFexJetRoIAuxContainer> ();
       m_gRhoContainer->setStore(m_gRhoAuxContainer.get());
@@ -224,9 +247,24 @@ namespace LVL1 {
       m_gJetAuxContainer = std::make_unique<xAOD::gFexJetRoIAuxContainer> ();
       m_gJetContainer->setStore(m_gJetAuxContainer.get());
 
-      m_gGlobalContainer = std::make_unique<xAOD::gFexGlobalRoIContainer> ();
-      m_gGlobalAuxContainer = std::make_unique<xAOD::gFexGlobalRoIAuxContainer> ();
-      m_gGlobalContainer->setStore(m_gGlobalAuxContainer.get());
+      //Makes containers for different gFEX Global objects
+      m_gScalarEJwojContainer = std::make_unique<xAOD::gFexGlobalRoIContainer> ();
+      m_gScalarEJwojAuxContainer = std::make_unique<xAOD::gFexGlobalRoIAuxContainer> ();
+      m_gScalarEJwojContainer->setStore(m_gScalarEJwojAuxContainer.get());
+
+      m_gMETComponentsJwojContainer = std::make_unique<xAOD::gFexGlobalRoIContainer> ();
+      m_gMETComponentsJwojAuxContainer = std::make_unique<xAOD::gFexGlobalRoIAuxContainer> ();
+      m_gMETComponentsJwojContainer->setStore(m_gMETComponentsJwojAuxContainer.get());
+
+      m_gMHTComponentsJwojContainer = std::make_unique<xAOD::gFexGlobalRoIContainer> ();
+      m_gMHTComponentsJwojAuxContainer = std::make_unique<xAOD::gFexGlobalRoIAuxContainer> ();
+      m_gMHTComponentsJwojContainer->setStore(m_gMHTComponentsJwojAuxContainer.get());
+
+      m_gMSTComponentsJwojContainer = std::make_unique<xAOD::gFexGlobalRoIContainer> ();
+      m_gMSTComponentsJwojAuxContainer = std::make_unique<xAOD::gFexGlobalRoIAuxContainer> ();
+      m_gMSTComponentsJwojContainer->setStore(m_gMSTComponentsJwojAuxContainer.get());
+
+      
 
       //iterate over all gRho Tobs and fill EDM with them
       for(auto &tob : m_allgRhoTobs){
@@ -241,16 +279,59 @@ namespace LVL1 {
       for(auto &tob : m_allgJetTobs){
          ATH_CHECK(fillgJetEDM(tob));
       }
-      //iterate over all Global Tobs and fill EDM with them
-      for(auto &tob : m_allgGlobalTobs){
-         ATH_CHECK(fillgGlobalEDM(tob));
+
+
+      //iterate over all JwoJ scalar energy Tobs and fill EDM with them (should be only one)
+      for(auto &tob : m_allgScalarEJwojTobs){
+         ATH_CHECK(fillgScalarEJwojEDM(tob));
+      }
+      //iterate over all JwoJ METcomponents Tobs and fill EDM with them (should be only one)
+      for(auto &tob : m_allgMETComponentsJwojTobs){
+         ATH_CHECK(fillgMETComponentsJwojEDM(tob));
       }
+      //iterate over all JwoJ MHTcomponents Tobs and fill EDM with them (should be only one)
+      for(auto &tob : m_allgMHTComponentsJwojTobs){
+         ATH_CHECK(fillgMHTComponentsJwojEDM(tob));
+      }
+      //iterate over all JwoJ MSTcomponents Tobs and fill EDM with them (should be only one)
+      for(auto &tob : m_allgMSTComponentsJwojTobs){
+         ATH_CHECK(fillgMSTComponentsJwojEDM(tob));
+      }
+
+      
 
-      SG::WriteHandle<xAOD::gFexJetRoIContainer> outputgFexJetHandle(m_gFexJetOutKey/*, ctx*/);
+
+
+      SG::WriteHandle<xAOD::gFexJetRoIContainer> outputgFexRhoHandle(m_gFexRhoOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgFexRhoHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgFexRhoHandle.record(std::move(m_gRhoContainer),std::move(m_gRhoAuxContainer)));
+
+      SG::WriteHandle<xAOD::gFexJetRoIContainer> outputgFexBlockHandle(m_gFexBlockOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgFexBlockHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgFexBlockHandle.record(std::move(m_gBlockContainer),std::move(m_gBlockAuxContainer)));
+
+      SG::WriteHandle<xAOD::gFexJetRoIContainer> outputgFexJetHandle(m_gFexJetOutKey);
       ATH_MSG_DEBUG("   write: " << outputgFexJetHandle.key() << " = " << "..." );
       ATH_CHECK(outputgFexJetHandle.record(std::move(m_gJetContainer),std::move(m_gJetAuxContainer)));
 
-       return StatusCode::SUCCESS;
+
+      SG::WriteHandle<xAOD::gFexGlobalRoIContainer> outputgScalarEJwojHandle(m_gScalarEJwojOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgScalarEJwojHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgScalarEJwojHandle.record(std::move(m_gScalarEJwojContainer),std::move(m_gScalarEJwojAuxContainer)));
+
+      SG::WriteHandle<xAOD::gFexGlobalRoIContainer> outputgMETComponentsJwojHandle(m_gMETComponentsJwojOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgMETComponentsJwojHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgMETComponentsJwojHandle.record(std::move(m_gMETComponentsJwojContainer),std::move(m_gMETComponentsJwojAuxContainer)));
+
+      SG::WriteHandle<xAOD::gFexGlobalRoIContainer> outputgMHTComponentsJwojHandle(m_gMHTComponentsJwojOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgMHTComponentsJwojHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgMHTComponentsJwojHandle.record(std::move(m_gMHTComponentsJwojContainer),std::move(m_gMHTComponentsJwojAuxContainer)));
+
+      SG::WriteHandle<xAOD::gFexGlobalRoIContainer> outputgMSTComponentsJwojHandle(m_gMSTComponentsJwojOutKey);
+      ATH_MSG_DEBUG("   write: " << outputgMSTComponentsJwojHandle.key() << " = " << "..." );
+      ATH_CHECK(outputgMSTComponentsJwojHandle.record(std::move(m_gMSTComponentsJwojContainer),std::move(m_gMSTComponentsJwojAuxContainer)));
+
+      return StatusCode::SUCCESS;
    }
 
    StatusCode gFEXSysSim::fillgRhoEDM(uint32_t tobWord){
@@ -280,14 +361,40 @@ namespace LVL1 {
       return StatusCode::SUCCESS;
    }
 
-   StatusCode gFEXSysSim::fillgGlobalEDM(uint32_t tobWord){
+   StatusCode gFEXSysSim::fillgMETComponentsJwojEDM(uint32_t tobWord){
+
+      std::unique_ptr<xAOD::gFexGlobalRoI> myEDM (new xAOD::gFexGlobalRoI());
+      m_gMETComponentsJwojContainer->push_back(std::move(myEDM));
+      m_gMETComponentsJwojContainer->back()->initialize(tobWord);
+
+      return StatusCode::SUCCESS;
+   }
+
+   StatusCode gFEXSysSim::fillgMHTComponentsJwojEDM(uint32_t tobWord){
 
       std::unique_ptr<xAOD::gFexGlobalRoI> myEDM (new xAOD::gFexGlobalRoI());
-      m_gGlobalContainer->push_back(std::move(myEDM));
-      m_gGlobalContainer->back()->initialize(tobWord);
+      m_gMHTComponentsJwojContainer->push_back(std::move(myEDM));
+      m_gMHTComponentsJwojContainer->back()->initialize(tobWord);
 
       return StatusCode::SUCCESS;
    }
 
+   StatusCode gFEXSysSim::fillgMSTComponentsJwojEDM(uint32_t tobWord){
+
+      std::unique_ptr<xAOD::gFexGlobalRoI> myEDM (new xAOD::gFexGlobalRoI());
+      m_gMSTComponentsJwojContainer->push_back(std::move(myEDM));
+      m_gMSTComponentsJwojContainer->back()->initialize(tobWord);
+
+      return StatusCode::SUCCESS;
+   }
+
+   StatusCode gFEXSysSim::fillgScalarEJwojEDM(uint32_t tobWord){
+
+      std::unique_ptr<xAOD::gFexGlobalRoI> myEDM (new xAOD::gFexGlobalRoI());
+      m_gScalarEJwojContainer->push_back(std::move(myEDM));
+      m_gScalarEJwojContainer->back()->initialize(tobWord);
+
+      return StatusCode::SUCCESS;
+   }
 
 } // end of namespace bracket
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSim.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSim.h
index 38c70ed13c279c3a6329806b89131c7a5a7e399a..2d59d33c3e908f51563448db981b39c01d443e9d 100644
--- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSim.h
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSim.h
@@ -36,7 +36,15 @@ Interface definition for gFEXSim
 
     virtual std::vector<uint32_t> getgJetTOBs() const =0;
 
-    virtual std::vector<uint32_t> getgGlobalTOBs() const =0;
+    virtual std::vector<uint32_t> getgScalarEJwojTOBs() const =0;
+ 
+    virtual std::vector<uint32_t> getgMETComponentsJwojTOBs() const =0;
+
+    virtual std::vector<uint32_t> getgMHTComponentsJwojTOBs() const =0;
+
+    virtual std::vector<uint32_t> getgMSTComponentsJwojTOBs() const =0;
+
+
 
   private:
 
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSysSim.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSysSim.h
index 24c9469abd6e0a6a8299240aa2968af921db03fd..4d23327accd707f58b43104b448c3063f07b8dfd 100644
--- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSysSim.h
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IgFEXSysSim.h
@@ -33,7 +33,15 @@ Interface definition for gFEXSysSim
 
     virtual StatusCode fillgJetEDM(uint32_t tobWord) = 0;
 
-    virtual StatusCode fillgGlobalEDM(uint32_t tobWord) = 0;
+    virtual StatusCode fillgScalarEJwojEDM(uint32_t tobWord) = 0;
+
+    virtual StatusCode fillgMETComponentsJwojEDM(uint32_t tobWord) = 0;
+
+    virtual StatusCode fillgMHTComponentsJwojEDM(uint32_t tobWord) = 0;
+
+    virtual StatusCode fillgMSTComponentsJwojEDM(uint32_t tobWord) = 0;
+
+
 
   private: