diff --git a/Simulation/SimuJobTransforms/python/FilterHit_Skeleton.py b/Simulation/SimuJobTransforms/python/FilterHit_Skeleton.py
index 9402340a5214cba9431602465a7786fea48076be..76244917200794c3377c11fb199eca0ffaad24cc 100644
--- a/Simulation/SimuJobTransforms/python/FilterHit_Skeleton.py
+++ b/Simulation/SimuJobTransforms/python/FilterHit_Skeleton.py
@@ -97,26 +97,11 @@ def fromRunArgs(runArgs):
     else:
         raise RuntimeError('No input HITS file defined')
 
-    if hasattr(runArgs, 'detectors'):
-        detectors = runArgs.detectors
-    else:
-        from AthenaConfiguration.AutoConfigFlags import getDefaultDetectors
-        detectors = getDefaultDetectors(ConfigFlags.GeoModel.AtlasVersion)
-
-    # Support switching on Forward Detectors
-    if hasattr(runArgs, 'LucidOn'):
-        detectors = detectors+['Lucid']
-    if hasattr(runArgs, 'ZDCOn'):
-        detectors = detectors+['ZDC']
-    if hasattr(runArgs, 'AFPOn'):
-        detectors = detectors+['AFP']
-    if hasattr(runArgs, 'ALFAOn'):
-        detectors = detectors+['ALFA']
-    if hasattr(runArgs, 'FwdRegionOn'):
-        detectors = detectors+['FwdRegion']
-
-    # Setup common simulation flags
-    defaultFilterHitFlags(ConfigFlags, detectors)
+    # Generate detector list and setup detector flags
+    from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
+    detectors = getDetectorsFromRunArgs(ConfigFlags, runArgs)
+    from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
+    setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
 
     ## from SimuJobTransforms.HitsFilePeeker import HitsFilePeeker
     ## HitsFilePeeker(runArgs, filterHitLog)
@@ -128,7 +113,7 @@ def fromRunArgs(runArgs):
         else:
             ConfigFlags.Output.HITSFileName  = runArgs.outputHITS_FILTFile
     else:
-        raise RuntimeError('No outputHITSFile defined')
+        raise RuntimeError('No outputHITS_FILTFile defined')
 
     # Pre-include
     processPreInclude(runArgs, ConfigFlags)
diff --git a/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py b/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py
index 12b5b9e551bfbda2f6b5febfc16bc3b4bf03d56a..2a196a592e206d4f777dd81d7338cc03c2f9a6d5 100644
--- a/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py
+++ b/Simulation/SimuJobTransforms/python/G4AtlasAlg_Skeleton.py
@@ -38,26 +38,9 @@ def fromRunArgs(runArgs):
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     commonRunArgsToFlags(runArgs, ConfigFlags)
 
-    if hasattr(runArgs, 'detectors'):
-        detectors = runArgs.detectors
-    else:
-        from AthenaConfiguration.AutoConfigFlags import getDefaultDetectors
-        detectors = getDefaultDetectors(ConfigFlags.GeoModel.AtlasVersion)
-
-    # Support switching on simulation of Forward Detectors
-    if hasattr(runArgs, 'LucidOn'):
-        detectors = detectors+['Lucid']
-    if hasattr(runArgs, 'ZDCOn'):
-        detectors = detectors+['ZDC']
-    if hasattr(runArgs, 'AFPOn'):
-        detectors = detectors+['AFP']
-    if hasattr(runArgs, 'ALFAOn'):
-        detectors = detectors+['ALFA']
-    if hasattr(runArgs, 'FwdRegionOn'):
-        detectors = detectors+['FwdRegion']
-    #TODO here support switching on Cavern geometry
-    #if hasattr(runArgs, 'CavernOn'):
-    #    detectors = detectors+['Cavern']
+    # Generate detector list
+    from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
+    detectors = getDetectorsFromRunArgs(ConfigFlags, runArgs)
 
     if hasattr(runArgs, 'simulator'):
         ConfigFlags.Sim.ISF.Simulator = runArgs.simulator
@@ -156,7 +139,7 @@ def fromRunArgs(runArgs):
     # Lock flags
     ConfigFlags.lock()
 
-    from CommonSimulationSteering import CommonSimulationCfg
+    from SimuJobTransforms.CommonSimulationSteering import CommonSimulationCfg
     cfg = CommonSimulationCfg(ConfigFlags, log)
 
     # Post-include
diff --git a/Simulation/SimuJobTransforms/python/HITSMerge_Skeleton.py b/Simulation/SimuJobTransforms/python/HITSMerge_Skeleton.py
new file mode 100644
index 0000000000000000000000000000000000000000..043a7b868e370d573426a996e4e45b178d9b69e2
--- /dev/null
+++ b/Simulation/SimuJobTransforms/python/HITSMerge_Skeleton.py
@@ -0,0 +1,84 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+import sys
+from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
+from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
+
+
+def fromRunArgs(runArgs):
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior = True
+
+    from AthenaCommon.Logging import logging
+    log = logging.getLogger('HITSMerge_tf')
+    log.info('****************** STARTING HIT MERGING *****************')
+
+    log.info('**** Transformation run arguments')
+    log.info(str(runArgs))
+
+    log.info('**** Setting-up configuration flags')
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    commonRunArgsToFlags(runArgs, ConfigFlags)
+
+    if hasattr(runArgs, 'inputHITSFile'):
+        ConfigFlags.Input.Files = runArgs.inputHITSFile
+    else:
+        raise RuntimeError('No input HITS file defined')
+
+    if hasattr(runArgs, 'outputHITS_MRGFile'):
+        if runArgs.outputHITS_MRGFile == 'None':
+            ConfigFlags.Output.HITSFileName = ''
+            # TODO decide if we need a specific HITS_MRGFileName flag
+        else:
+            ConfigFlags.Output.HITSFileName  = runArgs.outputHITS_MRGFile
+    else:
+        raise RuntimeError('No outputHITS_MRGFile defined')
+
+    # Generate detector list and setup detector flags
+    from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
+    detectors = getDetectorsFromRunArgs(ConfigFlags, runArgs)
+    from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
+    setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
+
+    # Pre-include
+    processPreInclude(runArgs, ConfigFlags)
+
+    # Pre-exec
+    processPreExec(runArgs, ConfigFlags)
+
+    # Lock flags
+    ConfigFlags.lock()
+
+    from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+    cfg = MainServicesCfg(ConfigFlags)
+
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
+    cfg.merge(PoolReadCfg(ConfigFlags))
+    cfg.merge(PoolWriteCfg(ConfigFlags))
+
+    # Minor geometry dependencies
+    if ConfigFlags.Detector.GeometryLAr:
+        from LArGeoAlgsNV.LArGMConfig import LArGMCfg
+        cfg.merge(LArGMCfg(ConfigFlags))
+    if ConfigFlags.Detector.GeometryTile:
+        from TileGeoModel.TileGMConfig import TileGMCfg
+        cfg.merge(TileGMCfg(ConfigFlags))
+
+    from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
+    cfg.merge(OutputStreamCfg(ConfigFlags, 'HITS', disableEventTag=True))
+    cfg.getEventAlgo('OutputStreamHITS').TakeItemsFromInput = True
+
+    # Post-include
+    processPostInclude(runArgs, ConfigFlags, cfg)
+
+    # Post-exec
+    processPostExec(runArgs, ConfigFlags, cfg)
+
+    import time
+    tic = time.time()
+    # Run the final accumulator
+    sc = cfg.run()
+    log.info("Ran HITSMerge_tf in " + str(time.time()-tic) + " seconds")
+
+    sys.exit(not sc.isSuccess())
diff --git a/Simulation/SimuJobTransforms/python/ISF_Skeleton.py b/Simulation/SimuJobTransforms/python/ISF_Skeleton.py
index b9aad23154e832671d576113131154c34b93d069..09ae87185c5bb8966d6019ed3006f7e0fa8a969d 100644
--- a/Simulation/SimuJobTransforms/python/ISF_Skeleton.py
+++ b/Simulation/SimuJobTransforms/python/ISF_Skeleton.py
@@ -48,26 +48,9 @@ def fromRunArgs(runArgs):
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     commonRunArgsToFlags(runArgs, ConfigFlags)
 
-    if hasattr(runArgs, 'detectors'):
-        detectors = runArgs.detectors
-    else:
-        from AthenaConfiguration.AutoConfigFlags import getDefaultDetectors
-        detectors = getDefaultDetectors(ConfigFlags.GeoModel.AtlasVersion)
-
-    # Support switching on simulation of Forward Detectors
-    if hasattr(runArgs, 'LucidOn'):
-        detectors = detectors+['Lucid']
-    if hasattr(runArgs, 'ZDCOn'):
-        detectors = detectors+['ZDC']
-    if hasattr(runArgs, 'AFPOn'):
-        detectors = detectors+['AFP']
-    if hasattr(runArgs, 'ALFAOn'):
-        detectors = detectors+['ALFA']
-    if hasattr(runArgs, 'FwdRegionOn'):
-        detectors = detectors+['FwdRegion']
-    #TODO here support switching on Cavern geometry
-    #if hasattr(runArgs, 'CavernOn'):
-    #    detectors = detectors+['Cavern']
+    # Generate detector list
+    from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
+    detectors = getDetectorsFromRunArgs(ConfigFlags, runArgs)
 
     if hasattr(runArgs, 'simulator'):
        ConfigFlags.Sim.ISF.Simulator = runArgs.simulator
@@ -166,7 +149,7 @@ def fromRunArgs(runArgs):
     # Lock flags
     ConfigFlags.lock()
 
-    from CommonSimulationSteering import CommonSimulationCfg
+    from SimuJobTransforms.CommonSimulationSteering import CommonSimulationCfg
     cfg = CommonSimulationCfg(ConfigFlags, log)
 
     # Post-include
diff --git a/Simulation/SimuJobTransforms/python/RDOMerge_Skeleton.py b/Simulation/SimuJobTransforms/python/RDOMerge_Skeleton.py
new file mode 100644
index 0000000000000000000000000000000000000000..a8f141bf4af2aa84efc105e36dc54d1329a85ef8
--- /dev/null
+++ b/Simulation/SimuJobTransforms/python/RDOMerge_Skeleton.py
@@ -0,0 +1,122 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+import sys
+from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
+from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
+
+
+def fromRunArgs(runArgs):
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior = True
+
+    from AthenaCommon.Logging import logging
+    log = logging.getLogger('RDOMerge_tf')
+    log.info('****************** STARTING RDO MERGING *****************')
+
+    log.info('**** Transformation run arguments')
+    log.info(str(runArgs))
+
+    log.info('**** Setting-up configuration flags')
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    commonRunArgsToFlags(runArgs, ConfigFlags)
+
+    if hasattr(runArgs, "PileUpPresampling"):
+        from AthenaConfiguration.Enums import ProductionStep
+        ConfigFlags.Common.ProductionStep = ProductionStep.PileUpPresampling
+
+    if hasattr(runArgs, 'inputRDOFile'):
+        ConfigFlags.Input.Files = runArgs.inputRDOFile
+    else:
+        raise RuntimeError('No input RDO file defined')
+
+    if hasattr(runArgs, 'outputRDO_MRGFile'):
+        if runArgs.outputRDO_MRGFile == 'None':
+            ConfigFlags.Output.RDOFileName = ''
+            # TODO decide if we need a specific RDO_MRGFileName flag
+        else:
+            ConfigFlags.Output.RDOFileName  = runArgs.outputRDO_MRGFile
+    else:
+        raise RuntimeError('No outputRDO_MRGFile defined')
+
+    # Generate detector list and setup detector flags
+    from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
+    detectors = getDetectorsFromRunArgs(ConfigFlags, runArgs)
+    from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
+    setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
+
+    # Pre-include
+    processPreInclude(runArgs, ConfigFlags)
+
+    # Pre-exec
+    processPreExec(runArgs, ConfigFlags)
+
+    # Lock flags
+    ConfigFlags.lock()
+
+    from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+    cfg = MainServicesCfg(ConfigFlags)
+
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
+    cfg.merge(PoolReadCfg(ConfigFlags))
+    cfg.merge(PoolWriteCfg(ConfigFlags))
+
+    # Geometry dependencies
+    if ConfigFlags.Detector.EnablePixel:
+        from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
+        cfg.merge(PixelGeometryCfg(ConfigFlags))
+    if ConfigFlags.Detector.EnableSCT:
+        from SCT_GeoModel.SCT_GeoModelConfig import SCT_GeometryCfg
+        cfg.merge(SCT_GeometryCfg(ConfigFlags))
+    if ConfigFlags.Detector.EnableTRT:
+        from TRT_GeoModel.TRT_GeoModelConfig import TRT_GeometryCfg
+        cfg.merge(TRT_GeometryCfg(ConfigFlags))
+
+    if ConfigFlags.Detector.EnableITkPixel:
+        from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelGeometryCfg
+        cfg.merge(ITkPixelGeometryCfg(ConfigFlags))
+    if ConfigFlags.Detector.EnableITkStrip:
+        from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripGeometryCfg
+        cfg.merge(ITkStripGeometryCfg(ConfigFlags))
+
+    if ConfigFlags.Detector.EnableHGTD:
+        from HGTD_GeoModel.HGTD_GeoModelConfig import HGTD_GeometryCfg
+        cfg.merge(HGTD_GeometryCfg(ConfigFlags))
+
+    if ConfigFlags.Detector.EnableLAr:
+        from LArGeoAlgsNV.LArGMConfig import LArGMCfg
+        cfg.merge(LArGMCfg(ConfigFlags))
+    if ConfigFlags.Detector.EnableTile:
+        from TileGeoModel.TileGMConfig import TileGMCfg
+        cfg.merge(TileGMCfg(ConfigFlags))
+        from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
+        cfg.merge(TileCablingSvcCfg(ConfigFlags))
+
+    if ConfigFlags.Detector.EnableMuon:
+        from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+        cfg.merge(MuonGeoModelCfg(ConfigFlags))
+        if ConfigFlags.Detector.EnableRPC:
+            from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
+            cfg.merge(RPCCablingConfigCfg(ConfigFlags))
+
+    from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
+    cfg.merge(OutputStreamCfg(ConfigFlags, 'RDO'))
+    cfg.getEventAlgo('OutputStreamRDO').TakeItemsFromInput = True
+
+    # Silence HepMcParticleLink warnings
+    from Digitization.DigitizationSteering import DigitizationMessageSvcCfg
+    cfg.merge(DigitizationMessageSvcCfg(ConfigFlags))
+
+    # Post-include
+    processPostInclude(runArgs, ConfigFlags, cfg)
+
+    # Post-exec
+    processPostExec(runArgs, ConfigFlags, cfg)
+
+    import time
+    tic = time.time()
+    # Run the final accumulator
+    sc = cfg.run()
+    log.info("Ran RDOMerge_tf in " + str(time.time()-tic) + " seconds")
+
+    sys.exit(not sc.isSuccess())
diff --git a/Simulation/SimuJobTransforms/python/SimTransformUtils.py b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
index a3bf68cc5343c203ab321f70db553ac5dcb48850..db6bdd85856de6c795941b2dd21c75e5c68fc0e5 100644
--- a/Simulation/SimuJobTransforms/python/SimTransformUtils.py
+++ b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
@@ -191,7 +191,8 @@ def addConfigurableSimSubstep(executorSet, confName, extraSkeleton, confSubStep,
 
 def addStandardHITSMergeSubstep(executorSet):
     executorSet.add(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
-                                              tryDropAndReload = False, inputDataTypeCountCheck = ['HITS']))
+                                   skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
+                                   tryDropAndReload = False, inputDataTypeCountCheck = ['HITS']))
 
 def addAFII_HITSMergeSubstep(executorSet):
     executorSet.add(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
diff --git a/Simulation/SimuJobTransforms/python/SimulationHelpers.py b/Simulation/SimuJobTransforms/python/SimulationHelpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..96721e0dece288f2e4e6db227024ce5b7c665ae2
--- /dev/null
+++ b/Simulation/SimuJobTransforms/python/SimulationHelpers.py
@@ -0,0 +1,26 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+def getDetectorsFromRunArgs(ConfigFlags, runArgs):
+    """Generate detector list based on runtime arguments."""
+    if hasattr(runArgs, 'detectors'):
+        detectors = runArgs.detectors
+    else:
+        from AthenaConfiguration.AutoConfigFlags import getDefaultDetectors
+        detectors = getDefaultDetectors(ConfigFlags.GeoModel.AtlasVersion)
+
+    # Support switching on Forward Detectors
+    if hasattr(runArgs, 'LucidOn'):
+        detectors = detectors+['Lucid']
+    if hasattr(runArgs, 'ZDCOn'):
+        detectors = detectors+['ZDC']
+    if hasattr(runArgs, 'AFPOn'):
+        detectors = detectors+['AFP']
+    if hasattr(runArgs, 'ALFAOn'):
+        detectors = detectors+['ALFA']
+    if hasattr(runArgs, 'FwdRegionOn'):
+        detectors = detectors+['FwdRegion']
+    # TODO here support switching on Cavern geometry
+    # if hasattr(runArgs, 'CavernOn'):
+    #     detectors = detectors+['Cavern']
+
+    return detectors
diff --git a/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py b/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
index ff8e0ddf1095db03e7344511251097eceb461085..59c5f496b9f7440e26cfb3e9d0c0f056b4419880 100755
--- a/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
+++ b/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
@@ -36,6 +36,7 @@ def main():
 def getTransform():
     executorSet = set()
     executorSet.add(athenaExecutor(name = 'RDOMerge', skeletonFile = 'SimuJobTransforms/skeleton.RDOMerge.py',
+                                   skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
                                    inData = ['RDO'], outData = ['RDO_MRG']))
 
     trf = transform(executor = executorSet)
diff --git a/Tools/PyJobTransforms/python/trfArgClasses.py b/Tools/PyJobTransforms/python/trfArgClasses.py
index 47bbcd90e8a65836e71c958785e608a948fa334a..5773aa6d012e32f513590c578b7477fa83577eef 100644
--- a/Tools/PyJobTransforms/python/trfArgClasses.py
+++ b/Tools/PyJobTransforms/python/trfArgClasses.py
@@ -1395,6 +1395,7 @@ class argHITSFile(argPOOLFile):
                             'HITS_MRG' : argHITSFile(output, type=self.type, io='output')}
         myMergeConf = executorConfig(myargdict, myDataDictionary)
         myMerger = athenaExecutor(name = mySubstepName, skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
+                                  skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
                                   conf=myMergeConf, 
                                   inData=set(['HITS']), outData=set(['HITS_MRG']), disableMP=True)
         myMerger.doAll(input=set(['HITS']), output=set(['HITS_MRG']))
@@ -1470,6 +1471,7 @@ class argRDOFile(argPOOLFile):
                             'RDO_MRG' : argHITSFile(output, type=self.type, io='output')}
         myMergeConf = executorConfig(myargdict, myDataDictionary)
         myMerger = athenaExecutor(name = 'RDOMergeAthenaMP{0}'.format(counter), skeletonFile = 'SimuJobTransforms/skeleton.RDOMerge.py',
+                                  skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
                                   conf=myMergeConf, 
                                   inData=set(['RDO']), outData=set(['RDO_MRG']), disableMP=True)
         myMerger.doAll(input=set(['RDO']), output=set(['RDO_MRG']))
diff --git a/Tools/PyJobTransforms/scripts/Merge_tf.py b/Tools/PyJobTransforms/scripts/Merge_tf.py
index 1971051cd331aa69814e161a24de4095d8d1212a..f56ff2006a08486358a4ca21c9d88571b7e45cd2 100755
--- a/Tools/PyJobTransforms/scripts/Merge_tf.py
+++ b/Tools/PyJobTransforms/scripts/Merge_tf.py
@@ -49,8 +49,6 @@ def getTransform():
                                    inData = ['AOD_MRG'], outData = ['TAG'],))
     executorSet.add(tagMergeExecutor(name = 'TAGFileMerge', exe = 'CollAppend', inData = set(['TAG']), outData = set(['TAG_MRG'])))
     executorSet.add(DQMergeExecutor(name = 'DQHistogramMerge', inData = [('HIST_ESD', 'HIST_AOD'), 'HIST'], outData = ['HIST_MRG']))
-    executorSet.add(athenaExecutor(name = 'RDOMerge', skeletonFile = 'SimuJobTransforms/skeleton.RDOMerge.py',
-                                   inData = ['RDO'], outData = ['RDO_MRG']))
     executorSet.add(bsMergeExecutor(name = 'RAWFileMerge', exe = 'file_merging', inData = set(['BS']), outData = set(['BS_MRG'])))
     executorSet.add(athenaExecutor(name = 'EVNTMerge', skeletonFile = 'PyJobTransforms/skeleton.EVNTMerge.py',inData = ['EVNT'], outData = ['EVNT_MRG']))
 
@@ -69,16 +67,30 @@ def getTransform():
     addD3PDArguments(trf.parser, transform=trf, addD3PDMRGtypes=True)
     addExtraDPDTypes(trf.parser, transform=trf, NTUPMergerArgs = True)
 
-    # Add HITSMerge only if SimuJobTransforms is available
+    # Add HITSMerge and RDOMerge only if SimuJobTransforms is available
     try:
         from SimuJobTransforms.SimTransformUtils import addHITSMergeArguments
         addHITSMergeArguments(trf.parser)
-        simStepSet = set()
-        simStepSet.add(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
-                                   tryDropAndReload = False, inData = ['HITS'], outData = ['HITS_MRG']))
-        trf.appendToExecutorSet(list(simStepSet)[0])
+        trf.appendToExecutorSet(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
+                                               skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
+                                               tryDropAndReload = False, inData = ['HITS'], outData = ['HITS_MRG']))
+
+        trf.appendToExecutorSet(athenaExecutor(name = 'RDOMerge', skeletonFile = 'SimuJobTransforms/skeleton.RDOMerge.py',
+                                skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
+                                inData = ['RDO'], outData = ['RDO_MRG']))
+
+        trf.parser.defineArgGroup('RDOMerge_tf', 'RDO merge job specific options')
+        trf.parser.add_argument('--inputRDOFile', nargs='+',
+                                type=trfArgClasses.argFactory(trfArgClasses.argRDOFile, io='input'),
+                                help='Input RDO file', group='RDOMerge_tf')
+        trf.parser.add_argument('--outputRDO_MRGFile', '--outputRDOFile', 
+                                type=trfArgClasses.argFactory(trfArgClasses.argRDOFile, io='output'),
+                                help='Output merged RDO file', group='RDOMerge_tf')
+        trf.parser.add_argument('--PileUpPresampling',
+                                type=trfArgClasses.argFactory(trfArgClasses.argBool),
+                                help='Run digitization with pile-up presampling configuration.', group='RDOMerge_tf')
     except ImportError as e:
-        msg.warning('Failed to import simulation arguments ({0}). HITSMerge will not be available.'.format(e))
+        msg.warning('Failed to import simulation arguments ({0}). HITSMerge and RDOMerge will not be available.'.format(e))
 
 
     return trf
@@ -132,17 +144,6 @@ def addMyArgs(parser):
                         type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', runarg=True, type='hist'), 
                         help='Output DQ monitoring file', group='DQHistMerge_tf')
 
-    parser.defineArgGroup('RDOMerge_tf', 'RDO merge job specific options')
-    parser.add_argument('--inputRDOFile', nargs='+',
-                        type=trfArgClasses.argFactory(trfArgClasses.argRDOFile, io='input'),
-                        help='Input RDO file', group='RDOMerge_tf')
-    parser.add_argument('--outputRDO_MRGFile', '--outputRDOFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argRDOFile, io='output'),
-                        help='Output merged RDO file', group='RDOMerge_tf')
-    parser.add_argument('--PileUpPresampling',
-                        type=trfArgClasses.argFactory(trfArgClasses.argBool),
-                        help='Run digitization with pile-up presampling configuration.', group='RDOMerge_tf')
-
     parser.defineArgGroup('RAWMerge_tf', 'RAWMerge specific options')
     parser.add_argument('--inputBSFile', nargs='+', 
                         type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='input'),