diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
index 6529e23a8e2e760288c56f4d5cfcd484d49eee0c..6f67d63ad5acc27c6b96e3602fe4b0b21605083c 100644
--- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
+++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
@@ -1270,6 +1270,8 @@ if ( rec.doAOD() or rec.doWriteAOD()) and not rec.readAOD() :
             if ( rec.readESD() or jobproperties.egammaRecFlags.Enabled ) and not rec.ScopingLevel()==4 and rec.doEgamma :
                 from egammaRec import egammaKeys
                 addClusterToCaloCellAOD(egammaKeys.outputClusterKey())
+                addClusterToCaloCellAOD(egammaKeys.outputFwdClusterKey())
+                addClusterToCaloCellAOD(egammaKeys.outputEgammaLargeFWDClustersKey())
                 if "itemList" in metadata:
                     if ('xAOD::CaloClusterContainer', egammaKeys.EgammaLargeClustersKey()) in metadata["itemList"]:
                         # check first for priority if both keys are in metadata
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py b/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py
new file mode 100644
index 0000000000000000000000000000000000000000..55d7995fc77ce7bf75894266a0c028638a1d0a5f
--- /dev/null
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py
@@ -0,0 +1,27 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+
+__doc__ = """ToolFactory to instantiate egammaLargeClusterMaker
+with FWD configuration"""
+__author__ = "Jovan Mitrevski"
+
+from egammaTools.egammaToolsFactories import egammaLargeFWDClusterMakerTool
+from CaloRec import CaloRecConf
+from egammaRec.Factories import AlgFactory, FcnWrapper
+from egammaRec import egammaKeys
+from CaloClusterCorrection.CaloSwCorrections import make_CaloSwCorrections
+
+
+def clusMakerTools():
+    return [egammaLargeFWDClusterMakerTool()]
+
+egammaLargeFWDClusterMakerAlg = AlgFactory(
+    CaloRecConf.CaloClusterMaker,
+    name="egammaLargeFWDClusterMaker",
+    SaveUncalibratedSignalState=False,
+    ClustersOutputName=egammaKeys.EgammaLargeFWDClustersKey(),
+    ClusterMakerTools=FcnWrapper(clusMakerTools),
+    ClusterCorrectionTools=make_CaloSwCorrections("FWDele6_6",
+                                                  suffix="Nocorr",
+                                                  version="none",
+                                                  corrlist=[],
+                                                  cells_name=egammaKeys.caloCellKey()))
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlgConfig.py b/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlgConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..5bfcfc53493f7b9075673557a036786240658044
--- /dev/null
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlgConfig.py
@@ -0,0 +1,31 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+__doc__ = "Configure egammaLargeFWDClusterMaker, which chooses cells to store in the AOD" 
+__author__ = "Jovan Mitrevski"
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+from egammaTools.egammaLargeFWDClusterMakerConfig import egammaLargeFWDClusterMakerCfg
+from CaloClusterCorrection.CaloSwCorrections import make_CaloSwCorrections
+CaloClusterMaker=CompFactory.CaloClusterMaker
+
+def egammaLargeFWDClusterMakerAlgCfg(flags, name = "egammaLargeClusterMaker", **kwargs):
+
+    acc = ComponentAccumulator
+    
+    kwargs.setdefault("SaveUncalibratedSignalState", False)
+    kwargs.setdefault("ClustersOutputName", flags.Egamma.Keys.Output.EgammaLargeFWDClusters)
+
+    if "ClusterMakerTools" not in kwargs:
+        toolAcc = egammaLargeFWDClusterMakerCfg(flags)
+        kwargs["ClusterMakerTools"] = [ toolAcc.popPrivateTools() ]
+        acc.merge(toolAcc)
+
+    kwargs.setdefault("ClusterCorrectionTools", make_CaloSwCorrections("FWDele6_6",
+                                                                       suffix="Nocorr",
+                                                                       version="none",
+                                                                       cells_name=flags.Egamma.Keys.Input.CaloCells))
+
+    acc.addEventAlgo(CaloClusterMaker(name, **kwargs))
+    return acc
+
diff --git a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
index 16e35e25216338c615d8d5d35bb1e62387e20506..1da6c4c5edfec58aa0d3ce320a578f629a044dae 100644
--- a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
+++ b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
@@ -92,7 +92,12 @@ def createEgammaConfigFlags():
     egcf.addFlag("Egamma.Keys.Output.ForwardClusters", 'ForwardElectronClusters')
     egcf.addFlag("Egamma.Keys.Output.ForwardClustersSuppESD", '-SisterCluster')
     egcf.addFlag("Egamma.Keys.Output.ForwardClustersSuppAOD",
-                 '-SisterCluster.-CellLink')
+                 '-SisterCluster')
+
+    # These are the clusters that are used to determine which cells to write out to AOD
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClusters", 'egamma66FWDClusters')
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClustersSuppESD", '')
+    # don't define SuppAOD because the whole container is suppressed
 
     egcf.addFlag("Egamma.Keys.Output.Photons", 'Photons')
     egcf.addFlag("Egamma.Keys.Output.PhotonsSuppESD", '')
diff --git a/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py b/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py
index 13901af9f7791796507e418386a4fae9f5d6ae07..dca122f156c00f683825a0642e5eda9dca23dc57 100755
--- a/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py
+++ b/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py
@@ -47,11 +47,11 @@ egammaForwardBuilder = AlgFactory(
 
 
 class egammaForwardGetter (Configured):
-
+    
     def configure(self):
         mlog = logging.getLogger('egammaForwardGetter.py::configure:')
         mlog.info('entering')
-
+        
         # configure egammaForward here:
         try:
             self._egammaFwdBuilderHandle = egammaForwardBuilder()
@@ -59,7 +59,21 @@ class egammaForwardGetter (Configured):
             mlog.error("could not get handle to egammaForward")
             traceback.print_exc()
             return False
+            
+            # the egammaLargeFWDClusterMaker
+            # (Which chooses the cells to store in the AOD)
+        from egammaAlgs.egammaLargeFWDClusterMakerAlg import (
+            egammaLargeFWDClusterMakerAlg)
+        try:
+            self._egammaLargeClusterMaker = egammaLargeFWDClusterMakerAlg()
+        except Exception:
+            mlog.error("could not get handle to egammaLargeClusterMaker")
+            import traceback
+            traceback.print_exc()
+            return False
+                
         return True
-
+                
     def egammaFwdBuilderHandle(self):
         return self._egammaFwdBuilderHandle
+                    
diff --git a/Reconstruction/egamma/egammaRec/python/egammaKeys.py b/Reconstruction/egamma/egammaRec/python/egammaKeys.py
index b6a4785be13a8aa29ae4da28cff92ca6522d745d..51f654eb9a9e761991f30f49b97864b55f970a5d 100644
--- a/Reconstruction/egamma/egammaRec/python/egammaKeys.py
+++ b/Reconstruction/egamma/egammaRec/python/egammaKeys.py
@@ -23,6 +23,8 @@ class egammaKeysDict:
         Cluster=['xAOD::CaloClusterContainer', 'egammaClusters', '', ''],
         EgammaLargeClusters=['xAOD::CaloClusterContainer',
                              'egamma711Clusters', '', ''],  # not output to AOD
+        EgammaLargeFWDClusters=['xAOD::CaloClusterContainer',
+                                'egamma66FWDClusters', '', ''],  # not output to AOD
         TopoSeededCluster=['xAOD::CaloClusterContainer',
                            'egammaTopoSeededClusters', '', '-CellLink'],
         Electron=['xAOD::ElectronContainer', 'Electrons',
@@ -35,7 +37,7 @@ class egammaKeysDict:
         FwdElectron=['xAOD::ElectronContainer',
                      'ForwardElectrons', '', FwdElectronisemSupress],
         FwdCluster=['xAOD::CaloClusterContainer',
-                    'ForwardElectronClusters', '-SisterCluster', '.-CellLink'],
+                    'ForwardElectronClusters', '-SisterCluster', ''],
         Photon=['xAOD::PhotonContainer', 'Photons', '',
                 ShowerShapesSuppress+PhotonisemSupress],
         TrackParticle=['xAOD::TrackParticleContainer', 'GSFTrackParticles',
@@ -58,6 +60,10 @@ class egammaKeysDict:
                                               outputs['EgammaLargeClusters'][1] +
                                               '_links',
                                               '', '']
+    outputs['EgammaLargeFWDClustersCellLink'] = ['CaloClusterCellLinkContainer',
+                                              outputs['EgammaLargeFWDClusters'][1] +
+                                              '_links',
+                                              '', '']
     #
 
 
diff --git a/Reconstruction/egamma/egammaRec/share/egammaOutputItemList_jobOptions.py b/Reconstruction/egamma/egammaRec/share/egammaOutputItemList_jobOptions.py
index 04f7cb9a01cac0c922828494f695fb5cba8aa77d..7b3d2acebc679425c49f1296a63f4554be00c194 100755
--- a/Reconstruction/egamma/egammaRec/share/egammaOutputItemList_jobOptions.py
+++ b/Reconstruction/egamma/egammaRec/share/egammaOutputItemList_jobOptions.py
@@ -44,14 +44,13 @@ def addAuxContainer(outputList, cType, cKey, auxOptionAll='', auxOptionAOD=''):
 AOD_outputs = [i for i, j in egammaKeysDict.outputs.items()
                if i not in ('EgammaRec', 'PhotonSuperRec',
                             'ElectronSuperRec', 'TopoSeededCellLink',
-                            'FwdClusterCellLink', 'EgammaLargeClusters',
-                            'EgammaLargeClustersCellLink')]
+                            'EgammaLargeClusters',
+                            'EgammaLargeClustersCellLink','EgammaLargeFWDClusters', 'EgammaLargeFWDClustersCellLink')]
 
 
 ESD_outputs = [i for i, j in egammaKeysDict.outputs.items()
                if i not in ('EgammaRec', 'PhotonSuperRec',
-                            'ElectronSuperRec', 'TopoSeededCellLink',
-                            'FwdClusterCellLink')]
+                            'ElectronSuperRec', 'TopoSeededCellLink')]
 
 # Define egammaAODList in the proper format (<type>#<key><option>),
 # including aux containers
diff --git a/Reconstruction/egamma/egammaTools/python/egammaLargeFWDClusterMakerConfig.py b/Reconstruction/egamma/egammaTools/python/egammaLargeFWDClusterMakerConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..2d2938619f85085afedf218d8fb36275fb716444
--- /dev/null
+++ b/Reconstruction/egamma/egammaTools/python/egammaLargeFWDClusterMakerConfig.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+__doc__ = "Configure egammaLargeFWDClusterMaker, which chooses cells to store in the AOD" 
+__author__ = "Jovan Mitrevski"
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+egammaLargeFWDClusterMaker=CompFactory.egammaLargeFWDClusterMaker
+
+def egammaLargeFWDClusterMakerCfg(flags, **kwargs):
+
+    acc = ComponentAccumulator
+    
+    kwargs.setdefault("CellsName", flags.Egamma.Keys.Input.CaloCells)
+    kwargs.setdefault("InputClusterCollection", flags.Egamma.Keys.Output.FwdCluster)
+    kwargs.setdefault("doFWDelesurraundingWindows", True)
+
+    acc.setPrivateTools(egammaLargeFWDClusterMaker(**kwargs))
+
+    return acc
+
diff --git a/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py b/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
index 17caae683d5bf62f4bb1088fd7994fd1d74b494b..9871d1e65260215706205d0836961494cf8025b2 100644
--- a/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
+++ b/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
@@ -124,6 +124,14 @@ egammaLargeClusterMakerTool = ToolFactory(
     CellsName=egammaKeys.caloCellKey()
 )
 
+egammaLargeFWDClusterMakerTool = ToolFactory(
+    egammaToolsConf.egammaLargeClusterMaker,
+    name="egammaLCFWDMakerTool",
+    InputClusterCollection=egammaKeys.FwdClusterKey(),
+    CellsName=egammaKeys.caloCellKey(),
+    doFWDelesurraundingWindows = True
+)
+
 # Electron Selectors
 ElectronPIDBuilder = ToolFactory(
     EMPIDBuilderElectronBase,
diff --git a/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.cxx b/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.cxx
index f14bc25c976cfa82adf19e591c95ee60e7f09a42..5b4679b947d746cb2f60d7a3a0bff72ad56e7b85 100644
--- a/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.cxx
+++ b/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.cxx
@@ -5,6 +5,7 @@
 #include "egammaLargeClusterMaker.h"
 #include "CaloEvent/CaloCellContainer.h"
 #include "CaloEvent/CaloClusterCellLink.h"
+#include "CaloUtils/CaloCellList.h"
 #include "CaloUtils/CaloClusterStoreHelper.h"
 #include "egammaUtils/egammaEnergyPositionAllSamples.h"
 #include "xAODCaloEvent/CaloCluster.h"
@@ -52,83 +53,186 @@ egammaLargeClusterMaker::execute(const EventContext& ctx,
 
   const CaloDetDescrManager* dd_man = nullptr;
   ATH_CHECK(detStore()->retrieve(dd_man, "CaloMgr"));
-
+  
   // The main loop over clusters
   for (const auto *cluster : *inputClusters) {
-
-    // find the center of the cluster, copying the logic of
-    // egammaMiddleShape.cxx
-
-    // check if cluster is in barrel or in the end-cap
-    if (!cluster->inBarrel() && !cluster->inEndcap()) {
-      ATH_MSG_DEBUG(" Cluster is neither in Barrel nor in Endcap; skipping ");
-      continue;
-    }
-
-    // check if cluster is in barrel or end-cap
-    bool in_barrel = egammaEnergyPositionAllSamples::inBarrel(*cluster, 2);
-    CaloSampling::CaloSample sam = CaloSampling::EMB2;
-    if (in_barrel) {
-      sam = CaloSampling::EMB2;
-    } else {
-      sam = CaloSampling::EME2;
-    }
-    // granularity in (eta,phi) in the pre sampler
-    // CaloCellList needs both enums: subCalo and CaloSample
-    auto eta = cluster->etaSample(sam);
-    auto phi = cluster->phiSample(sam);
-
-    if ((eta == 0. && phi == 0.) || fabs(eta) > 100) {
-      return StatusCode::SUCCESS;
-    }
-
-    // Should get overritten
-    bool barrel = false;
-    CaloCell_ID::SUBCALO subcalo = CaloCell_ID::LAREM;
-    int sampling_or_module = 0;
-
-    CaloDetDescrManager::decode_sample(
+    
+    if (!m_isFWD) {
+      // find the center of the cluster, copying the logic of
+      // egammaMiddleShape.cxx
+      
+      // check if cluster is in barrel or in the end-cap
+      if (!cluster->inBarrel() && !cluster->inEndcap()) {
+	ATH_MSG_DEBUG(" Cluster is neither in Barrel nor in Endcap; skipping ");
+	continue;
+      }
+      
+      // check if cluster is in barrel or end-cap
+      bool in_barrel = egammaEnergyPositionAllSamples::inBarrel(*cluster, 2);
+      CaloSampling::CaloSample sam = CaloSampling::EMB2;
+      if (in_barrel) {
+	sam = CaloSampling::EMB2;
+      } else {
+	sam = CaloSampling::EME2;
+      }
+      
+      // granularity in (eta,phi) in the pre sampler
+      // CaloCellList needs both enums: subCalo and CaloSample
+      auto eta = cluster->etaSample(sam);
+      auto phi = cluster->phiSample(sam);
+      
+      if ((eta == 0. && phi == 0.) || fabs(eta) > 100) {
+	return StatusCode::SUCCESS;
+      }
+      
+      // Should get overritten
+      bool barrel = false;
+      CaloCell_ID::SUBCALO subcalo = CaloCell_ID::LAREM;
+      int sampling_or_module = 0;
+      
+      CaloDetDescrManager::decode_sample(
       subcalo, barrel, sampling_or_module, (CaloCell_ID::CaloSample)sam);
-
-    // Get the corresponding grannularities : needs to know where you are
-    //                  the easiest is to look for the CaloDetDescrElement
-
-    const CaloDetDescrElement* dde =
-      dd_man->get_element(CaloCell_ID::LAREM, 0, barrel, eta, phi);
-
-    // if object does not exist then return
-    if (!dde) {
-      return StatusCode::SUCCESS;
-    }
-
-    // local granularity
-    auto deta = dde->deta();
-    auto dphi = dde->dphi();
-
-    // search the hottest cell around the (eta,phi)
-    // (eta,phi) are defined as etaSample() and phiSample
-    // around this position a hot cell is searched for in a window
-    // (m_neta*m_deta,m_nphi*m_dphi), by default (m_neta,m_nphi)=(7,7)
-    CaloLayerCalculator calc;
-    StatusCode sc = calc.fill(*dd_man,
-                              cellcoll.ptr(),
-                              cluster->etaSample(sam),
-                              cluster->phiSample(sam),
-                              m_neta * deta,
-                              m_nphi * dphi,
-                              (CaloSampling::CaloSample)sam);
-    if (sc.isFailure()) {
-      ATH_MSG_WARNING("CaloLayerCalculator failed  fill ");
-    }
-    double etamax = calc.etarmax();
-    double phimax = calc.phirmax();
-
-    // create the new cluster
-    xAOD::CaloCluster* newCluster =
-      CaloClusterStoreHelper::makeCluster(collection, cellcoll.ptr());
-    newCluster->setEta0(etamax);
-    newCluster->setPhi0(phimax);
-    newCluster->setClusterSize(xAOD::CaloCluster::SW_7_11);
-  }
+      
+      // Get the corresponding grannularities : needs to know where you are
+      //                  the easiest is to look for the CaloDetDescrElement
+      
+      const CaloDetDescrElement* dde =
+	dd_man->get_element(CaloCell_ID::LAREM, 0, barrel, eta, phi);
+      
+      // if object does not exist then return
+      if (!dde) {
+	return StatusCode::SUCCESS;
+      }
+      
+      // local granularity
+      auto deta = dde->deta();
+      auto dphi = dde->dphi();
+      
+      // search the hottest cell around the (eta,phi)
+      // (eta,phi) are defined as etaSample() and phiSample
+      // around this position a hot cell is searched for in a window
+      // (m_neta*m_deta,m_nphi*m_dphi), by default (m_neta,m_nphi)=(7,7)
+      CaloLayerCalculator calc;
+      StatusCode sc = calc.fill(*dd_man,
+				cellcoll.ptr(),
+				cluster->etaSample(sam),
+				cluster->phiSample(sam),
+				m_neta * deta,
+				m_nphi * dphi,
+				(CaloSampling::CaloSample)sam);
+      if (sc.isFailure()) {
+	ATH_MSG_WARNING("CaloLayerCalculator failed  fill ");
+      }
+      double etamax = calc.etarmax();
+      double phimax = calc.phirmax();
+      
+      // create the new cluster
+      xAOD::CaloCluster* newCluster =
+	CaloClusterStoreHelper::makeCluster(collection, cellcoll.ptr());
+      newCluster->setEta0(etamax);
+      newCluster->setPhi0(phimax);
+      newCluster->setClusterSize(xAOD::CaloCluster::SW_7_11);
+      
+    } else { 
+      // FWD cluster collection
+      
+      // check if cluster is in EMEC or FCAL 
+      if (cluster->inBarrel()) {
+	ATH_MSG_DEBUG(" Cluster is not in FWD; skip ");
+	continue;
+      } else {
+	ATH_MSG_DEBUG (" CLuster is FWD Cluster ");
+      }
+      
+      // check if cluster is in FCAL or EMEC
+      bool in_EMEC = false;
+      if (cluster->eSample(CaloSampling::EME2) > cluster->eSample(CaloSampling::FCAL0) )
+	in_EMEC = true;
+      
+      CaloSampling::CaloSample sam = CaloSampling::FCAL0;
+      if (in_EMEC) {
+	sam = CaloSampling::EME2;
+      } else {
+	sam = CaloSampling::FCAL0;
+      }
+      
+      // granularity in (eta,phi) in the pre sampler
+      // CaloCellList needs both enums: subCalo and CaloSample
+      auto eta = cluster->etaSample(sam);
+      auto phi = cluster->phiSample(sam);
+       
+      if ((eta == 0. && phi == 0.) || fabs(eta) > 100) {
+	return StatusCode::SUCCESS;
+      }
+      
+      // Should get overritten
+      bool emec = false;
+      CaloCell_ID::SUBCALO subcalo = CaloCell_ID::LARFCAL;
+      int sampling_or_module = 0;
+      
+      CaloDetDescrManager::decode_sample(subcalo, emec, sampling_or_module, (CaloCell_ID::CaloSample)sam);
+      
+      // Get the corresponding grannularities : needs to know where you are
+      //                  the easiest is to look for the CaloDetDescrElement
+      //    const CaloDetDescrElement* get_element_FCAL (const CaloDetDescriptor* reg, double eta, double phi) const;
+      const CaloDetDescrElement* dde =
+	dd_man->get_element(subcalo, sampling_or_module, emec, eta, phi);
+      
+      // if object does not exist then return
+      if (!dde) {
+	return StatusCode::SUCCESS;
+      }
+      
+      // local granularity
+      auto deta = dde->deta();
+      auto dphi = dde->dphi();
+      
+      // search the hottest cell around the (eta,phi)
+      // (eta,phi) are defined as etaSample() and phiSample
+      // around this position a hot cell is searched for in a window
+      // (m_neta*m_deta,m_nphi*m_dphi), by default (m_neta,m_nphi)=(6,6) 
+      // for EMEC-OUTER FWD much bigger cell size 
+      
+      // create the new cluster
+      xAOD::CaloCluster* newCluster =
+	CaloClusterStoreHelper::makeCluster(collection, cellcoll.ptr());
+      
+      // if In EMEC
+      CaloLayerCalculator calc;
+      StatusCode sc = calc.fill(*dd_man,
+				cellcoll.ptr(),
+				cluster->etaSample(sam),
+				cluster->phiSample(sam),
+				m_netaFWD * deta,
+				m_nphiFWD * dphi,
+				(CaloSampling::CaloSample)sam, in_EMEC ? newCluster : nullptr);
+      
+      if (sc.isFailure()) {
+	ATH_MSG_WARNING("CaloLayerCalculator failed  fill for FWD cluster");
+      }
+      double etamax = calc.etarmax();
+      double phimax = calc.phirmax();
+      
+      newCluster->setEta0(etamax);
+      newCluster->setPhi0(phimax);
+      
+      if (!in_EMEC) {
+	// If FCAL need to add cell to cluster in a cone
+	std::vector<const CaloCell*> cells;
+	cells.reserve(300);
+	CaloCellList myList(cellcoll.ptr());
+	myList.select(cluster->etaSample(sam), cluster->phiSample(sam), m_drFWD,(CaloSampling::CaloSample)sam);
+	//  myList.select(dde,newCluster->eta0(), newCluster->phi0(),m_drFWD,(CaloSampling::CaloSample)sam); 
+	cells.insert(cells.end(), myList.begin(), myList.end());
+	
+	for ( const auto *cell : cells ) {
+	  if( !cell || !cell->caloDDE() ) continue;
+	  int index = cellcoll.ptr()->findIndex(cell->caloDDE()->calo_hash());
+	  if( index == -1 ) continue;
+	  newCluster->addCell(index,1.);
+	}
+      }
+    }// end isFWD
+  }// main loop over clusters
   return StatusCode::SUCCESS;
 }
diff --git a/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.h b/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.h
index 6dc09bf413b721d3c77d27b6d411cc0de5fb4067..27c6d547a67f80251fb7ecfa0b2e5f24468c965e 100644
--- a/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.h
+++ b/Reconstruction/egamma/egammaTools/src/egammaLargeClusterMaker.h
@@ -51,6 +51,12 @@ private:
   /** @brief Cell container*/
   SG::ReadHandleKey<CaloCellContainer> m_cellsKey {this,
       "CellsName", "AllCalo", "Names of containers which contain cells"};
+
+  /** @brief do FWD cell **/
+  Gaudi::Property<bool> m_isFWD{ this,
+      "doFWDelesurraundingWindows",
+      false,
+      "Save FWD electron surraunding windows" };
   
   Gaudi::Property<double> m_neta {this, "Neta", 7.0,
       "Number of eta cells in each sampling in which to look for hottest cell"};
@@ -58,6 +64,15 @@ private:
   Gaudi::Property<double> m_nphi {this, "Nphi", 7.0,
       "Number of phi cell in each sampling in which to look for hottest cell"};
 
+  Gaudi::Property<double> m_netaFWD {this, "NetaFWD", 6.0,
+      "Number of eta cells in each sampling in which to look for hottest cell"};
+
+  Gaudi::Property<double> m_nphiFWD {this, "NphiFWD", 6.0,
+      "Number of phi cell in each sampling in which to look for hottest cell"};
+
+  Gaudi::Property<double> m_drFWD {this, "deltaR_FCAL", 0.4,
+      "Cone size to collec cell around hottest-cell FCAL"};
+
 
 };