diff --git a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
new file mode 100644
index 0000000000000000000000000000000000000000..58c0beb57ca7917cbe717901a61763eba5c1adaa
--- /dev/null
+++ b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
@@ -0,0 +1,91 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+
+from RngComps.RandomServices import RNG
+from IOVDbSvc.IOVDbSvcConfig import addFolders
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags
+from ISF_FastCaloSimServices.ISF_FastCaloSimHelpers import AdditionalParticleParametrizationFileNames
+
+# Initialize Athena logging
+from AthenaCommon.Logging import logging
+mlog = logging.getLogger('FastCaloSimFactory::configure:')
+
+def NIMatEffUpdatorCfg(flags, name="ISF_NIMatEffUpdator", **kwargs):
+    return CompFactory.Trk.NIMatEffUpdator(name, **kwargs)
+
+
+def NIPropagatorCfg(flags, name="ISF_NIPropagator", **kwargs):
+    mlog.info("Now configure the non-interacting propagator...")
+    kwargs.setdefault("MaterialEffects", False)
+    result = CompFactory.Trk.STEP_Propagator(name, **kwargs)
+    mlog.info("Configure non-interacting propagator finished.")
+    return result
+
+
+def NITimedExtrapolatorCfg(flags, name="ISF_NITimedExtrapolator", **kwargs):
+    mlog.info("Now configure the TimedExtrapolator...")
+    kwargs.setdefault("MaterialEffectsUpdators", [NIMatEffUpdatorCfg(flags)])
+    kwargs.setdefault("ApplyMaterialEffects", False)
+    kwargs.setdefault("STEP_Propagator", NIPropagatorCfg(flags))
+    result = CompFactory.Trk.TimedExtrapolator(name, **kwargs)
+    mlog.info("Configure TimedExtrapolator finished.")
+    return result
+
+
+# FastShowerCellBuilderTool
+def FastShowerCellBuilderToolBaseCfg(flags, name, **kwargs):
+
+    acc = RNG(flags.Random.Engine)
+    acc.merge(addFolders(flags, "/GLOBAL/AtlfastII/FastCaloSimParam", "GLOBAL_OFL", tag="FastCaloSim_v2"))
+    
+    localFileNameList = AdditionalParticleParametrizationFileNames()
+    localFileNameList.insert(0, "L1_L2_egamma_corr.config20.root")
+    kwargs.setdefault("AdditionalParticleParametrizationFileNames", localFileNameList)
+
+    kwargs.setdefault("RandomService", acc.getService("AthRNGSvc"))
+    kwargs.setdefault("RandomStreamName", "AthRNGSvc")
+    kwargs.setdefault("DoSimulWithInnerDetectorTruthOnly", True)
+    kwargs.setdefault("ID_cut_off_r", [1150])
+    kwargs.setdefault("ID_cut_off_z", [3490])
+    kwargs.setdefault("DoSimulWithInnerDetectorV14TruthCuts", True)
+    kwargs.setdefault("DoNewEnergyEtaSelection", True)
+    kwargs.setdefault("DoEnergyInterpolation", True)
+    kwargs.setdefault("use_Ekin_for_depositions", True)
+    kwargs.setdefault("McLocation", flags.Sim.FastShower.InputCollection)
+    kwargs.setdefault("ParticleParametrizationFileName", "")
+    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
+    # New kwarg from old FastCaloSimFactory
+    kwargs.setdefault("CaloEntrance", TrkDetFlags.InDetContainerName())
+
+    #######################################################################################################
+    #theFastShowerCellBuilderTool.Invisibles=[12, 14, 16, 1000022]
+    #########################################################################################################
+
+    acc.setPrivateTools(CompFactory.FastShowerCellBuilderTool(name, **kwargs))
+    return acc
+
+
+def FastShowerCellBuilderToolCfg(flags, **kwargs):
+
+    acc = FastShowerCellBuilderToolBaseCfg(flags, name="ISF_FastShowerCellBuilderTool", **kwargs)
+    tool = acc.popPrivateTools()
+
+    try:
+        ParticleParametrizationFileName = tool.ParticleParametrizationFileName
+    except Exception:
+        ParticleParametrizationFileName = ""
+
+    # TODO: Always False since len(Add...) = 636
+    if ParticleParametrizationFileName == "" and len(tool.AdditionalParticleParametrizationFileNames) == 0:
+        ParticleParametrizationFileName = "FastCaloSim/v1/ParticleEnergyParametrization.root"
+
+    tool.ParticleParametrizationFileName = ParticleParametrizationFileName
+
+    # TODO: Do we need this: very long output?
+    mlog.info("ParticleParametrizationFile: %s", ParticleParametrizationFileName)
+    mlog.verbose("all values:")
+    mlog.verbose(tool)
+
+    acc.setPrivateTools(tool)
+    return acc
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfigNew.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfigNew.py
index ef788f5baa81f30d597f5dc08be4c254a4117884..d68568a75c9d09f15a72190e4ed1175c15e709fd 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfigNew.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/python/ISF_FastCaloSimParametrizationConfigNew.py
@@ -3,14 +3,14 @@
 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentFactory import CompFactory
-
+from FastCaloSim.FastCaloSimFactoryNew import NITimedExtrapolatorCfg
 
 def FastCaloSimCaloExtrapolationCfg(flags, name="FastCaloSimCaloExtrapolation", **kwargs):
     kwargs.setdefault("CaloBoundaryR", [1148.0, 120.0, 41.0])
     kwargs.setdefault("CaloBoundaryZ", [3550.0, 4587.0, 4587.0])
     kwargs.setdefault("CaloMargin", 100)
-    kwargs.setdefault("Extrapolator", "TimedExtrapolator") # TODO prevent circular import with AdditionalConfigNew
-    kwargs.setdefault("CaloGeometryHelper", "FastCaloSimGeometryHelper")
+    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
+    kwargs.setdefault("CaloGeometryHelper", FastCaloSimGeometryHelperCfg(flags))
     kwargs.setdefault("CaloEntrance", "InDet::Containers::InnerDetector")
 
     return CompFactory.FastCaloSimCaloExtrapolation(name, **kwargs)
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
index 15887e9773b88561b664e5c0e03122eeadbbdac2..38f60d7b5de766c8abba229b1f5349655a26983e 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
@@ -19,3 +19,5 @@ atlas_add_component( ISF_FastCaloSimServices
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
 
+atlas_add_test( ISF_FastCaloSimServices_Config_test
+                SCRIPT test/FastCaloSimServices_test.py)
\ No newline at end of file
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfigNew.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimHelpers.py
similarity index 81%
rename from Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfigNew.py
rename to Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimHelpers.py
index 2e087553a8094839d412e9bae839701db5d9e5d7..e3b6c6a5307ed015aee7b9c6aa5623811c2a77ea 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfigNew.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimHelpers.py
@@ -1,18 +1,9 @@
-"""ComponentAccumulator additional configuration of tools for ISF_FastCaloSimServices
+"""ComponentAccumulator helper configuration for ISF_FastCaloSimServices
 
 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 """
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from AthenaConfiguration.ComponentFactory import CompFactory
-from RngComps.RandomServices import RNG
-from BarcodeServices.BarcodeServicesConfigNew import BarcodeSvcCfg
-from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg
-from IOVDbSvc.IOVDbSvcConfig import addFolders
-
-# TODO check this for new config
-from ISF_Algorithms.collection_merger_helpers import generate_mergeable_collection_name
-
 
+#TODO: Do we need this to be function or can it just be an array?
 def AdditionalParticleParametrizationFileNames():
     return [
       "DB=/GLOBAL/AtlfastII/FastCaloSimParam:2:EnergyResults/pdgid_211/EN_1000/eta_central",
@@ -651,288 +642,3 @@ def AdditionalParticleParametrizationFileNames():
       "DB=/GLOBAL/AtlfastII/FastCaloSimParam:2:ShapeResults/pdgid_211/EN_50000/calosample_17",
       "DB=/GLOBAL/AtlfastII/FastCaloSimParam:2:ShapeResults/pdgid_211/EN_50000/calosample_4",
       ]
-
-
-# definitions taken from file:
-#   FastSimulationJobTransforms/jobConfig.FastCaloSim_DB.py
-def setAdditionalParticleParametrizationFileNames(FastShowerCellBuilderTool):
-    FastShowerCellBuilderTool.AdditionalParticleParametrizationFileNames = AdditionalParticleParametrizationFileNames()
-
-
-def PunchThroughToolCfg(flags, name="ISF_PunchThroughTool", **kwargs):
-    acc = RNG(flags.Random.Engine)
-    kwargs.setdefault("RandomNumberService", acc.getService("AthRNGSvc"))
-    kwargs.setdefault("RandomStreamName", "AthRNGSvc") # TODO check
-    kwargs.setdefault("FilenameLookupTable", "CaloPunchThroughParametrisation.root")
-    kwargs.setdefault("PunchThroughInitiators", [211])
-    kwargs.setdefault("PunchThroughParticles", [   2212,     211,      22,      11,      13])
-    kwargs.setdefault("DoAntiParticles"      , [  False,    True,   False,    True,    True])
-    kwargs.setdefault("CorrelatedParticle"   , [    211,    2212,      11,      22,       0])
-    kwargs.setdefault("FullCorrelationEnergy", [100000., 100000., 100000., 100000.,      0.])
-    kwargs.setdefault("MinEnergy"            , [  938.3,   135.6,     50.,     50.,   105.7])
-    kwargs.setdefault("MaxNumParticles"      , [     -1,      -1,      -1,      -1,      -1])
-    kwargs.setdefault("EnergyFactor"         , [     1.,      1.,      1.,      1.,      1.])
-    acc_bar = BarcodeSvcCfg(flags)
-    kwargs.setdefault("BarcodeSvc", acc_bar.getPrimary())
-    acc.merge(acc_bar)
-    acc.merge(EnvelopeDefSvcCfg(flags))
-    kwargs.setdefault("EnvelopeDefSvc", acc.getService("AtlasGeometry_EnvelopeDefSvc"))
-    kwargs.setdefault("BeamPipeRadius", 500.)
-    acc.setPrivateTools(CompFactory.ISF.PunchThroughTool(name, **kwargs))
-    return acc
-
-
-def EmptyCellBuilderToolCfg(flags, name="ISF_EmptyCellBuilderTool", **kwargs):
-    return CompFactory.EmptyCellBuilderTool(name, **kwargs)
-
-
-def NIMatEffUpdatorCfg(flags, name="ISF_NIMatEffUpdator", **kwargs):
-    return CompFactory.Trk.NIMatEffUpdator(name, **kwargs)
-
-
-def NIPropagatorCfg(flags, name="ISF_NIPropagator", **kwargs):
-    kwargs.setdefault("MaterialEffects", False)
-    return CompFactory.Trk.STEP_Propagator(name, **kwargs)
-
-
-def NITimedExtrapolatorCfg(flags, name="ISF_NITimedExtrapolator", **kwargs):
-    kwargs.setdefault("MaterialEffectsUpdators", [NIMatEffUpdatorCfg(flags)])
-    kwargs.setdefault("ApplyMaterialEffects", False)
-    kwargs.setdefault("STEP_Propagator", NIPropagatorCfg(flags))
-    return CompFactory.Trk.TimedExtrapolator(name, **kwargs)
-
-
-def TimedExtrapolatorCfg(flags, name="TimedExtrapolator", **kwargs):
-    kwargs.setdefault("MaterialEffectsUpdators", [NIMatEffUpdatorCfg(flags)])
-    kwargs.setdefault("ApplyMaterialEffects", False )
-    kwargs.setdefault("STEP_Propagator", NIPropagatorCfg(flags))
-    return CompFactory.Trk.TimedExtrapolator(name, **kwargs)
-
-
-# FastShowerCellBuilderTool
-def DefaultFastShowerCellBuilderToolCfg(flags, name, **kwargs):
-    acc = RNG(flags.Random.Engine)
-    kwargs.setdefault("RandomService", acc.getService("AthRNGSvc"))
-    kwargs.setdefault("RandomStreamName", "AthRNGSvc") # TODO check
-    kwargs.setdefault("DoSimulWithInnerDetectorTruthOnly", True)
-    kwargs.setdefault("ID_cut_off_r", [1150])
-    kwargs.setdefault("ID_cut_off_z", [3490])
-    kwargs.setdefault("DoSimulWithInnerDetectorV14TruthCuts", True)
-    kwargs.setdefault("DoNewEnergyEtaSelection", True)
-    kwargs.setdefault("DoEnergyInterpolation", True)
-    kwargs.setdefault("use_Ekin_for_depositions", True)
-    kwargs.setdefault("McLocation", flags.Sim.FastShower.InputCollection)
-    kwargs.setdefault("ParticleParametrizationFileName", "")
-    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
-    # TODO migrate
-    from FastCaloSim.FastCaloSimFactory import FastCaloSimFactory
-    return FastCaloSimFactory(name, **kwargs)
-
-
-def FastShowerCellBuilderToolCfg(flags, name="ISF_FastShowerCellBuilderTool", **kwargs):
-    localFileNameList = AdditionalParticleParametrizationFileNames()
-    localFileNameList.insert(0,"L1_L2_egamma_corr.config20.root")
-    kwargs.setdefault("AdditionalParticleParametrizationFileNames", localFileNameList)
-    acc = addFolders(flags, "/GLOBAL/AtlfastII/FastCaloSimParam", "GLOBAL_OFL", tag="FastCaloSim_v2")
-    acc.setPrivateTools(DefaultFastShowerCellBuilderToolCfg(flags, name, **kwargs)) # TODO
-    return acc
-
-
-def LegacyFastShowerCellBuilderToolCfg(flags, name="ISF_LegacyFastShowerCellBuilderTool", **kwargs):
-    acc = FastShowerCellBuilderToolCfg(flags, name, **kwargs)
-    FastShowerCellBuilderTool = acc.popPrivateTools()
-    FastShowerCellBuilderTool.Invisibles += [13]
-    acc.setPrivateTools(FastShowerCellBuilderTool)
-    return acc
-
-
-def PileupFastShowerCellBuilderToolCfg(flags, name="ISF_PileupFastShowerCellBuilderTool", **kwargs):
-    # weights from: FIXME dead link
-    # http://acode-browser.usatlas.bnl.gov/lxr/source/atlas/Simulation/FastShower/FastCaloSim/FastCaloSim/FastCaloSim_CaloCell_ID.h
-    weightsfcs = [
-      ### LAr presampler
-      #FirstSample=CaloCell_ID::PreSamplerB,
-      2.0,
-      ### LAr barrel
-      #PreSamplerB=CaloCell_ID::PreSamplerB,
-      #EMB1=CaloCell_ID::EMB1,
-      #EMB2=CaloCell_ID::EMB2,
-      #EMB3=CaloCell_ID::EMB3,
-      2.0, 2.0, 2.0, 2.0,
-      ### LAr EM endcap
-      #PreSamplerE=CaloCell_ID::PreSamplerE,
-      #EME1=CaloCell_ID::EME1,
-      #EME2=CaloCell_ID::EME2,
-      #EME3=CaloCell_ID::EME3,
-      2.0, 2.0, 2.0, 2.0,
-      ### Hadronic end cap cal.
-      #HEC0=CaloCell_ID::HEC0,
-      #HEC1=CaloCell_ID::HEC1,
-      #HEC2=CaloCell_ID::HEC2,
-      #HEC3=CaloCell_ID::HEC3,
-      2.0, 2.0, 2.0, 2.0,
-      ### Tile barrel
-      #TileBar0=CaloCell_ID::TileBar0,
-      #TileBar1=CaloCell_ID::TileBar1,
-      #TileBar2=CaloCell_ID::TileBar2,
-      1.0, 1.0, 1.0,
-      ### Tile gap (ITC & scint)
-      #TileGap1=CaloCell_ID::TileGap1,
-      #TileGap2=CaloCell_ID::TileGap2,
-      #TileGap3=CaloCell_ID::TileGap3,
-      1.0, 1.0, 1.0,
-      ### Tile extended barrel
-      #TileExt0=CaloCell_ID::TileExt0,
-      #TileExt1=CaloCell_ID::TileExt1,
-      #TileExt2=CaloCell_ID::TileExt2,
-      1.0, 1.0, 1.0,
-      ### Forward EM endcap
-      #FCAL0=CaloCell_ID::FCAL0,
-      #FCAL1=CaloCell_ID::FCAL1,
-      #FCAL2=CaloCell_ID::FCAL2,
-      1.0, 1.0, 1.0,
-      ### Beware of MiniFCAL! We don"t have it, so different numbers after FCAL2
-      #LastSample = CaloCell_ID::FCAL2,
-      #MaxSample = LastSample+1
-      1.0, 1.0,
-    ]
-
-    kwargs.setdefault("sampling_energy_reweighting", weightsfcs )
-    return FastShowerCellBuilderToolCfg(flags, name, **kwargs)
-
-
-# TODO
-def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs):
-    mergeable_collection_suffix = "_FastCaloSim"
-
-    EMB_hits_bare_collection_name = "LArHitEMB"
-    EMB_hits_merger_input_property = "LArEMBHits"
-    EMB_hits_collection_name = generate_mergeable_collection_name(
-        EMB_hits_bare_collection_name,
-        mergeable_collection_suffix,
-        EMB_hits_merger_input_property)
-
-    EMEC_hits_bare_collection_name = "LArHitEMEC"
-    EMEC_hits_merger_input_property = "LArEMECHits"
-    EMEC_hits_collection_name = generate_mergeable_collection_name(
-        EMEC_hits_bare_collection_name,
-        mergeable_collection_suffix,
-        EMEC_hits_merger_input_property)
-
-    FCAL_hits_bare_collection_name = "LArHitFCAL"
-    FCAL_hits_merger_input_property = "LArFCALHits"
-    FCAL_hits_collection_name = generate_mergeable_collection_name(
-        FCAL_hits_bare_collection_name,
-        mergeable_collection_suffix,
-        FCAL_hits_merger_input_property)
-
-    HEC_hits_bare_collection_name = "LArHitHEC"
-    HEC_hits_merger_input_property = "LArHECHits"
-    HEC_hits_collection_name = generate_mergeable_collection_name(
-        HEC_hits_bare_collection_name,
-        mergeable_collection_suffix,
-        HEC_hits_merger_input_property)
-
-    tile_hits_bare_collection_name = "TileHitVec"
-    tile_hits_merger_input_property = "TileHits"
-    tile_hits_collection_name = generate_mergeable_collection_name(
-        tile_hits_bare_collection_name,
-        mergeable_collection_suffix,
-        tile_hits_merger_input_property)
-
-    kwargs.setdefault("embHitContainername", EMB_hits_collection_name)
-    kwargs.setdefault("emecHitContainername", EMEC_hits_collection_name)
-    kwargs.setdefault("fcalHitContainername", FCAL_hits_collection_name)
-    kwargs.setdefault("hecHitContainername", HEC_hits_collection_name)
-    kwargs.setdefault("tileHitContainername", tile_hits_collection_name)
-
-    return CompFactory.FastHitConvertTool(name,**kwargs)
-
-
-def CaloNoiseToolCfg(flags, name="ISF_FCS_CaloNoiseTool", **kwargs):
-    # TODO
-    from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
-    return CaloNoiseToolDefault(name, **kwargs)
-
-
-def AddNoiseCellBuilderToolCfg(flags, name="ISF_AddNoiseCellBuilderTool", **kwargs):
-    # TODO
-    from FastCaloSim.AddNoiseCellBuilderToolDefault import AddNoiseCellBuilderToolDefault
-    return AddNoiseCellBuilderToolDefault(name, **kwargs)
-
-
-def CaloCellContainerFinalizerToolCfg(flags, name="ISF_CaloCellContainerFinalizerTool", **kwargs):
-    return CompFactory.CaloCellContainerFinalizerTool(name, **kwargs)
-
-
-def CaloCellContainerFCSFinalizerToolCfg(flags, name="ISF_CaloCellContainerFCSFinalizerTool", **kwargs):
-    return CompFactory.CaloCellContainerFCSFinalizerTool(name, **kwargs)
-
-
-def FastHitConvAlgCfg(flags, name="ISF_FastHitConvAlg", **kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("CaloCellsInputName"  , flags.Sim.FastCalo.CaloCellsName)
-    # TODO: do we need this?
-    #from AthenaCommon.DetFlags import DetFlags
-    #if DetFlags.pileup.LAr_on() or DetFlags.pileup.Tile_on():
-    #  kwargs.setdefault("doPileup", True)
-    #else:
-    #  kwargs.setdefault("doPileup", False)
-    acc.addEventAlgo(CompFactory.FastHitConv(name, **kwargs))
-    return acc
-
-
-def FastCaloToolBaseCfg(flags, name="ISF_FastCaloToolBase", **kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("BatchProcessMcTruth"              , False)
-    kwargs.setdefault("SimulateUndefinedBarcodeParticles", False)
-    kwargs.setdefault("CaloCellsOutputName"              , flags.Sim.FastCalo.CaloCellsName)
-    kwargs.setdefault("PunchThroughTool"                 , acc.popToolsAndMerge(PunchThroughToolCfg(flags)))
-    kwargs.setdefault("DoPunchThroughSimulation"         , False)
-    kwargs.setdefault("CaloCellMakerTools_setup"         , [EmptyCellBuilderToolCfg(flags)])
-    tool = acc.popToolsAndMerge(FastShowerCellBuilderToolCfg(flags))
-    kwargs.setdefault("CaloCellMakerTools_simulate"      , [tool])
-    # TODO
-    kwargs.setdefault("CaloCellMakerTools_release"       , [#"ISF_AddNoiseCellBuilderTool",
-                                                            CaloCellContainerFinalizerToolCfg(flags),
-                                                            FastHitConvertToolCfg(flags)])
-    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
-    # FIXME not migrated. Remove or replace
-    # register the FastCaloSim random number streams
-    #from G4AtlasApps.SimFlags import simFlags
-    #if not simFlags.RandomSeedList.checkForExistingSeed(ISF_FastCaloSimFlags.RandomStreamName()):
-        #simFlags.RandomSeedList.addSeed( ISF_FastCaloSimFlags.RandomStreamName(), 98346412, 12461240)
-    return CompFactory.ISF.FastCaloTool(name, **kwargs)
-
-def FastCaloToolCfg(flags, name="ISF_FastCaloTool", **kwargs):
-    return FastCaloToolBaseCfg(flags, name, **kwargs)
-
-def FastCaloPileupToolCfg(flags, name="ISF_FastCaloPileupTool", **kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName + "PileUp")
-    tool = acc.popToolsAndMerge(PileupFastShowerCellBuilderToolCfg(flags))
-    kwargs.setdefault("CaloCellMakerTools_simulate", [tool])
-    acc.merge(FastCaloToolBaseCfg(name, **kwargs))
-    return acc
-
-def LegacyAFIIFastCaloToolCfg(flags, name="ISF_LegacyAFIIFastCaloTool", **kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("BatchProcessMcTruth", True)
-    tool = acc.popToolsAndMerge(LegacyFastShowerCellBuilderToolCfg(flags))
-    kwargs.setdefault("CaloCellMakerTools_simulate", [tool])
-    acc.merge(FastCaloToolBaseCfg(name, **kwargs))
-    return acc
-
-def FastCaloSimV2ToolCfg(flags, name="ISF_FastCaloSimV2Tool", **kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName)
-    kwargs.setdefault("CaloCellMakerTools_setup", [EmptyCellBuilderToolCfg(flags)] )
-    kwargs.setdefault("CaloCellMakerTools_release", [CaloCellContainerFCSFinalizerToolCfg(flags),
-                                                     FastHitConvertToolCfg(flags)])
-    kwargs.setdefault("FastCaloSimCaloExtrapolation", "FastCaloSimCaloExtrapolation") # tool TODO
-    kwargs.setdefault("ParamSvc", "ISF_FastCaloSimV2ParamSvc") # TODO
-    acc.merge(RNG(flags.Random.Engine))
-    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc"))
-    kwargs.setdefault("RandomStream", "AthRNGSvc") # TODO check
-    kwargs.setdefault("PunchThroughTool", acc.popToolsAndMerge(PunchThroughToolCfg(flags)))
-    return CompFactory.ISF.FastCaloSimV2Tool(name, **kwargs)
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py
index eb6e3147be2aaab1066ea912a84143e17fb039fb..a7b7b92c50daa7b38c6713c3e83536925d575f4d 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py
@@ -6,41 +6,297 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from RngComps.RandomServices import RNG
 
+###################################################################################################
+# Moved from AdditionalConfigNew
+
+from ISF_FastCaloSimParametrization.ISF_FastCaloSimParametrizationConfigNew import FastCaloSimCaloExtrapolationCfg
+from FastCaloSim.FastCaloSimFactoryNew import (NITimedExtrapolatorCfg,
+                                               FastShowerCellBuilderToolCfg)
+
+
+def PunchThroughToolCfg(flags, name="ISF_PunchThroughTool", **kwargs):
+
+    from BarcodeServices.BarcodeServicesConfigNew import BarcodeSvcCfg
+    from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg
+
+    acc = RNG(flags.Random.Engine)
+    kwargs.setdefault("RandomNumberService", acc.getService("AthRNGSvc"))
+    kwargs.setdefault("RandomStreamName", "AthRNGSvc") # TODO check
+    kwargs.setdefault("FilenameLookupTable", "CaloPunchThroughParametrisation.root")
+    kwargs.setdefault("PunchThroughInitiators", [211])
+    kwargs.setdefault("PunchThroughParticles", [   2212,     211,      22,      11,      13])
+    kwargs.setdefault("DoAntiParticles"      , [  False,    True,   False,    True,    True])
+    kwargs.setdefault("CorrelatedParticle"   , [    211,    2212,      11,      22,       0])
+    kwargs.setdefault("FullCorrelationEnergy", [100000., 100000., 100000., 100000.,      0.])
+    kwargs.setdefault("MinEnergy"            , [  938.3,   135.6,     50.,     50.,   105.7])
+    kwargs.setdefault("MaxNumParticles"      , [     -1,      -1,      -1,      -1,      -1])
+    kwargs.setdefault("EnergyFactor"         , [     1.,      1.,      1.,      1.,      1.])
+    acc_bar = BarcodeSvcCfg(flags)
+    kwargs.setdefault("BarcodeSvc", acc_bar.getPrimary())
+    acc.merge(acc_bar)
+    acc.merge(EnvelopeDefSvcCfg(flags))
+    kwargs.setdefault("EnvelopeDefSvc", acc.getService("AtlasGeometry_EnvelopeDefSvc"))
+    kwargs.setdefault("BeamPipeRadius", 500.)
+    acc.setPrivateTools(CompFactory.ISF.PunchThroughTool(name, **kwargs))
+    return acc
+
+
+def EmptyCellBuilderToolCfg(flags, name="ISF_EmptyCellBuilderTool", **kwargs):
+    return CompFactory.EmptyCellBuilderTool(name, **kwargs)
+
+
+def LegacyFastShowerCellBuilderToolCfg(flags, name="ISF_LegacyFastShowerCellBuilderTool", **kwargs):
+    acc = FastShowerCellBuilderToolCfg(flags, name, **kwargs)
+    FastShowerCellBuilderTool = acc.popPrivateTools()
+    FastShowerCellBuilderTool.Invisibles += [13]
+    acc.setPrivateTools(FastShowerCellBuilderTool)
+    return acc
+
+def PileupFastShowerCellBuilderToolCfg(flags, name="ISF_PileupFastShowerCellBuilderTool", **kwargs):
+    # weights from:
+    # https://acode-browser.usatlas.bnl.gov/lxr/source/athena/Simulation/FastShower/FastCaloSim/FastCaloSim/FastCaloSim_CaloCell_ID.h
+    weightsfcs = [
+      ### LAr presampler
+      #FirstSample=CaloCell_ID::PreSamplerB,
+      2.0,
+      ### LAr barrel
+      #PreSamplerB=CaloCell_ID::PreSamplerB,
+      #EMB1=CaloCell_ID::EMB1,
+      #EMB2=CaloCell_ID::EMB2,
+      #EMB3=CaloCell_ID::EMB3,
+      2.0, 2.0, 2.0, 2.0,
+      ### LAr EM endcap
+      #PreSamplerE=CaloCell_ID::PreSamplerE,
+      #EME1=CaloCell_ID::EME1,
+      #EME2=CaloCell_ID::EME2,
+      #EME3=CaloCell_ID::EME3,
+      2.0, 2.0, 2.0, 2.0,
+      ### Hadronic end cap cal.
+      #HEC0=CaloCell_ID::HEC0,
+      #HEC1=CaloCell_ID::HEC1,
+      #HEC2=CaloCell_ID::HEC2,
+      #HEC3=CaloCell_ID::HEC3,
+      2.0, 2.0, 2.0, 2.0,
+      ### Tile barrel
+      #TileBar0=CaloCell_ID::TileBar0,
+      #TileBar1=CaloCell_ID::TileBar1,
+      #TileBar2=CaloCell_ID::TileBar2,
+      1.0, 1.0, 1.0,
+      ### Tile gap (ITC & scint)
+      #TileGap1=CaloCell_ID::TileGap1,
+      #TileGap2=CaloCell_ID::TileGap2,
+      #TileGap3=CaloCell_ID::TileGap3,
+      1.0, 1.0, 1.0,
+      ### Tile extended barrel
+      #TileExt0=CaloCell_ID::TileExt0,
+      #TileExt1=CaloCell_ID::TileExt1,
+      #TileExt2=CaloCell_ID::TileExt2,
+      1.0, 1.0, 1.0,
+      ### Forward EM endcap
+      #FCAL0=CaloCell_ID::FCAL0,
+      #FCAL1=CaloCell_ID::FCAL1,
+      #FCAL2=CaloCell_ID::FCAL2,
+      1.0, 1.0, 1.0,
+      ### Beware of MiniFCAL! We don"t have it, so different numbers after FCAL2
+      #LastSample = CaloCell_ID::FCAL2,
+      #MaxSample = LastSample+1
+      1.0, 1.0,
+    ]
+
+    kwargs.setdefault("sampling_energy_reweighting", weightsfcs )
+    return FastShowerCellBuilderToolCfg(flags, name, **kwargs)
+
+def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs):
+    from ISF_Algorithms.collection_merger_helpersNew import CollectionMergerCfg
+
+    acc = ComponentAccumulator()
+    mergeable_collection_suffix = "_FastCaloSim"
+
+    EMB_hits_bare_collection_name = "LArHitEMB"
+    EMB_hits_merger_input_property = "LArEMBHits"
+    acc1, EMB_hits_collection_name = CollectionMergerCfg(
+        flags,
+        EMB_hits_bare_collection_name,
+        mergeable_collection_suffix,
+        EMB_hits_merger_input_property)
+    acc.merge(acc1)
+
+    EMEC_hits_bare_collection_name = "LArHitEMEC"
+    EMEC_hits_merger_input_property = "LArEMECHits"
+    acc2, EMEC_hits_collection_name = CollectionMergerCfg(
+        flags,
+        EMEC_hits_bare_collection_name,
+        mergeable_collection_suffix,
+        EMEC_hits_merger_input_property)
+    acc.merge(acc2)
+
+    FCAL_hits_bare_collection_name = "LArHitFCAL"
+    FCAL_hits_merger_input_property = "LArFCALHits"
+    acc3, FCAL_hits_collection_name = CollectionMergerCfg(
+        flags,
+        FCAL_hits_bare_collection_name,
+        mergeable_collection_suffix,
+        FCAL_hits_merger_input_property)
+    acc.merge(acc3)
+
+    HEC_hits_bare_collection_name = "LArHitHEC"
+    HEC_hits_merger_input_property = "LArHECHits"
+    acc4, HEC_hits_collection_name = CollectionMergerCfg(
+        flags,
+        HEC_hits_bare_collection_name,
+        mergeable_collection_suffix,
+        HEC_hits_merger_input_property)
+    acc.merge(acc4)
+
+    tile_hits_bare_collection_name = "TileHitVec"
+    tile_hits_merger_input_property = "TileHits"
+    acc5, tile_hits_collection_name = CollectionMergerCfg(
+        flags,
+        tile_hits_bare_collection_name,
+        mergeable_collection_suffix,
+        tile_hits_merger_input_property)
+    acc.merge(acc5)
+
+    kwargs.setdefault("embHitContainername", EMB_hits_collection_name)
+    kwargs.setdefault("emecHitContainername", EMEC_hits_collection_name)
+    kwargs.setdefault("fcalHitContainername", FCAL_hits_collection_name)
+    kwargs.setdefault("hecHitContainername", HEC_hits_collection_name)
+    kwargs.setdefault("tileHitContainername", tile_hits_collection_name)
+
+    acc.setPrivateTools(CompFactory.FastHitConvertTool(name, **kwargs))
+    return acc
+
+# TODO: do we need this - nowhere called?
+# def CaloNoiseToolCfg(flags, name="ISF_FCS_CaloNoiseTool", **kwargs):
+#     from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
+#     return CaloNoiseToolDefault(name, **kwargs)
+
+
+def AddNoiseCellBuilderToolCfg(flags, name="ISF_AddNoiseCellBuilderTool", **kwargs):
+    from FastCaloSim.AddNoiseCellBuilderToolConfig import AddNoiseCellBuilderToolCfg
+    return AddNoiseCellBuilderToolCfg(flags)
+
+
+def CaloCellContainerFinalizerToolCfg(flags, name="ISF_CaloCellContainerFinalizerTool", **kwargs):
+    return CompFactory.CaloCellContainerFinalizerTool(name, **kwargs)
+
+
+def CaloCellContainerFCSFinalizerToolCfg(flags, name="ISF_CaloCellContainerFCSFinalizerTool", **kwargs):
+    return CompFactory.CaloCellContainerFCSFinalizerTool(name, **kwargs)
+
+
+def FastHitConvAlgCfg(flags, name="ISF_FastHitConvAlg", **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("CaloCellsInputName"  , flags.Sim.FastCalo.CaloCellsName)
+    # TODO: do we need this?
+    #from AthenaCommon.DetFlags import DetFlags
+    #if DetFlags.pileup.LAr_on() or DetFlags.pileup.Tile_on():
+    #  kwargs.setdefault("doPileup", True)
+    #else:
+    #  kwargs.setdefault("doPileup", False)
+    acc.addEventAlgo(CompFactory.FastHitConv(name, **kwargs))
+    return acc
+
+
+def FastCaloToolBaseCfg(flags, name="ISF_FastCaloTool", **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("BatchProcessMcTruth"              , False)
+    kwargs.setdefault("SimulateUndefinedBarcodeParticles", False)
+    kwargs.setdefault("CaloCellsOutputName"              , flags.Sim.FastCalo.CaloCellsName)
+    kwargs.setdefault("PunchThroughTool"                 , acc.popToolsAndMerge(PunchThroughToolCfg(flags)))
+    kwargs.setdefault("DoPunchThroughSimulation"         , False)
+    kwargs.setdefault("CaloCellMakerTools_setup"         , [EmptyCellBuilderToolCfg(flags)])
+    kwargs.setdefault("CaloCellMakerTools_simulate"      , [acc.popToolsAndMerge(FastShowerCellBuilderToolCfg(flags))])
+    kwargs.setdefault("CaloCellMakerTools_release"       , [# AddNoiseCellBuilderToolCfg(flags)",
+                                                            CaloCellContainerFinalizerToolCfg(flags),
+                                                            acc.popToolsAndMerge(FastHitConvertToolCfg(flags))])
+    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
+    # FIXME not migrated. Remove or replace
+    # register the FastCaloSim random number streams
+    #from G4AtlasApps.SimFlags import simFlags
+    #if not simFlags.RandomSeedList.checkForExistingSeed(ISF_FastCaloSimFlags.RandomStreamName()):
+        #simFlags.RandomSeedList.addSeed( ISF_FastCaloSimFlags.RandomStreamName(), 98346412, 12461240)
+    acc.setPrivateTools(CompFactory.ISF.FastCaloTool(name, **kwargs))
+    return acc
+
+# TODO: Do we need this - can we only call FastCaloToolBaseCfg?
+# def FastCaloToolCfg(flags, name="ISF_FastCaloTool", **kwargs):
+#     return FastCaloToolBaseCfg(flags, name, **kwargs)
+
+def FastCaloPileupToolCfg(flags, name="ISF_FastCaloPileupTool", **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName + "PileUp")
+    tool = acc.popToolsAndMerge(PileupFastShowerCellBuilderToolCfg(flags))
+    kwargs.setdefault("CaloCellMakerTools_simulate", [tool])
+    acc.merge(FastCaloToolBaseCfg(name, **kwargs))
+    return acc
+
+def LegacyAFIIFastCaloToolCfg(flags, name="ISF_LegacyAFIIFastCaloTool", **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("BatchProcessMcTruth", True)
+    tool = acc.popToolsAndMerge(LegacyFastShowerCellBuilderToolCfg(flags))
+    kwargs.setdefault("CaloCellMakerTools_simulate", [tool])
+    acc.merge(FastCaloToolBaseCfg(name, **kwargs))
+    return acc
+
+def FastCaloSimV2ToolCfg(flags, name="ISF_FastCaloSimV2Tool", **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName)
+    kwargs.setdefault("CaloCellMakerTools_setup", [EmptyCellBuilderToolCfg(flags)] )
+    kwargs.setdefault("CaloCellMakerTools_release", [CaloCellContainerFCSFinalizerToolCfg(flags),
+                                                     acc.popToolsAndMerge(FastHitConvertToolCfg(flags))])
+    kwargs.setdefault("FastCaloSimCaloExtrapolation", FastCaloSimCaloExtrapolationCfg(flags))
+    kwargs.setdefault("ParamSvc", acc.popToolsAndMerge(FastCaloSimV2ParamSvcCfg(flags)))
+    acc.merge(RNG(flags.Random.Engine))
+    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc"))
+    kwargs.setdefault("RandomStream", "AthRNGSvc") # TODO check
+    kwargs.setdefault("PunchThroughTool", acc.popToolsAndMerge(PunchThroughToolCfg(flags)))
+
+    acc.setPrivateTools(CompFactory.ISF.FastCaloSimV2Tool(name, **kwargs))
+    return acc
+
+###################################################################################################
+# Config
 
 def FastCaloSimSvcCfg(flags, name="ISF_FastCaloSimSvc", **kwargs):
     acc = ComponentAccumulator()
-    kwargs.setdefault("SimulatorTool", "ISF_FastCaloTool")
+    if "SimulatorTool" not in kwargs:
+        tool = acc.popToolsAndMerge(FastCaloToolBaseCfg(flags))
+        kwargs.setdefault("SimulatorTool", tool)
     kwargs.setdefault("Identifier", "FastCaloSim")
     acc.addService(CompFactory.ISF.LegacySimSvc(name, **kwargs))
     return acc
 
 
 def FastCaloSimPileupSvcCfg(flags, name="ISF_FastCaloSimPileupSvc", **kwargs):
-    kwargs.setdefault("SimulatorTool", "ISF_FastCaloPileupTool")
-    return FastCaloSimSvcCfg(flags, name, **kwargs)
+    acc1 = FastCaloPileupToolCfg(flags)
+    kwargs.setdefault("SimulatorTool", acc1.popPrivateTools())
+    acc = FastCaloSimSvcCfg(flags, name, **kwargs)
+    acc.merge(acc1)
+    return acc
 
 
 def LegacyAFIIFastCaloSimSvcCfg(flags, name="ISF_LegacyAFIIFastCaloSimSvc", **kwargs):
-    kwargs.setdefault("SimulatorTool", "ISF_LegacyAFIIFastCaloTool")
-    return FastCaloSimSvcCfg(flags, name, **kwargs)
+    acc1 = LegacyAFIIFastCaloToolCfg(flags)
+    kwargs.setdefault("SimulatorTool", acc1.popPrivateTools())
+    acc = FastCaloSimSvcCfg(flags, name, **kwargs)
+    acc.merge(acc1)
+    return acc
 
 
 def FastHitConvAlgFastCaloSimSvcCfg(flags, name="ISF_FastHitConvAlgFastCaloSimSvc",**kwargs):
-    acc = ComponentAccumulator()
-    kwargs.setdefault("CaloCellMakerTools_release", ["ISF_AddNoiseCellBuilderTool",
-                                                     "ISF_CaloCellContainerFCSFinalizerTool"])
+    acc1 = FastHitConvAlgCfg(flags)
+    kwargs.setdefault("CaloCellMakerTools_release", [AddNoiseCellBuilderToolCfg(flags),
+                                                     CaloCellContainerFCSFinalizerToolCfg(flags)])
     # setup FastCaloSim hit converter and add it to the alg sequence:
     # -> creates HITS from reco cells
-    from AthenaCommon.AlgSequence import AlgSequence
-    topSequence=AlgSequence()
-    from AthenaCommon.CfgGetter import getAlgorithm
-    topSequence+=getAlgorithm("ISF_FastHitConvAlg")
-    acc.merge(FastCaloSimSvcCfg(flags, name, **kwargs))
+    acc = FastCaloSimSvcCfg(flags, name, **kwargs)
+    acc.merge(acc1)
     return acc
 
 
 def FastHitConvAlgLegacyAFIIFastCaloSimSvcCfg(flags, name="ISF_FastHitConvAlgLegacyAFIIFastCaloSimSvc", **kwargs):
-    kwargs.setdefault("BatchProcessMcTruth", True)
+    kwargs.setdefault("BatchProcessMcTruth", True) #TODO: This seems not to exist
     return FastHitConvAlgFastCaloSimSvcCfg(flags, name, **kwargs)
 
 
@@ -50,18 +306,18 @@ def FastCaloSimPileupOTSvcCfg(flags, name="ISF_FastCaloSimPileupOTSvc", **kwargs
     kwargs.setdefault("SimulateUndefinedBarcodeParticles", False)
     kwargs.setdefault("Identifier", "FastCaloSim")
     kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName + "PileUp")
-    kwargs.setdefault("PunchThroughTool", "ISF_PunchThroughTool")
+    kwargs.setdefault("PunchThroughTool", acc.popToolsAndMerge(PunchThroughToolCfg(flags)))
     kwargs.setdefault("DoPunchThroughSimulation", False)
     kwargs.setdefault("PUWeights_lar_bapre", flags.Sim.FastChain.PUWeights_lar_bapre)
     kwargs.setdefault("PUWeights_lar_hec", flags.Sim.FastChain.PUWeights_lar_hec)
     kwargs.setdefault("PUWeights_lar_em", flags.Sim.FastChain.PUWeights_lar_em)
     kwargs.setdefault("PUWeights_tile", flags.Sim.FastChain.PUWeights_tile)
-    kwargs.setdefault("CaloCellMakerTools_setup", ["ISF_EmptyCellBuilderTool"])
-    kwargs.setdefault("CaloCellMakerTools_simulate", ["ISF_FastShowerCellBuilderTool"])
-    kwargs.setdefault("CaloCellMakerTools_release", [#"ISF_AddNoiseCellBuilderTool",
-                                                     "ISF_CaloCellContainerFCSFinalizerTool",
-                                                     "ISF_FastHitConvertTool"])
-    kwargs.setdefault("Extrapolator", "ISF_NITimedExtrapolator")
+    kwargs.setdefault("CaloCellMakerTools_setup", [EmptyCellBuilderToolCfg(flags)])
+    kwargs.setdefault("CaloCellMakerTools_simulate", [acc.popToolsAndMerge(FastShowerCellBuilderToolCfg(flags))])
+    kwargs.setdefault("CaloCellMakerTools_release", [ # AddNoiseCellBuilderToolCfg(flags),
+                                                     CaloCellContainerFCSFinalizerToolCfg(flags),
+                                                     acc.popToolsAndMerge(FastHitConvertToolCfg(flags))])
+    kwargs.setdefault("Extrapolator", NITimedExtrapolatorCfg(flags))
     # FIXME not migrated. Remove or replace
     # register the FastCaloSim random number streams
     #from G4AtlasApps.SimFlags import simFlags
@@ -73,15 +329,15 @@ def FastCaloSimPileupOTSvcCfg(flags, name="ISF_FastCaloSimPileupOTSvc", **kwargs
 
 def FastCaloSimV2ParamSvcCfg(flags, name="ISF_FastCaloSimV2ParamSvc", **kwargs):
     acc = ComponentAccumulator()
-    kwargs.setdefault("ParamsInputFilename", flags.Sim.FastCaloParamsInputFilename)
+    kwargs.setdefault("ParamsInputFilename", flags.Sim.FastCalo.ParamsInputFilename)
     kwargs.setdefault("ParamsInputObject", "SelPDGID")
     acc.addService(CompFactory.ISF.FastCaloSimV2ParamSvc(name, **kwargs))
     return acc
 
 
-def FastCaloSimSvcV2Cfg(flags, name="ISF_FastCaloSimSvcV2", **kwargs):
+def FastCaloSimV2SvcCfg(flags, name="ISF_FastCaloSimSvcV2", **kwargs):
     acc = ComponentAccumulator()
-    kwargs.setdefault("SimulatorTool", "ISF_FastCaloSimV2Tool")
+    kwargs.setdefault("SimulatorTool", acc.popToolsAndMerge(FastCaloSimV2ToolCfg(flags)))
     kwargs.setdefault("Identifier", "FastCaloSim")
     acc.addService(CompFactory.ISF.LegacySimSvc(name, **kwargs))
     return acc
@@ -89,12 +345,12 @@ def FastCaloSimSvcV2Cfg(flags, name="ISF_FastCaloSimSvcV2", **kwargs):
 
 def DNNCaloSimSvcCfg(flags, name="ISF_DNNCaloSimSvc", **kwargs):
     acc = ComponentAccumulator()
-    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCaloCaloCellsName)
-    kwargs.setdefault("CaloCellMakerTools_setup", ["ISF_EmptyCellBuilderTool"])
-    kwargs.setdefault("CaloCellMakerTools_release", ["ISF_CaloCellContainerFinalizerTool",
-                                                     "ISF_FastHitConvertTool"]) #DR needed ?
-    kwargs.setdefault("ParamsInputFilename", flags.Sim.FastCaloParamsInputFilename)
-    kwargs.setdefault("FastCaloSimCaloExtrapolation", "FastCaloSimCaloExtrapolation") # tool TODO
+    kwargs.setdefault("CaloCellsOutputName", flags.Sim.FastCalo.CaloCellsName)
+    kwargs.setdefault("CaloCellMakerTools_setup", [EmptyCellBuilderToolCfg(flags)])
+    kwargs.setdefault("CaloCellMakerTools_release", [CaloCellContainerFinalizerToolCfg(flags),
+                                                     acc.popToolsAndMerge(FastHitConvertToolCfg(flags))]) #DR needed ?
+    kwargs.setdefault("ParamsInputFilename", flags.Sim.FastCalo.ParamsInputFilename)
+    kwargs.setdefault("FastCaloSimCaloExtrapolation", FastCaloSimCaloExtrapolationCfg(flags))
 
     # FIXME not migrated. Remove or replace
     # register the FastCaloSim random number streams
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/test/FastCaloSimServices_test.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/test/FastCaloSimServices_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..e14ca0c937f02fc8378b260372877e539516fe23
--- /dev/null
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/test/FastCaloSimServices_test.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+"""Run tests for FastCaloSimServices configuration
+
+Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+"""
+
+from AthenaCommon.Logging import log
+from AthenaCommon.Constants import DEBUG
+# log.setLevel(DEBUG)
+
+from AthenaCommon.Configurable import Configurable
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
+from ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfigNew import FastCaloSimV2ParamSvcCfg, FastCaloSimV2SvcCfg, DNNCaloSimSvcCfg, FastCaloSimPileupOTSvcCfg, FastCaloToolBaseCfg
+
+# Set up new style config
+Configurable.configurableRun3Behavior = True
+
+# Configure
+ConfigFlags.Input.Files = ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1'] #defaultTestFiles.EVNT
+ConfigFlags.Output.HITSFileName = "myHITSnew.pool.root"
+ConfigFlags.Sim.CalibrationRun = "Off"
+ConfigFlags.Sim.RecordStepInfo = False
+ConfigFlags.Sim.CavernBG = "Signal"
+ConfigFlags.Sim.ISFRun = True
+ConfigFlags.Sim.BeamPipeSimMode = 'FastSim'
+ConfigFlags.Sim.ReleaseGeoModel = False
+ConfigFlags.GeoModel.AtlasVersion = 'ATLAS-R2-2015-03-01-00'
+
+ConfigFlags.lock()
+
+# Function tests
+accAlg = FastCaloSimV2ParamSvcCfg(ConfigFlags)
+accAlg.__init__()
+
+accAlg = FastCaloSimV2SvcCfg(ConfigFlags)
+accAlg.__init__()
+
+accAlg = DNNCaloSimSvcCfg(ConfigFlags)
+accAlg.__init__()
+
+# # Construct our accumulator to run
+# acc = MainServicesCfg(ConfigFlags)
+# acc.merge(PoolReadCfg(ConfigFlags))
+# acc.merge(PoolWriteCfg(ConfigFlags))
+
+# # Dump config
+# accAlg.addEventAlgo(CompFactory.JobOptsDumperAlg(FileName="FCS_TestConfig.txt"))
+# accAlg.getService("StoreGateSvc").Dump = True
+# accAlg.getService("ConditionStore").Dump = True
+# accAlg.printConfig(withDetails=True, summariseProps = True)
+
+# ConfigFlags.dump()
+
+# # Execute and finish
+# sc = accAlg.run(maxEvents=4)
+
+# # Print and run
+# f = open("test.pkl","wb")
+# accAlg.store(f)
+# f.close()
+