From 89153a31f99a4a089e16efa15f6bbebbcd0b7799 Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Mon, 17 Jan 2022 19:23:00 +0100
Subject: [PATCH] Update AthRNGSvc configuration method to standard syntax

---
 Control/RngComps/python/RandomServices.py     | 16 ++++++---
 .../python/ITkPixelConditionsConfig.py        |  2 ++
 .../python/PixelConditionsConfig.py           |  2 ++
 .../python/BCM_DigitizationConfigNew.py       |  9 ++---
 .../python/ITkPixelDigitizationConfig.py      |  2 ++
 .../python/PixelDigitizationConfigNew.py      |  4 +++
 .../python/SCT_DigitizationConfigNew.py       |  2 ++
 .../python/TRT_DigitizationConfigNew.py       |  2 ++
 .../InDetOverlay/python/TRTOverlayConfig.py   |  3 ++
 .../python/LArDigitizationConfigNew.py        |  6 ++--
 .../python/MDT_DigitizationConfig.py          |  2 ++
 .../python/MM_DigitizationConfig.py           |  4 +++
 .../python/MuonByteStreamCnvTestConfig.py     |  2 ++
 .../python/MuonCalibrationConfig.py           |  2 ++
 .../python/RPC_DigitizationConfig.py          |  2 ++
 .../python/TGC_DigitizationConfig.py          |  6 ++++
 .../python/sTGC_DigitizationConfig.py         |  4 +++
 .../python/BeamEffectsAlgConfig.py            |  5 ++-
 .../python/AddNoiseCellBuilderToolConfig.py   |  5 ++-
 .../python/FastCaloSimFactoryNew.py           |  6 ++--
 ...AddNoiseCellBuilderToolConfigTest_test.ref |  2 +-
 .../G4AtlasAlg/python/G4AtlasAlgConfigNew.py  |  6 ++--
 .../ISF_FastCaloSimServicesConfigNew.py       |  9 +++--
 .../python/ISF_FatrasConfig.py                | 36 +++++++------------
 .../python/ISF_Geant4ToolsConfigNew.py        |  5 ++-
 .../python/TileDigitsMakerConfig.py           |  5 ++-
 .../TileSimAlgs/python/TileHitToTTL1Config.py |  7 ++--
 .../python/TileHitVecToCntConfig.py           |  5 ++-
 .../python/TileMuonReceiverConfig.py          |  5 ++-
 29 files changed, 99 insertions(+), 67 deletions(-)

diff --git a/Control/RngComps/python/RandomServices.py b/Control/RngComps/python/RandomServices.py
index 16f7018c8ac0..713e9ea9a54b 100755
--- a/Control/RngComps/python/RandomServices.py
+++ b/Control/RngComps/python/RandomServices.py
@@ -21,7 +21,7 @@ def dSFMT(seed, name="AtDSFMTGenSvc"):
     acc = ComponentAccumulator()
     service = AtDSFMTGenSvc(name)
     service.Seeds.append(seed)
-    acc.addService(service)
+    acc.addService(service, primary=True)
     return acc
 
 def Ranlux64(seed, name="AtRanluxGenSvc"):
@@ -29,7 +29,7 @@ def Ranlux64(seed, name="AtRanluxGenSvc"):
     acc = ComponentAccumulator()
     service = AtRanluxGenSvc(name)
     service.Seeds.append(seed)
-    acc.addService(service)
+    acc.addService(service, primary=True)
     return acc
 
 def Ranecu(seed, name="AtRndmGenSvc"):
@@ -37,7 +37,7 @@ def Ranecu(seed, name="AtRndmGenSvc"):
     acc = ComponentAccumulator()
     service = AtRndmGenSvc(name)
     service.Seeds.append(seed)
-    acc.addService(service)
+    acc.addService(service, primary=True)
     return acc
 
 def RNG(engine="dSFMT", name="AthRNGSvc"):
@@ -45,6 +45,14 @@ def RNG(engine="dSFMT", name="AthRNGSvc"):
     acc = ComponentAccumulator()
     service = AthRNGSvc(name)
     service.EngineType = engine
-    acc.addService(service)
+    acc.addService(service, primary=True)
+    return acc
+
+def AthRNGSvcCfg(flags, name="AthRNGSvc"):
+    """Return a ComponentAccumulator containing an AthRNGSvc"""
+    acc = ComponentAccumulator()
+    service = AthRNGSvc(name)
+    service.EngineType = flags.Random.Engine
+    acc.addService(service, primary=True)
     return acc
 
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
index 191339d515a8..ad4ad79624a4 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
@@ -136,6 +136,8 @@ def ITkPixelDistortionAlgCfg(flags, name="ITkPixelDistortionAlg", **kwargs):
     kwargs.setdefault("PixelModuleData", "ITkPixelModuleData")
     kwargs.setdefault("ReadKey", "/Indet/PixelDist")
     kwargs.setdefault("WriteKey", "ITkPixelDistortionData")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     acc.addCondAlgo(CompFactory.PixelDistortionAlg(name, **kwargs))
     return acc
 
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
index 950dbd4a059c..5d9c0521e02c 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
@@ -504,6 +504,8 @@ def PixelDistortionAlgCfg(flags, name="PixelDistortionAlg", **kwargs):
     kwargs.setdefault("PixelModuleData", "PixelModuleData")
     kwargs.setdefault("ReadKey", "/Indet/PixelDist")
     kwargs.setdefault("WriteKey", "PixelDistortionData")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     acc.addCondAlgo(CompFactory.PixelDistortionAlg(name, **kwargs))
     return acc
 
diff --git a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
index 9d924e5bb2a2..d80e578c57a7 100644
--- a/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/BCM_Digitization/python/BCM_DigitizationConfigNew.py
@@ -5,7 +5,7 @@ Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaConfiguration.Enums import ProductionStep
-from RngComps.RandomServices import RNG
+from RngComps.RandomServices import AthRNGSvcCfg
 from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
 from Digitization.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
@@ -35,9 +35,9 @@ def BCM_RangeCfg(flags, name="BCM_Range", **kwargs):
 
 def BCM_DigitizationToolCommonCfg(flags, name="BCM_DigitizationTool", **kwargs):
     """Return a ComponentAccumulator with configured BCM_DigitizationTool"""
-    # take initial ComponentAccumulator from RNG
-    acc = RNG(flags.Random.Engine)
-    kwargs.setdefault("RndmSvc", "AthRNGSvc")
+    acc = ComponentAccumulator()
+    kwargs.setdefault("RndmSvc",
+                      acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     kwargs.setdefault("HitCollName", "BCMHits")
     if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
         kwargs.setdefault("OutputRDOKey", flags.Overlay.BkgPrefix + "BCM_RDOs")
@@ -65,6 +65,7 @@ def BCM_DigitizationToolCommonCfg(flags, name="BCM_DigitizationTool", **kwargs):
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", BCM_FirstXing())
         kwargs.setdefault("LastXing",  BCM_LastXing())
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     BCM_DigitizationTool = CompFactory.BCM_DigitizationTool
     acc.setPrivateTools(BCM_DigitizationTool(name, **kwargs))
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/ITkPixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/ITkPixelDigitizationConfig.py
index 13ecf61d382b..7143219b2d79 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/ITkPixelDigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/ITkPixelDigitizationConfig.py
@@ -134,6 +134,8 @@ def ITkPixelDigitizationBasicToolCfg(flags, name="ITkPixelDigitizationBasicTool"
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", ITkPixel_FirstXing(flags))
         kwargs.setdefault("LastXing", ITkPixel_LastXing(flags))
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     PixelDigitizationTool = CompFactory.PixelDigitizationTool
     acc.setPrivateTools(PixelDigitizationTool(name, **kwargs))
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py
index 11e09cd59128..0a651928d3e8 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py
@@ -190,6 +190,8 @@ def PixelDigitizationBasicToolCfg(flags, name="PixelDigitizationBasicTool", **kw
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", Pixel_FirstXing(flags))
         kwargs.setdefault("LastXing", Pixel_LastXing(flags))
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     PixelDigitizationTool = CompFactory.PixelDigitizationTool
     acc.setPrivateTools(PixelDigitizationTool(name, **kwargs))
@@ -219,6 +221,8 @@ def PixelGeantinoTruthDigitizationToolCfg(flags, name="PixelGeantinoTruthDigitiz
     rangetool = acc.popToolsAndMerge(PixelRangeCfg(flags))
     acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
     kwargs.setdefault("ParticleBarcodeVeto", 0)
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     PixelDigitizationTool = CompFactory.PixelDigitizationTool
     acc.setPrivateTools(PixelDigitizationTool(name, **kwargs))
     return acc
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
index 49629857f7d8..b767341202ec 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py
@@ -42,6 +42,8 @@ def SCT_DigitizationCommonCfg(flags, name="SCT_DigitizationToolCommon", **kwargs
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", SCT_FirstXing())
         kwargs.setdefault("LastXing", SCT_LastXing() )
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     
     SCT_DigitizationTool = CompFactory.SCT_DigitizationTool
     tool = SCT_DigitizationTool(name, **kwargs)
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigNew.py
index a818d7712481..f1ee30165871 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigNew.py
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigNew.py
@@ -70,6 +70,8 @@ def TRT_DigitizationBasicToolCfg(flags, name="TRT_DigitizationBasicTool", **kwar
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", TRT_FirstXing())
         kwargs.setdefault("LastXing", TRT_LastXing())
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     TRTDigitizationTool = CompFactory.TRTDigitizationTool
     tool = TRTDigitizationTool(name, **kwargs)
     acc.setPrivateTools(tool)
diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py b/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
index 6b2cc4ccdc94..981f3f2523b3 100644
--- a/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
+++ b/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
@@ -44,6 +44,9 @@ def TRTOverlayAlgCfg(flags, name="TRTOverlay", **kwargs):
     acc.addPublicTool(StrawStatusTool)  # public as it is has many clients to save some memory
     kwargs.setdefault("TRTStrawSummaryTool", StrawStatusTool)
 
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
+
     # Do TRT overlay
     alg = CompFactory.TRTOverlay(name, **kwargs)
     acc.addEventAlgo(alg)
diff --git a/LArCalorimeter/LArDigitization/python/LArDigitizationConfigNew.py b/LArCalorimeter/LArDigitization/python/LArDigitizationConfigNew.py
index ff9cf2e208ca..6ee5083a362b 100644
--- a/LArCalorimeter/LArDigitization/python/LArDigitizationConfigNew.py
+++ b/LArCalorimeter/LArDigitization/python/LArDigitizationConfigNew.py
@@ -260,9 +260,9 @@ def LArSCL1MakerCfg(flags, **kwargs):
     acc.merge(LArAutoCorrNoiseCondSCAlgCfg(flags))
     kwargs.setdefault("LArAutoCorrKey", "ConditionStore+LArAutoCorrNoiseSC") # Provided by LArAutoCorrNoiseCondAlg/LArAutoCorrNoiseSCCondAlg
     kwargs.setdefault("NSamples", flags.LAr.ROD.nSamples + 2)  # For consistency with LArAutoCorrNoiseSC - see ATLASSIM-5483
-    from RngComps.RandomServices import RNG
-    acc.merge(RNG(flags.Random.Engine))
-    kwargs.setdefault("RndmSvc", "AthRNGSvc")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc",
+                      acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     kwargs.setdefault("SCL1ContainerName","LArDigitSCL2") # Output - why L2??
     acc.addEventAlgo(CompFactory.LArSCL1Maker(**kwargs))
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/MDT_DigitizationConfig.py b/MuonSpectrometer/MuonConfig/python/MDT_DigitizationConfig.py
index 10fb49fa338e..68d0e5a223c0 100644
--- a/MuonSpectrometer/MuonConfig/python/MDT_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MDT_DigitizationConfig.py
@@ -73,6 +73,8 @@ def MDT_DigitizationToolCommonCfg(flags, name="MdtDigitizationTool", **kwargs):
     if flags.Digitization.DoXingByXingPileUp:
         kwargs.setdefault("FirstXing", MDT_FirstXing())
         kwargs.setdefault("LastXing", MDT_LastXing())
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     MdtDigitizationTool = CompFactory.MdtDigitizationTool
     acc.setPrivateTools(MdtDigitizationTool(name, **kwargs))
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/MM_DigitizationConfig.py b/MuonSpectrometer/MuonConfig/python/MM_DigitizationConfig.py
index 0acff5876bba..109d2ecf196c 100644
--- a/MuonSpectrometer/MuonConfig/python/MM_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MM_DigitizationConfig.py
@@ -48,6 +48,8 @@ def MM_DigitizationToolCfg(flags, name="MM_DigitizationTool", **kwargs):
         kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "MM_SDO")
     else:
         kwargs.setdefault("OutputSDOName", "MM_SDO")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     MM_DigitizationTool = CompFactory.MM_DigitizationTool
     acc.setPrivateTools(MM_DigitizationTool(name, **kwargs))
     return acc
@@ -60,6 +62,8 @@ def MM_OverlayDigitizationToolCfg(flags, name="MM_OverlayDigitizationTool", **kw
     kwargs.setdefault("OnlyUseContainerName", False)
     kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "MM_DIGITS")
     kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "MM_SDO")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     MM_DigitizationTool = CompFactory.MM_DigitizationTool
     acc.setPrivateTools(MM_DigitizationTool(name, **kwargs))
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/MuonByteStreamCnvTestConfig.py b/MuonSpectrometer/MuonConfig/python/MuonByteStreamCnvTestConfig.py
index a56d7c1fdac5..59c7d7feb1db 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonByteStreamCnvTestConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonByteStreamCnvTestConfig.py
@@ -133,6 +133,8 @@ def CscDigitToCscRDOCfg(flags, name="CscDigitToCscRDO", **kwargs):
         kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "CSCRDO")
     else:
         kwargs.setdefault("OutputObjectName", "CSCRDO")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     # tool and container algorithm
     CscDigitToCscRDOTool = CompFactory.CscDigitToCscRDOTool
     tool = CscDigitToCscRDOTool("CscDigitToCscRDOTool", **kwargs)
diff --git a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py
index c22132b3f2aa..d356d0dd3679 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonCalibrationConfig.py
@@ -132,6 +132,8 @@ def MdtCalibDbAlgCfg(flags,name="MdtCalibDbAlg",**kwargs):
     kwargs.setdefault("CreateBFieldFunctions", flags.Muon.Calib.correctMdtRtForBField)
     kwargs.setdefault("CreateWireSagFunctions", flags.Muon.Calib.correctMdtRtWireSag)
     kwargs.setdefault("CreateSlewingFunctions", flags.Muon.Calib.correctMdtRtForTimeSlewing)
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("AthRNGSvc", result.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     MdtCalibDbAlg=CompFactory.MdtCalibDbAlg
     alg = MdtCalibDbAlg (name, **kwargs)
diff --git a/MuonSpectrometer/MuonConfig/python/RPC_DigitizationConfig.py b/MuonSpectrometer/MuonConfig/python/RPC_DigitizationConfig.py
index 3dac8a220a3f..55da7cff8c9f 100644
--- a/MuonSpectrometer/MuonConfig/python/RPC_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/RPC_DigitizationConfig.py
@@ -78,6 +78,8 @@ def RPC_DigitizationToolCommonCfg(flags, name="RpcDigitizationTool", **kwargs):
     kwargs.setdefault("FracClusterSize2_C",   [0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986])
     kwargs.setdefault("FracClusterSizeTail_C",[0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035, 0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035,  0.13035 ])
     kwargs.setdefault("MeanClusterSizeTail_C",[0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598])
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     RpcDigitizationTool = CompFactory.RpcDigitizationTool
     acc.setPrivateTools(RpcDigitizationTool(name, **kwargs))
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/TGC_DigitizationConfig.py b/MuonSpectrometer/MuonConfig/python/TGC_DigitizationConfig.py
index 433242280d07..e9db4e9a9425 100644
--- a/MuonSpectrometer/MuonConfig/python/TGC_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/TGC_DigitizationConfig.py
@@ -52,6 +52,9 @@ def TGC_DigitizationToolCfg(flags, name="TgcDigitizationTool", **kwargs):
         acc.merge(TgcDigitASDposCondAlgCfg(flags))
         kwargs.setdefault("TGCDigitASDposKey", "TGCDigitASDposData")
 
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
+
     TgcDigitizationTool = CompFactory.TgcDigitizationTool
     acc.setPrivateTools(TgcDigitizationTool(name, **kwargs))
     return acc
@@ -69,6 +72,9 @@ def TGC_OverlayDigitizationToolCfg(flags, name="Tgc_OverlayDigitizationTool", **
         acc.merge(TgcDigitASDposCondAlgCfg(flags))
         kwargs.setdefault("TGCDigitASDposKey", "TGCDigitASDposData")
 
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
+
     TgcDigitizationTool = CompFactory.TgcDigitizationTool
     acc.setPrivateTools(TgcDigitizationTool(name, **kwargs))
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/sTGC_DigitizationConfig.py b/MuonSpectrometer/MuonConfig/python/sTGC_DigitizationConfig.py
index 60e4712e64e4..afe18b5d5df8 100644
--- a/MuonSpectrometer/MuonConfig/python/sTGC_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/sTGC_DigitizationConfig.py
@@ -44,6 +44,8 @@ def sTGC_DigitizationToolCfg(flags, name="sTgcDigitizationTool", **kwargs):
     kwargs.setdefault("doEfficiencyCorrection", False)
     kwargs.setdefault("InputObjectName", "sTGCSensitiveDetector")
     kwargs.setdefault("OutputObjectName", "sTGC_DIGITS")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
         kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "sTGC_SDO")
     else:
@@ -61,6 +63,8 @@ def sTGC_OverlayDigitizationToolCfg(flags, name="STGC_OverlayDigitizationTool",
     kwargs.setdefault("OnlyUseContainerName", False)
     kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "sTGC_DIGITS")
     kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "sTGC_SDO")
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     sTgcDigitizationTool = CompFactory.sTgcDigitizationTool
     acc.setPrivateTools(sTgcDigitizationTool(name, **kwargs))
     return acc
diff --git a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
index 34bc1300cea9..2987dbee2412 100755
--- a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
+++ b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
@@ -57,12 +57,11 @@ def GenEventVertexPositionerCfg(flags, name="GenEventVertexPositioner", **kwargs
 ## LorentzVectorGenerators
 def VertexBeamCondPositionerCfg(flags, name="VertexBeamCondPositioner", **kwargs):
     """Return a conditional (? todo) vertex positioner tool"""
-    from RngComps.RandomServices import RNG
+    from RngComps.RandomServices import AthRNGSvcCfg
 
     acc = ComponentAccumulator()
 
-    acc.merge(RNG(engine=flags.Random.Engine, name="AthRNGSvc"))
-    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc"))
+    kwargs.setdefault("RandomSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
     acc.merge(BeamSpotCondAlgCfg(flags))
diff --git a/Simulation/FastShower/FastCaloSim/python/AddNoiseCellBuilderToolConfig.py b/Simulation/FastShower/FastCaloSim/python/AddNoiseCellBuilderToolConfig.py
index 8eba5f575fa0..45f786f2670e 100644
--- a/Simulation/FastShower/FastCaloSim/python/AddNoiseCellBuilderToolConfig.py
+++ b/Simulation/FastShower/FastCaloSim/python/AddNoiseCellBuilderToolConfig.py
@@ -22,10 +22,13 @@ def AddNoiseCellBuilderToolCfg (configFlags):
     from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
     result.merge (CaloNoiseCondAlgCfg (configFlags, 'electronicNoise'))
 
+    from RngComps.RandomServices import AthRNGSvcCfg
     AddNoiseCellBuilderTool=CompFactory.AddNoiseCellBuilderTool
     tool = AddNoiseCellBuilderTool ('AddNoiseCellBuilderTool',
                                     NoiseKey = 'electronicNoise',
-                                    CaloEstimatedGainTool = estimatedGainTool)
+                                    CaloEstimatedGainTool = estimatedGainTool,
+                                    RandomSvc = result.getPrimaryAndMerge(AthRNGSvcCfg(configFlags)).name)
+
     result.setPrivateTools (tool)
 
     return result
diff --git a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
index 2dd52dd2d760..a51050c1b6da 100644
--- a/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
+++ b/Simulation/FastShower/FastCaloSim/python/FastCaloSimFactoryNew.py
@@ -123,18 +123,18 @@ def NITimedExtrapolatorCfg(flags, name="ISF_NITimedExtrapolator", **kwargs):
 # FastShowerCellBuilderTool
 def FastShowerCellBuilderToolBaseCfg(flags, name="ISF_FastShowerCellBuilderTool", **kwargs):
 
-    from RngComps.RandomServices import RNG
+    from RngComps.RandomServices import AthRNGSvcCfg
     from IOVDbSvc.IOVDbSvcConfig import addFolders
     from ISF_FastCaloSimServices.ISF_FastCaloSimHelpers import AdditionalParticleParametrizationFileNames
 
-    acc = RNG(flags.Random.Engine)
+    acc = ComponentAccumulator()
     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("RandomService", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", "FastCaloSimRnd")
     kwargs.setdefault("DoSimulWithInnerDetectorTruthOnly", True)
     kwargs.setdefault("ID_cut_off_r", [1150])
diff --git a/Simulation/FastShower/FastCaloSim/share/AddNoiseCellBuilderToolConfigTest_test.ref b/Simulation/FastShower/FastCaloSim/share/AddNoiseCellBuilderToolConfigTest_test.ref
index 980ee21b5a58..4f8d89adb85b 100644
--- a/Simulation/FastShower/FastCaloSim/share/AddNoiseCellBuilderToolConfigTest_test.ref
+++ b/Simulation/FastShower/FastCaloSim/share/AddNoiseCellBuilderToolConfigTest_test.ref
@@ -8,4 +8,4 @@ Py:TileInfoLoaderCfg    INFO Adjusting TileInfo to return cell noise for Opt.Fil
 Py:TileCablingSvc    INFO Forcing RUN2 (2014-2017) cabling for run 284500 with geometry ATLAS-R2-2016-01-00-01
 Py:TileCablingSvc    INFO Forcing RUN2 (2014-2017) cabling for run 284500 with geometry ATLAS-R2-2016-01-00-01
 Py:ComponentAccumulator    INFO Condition Algorithms
-ComponentAccumulator: AddNoiseCellBuilderTool(AddNoiseCellBuilderTool, CaloEstimatedGainTool='CaloEstimatedGainTool(CaloEstimatedGainTool, ADC2MeVKey=\'LArADC2MeV\', TileCondIdTransforms=\'TileCondIdTransforms(TileCondIdTransforms)\', TileCondToolEmscale="TileCondToolEmscale(TileCondToolEmscale, TileEMScale=\'TileEMScale\')", TileCondToolNoiseSample="TileCondToolNoiseSample(TileCondToolNoiseSample, TileOnlineSampleNoise=\'\', TileSampleNoise=\'TileSampleNoise\')")', NoiseKey='electronicNoise')
+ComponentAccumulator: AddNoiseCellBuilderTool(AddNoiseCellBuilderTool, CaloEstimatedGainTool='CaloEstimatedGainTool(CaloEstimatedGainTool, ADC2MeVKey=\'LArADC2MeV\', TileCondIdTransforms=\'TileCondIdTransforms(TileCondIdTransforms)\', TileCondToolEmscale="TileCondToolEmscale(TileCondToolEmscale, TileEMScale=\'TileEMScale\')", TileCondToolNoiseSample="TileCondToolNoiseSample(TileCondToolNoiseSample, TileOnlineSampleNoise=\'\', TileSampleNoise=\'TileSampleNoise\')")', NoiseKey='electronicNoise', RandomSvc='AthRNGSvc')
diff --git a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py
index 4d620cf8a2aa..2e8ed845afaa 100644
--- a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfigNew.py
@@ -36,9 +36,9 @@ def G4AtlasAlgBasicCfg(ConfigFlags, name="G4AtlasAlg", **kwargs):
     ## default true
     kwargs.setdefault("KillAbortedEvents", ConfigFlags.Sim.KillAbortedEvents)
 
-    from RngComps.RandomServices import RNG
-    result.merge(RNG(ConfigFlags.Random.Engine, name="AthRNGSvc"))
-    kwargs.setdefault("AtRndmGenSvc", result.getService("AthRNGSvc"))
+    from RngComps.RandomServices import AthRNGSvcCfg
+    kwargs.setdefault("AtRndmGenSvc",
+                      result.getPrimaryAndMerge(AthRNGSvcCfg(ConfigFlags)).name)
 
     kwargs.setdefault("RandomGenerator", "athena")
 
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 5a8a41fd0742..415c1bb77028 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py
@@ -4,7 +4,7 @@ Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
-from RngComps.RandomServices import RNG
+from RngComps.RandomServices import AthRNGSvcCfg
 from ISF_Services.ISF_ServicesConfigNew import TruthServiceCfg
 
 ###################################################################################################
@@ -270,8 +270,7 @@ def FastCaloSimV2ToolCfg(flags, name="ISF_FastCaloSimV2Tool", **kwargs):
                                                       acc.getPublicTool(FastHit.name)])
     kwargs.setdefault("FastCaloSimCaloExtrapolation", acc.getPublicTool(Extrapolator.name))
     kwargs.setdefault("ParamSvc", acc.getPrimaryAndMerge(FastCaloSimV2ParamSvcCfg(flags)).name)
-    acc.merge(RNG(flags.Random.Engine))
-    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc").name) #FIXME
+    kwargs.setdefault("RandomSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     kwargs.setdefault("RandomStream", "FastCaloSimRnd")
     PT_tool = acc.popToolsAndMerge(PunchThroughToolCfg(flags))
     kwargs.setdefault("PunchThroughTool", PT_tool)
@@ -399,7 +398,7 @@ def DNNCaloSimSvcCfg(flags, name="ISF_DNNCaloSimSvc", **kwargs):
     kwargs.setdefault("ParamsInputFilename", flags.Sim.FastCalo.ParamsInputFilename)
     kwargs.setdefault("FastCaloSimCaloExtrapolation", acc.getPublicTool(Extrapolator.name))
     kwargs.setdefault("RandomStream", "FastCaloSimRnd")
-    acc.merge(RNG(flags.Random.Engine))
-    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc").name)
+    kwargs.setdefault("RandomSvc",
+                      acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
     acc.addService(CompFactory.ISF.DNNCaloSimSvc(name, **kwargs), primary = True)
     return acc
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py
index 24e0d64c164b..7a8bc56f7efd 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasConfig.py
@@ -46,8 +46,7 @@ def fatrasHitCreatorPixelCfg(flags, name="ISF_FatrasHitCreatorPixel", **kwargs):
                                                        merger_input_property,
                                                        region)
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
     kwargs.setdefault("IdHelperName", 'PixelID')
     kwargs.setdefault("CollectionName", hits_collection_name)
@@ -74,8 +73,7 @@ def fatrasHitCreatorSCTCfg(flags, name="ISF_FatrasHitCreatorSCT", **kwargs):
                                                        merger_input_property,
                                                        region)
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
     kwargs.setdefault("IdHelperName", 'SCT_ID')
     kwargs.setdefault("CollectionName", hits_collection_name)
@@ -102,8 +100,7 @@ def fatrasHitCreatorTRTCfg(flags, name="ISF_FatrasHitCreatorTRT", **kwargs):
                                                        merger_input_property,
                                                        region)
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
     kwargs.setdefault("CollectionName", hits_collection_name)
 
@@ -230,8 +227,7 @@ def fatrasSimHitCreatorMSCfg(flags, name="ISF_FatrasSimHitCreatorMS", **kwargs):
                                                                region)
     result.merge(csc_result)
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
 
     fatras_ext_cfg = result.popToolsAndMerge(fatrasExtrapolatorCfg(flags))
@@ -353,8 +349,7 @@ def fatrasEnergyLossUpdatorCfg(flags, name="ISF_FatrasEnergyLossUpdator", **kwar
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
 
     kwargs.setdefault("UsePDG_EnergyLossFormula", True)
@@ -374,8 +369,7 @@ def fatrasMultipleScatteringUpdatorCfg(flags, name="ISF_FatrasMultipleScattering
 
     result = ComponentAccumulator()
 
-    result.merge(TrkExRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(TrkExRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.TrkExRandomStreamName)
     kwargs.setdefault("GaussianMixtureModel", flags.Sim.Fatras.GaussianMixtureModel)
 
@@ -391,8 +385,7 @@ def fatrasMaterialUpdatorCfg(flags, name="ISF_FatrasMaterialUpdator", **kwargs):
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
     if "ParticleBroker" not in kwargs:
         kwargs.setdefault("ParticleBroker", result.getPrimaryAndMerge(AFIIParticleBrokerSvcCfg(flags)).name)
@@ -554,8 +547,7 @@ def fatrasConversionCreatorCfg(flags, name="ISF_FatrasConversionCreator", **kwar
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
 
     if "ParticleBroker" not in kwargs:
@@ -582,8 +574,7 @@ def fatrasG4HadIntProcessorCfg(flags, name="ISF_FatrasG4HadIntProcessor", **kwar
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
 
     if "ParticleBroker" not in kwargs:
@@ -615,8 +606,7 @@ def fatrasParametricHadIntProcessorCfg(flags, name="ISF_FatrasParametricHadIntPr
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
     kwargs.setdefault("RandomStreamName", flags.Sim.Fatras.RandomStreamName)
 
     if "ParticleBroker" not in kwargs:
@@ -647,8 +637,7 @@ def fatrasProcessSamplingToolCfg(flags, name="ISF_FatrasProcessSamplingTool", **
 
     result = ComponentAccumulator()
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
 
     # truth record
     if "TruthRecordSvc" not in kwargs:
@@ -726,8 +715,7 @@ def fatrasTransportToolCfg(flags, name="ISF_FatrasSimTool", **kwargs):
     kwargs.setdefault("OutputLevel", flags.Exec.OutputLevel)
     kwargs.setdefault("ValidationOutput", flags.Sim.ISF.ValidationMode)
 
-    result.merge(FatrasRndSvcCfg(flags))
-    kwargs.setdefault("RandomNumberService", result.getService("AtDSFMTGenSvc"))
+    kwargs.setdefault("RandomNumberService", result.getPrimaryAndMerge(FatrasRndSvcCfg(flags)).name)
 
     iFatras__TransportTool = CompFactory.iFatras.TransportTool
     result.setPrivateTools(iFatras__TransportTool(name=name, **kwargs))
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
index 89f5834c6967..50bfba53365d 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
@@ -4,7 +4,7 @@ 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 RngComps.RandomServices import AthRNGSvcCfg
 from G4AtlasServices.G4AtlasServicesConfigNew import (
     DetectorGeometrySvcCfg, PhysicsListSvcCfg
 )
@@ -30,8 +30,7 @@ def Geant4ToolCfg(flags, name="ISF_Geant4Tool", **kwargs):
     acc = ComponentAccumulator()
     kwargs.setdefault("DetGeoSvc", acc.getPrimaryAndMerge(DetectorGeometrySvcCfg(flags)).name)
 
-    acc.merge(RNG(flags.Random.Engine, name="AthRNGSvc"))
-    kwargs.setdefault("RandomNumberService", acc.getService("AthRNGSvc").name) # FIXME
+    kwargs.setdefault("RandomNumberService", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
 
     # Only add it if it's not added already
     if "InputConverter" not in kwargs.keys():
diff --git a/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py b/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py
index fffa5f7dc95b..b5f3bf648203 100644
--- a/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py
+++ b/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py
@@ -72,9 +72,8 @@ def TileDigitsMakerCfg(flags, **kwargs):
 
     if tileNoise or tileCoherNoise or kwargs['RndmEvtOverlay']:
         if 'RndmSvc' not in kwargs:
-            from RngComps.RandomServices import RNG
-            acc.merge( RNG(flags.Random.Engine) )
-            kwargs['RndmSvc'] = acc.getService('AthRNGSvc')
+            from RngComps.RandomServices import AthRNGSvcCfg
+            kwargs['RndmSvc'] = acc.getPrimaryAndMerge( AthRNGSvcCfg(flags) ).name
     else:
         kwargs['RndmSvc'] = None
 
diff --git a/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py b/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py
index a5951a676ed4..e6d10b49d632 100644
--- a/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py
+++ b/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py
@@ -27,10 +27,9 @@ def TileHitToTTL1Cfg(flags, **kwargs):
     acc.merge(TileCablingSvcCfg(flags))
 
     if 'RndmSvc' not in kwargs:
-        from RngComps.RandomServices import RNG
-        acc.merge( RNG(flags.Random.Engine) )
-        kwargs['RndmSvc'] = acc.getService('AthRNGSvc')
-    
+        from RngComps.RandomServices import AthRNGSvcCfg
+        kwargs['RndmSvc'] = acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name
+
     if 'TileBadChanTool' not in kwargs:
         from TileConditions.TileBadChannelsConfig import TileBadChanToolCfg
         badChannelsTool = acc.popToolsAndMerge( TileBadChanToolCfg(flags) )
diff --git a/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py b/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py
index 157cf2b59616..a52f5fb4dfaf 100644
--- a/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py
+++ b/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py
@@ -62,9 +62,8 @@ def TileHitVecToCntToolCfg(flags, **kwargs):
         kwargs.setdefault('TileHitContainer_DigiHSTruth', '')
 
     if 'RndmSvc' not in kwargs:
-        from RngComps.RandomServices import RNG
-        acc.merge( RNG(flags.Random.Engine) )
-        kwargs['RndmSvc'] = acc.getService('AthRNGSvc')
+        from RngComps.RandomServices import AthRNGSvcCfg
+        kwargs['RndmSvc'] = acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name
 
     if kwargs['RndmEvtOverlay']:
         kwargs.setdefault('PileUp', False)
diff --git a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py
index cd8354806269..f5959fc20fa5 100644
--- a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py
+++ b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py
@@ -31,9 +31,8 @@ def TilePulseForTileMuonReceiverCfg(flags, **kwargs):
     acc.merge(TileCablingSvcCfg(flags))
 
     if 'RndmSvc' not in kwargs:
-        from RngComps.RandomServices import RNG
-        acc.merge( RNG(flags.Random.Engine) )
-        kwargs['RndmSvc'] = acc.getService('AthRNGSvc')
+        from RngComps.RandomServices import AthRNGSvcCfg
+        kwargs['RndmSvc'] = acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name
 
     if 'TileCondToolNoiseSample' not in kwargs:
         from TileConditions.TileSampleNoiseConfig import TileCondToolNoiseSampleCfg
-- 
GitLab