diff --git a/Calorimeter/CaloLocalHadCalib/scripts/CaloLCW_tf.py b/Calorimeter/CaloLocalHadCalib/scripts/CaloLCW_tf.py
index 210d51301a3e9fe10b7f01a025d0b3cae4b136ce..2ced980f105001ad40b73c9a50c222d78a1f1f68 100755
--- a/Calorimeter/CaloLocalHadCalib/scripts/CaloLCW_tf.py
+++ b/Calorimeter/CaloLocalHadCalib/scripts/CaloLCW_tf.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 __doc__ = """JobTransform to run Calo LCW computation job"""
 
@@ -14,8 +14,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 if __name__ == '__main__':
 
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'CaloLCW', skeletonFile = None,
-                                   skeletonCA='CaloLocalHadCalib.CaloLCWSkeleton',
+    executorSet.add(athenaExecutor(name = 'CaloLCW', skeletonCA='CaloLocalHadCalib.CaloLCWSkeleton',
                                    substep = 'e2d', inData = ['ESD',], outData = ['HIST_CLASS','HIST_OOC','HIST_WEIGHTS','NTUP_DM']))
 
     trf = transform(executor = executorSet)
diff --git a/HLT/Trigger/TrigTransforms/TrigTransform/scripts/Trig_reco_tf.py b/HLT/Trigger/TrigTransforms/TrigTransform/scripts/Trig_reco_tf.py
index 03021e4d862b9a541ad8c6ca24a6aa9402eecfa2..5b2e2986107f3ce20afaa9b1afce6c37bbb7808f 100755
--- a/HLT/Trigger/TrigTransforms/TrigTransform/scripts/Trig_reco_tf.py
+++ b/HLT/Trigger/TrigTransforms/TrigTransform/scripts/Trig_reco_tf.py
@@ -75,7 +75,7 @@ def getTransform():
 
     # RAWtoALL, DQHistogramMerge are the reconstruction substeps for trigger transform
     # shortened list from addRecoSubsteps in RecJobTransforms.recTransformUtils
-    executorSet.add(athenaExecutor(name = 'RAWtoALL', skeletonFile = 'RecJobTransforms/skeleton.RAWtoALL_tf.py',
+    executorSet.add(athenaExecutor(name = 'RAWtoALL',
                                    skeletonCA = 'RecJobTransforms.RAWtoALL_Skeleton',
                                    substep = 'r2a', inData = ['BS', 'RDO'],
                                    outData = ['ESD', 'AOD', 'HIST_R2A'],
@@ -84,10 +84,10 @@ def getTransform():
 
     # Other reco steps - not currently used in trigger reprocessings
     # if remove can also remove outputNTUP_TRIGFile
-    executorSet.add(athenaExecutor(name = 'ESDtoDPD', skeletonFile = 'PATJobTransforms/skeleton.ESDtoDPD_tf.py',
+    executorSet.add(athenaExecutor(name = 'ESDtoDPD',
                                    substep = 'e2d', inData = ['ESD'], outData = ['NTUP_TRIG'],
                                    perfMonFile = 'ntuple_ESDtoDPD.pmon.gz'))
-    executorSet.add(athenaExecutor(name = 'AODtoDPD', skeletonFile = 'PATJobTransforms/skeleton.AODtoDPD_tf.py',
+    executorSet.add(athenaExecutor(name = 'AODtoDPD',
                                    substep = 'a2d', inData = ['AOD', 'EVNT'], outData = ['NTUP_TRIG'],
                                    perfMonFile = 'ntuple_AODtoDPD.pmon.gz'))
 
diff --git a/LArCalorimeter/LArCafJobs/share/LArCAF_tf.py b/LArCalorimeter/LArCafJobs/share/LArCAF_tf.py
index 3332fe1cf01e5091f6d5eb3e850533b7cd862622..4999311fc1f9af075f0cbed00d775bd6940f9f3a 100755
--- a/LArCalorimeter/LArCafJobs/share/LArCAF_tf.py
+++ b/LArCalorimeter/LArCafJobs/share/LArCAF_tf.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 __doc__ = """JobTransform to run LAr CAF jobs"""
 
@@ -14,7 +14,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 if __name__ == '__main__':
 
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'LArCAFcalib', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'LArCAFcalib',
                                    skeletonCA='LArCafJobs.LArShapeDumperSkeleton',
                                    substep = 'r2e', inData = ['BS',], outData = ['NTUP_SAMPLESMON','NTUP_HECNOISE']))
     
diff --git a/LArCalorimeter/LArCafJobs/share/LArCells_tf.py b/LArCalorimeter/LArCafJobs/share/LArCells_tf.py
index 126186e6fda8933e22c285c74fb78713c97b18c6..2fa367795a964f2c3fe3b89479a6a49db1c1da24 100755
--- a/LArCalorimeter/LArCafJobs/share/LArCells_tf.py
+++ b/LArCalorimeter/LArCafJobs/share/LArCells_tf.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 __doc__ = """JobTransform to run LArReadCells jobs"""
 
@@ -14,7 +14,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 if __name__ == '__main__':
 
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'LArCAFcells', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'LArCAFcells',
                                    skeletonCA='LArCafJobs.LArReadCellsSkeleton',
                                    substep = 'r2e', inData = ['BS',], outData = ['NTUP_LARCELLS']))
     
diff --git a/LArCalorimeter/LArCafJobs/share/LArNoiseBursts_tf.py b/LArCalorimeter/LArCafJobs/share/LArNoiseBursts_tf.py
index 636b97395248e6ac1e7d5380f94e8e527f512dd9..02e9a296e61ddd75b8390cfd6a331ea2918e7056 100755
--- a/LArCalorimeter/LArCafJobs/share/LArNoiseBursts_tf.py
+++ b/LArCalorimeter/LArCafJobs/share/LArNoiseBursts_tf.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 __doc__ = """JobTransform to run LAr Noise Burst jobs"""
 
@@ -14,7 +14,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 if __name__ == '__main__':
 
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'LArNoiseBursts', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'LArNoiseBursts',
                                    skeletonCA='LArCafJobs.LArNoiseSkeleton',
                                    substep = 'e2a', inData = ['ESD',], outData = ['NTUP_LARNOISE','NTUP_HECNOISE']))
    
diff --git a/LArCalorimeter/LArCafJobs/share/LArSCDump_tf.py b/LArCalorimeter/LArCafJobs/share/LArSCDump_tf.py
index 4226ae330458187ba13c8bbb64b9cd8e55242917..d258087098f5d791d3929d9ee3a69b1fd258bff8 100755
--- a/LArCalorimeter/LArCafJobs/share/LArSCDump_tf.py
+++ b/LArCalorimeter/LArCafJobs/share/LArSCDump_tf.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 __doc__ = """JobTransform to run LAr SuperCells dumping jobs"""
 
@@ -14,7 +14,7 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 if __name__ == '__main__':
 
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'LArSCDump', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'LArSCDump',
                                    skeletonCA='LArCafJobs.LArSCDumperSkeleton',
                                    substep = 'r2e', inData = ['BS',], outData = ['NTUP_SCMON']))
     
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkConfiguration/python/DerivationTransformHelpers.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkConfiguration/python/DerivationTransformHelpers.py
index 307ff463342c6695c2cb6403cc20cb743c5e0fa2..60067cbcc5cc63c72e14cdc2c4ce98b6992ca899 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkConfiguration/python/DerivationTransformHelpers.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkConfiguration/python/DerivationTransformHelpers.py
@@ -1,6 +1,6 @@
 """Main derivation transform configuration helpers
 
-Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 """
 
 from PyJobTransforms.trfArgClasses import argFactory, argList, argNTUPFile, argPOOLFile, argSubstepBool
@@ -66,7 +66,6 @@ def addDerivationSubstep(executor_set):
     # It handles the composite output filenames and inserts them into the transform's dataDictionary.
     # If this isn't done the file validation will run over the wrong file name.
     executor = reductionFrameworkExecutor(name='Derivation',
-                                          skeletonFile=None,
                                           skeletonCA='DerivationFrameworkConfiguration.DerivationSkeleton',
                                           substep='DerivationFramework',
                                           tryDropAndReload=False,
@@ -78,7 +77,6 @@ def addDerivationSubstep(executor_set):
 
 def addPhysicsValidationSubstep(executor_set):
     executor = athenaExecutor(name='PhysicsValidation',
-                              skeletonFile=None,
                               skeletonCA='DerivationFrameworkConfiguration.PhysicsValidationSkeleton',
                               substep='PhysicsValidation',
                               tryDropAndReload=False,
diff --git a/PhysicsAnalysis/PATJobTransforms/python/PATTransformUtils.py b/PhysicsAnalysis/PATJobTransforms/python/PATTransformUtils.py
index 358f6b55b17630d1b88a7f1a8c66aa49df9ed80e..3045c7f76d800bb8c02ae1777b69a1c5c4b095c8 100644
--- a/PhysicsAnalysis/PATJobTransforms/python/PATTransformUtils.py
+++ b/PhysicsAnalysis/PATJobTransforms/python/PATTransformUtils.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @brief Module with PAT transform options and substeps
 
@@ -10,10 +10,10 @@ msg = msg.getChild(__name__)
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
-from PyJobTransforms.trfExe import athenaExecutor
 from PyJobTransforms.trfArgs import listKnownD3PDs, getExtraDPDList
 from PyJobTransforms.trfExe import  NTUPMergeExecutor, hybridPOOLMergeExecutor
 
+
 def addPhysValidationFiles(parser):
     # Better to somehow auto-import this from PhysicsAnalysis/PhysicsValidation/PhysValMonitoring
     parser.defineArgGroup('Validation Files', 'Physics validation file options')
@@ -30,21 +30,6 @@ def addPhysValidationMergeFiles(parser):
     parser.add_argument('--outputNTUP_PHYSVAL_MRGFile', 
                         type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, io='output'),
                         help='Output merged physics validation file', group='Validation Files')
-    
-def addValidationArguments(parser):
-    parser.defineArgGroup('Validation Args', 'Physics validation options')
-    parser.add_argument('--validationFlags', nargs='+',
-                        type=trfArgClasses.argFactory(trfArgClasses.argList),
-                        help='Physics validation histogram switches', group='Validation Args')
-    
-def addPhysValidationSubstep(executorSet):
-    executorSet.add(athenaExecutor(name = 'PhysicsValidation', skeletonFile = 'PATJobTransforms/skeleton.PhysicsValidation_tf.py',
-                                   inData = ['AOD'], outData = ['NTUP_PHYSVAL'], substep='pval'))
-
-def appendPhysValidationSubstep(trf):
-    executor = set()
-    addPhysValidationSubstep(executor)
-    trf.appendToExecutorSet(executor)
 
 def addNTUPMergeSubsteps(executorSet):
     # Ye olde NTUPs
@@ -89,9 +74,7 @@ def addDAODArguments(parser, mergerTrf=True):
 def addDAODMergerSubsteps(executorSet):
     DAODTypes = knownDAODTypes()
     for DAOD in DAODTypes:
-        executorSet.add(hybridPOOLMergeExecutor(name = DAOD.lstrip("DAOD_") + 'Merge', skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
-                        skeletonCA = 'RecJobTransforms.MergePool_Skeleton', inData = [DAOD], outData = [DAOD+'_MRG'])
-                        )
+        executorSet.add(hybridPOOLMergeExecutor(name = DAOD.lstrip("DAOD_") + 'Merge', inData = [DAOD], outData = [DAOD+'_MRG']))
 
 def knownDAODTypes():
     DAODTypes = []
diff --git a/PhysicsAnalysis/PATJobTransforms/scripts/DAODMerge_tf.py b/PhysicsAnalysis/PATJobTransforms/scripts/DAODMerge_tf.py
index fb3aac0db2729bf38796ff73a02b6b5b37e1c130..a30efdfe14926f7a08328693b621ed4bab585b6b 100755
--- a/PhysicsAnalysis/PATJobTransforms/scripts/DAODMerge_tf.py
+++ b/PhysicsAnalysis/PATJobTransforms/scripts/DAODMerge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## DAODMerge_tf.py - Dervied AOD merger capable of merging different flavours
 #  of DAOD in the one job
@@ -9,22 +9,17 @@
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
 
 from PyJobTransforms.transform import transform
-from PyJobTransforms.trfExe import athenaExecutor, hybridPOOLMergeExecutor
 from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs
 
 from PATJobTransforms.PATTransformUtils import addDAODArguments, addDAODMergerSubsteps
 
-import PyJobTransforms.trfArgClasses as trfArgClasses
-
 ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--DBRelease', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--autoConfiguration', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputDAOD_HIGGS3D1File', '--inputDAOD_HIGGS4D2File', '--inputDAOD_HIGGS5D1File', '--inputDAOD_HIGGS8D1File', '--inputDAOD_HIGGS8D2File', '--inputDAOD_JETMET1File', '--inputDAOD_JETMET2File', '--inputDAOD_JETMET3File', '--inputDAOD_JETMET4File', '--inputDAOD_JETMET5File', '--inputDAOD_SUSY1File', '--inputDAOD_TAU1File', '--inputDAOD_TAU3File', '--inputDAOD_TEST1File', '--inputDAOD_TEST2File', '--inputDAOD_TEST3File', '--inputDAOD_TEST4File', '--inputDAOD_TEST5File', '--inputDAOD_TOP1File', '--maxEvents', '--orphanKiller', '--outputDAOD_HIGGS3D1_MRGFile', '--outputDAOD_HIGGS4D2_MRGFile', '--outputDAOD_HIGGS5D1_MRGFile', '--outputDAOD_HIGGS8D1_MRGFile', '--outputDAOD_HIGGS8D2_MRGFile', '--outputDAOD_JETMET1_MRGFile', '--outputDAOD_JETMET2_MRGFile', '--outputDAOD_JETMET3_MRGFile', '--outputDAOD_JETMET4_MRGFile', '--outputDAOD_JETMET5_MRGFile', '--outputDAOD_SUSY1_MRGFile', '--outputDAOD_TAU1_MRGFile', '--outputDAOD_TAU3_MRGFile', '--outputDAOD_TEST1_MRGFile', '--outputDAOD_TEST2_MRGFile', '--outputDAOD_TEST3_MRGFile', '--outputDAOD_TEST4_MRGFile', '--outputDAOD_TEST5_MRGFile', '--outputDAOD_TOP1_MRGFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reportName', '--reportType', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--tcmalloc', '--trigStream']
 
 @stdTrfExceptionHandler
diff --git a/Reconstruction/RecJobTransforms/python/recTransformUtils.py b/Reconstruction/RecJobTransforms/python/recTransformUtils.py
index a13ca62a1528c6d45c2bd04687e6297729821ffe..1d69df9d537ec3fdff999776a154a874f17bc578 100644
--- a/Reconstruction/RecJobTransforms/python/recTransformUtils.py
+++ b/Reconstruction/RecJobTransforms/python/recTransformUtils.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @brief Module with standard reconstruction transform options and substeps
 
@@ -7,7 +7,7 @@ msg = logging.getLogger(__name__)
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
-from PyJobTransforms.trfExe import athenaExecutor, dummyExecutor, DQMergeExecutor
+from PyJobTransforms.trfExe import athenaExecutor, DQMergeExecutor
 from PyJobTransforms.trfArgs import addPrimaryDPDArguments, addExtraDPDTypes
 
 
@@ -74,9 +74,6 @@ def addStandardRecoFiles(parser):
     parser.add_argument('--outputHIST_AODFile', 
                         type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', countable=False), 
                         help='Output DQ monitoring file', group='Reco Files')
-    parser.add_argument('--outputTAGFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argFile, io='output'), 
-                        help='Output TAG file', group='Reco Files')
     parser.add_argument('--inputEVNTFile', nargs='+', 
                         type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='input'),
                         help='Input EVNT file for NTUP_TRUTH making', group='Reco Files')
@@ -97,36 +94,27 @@ def addStandardRecoFiles(parser):
 #  @note This is done in a separate function so that other transforms (full chain ones)
 #  can import these steps easily
 def addRecoSubsteps(executorSet):
-    executorSet.add(athenaExecutor(name = 'RDOtoBS', skeletonFile = 'RecJobTransforms/skeleton.RDOtoBS_tf.py',
+    executorSet.add(athenaExecutor(name = 'RDOtoBS',
                                    substep = 'r2b', inData = ['RDO'], outData = ['BS']))
-    executorSet.add(athenaExecutor(name = 'RDOtoRDOTrigger', skeletonFile = 'RecJobTransforms/skeleton.RDOtoRDOtrigger.py',
+    executorSet.add(athenaExecutor(name = 'RDOtoRDOTrigger', skeletonFile = 'RecJobTransforms/skeleton.RDOtoRDOtrigger.py',  # needs to keep legacy for older releases
                                    skeletonCA = 'RecJobTransforms.RDOtoRDO_TRIG_Skeleton',
                                    substep = 'r2t', inData = ['RDO'], outData = ['RDO_TRIG']))
-    executorSet.add(athenaExecutor(name = 'RAWtoALL', skeletonFile = 'RecJobTransforms/skeleton.RAWtoALL_tf.py',
+    executorSet.add(athenaExecutor(name = 'RAWtoALL',
                                    skeletonCA = 'RecJobTransforms.RAWtoALL_Skeleton',
                                    substep = 'r2a', inData = ['BS', 'RDO', 'DRAW_ZMUMU', 'DRAW_ZEE', 'DRAW_EMU', 'DRAW_RPVLL'], 
                                    outData = ['ESD', 'AOD', 'HIST_R2A', 'TXT_JIVEXMLTGZ'],))
-    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLA', skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
+    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLA',
+                                   skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
                                    substep = 'r2tla', inData = ['BS'], outData = ['DAOD_TLA'], ))
-    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLAFTAGPEB', skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
+    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLAFTAGPEB',
+                                   skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
                                    substep = 'r2TLAFTAGPEB', inData = ['BS'], outData = ['DAOD_TLAFTAGPEB'], ))
-    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLAEGAMPEB', skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
+    executorSet.add(athenaExecutor(name = 'RAWtoDAODTLAEGAMPEB',
+                                   skeletonCA = 'RecJobTransforms.RAWtoDAOD_TLA_Skeleton',
                                    substep = 'r2TLAEGAMPEB', inData = ['BS'], outData = ['DAOD_TLAEGAMPEB'], ))
-    executorSet.add(athenaExecutor(name = 'RAWtoESD', skeletonFile = 'RecJobTransforms/skeleton.RAWtoESD_tf.py',
-                                   substep = 'r2e', inData = [], outData = [],))
-    executorSet.add(athenaExecutor(name = 'ESDtoAOD', skeletonFile = 'RecJobTransforms/skeleton.ESDtoAOD_tf.py',
-                                   substep = 'e2a', inData = ['ESD'], outData = ['AOD', 'HIST_AOD_INT']))
     executorSet.add(DQMergeExecutor(name = 'DQHistogramMerge', inData = [('HIST_ESD_INT', 'HIST_AOD_INT'), 'HIST_R2A', 'HIST_AOD'], outData = ['HIST']))
-    executorSet.add(athenaExecutor(name = 'ESDtoDPD', skeletonFile = 'PATJobTransforms/skeleton.ESDtoDPD_tf.py',
-                                   substep = 'e2d', inData = ['ESD'], outData = []))
-    executorSet.add(athenaExecutor(name = 'AODtoDPD', skeletonFile = 'PATJobTransforms/skeleton.AODtoDPD_tf.py',
-                                   substep = 'a2d', inData = ['AOD', 'EVNT'], outData = []))
-    executorSet.add(athenaExecutor(name = 'AODtoAOD', skeletonFile = 'RecJobTransforms/skeleton.AODtoAOD_tf.py',
-                                   substep = 'a2a', inData = ['AOD'], outData = ['AOD_RPR'],
-                                   perfMonFile = None))
-    executorSet.add(dummyExecutor(name = 'AODtoTAG',
-                                   inData = ['AOD', 'AOD_RPR'], outData = ['TAG'],))
-    executorSet.add(athenaExecutor(name = 'AODtoHIST', skeletonFile = 'RecJobTransforms/skeleton.AODtoHIST_tf.py', skeletonCA = 'RecJobTransforms.AODtoHIST_Skeleton',
+    executorSet.add(athenaExecutor(name = 'AODtoHIST',
+                                   skeletonCA = 'RecJobTransforms.AODtoHIST_Skeleton',
                                    substep = 'a2h', inData = ['AOD'], outData = ['HIST_AOD'],))
 
 
diff --git a/Reconstruction/RecJobTransforms/scripts/AODMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/AODMerge_tf.py
index b917798cbc4f9b2699f3dc3094f8e62a20723581..bd79cf76f1cb1dedfd27bfd2f3ccd23266892e5d 100755
--- a/Reconstruction/RecJobTransforms/scripts/AODMerge_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/AODMerge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## AODMerge_tf.py - AOD merger with optional TAG and DPD outputs
 #  N.B. Do need clarification as to if AODtoDPD is ever run in parallel with AOD merging 
@@ -9,21 +9,19 @@
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
 
 from PyJobTransforms.transform import transform
-from PyJobTransforms.trfExe import athenaExecutor, hybridPOOLMergeExecutor
+from PyJobTransforms.trfExe import hybridPOOLMergeExecutor
 from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
-ListOfDefaultPositionalKeys=['--DBRelease', '--amiConfig', '--amiMetadataTag', '--asetup', '--athena', '--athenaopts', '--autoConfiguration', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--geometryVersion', '--ignoreErrors', '--ignoreFilters', '--ignorePatterns', '--inputAODFile', '--maxEvents', '--noimf', '--notcmalloc', '--outputAOD_MRGFile', '--outputTAGFile', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reportName', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation']
+ListOfDefaultPositionalKeys=['--DBRelease', '--amiConfig', '--amiMetadataTag', '--asetup', '--athena', '--athenaopts', '--autoConfiguration', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--geometryVersion', '--ignoreErrors', '--ignoreFilters', '--ignorePatterns', '--inputAODFile', '--maxEvents', '--noimf', '--notcmalloc', '--outputAOD_MRGFile', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reportName', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation']
 
 @stdTrfExceptionHandler
 @sigUsrStackTrace
@@ -41,10 +39,7 @@ def main():
 
 def getTransform():
     executorSet = set()
-    executorSet.add(hybridPOOLMergeExecutor(name = 'AODMerge', skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
-                                   skeletonCA = 'RecJobTransforms.MergePool_Skeleton', inData = ['AOD'], outData = ['AOD_MRG']))
-    executorSet.add(athenaExecutor(name = 'AODtoTAG', skeletonFile = 'RecJobTransforms/skeleton.AODtoTAG_tf.py',
-                                   inData = ['AOD_MRG'], outData = ['TAG'],))
+    executorSet.add(hybridPOOLMergeExecutor(name = 'AODMerge', inData = ['AOD'], outData = ['AOD_MRG']))
 
     trf = transform(executor = executorSet)
     
@@ -67,9 +62,6 @@ def addMyArgs(parser):
     parser.add_argument('--outputAOD_MRGFile', '--outputAODFile', 
                         type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output', type='aod'),
                         help='Output merged AOD file', group='AODMerge_tf')
-    parser.add_argument('--outputTAGFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='output', type='tag'), 
-                        help='Output TAG file', group='AODMerge_tf')
 
 if __name__ == '__main__':
     main()
diff --git a/Reconstruction/RecJobTransforms/scripts/ESDMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/ESDMerge_tf.py
index 6f0c5e686102cd8e8b25f38c3a2d9822dfd6a3ce..81a88468747c47e8738b7498a173d6eb27c73bcb 100755
--- a/Reconstruction/RecJobTransforms/scripts/ESDMerge_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/ESDMerge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## ESDMerge_tf.py - ESD merger
 # @version $Id: ESDMerge_tf.py 670203 2015-05-27 13:19:01Z graemes $ 
@@ -8,14 +8,12 @@
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
 
 from PyJobTransforms.transform import transform
-from PyJobTransforms.trfExe import athenaExecutor, hybridPOOLMergeExecutor
+from PyJobTransforms.trfExe import hybridPOOLMergeExecutor
 from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs
@@ -40,8 +38,7 @@ def main():
 
 def getTransform():
     executorSet = set()
-    executorSet.add(hybridPOOLMergeExecutor(name = 'ESDMerge', skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
-                                   skeletonCA = 'RecJobTransforms.MergePool_Skeleton', inData = ['ESD'], outData = ['ESD_MRG']))
+    executorSet.add(hybridPOOLMergeExecutor(name = 'ESDMerge', inData = ['ESD'], outData = ['ESD_MRG']))
 
     trf = transform(executor = executorSet)
     
diff --git a/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_tf.py b/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_tf.py
index 48901cd2b512557544440790213be964368a206f..2b765257212c3ee85207f671cf5f6f5869d9f785 100755
--- a/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_tf.py
@@ -1,16 +1,13 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## A simple ESDtoAOD transform. 
 # @version $Id: ESDtoAOD_tf.py 670203 2015-05-27 13:19:01Z graemes $ 
 
-import os.path
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
@@ -40,8 +37,7 @@ def main():
     sys.exit(trf.exitCode)
 
 def getTransform():
-    trf = transform(executor = athenaExecutor(name = 'ESDtoAOD', skeletonFile = 'RecJobTransforms/skeleton.ESDtoAOD_tf.py',
-                                              substep = 'e2a'))
+    trf = transform(executor = athenaExecutor(name = 'ESDtoAOD', substep = 'e2a'))
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
     addCommonRecTrfArgs(trf.parser)
diff --git a/Reconstruction/RecJobTransforms/scripts/HISTMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/HISTMerge_tf.py
index 27b83be15d74344a516ed4c04942d5cc65045a6a..56cfe748c97801afa0995f4c02d35cbf94bb6be1 100755
--- a/Reconstruction/RecJobTransforms/scripts/HISTMerge_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/HISTMerge_tf.py
@@ -1,16 +1,13 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @brief Small test transform which only runs HIST merging
 # @version $Id: HISTMerge_tf.py 603486 2014-06-25 09:07:28Z graemes $ 
 
-import os.path
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
diff --git a/Reconstruction/RecJobTransforms/scripts/HLTHistMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/HLTHistMerge_tf.py
index 0ae48e2ac604864e89a5e61f02a9391b516d52fa..25ce0191a17eefd3e51d7d667fcdddb140d09db5 100755
--- a/Reconstruction/RecJobTransforms/scripts/HLTHistMerge_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/HLTHistMerge_tf.py
@@ -1,16 +1,13 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @brief Small test transform which only runs HIST merging
 # @version $Id: HLTHistMerge_tf.py 601587 2014-06-13 07:01:23Z graemes $ 
 
-import os.path
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
diff --git a/Reconstruction/RecJobTransforms/scripts/RAWMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/RAWMerge_tf.py
index 199f138e9455502c20e65c09526ca8f6b9db8f8d..f997d369e20dfdd13e49a4f468c92739ab091e3d 100755
--- a/Reconstruction/RecJobTransforms/scripts/RAWMerge_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/RAWMerge_tf.py
@@ -1,17 +1,14 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## Bytestream file merger, adapted from Tier0 RAWMerge_trf.py
 #  Uses TDAQ fast bytestream merger 'file_merging'
 # @version $Id: RAWMerge_tf.py 571113 2013-11-18 21:45:05Z graemes $ 
 
-import os.path
 import sys
 import time
 
-import logging
-
 # This is a hack for Prodsys I. To generate this list use the --dumpargs option to the transform, then paste in here
 # N.B. This all has to go on one line!
 ListOfDefaultPositionalKeys=['--allowRename', '--amiConfig', '--amiMetadataTag', '--checkEventCount', '--env', '--execOnly', '--ignoreErrors', '--inputBSFile', '--maskEmptyInputs', '--noimf', '--notcmalloc', '--outputBS_MRGFile', '--reportName', '--showGraph', '--showPath', '--showSteps', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation']
diff --git a/Reconstruction/RecJobTransforms/scripts/RAWSkim_tf.py b/Reconstruction/RecJobTransforms/scripts/RAWSkim_tf.py
index d6a242759bbcc50a464801566ebe8166aaf7c9cc..657fdee69b0302536d840434f69fbabd14aee752 100755
--- a/Reconstruction/RecJobTransforms/scripts/RAWSkim_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/RAWSkim_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## SkimRAW_tf.py - Bytestream skimmer transform
 # @version $Id: RAWSkim_tf.py 643395 2015-02-01 19:51:21Z graemes $ 
@@ -8,15 +8,12 @@
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
 
 from PyJobTransforms.transform import transform
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
-from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
diff --git a/Reconstruction/RecJobTransforms/scripts/RAWtoESD_tf.py b/Reconstruction/RecJobTransforms/scripts/RAWtoESD_tf.py
deleted file mode 100755
index c1c7b82568dc64e9f8348729e8daa5717a56733d..0000000000000000000000000000000000000000
--- a/Reconstruction/RecJobTransforms/scripts/RAWtoESD_tf.py
+++ /dev/null
@@ -1,73 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-## A simple RAWtoESD transform. 
-# @version $Id: RAWtoESD_tf.py 670203 2015-05-27 13:19:01Z graemes $ 
-
-import os.path
-import sys
-import time
-
-import logging
-
-# Setup core logging here
-from PyJobTransforms.trfLogger import msg
-msg.info('logging set in %s' % sys.argv[0])
-
-from PyJobTransforms.transform import transform
-from PyJobTransforms.trfExe import athenaExecutor
-from PyJobTransforms.trfArgs import addAthenaArguments, addD3PDArguments
-from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
-
-import PyJobTransforms.trfArgClasses as trfArgClasses
-
-ListOfDefaultPositionalKeys = ['--amiConfig', '--amiMetadataTag', '--asetup', '--athena', '--athenaopts', '--checkEventCount', '--command', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--ignoreErrors', '--ignoreFilters', '--ignorePatterns', '--inputBSFile', '--inputRDOFile', '--maxEvents', '--noimf', '--notcmalloc', '--outputESDFile', '--outputHIST_ESD_INTFile', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reportName', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--outputTXT_JIVEXMLTGZFile']
-
-@stdTrfExceptionHandler
-@sigUsrStackTrace
-def main():
-    
-    msg.info('This is %s' % sys.argv[0])
-
-    trf = getTransform()
-    trf.parseCmdLineArgs(sys.argv[1:])
-    trf.execute()
-    trf.generateReport()
-
-    msg.info("%s stopped at %s, trf exit code %d" % (sys.argv[0], time.asctime(), trf.exitCode))
-    sys.exit(trf.exitCode)
-
-def getTransform():
-    trf = transform(executor = athenaExecutor(name = 'RAWtoESD', skeletonFile = 'RecJobTransforms/skeleton.RAWtoESD_tf.py',
-                                              substep = 'r2e',
-                                              ))
-    addAthenaArguments(trf.parser)
-    addMyArgs(trf.parser)
-    return trf
-
-
-def addMyArgs(parser):
-    # Use arggroup to get these arguments in their own sub-section (of --help)
-    parser.defineArgGroup('RAWtoESD_tf', 'RAW to ESD specific options')
-    parser.add_argument('--inputRDO_TRIGFile', nargs='+', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argRDO_TRIGFile, io='input'),
-                        help='Input rdo trigger file', group='RAWtoESD_tf')
-    parser.add_argument('--inputBSFile', nargs='+', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='input'),
-                        help='Input bytestream file', group='RAWtoESD_tf')
-    parser.add_argument('--inputRDOFile', nargs='+', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='input'),
-                        help='Input RDO file', group='RAWtoESD_tf')
-    parser.add_argument('--outputESDFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output'),
-                        help='Output ESD file', group='RAWtoESD_tf')
-    parser.add_argument('--outputHIST_ESD_INTFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', countable=False),
-                        help='Output DQ monitoring file', group='RAWtoESD_tf')
-    parser.add_argument('--outputTXT_JIVEXMLTGZFile', type = trfArgClasses.argFactory(trfArgClasses.argFile, io = 'output'),
-                        help = 'Output JiveXML.tgz file', group = 'RAWtoESD_tf')
-
-
-if __name__ == '__main__':
-    main()
diff --git a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
index e0dfaf0fd970fa1e75b6616415c2b3a49cddb150..4dddc4c1822aee5c9171b3f29858585df0148d95 100755
--- a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## Reco_tf.py - New transform re-implementation of the beast that is Reco_trf.
 # @version $Id: Reco_tf.py 769766 2016-08-24 09:49:03Z lerrenst $ 
@@ -17,8 +17,7 @@ from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments, ad
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addAllRecoArgs, addRecoSubsteps
 
-ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--CA', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--HGTDOn', '--LucidOn', '--PileUpPresampling', '--ZDCOn', '--argJSON', '--asetup', '--athena', '--athenaMPEventsBeforeFork', '--athenaMPMergeTargetSize', '--athenaMPStrategy', '--athenaMPUseEventOrders', '--athenaopts', '--attempt', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--detectors', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--digiSteeringConf', '--doAllNoise', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--eventService', '--execOnly', '--fileValidation', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputDRAW_EMUFile', '--inputDRAW_ZEEFile', '--inputDRAW_ZMUMUFile', '--inputESDFile', '--inputEVNTFile', '--inputFileValidation', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--inputRDO_BKGFile', '--inputRDO_TRIGFile', '--jobNumber', '--jobid', '--maxEvents', '--multiprocess', '--multithreaded', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--outputAODFile', '--outputAOD_RPRFile', '--outputAOD_SKIMFile', '--outputDAOD_TLAFile', '--outputDAOD_TLAFTAGPEBFile', '--outputDAOD_TLAEGAMPEBFile' '--outputBSFile', '--outputDAODFile', '--outputDAOD_HSG2File', '--outputDAOD_IDNCBFile', '--outputDAOD_IDPIXLUMIFile', '--outputDAOD_IDTIDEFile', '--outputDAOD_IDTRKLUMIFile', '--outputDAOD_IDTRKVALIDFile', '--outputDAOD_L1CALO1File', '--outputDAOD_L1CALO2File', '--outputDAOD_L1CALO3File', '--outputDAOD_L1CALO4File', '--outputDAOD_L1CALO5File', '--outputDAOD_PIXELVALIDFile', '--outputDAOD_SCTVALIDFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_CALJETFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_EOVERPFile', '--outputDESDM_EXOTHIPFile', '--outputDESDM_IDALIGNFile', '--outputDESDM_MCPFile', '--outputDESDM_PHOJETFile', '--outputDESDM_SGLELFile', '--outputDESDM_SLTTMUFile', '--outputDESDM_TILEMUFile', '--outputDESDM_ZMUMUFile', '--outputDESD_DEDXFile', '--outputDNTUPFile', '--outputDRAW_BCID1File', '--outputDRAW_BCID2File', '--outputDRAW_BCID3File', '--outputDRAW_BCID4File', '--outputDRAW_EGJPSIFile', '--outputDRAW_EGZFile', '--outputDRAW_TAULHFile', '--outputDRAW_JETFile', '--outputDRAW_EMUFile', '--outputDRAW_RPVLLFile', '--outputDRAW_TAUMUHFile', '--outputDRAW_TOPSLMUFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputFileValidation', '--outputHISTFile', '--outputHIST_AODFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_FastCaloSimFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPScaleFile', '--outputNTUP_MCPTPFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_PHYSVALFile', '--outputNTUP_PILEUPFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WZFile', '--outputRDOFile', '--outputRDO_FILTFile', '--outputRDO_SGNLFile', '--outputRDO_TRIGFile', '--outputTAGFile', '--outputTXT_JIVEXMLTGZFile', '--parallelFileValidation', '--passThrough', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--sharedWriter', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--steering', '--taskid', '--tcmalloc', '--testPileUpConfig', '--topOptions', '--trigFilterList', '--trigStream', '--triggerConfig', '--valgrind', '--valgrindDefaultOpts', '--valgrindExtraOpts', '--valid', '--validationFlags']
-
+ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--CA', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--HGTDOn', '--LucidOn', '--PileUpPresampling', '--ZDCOn', '--argJSON', '--asetup', '--athena', '--athenaMPEventsBeforeFork', '--athenaMPMergeTargetSize', '--athenaMPStrategy', '--athenaMPUseEventOrders', '--athenaopts', '--attempt', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--detectors', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--digiSteeringConf', '--doAllNoise', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--eventService', '--execOnly', '--fileValidation', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputDRAW_EMUFile', '--inputDRAW_ZEEFile', '--inputDRAW_ZMUMUFile', '--inputESDFile', '--inputEVNTFile', '--inputFileValidation', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--inputRDO_BKGFile', '--inputRDO_TRIGFile', '--jobNumber', '--jobid', '--maxEvents', '--multiprocess', '--multithreaded', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--outputAODFile', '--outputAOD_RPRFile', '--outputAOD_SKIMFile', '--outputDAOD_TLAFile', '--outputDAOD_TLAFTAGPEBFile', '--outputDAOD_TLAEGAMPEBFile', '--outputBSFile', '--outputDAODFile', '--outputDAOD_HSG2File', '--outputDAOD_IDNCBFile', '--outputDAOD_IDPIXLUMIFile', '--outputDAOD_IDTIDEFile', '--outputDAOD_IDTRKLUMIFile', '--outputDAOD_IDTRKVALIDFile', '--outputDAOD_L1CALO1File', '--outputDAOD_L1CALO2File', '--outputDAOD_L1CALO3File', '--outputDAOD_L1CALO4File', '--outputDAOD_L1CALO5File', '--outputDAOD_PIXELVALIDFile', '--outputDAOD_SCTVALIDFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_CALJETFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_EOVERPFile', '--outputDESDM_EXOTHIPFile', '--outputDESDM_IDALIGNFile', '--outputDESDM_MCPFile', '--outputDESDM_PHOJETFile', '--outputDESDM_SGLELFile', '--outputDESDM_SLTTMUFile', '--outputDESDM_TILEMUFile', '--outputDESDM_ZMUMUFile', '--outputDESD_DEDXFile', '--outputDNTUPFile', '--outputDRAW_BCID1File', '--outputDRAW_BCID2File', '--outputDRAW_BCID3File', '--outputDRAW_BCID4File', '--outputDRAW_EGJPSIFile', '--outputDRAW_EGZFile', '--outputDRAW_TAULHFile', '--outputDRAW_JETFile', '--outputDRAW_EMUFile', '--outputDRAW_RPVLLFile', '--outputDRAW_TAUMUHFile', '--outputDRAW_TOPSLMUFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputFileValidation', '--outputHISTFile', '--outputHIST_AODFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_FastCaloSimFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPScaleFile', '--outputNTUP_MCPTPFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_PHYSVALFile', '--outputNTUP_PILEUPFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WZFile', '--outputRDOFile', '--outputRDO_FILTFile', '--outputRDO_SGNLFile', '--outputRDO_TRIGFile', '--outputTXT_JIVEXMLTGZFile', '--parallelFileValidation', '--passThrough', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--sharedWriter', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--steering', '--taskid', '--tcmalloc', '--testPileUpConfig', '--topOptions', '--trigFilterList', '--trigStream', '--triggerConfig', '--valgrind', '--valgrindDefaultOpts', '--valgrindExtraOpts', '--valid', '--validationFlags']
 
 @stdTrfExceptionHandler
 @sigUsrStackTrace
@@ -75,16 +74,7 @@ def getTransform():
         appendOverlaySubstep(trf, in_reco_chain=True)
     except ImportError as e:
         msg.warning('Failed to import overlay arguments ({0}). Overlay substep will not be available.'.format(e))
-    
-    # Again, protect core functionality from too tight a dependence on PATJobTransforms
-    try:
-        from PATJobTransforms.PATTransformUtils import addPhysValidationFiles, addValidationArguments, appendPhysValidationSubstep
-        addPhysValidationFiles(trf.parser)
-        addValidationArguments(trf.parser)
-        appendPhysValidationSubstep(trf)
-    except ImportError:
-        msg.warning('Failed to import PAT arguments. Physics validation substep will not be available.')
-        
+
     return trf
 
 
diff --git a/Reconstruction/RecJobTransforms/scripts/TAGMerge_tf.py b/Reconstruction/RecJobTransforms/scripts/TAGMerge_tf.py
deleted file mode 100755
index 38586e52c813cfe67a23a6f4bad0f558a57564b9..0000000000000000000000000000000000000000
--- a/Reconstruction/RecJobTransforms/scripts/TAGMerge_tf.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-## TAG file merger, adapted from Tier0 TAGMerge_trf.py
-#  Uses CollAppend binary
-# @version $Id: TAGMerge_tf.py 571113 2013-11-18 21:45:05Z graemes $ 
-
-import os.path
-import sys
-import time
-
-import logging
-
-# This is a hack for Prodsys I. To generate this list use the --dumpargs option to the transform, then paste in here
-# N.B. This all has to go on one line!
-ListOfDefaultPositionalKeys=['--amiConfig', '--amiMetadataTag', '--checkEventCount', '--env', '--execOnly', '--ignoreErrors', '--inputTAGFile', '--noimf', '--notcmalloc', '--outputTAG_MRGFile', '--reportName', '--showGraph', '--showPath', '--showSteps', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation']
-
-# Setup core logging here
-from PyJobTransforms.trfLogger import msg
-msg.info('logging set in %s' % sys.argv[0])
-
-from PyJobTransforms.transform import transform
-from PyJobTransforms.trfExe import tagMergeExecutor
-from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
-
-import PyJobTransforms.trfArgClasses as trfArgClasses
-
-@stdTrfExceptionHandler
-@sigUsrStackTrace
-def main():
-    
-    msg.info('This is %s' % sys.argv[0])
-
-    trf = getTransform() 
-    trf.parseCmdLineArgs(sys.argv[1:])
-    trf.execute()
-    trf.generateReport()
-
-    msg.info("%s stopped at %s, trf exit code %d" % (sys.argv[0], time.asctime(), trf.exitCode))
-    sys.exit(trf.exitCode)
-
-def getTransform():
-    trf = transform(executor = tagMergeExecutor(name = 'TAGFileMerge', exe = 'CollAppend', 
-                                                inData = set(['TAG']), outData = set(['TAG_MRG'])))
-    addMyArgs(trf.parser)
-    return trf
-
-
-def addMyArgs(parser):
-    # Use arggroup to get these arguments in their own sub-section (of --help)
-    parser.defineArgGroup('TAGMerge_tf', 'TAG merging specific options')
-    parser.add_argument('--inputTAGFile', nargs='+', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='input'),
-                        help='Input TAG file(s)', group='TAGMerge_tf')
-    parser.add_argument('--outputTAG_MRGFile', '--outputTAGFile',
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='output'),
-                        help='Output merged TAG file', group='TAGMerge_tf')
-
-
-if __name__ == '__main__':
-    main()
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/scripts/FCS_Ntup_tf.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/scripts/FCS_Ntup_tf.py
index 9d7204ad8da41dad80798ffda989b65f853d57fc..5fa09051f90c9d26fecb331c7242e69e8e4feae7 100755
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/scripts/FCS_Ntup_tf.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/scripts/FCS_Ntup_tf.py
@@ -1,24 +1,21 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 """
 Run HITS file and produce histograms.
 """
 
-import os.path
 import sys
 import time
-import logging
 
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
 from PyJobTransforms.transform import transform
 from PyJobTransforms.trfExe import athenaExecutor
-from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments, addTriggerArguments
+from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
-import PyJobTransforms.trfArgClasses as trfArgClasses
 from ISF_FastCaloSimParametrization.fcsTrfArgs import addFCS_NtupArgs
 
 @stdTrfExceptionHandler
@@ -39,7 +36,6 @@ def getTransform():
     executorSet = set()
     from SimuJobTransforms.SimTransformUtils import addSimulationArguments
     executorSet.add(athenaExecutor(name = 'FCS_Ntup',
-                                   skeletonFile = 'ISF_FastCaloSimParametrization/skeleton.ESDtoNTUP_FCS.py',
                                    skeletonCA = 'ISF_FastCaloSimParametrization.ESDtoNTUP_FCS_Skeleton',
                                    inData = ['ESD'], outData = ['NTUP_FCS'],))
     trf = transform(executor = executorSet, description = 'FastCaloSim V2 Parametrization ntuple transform. Inputs must be ESD. Outputs must be ntuple files.')
diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py
index a23adafffb8ce1272e894be161b1c2133adfed6e..be7b4063d7b747b414fc3c0437023f4fffc8218a 100644
--- a/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py
+++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py
@@ -60,7 +60,6 @@ def addOverlayArguments(parser, in_reco_chain=False):
 
 def addOverlaySubstep(executor_set, in_reco_chain=False):
     executor = athenaExecutor(name='Overlay',
-                              skeletonFile=None,
                               skeletonCA='OverlayConfiguration.OverlaySkeleton',
                               substep='overlay',
                               tryDropAndReload=False,
diff --git a/Simulation/SimuJobTransforms/python/SimTransformUtils.py b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
index 88d5a30e2da06ae051d3c3daeeb8833f2fac4c91..ea2b254a9494ace583ad992b05ef56683a44bb42 100644
--- a/Simulation/SimuJobTransforms/python/SimTransformUtils.py
+++ b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
@@ -162,13 +162,13 @@ def addRDOValidArguments(parser):
 ## @brief Add ISF transform substep
 #  @param overlayTransform If @c True use the tweaked version of in/outData for an overlay job
 def addSimulationSubstep(executorSet, overlayTransform = False):
-    TRExe = athenaExecutor(name = 'TRtoHITS', skeletonFile = None,
+    TRExe = athenaExecutor(name = 'TRtoHITS',
                            skeletonCA = 'SimuJobTransforms.ISF_Skeleton',
                            substep = 'simTRIn', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
                            inData=['EVNT_TR'],
                            outData=['HITS','NULL'] )
     executorSet.add(TRExe)
-    SimExe = athenaExecutor(name = 'EVNTtoHITS', skeletonFile = None,
+    SimExe = athenaExecutor(name = 'EVNTtoHITS',
                                    skeletonCA = 'SimuJobTransforms.ISF_Skeleton',
                                    substep = 'sim', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
                                    inData=['NULL','EVNT'],
@@ -186,7 +186,6 @@ def addSimulationSubstep(executorSet, overlayTransform = False):
 
 def addReSimulationSubstep(executorSet):
     SimExe = athenaExecutor(name = 'ReSim',
-                            skeletonFile = None,
                             skeletonCA = 'SimuJobTransforms.ReSimulation_Skeleton',
                             substep = 'rsm',
                             tryDropAndReload = False,
@@ -198,12 +197,12 @@ def addReSimulationSubstep(executorSet):
 
 
 def addAtlasG4Substep(executorSet):
-    executorSet.add(athenaExecutor(name = 'AtlasG4TfTRIn', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'AtlasG4TfTRIn',
                                    skeletonCA = 'SimuJobTransforms.G4AtlasAlg_Skeleton',
                                    substep = 'simTRIn', tryDropAndReload = False,
                                    inData=['EVNT_TR'],
                                    outData=['HITS','NULL'] ))
-    executorSet.add(athenaExecutor(name = 'AtlasG4Tf', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'AtlasG4Tf',
                                    skeletonCA = 'SimuJobTransforms.G4AtlasAlg_Skeleton',
                                    substep = 'sim', tryDropAndReload = False,
                                    inData=['NULL','EVNT'],
@@ -218,35 +217,33 @@ def addConfigurableSimSubstep(executorSet, confName, extraSkeleton, confSubStep,
 
 
 def addStandardHITSMergeSubstep(executorSet):
-    executorSet.add(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'HITSMerge', substep="hitsmerge",
                                    skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
                                    tryDropAndReload = False, inputDataTypeCountCheck = ['HITS']))
 
 
 def addDigitizationSubstep(executorSet, in_reco_chain=False):
-    executorSet.add(athenaExecutor(name = 'HITtoRDO', skeletonFile = None,
-                                              skeletonCA='SimuJobTransforms.HITtoRDO_Skeleton',
-                                              substep = 'h2r', tryDropAndReload = False,
-                                              inData = ['HITS'], outData = ['RDO','RDO_FILT'],
-                                              onlyMPWithRunargs = [
-                                                'inputLowPtMinbiasHitsFile',
-                                                'inputHighPtMinbiasHitsFile',
-                                                'inputCavernHitsFile',
-                                                'inputBeamHaloHitsFile',
-                                                'inputBeamGasHitsFile']
-                                              if in_reco_chain else None))
+    executorSet.add(athenaExecutor(name = 'HITtoRDO',
+                                   skeletonCA='SimuJobTransforms.HITtoRDO_Skeleton',
+                                   substep = 'h2r', tryDropAndReload = False,
+                                   inData = ['HITS'], outData = ['RDO','RDO_FILT'],
+                                   onlyMPWithRunargs = [
+                                       'inputLowPtMinbiasHitsFile',
+                                       'inputHighPtMinbiasHitsFile',
+                                       'inputCavernHitsFile',
+                                       'inputBeamHaloHitsFile',
+                                       'inputBeamGasHitsFile'
+                                   ] if in_reco_chain else None))
 
 
 def addSimValidationSubstep(executorSet):
     executorSet.add(athenaExecutor(name = 'SimValidation',
-                                   skeletonFile = None,
                                    skeletonCA='SimuJobTransforms.HITtoHIST_SIM_Skeleton',
                                    inData = ['HITS'], outData = ['HIST_SIM'],))
 
 
 def addDigiValidationSubstep(executorSet):
     executorSet.add(athenaExecutor(name = 'DigiValidation',
-                                   skeletonFile = None,
                                    skeletonCA='SimuJobTransforms.RDOtoHIST_DIGI_Skeleton',
                                    inData = ['RDO'], outData = ['HIST_DIGI'],))
 
diff --git a/Simulation/SimuJobTransforms/scripts/FilterHit_tf.py b/Simulation/SimuJobTransforms/scripts/FilterHit_tf.py
index d80c602113948c1407ea9e4aa28cd996c58c84e1..d70606555a73486099be02fa778213ff81ca79af 100755
--- a/Simulation/SimuJobTransforms/scripts/FilterHit_tf.py
+++ b/Simulation/SimuJobTransforms/scripts/FilterHit_tf.py
@@ -1,17 +1,14 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 """
 Run Geant4 simulation on generated events and produce a HITS file.
 """
 
-import os.path
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
@@ -20,7 +17,6 @@ from PyJobTransforms.transform import transform
 from PyJobTransforms.trfExe import athenaExecutor
 from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
-from SimuJobTransforms.simTrfArgs import addForwardDetTrfArgs, addCosmicsTrfArgs, addCommonSimTrfArgs
 
 import PyJobTransforms.trfArgClasses as trfArgClasses
 
@@ -45,8 +41,9 @@ def main():
     sys.exit(trf.exitCode)
 
 def getTransform():
-    trf = transform(executor = athenaExecutor(name = 'FilterHitTf', substep="filthits", skeletonFile = 'SimuJobTransforms/skeleton.FilterHit.py', skeletonCA = 'SimuJobTransforms.FilterHit_Skeleton',
-                                              tryDropAndReload = False))
+    trf = transform(executor = athenaExecutor(name='FilterHitTf', substep='filthits',
+                                              skeletonCA='SimuJobTransforms.FilterHit_Skeleton',
+                                              tryDropAndReload=False))
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
     addMyArgs(trf.parser)
diff --git a/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py b/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
index 295e7a9109dd8a685c7e260e359527b9610f426c..3e6be51ad4b930e55f9ad16a8109e2369b2197e0 100755
--- a/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
+++ b/Simulation/SimuJobTransforms/scripts/RDOMerge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 import sys
 import time
@@ -35,7 +35,7 @@ def main():
 
 def getTransform():
     executorSet = set()
-    executorSet.add(athenaExecutor(name = 'RDOMerge', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'RDOMerge',
                                    skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
                                    inData = ['RDO'], outData = ['RDO_MRG']))
 
diff --git a/Simulation/SimuJobTransforms/scripts/TestBeam_tf.py b/Simulation/SimuJobTransforms/scripts/TestBeam_tf.py
index 13cf49f02afb742bc104d8a79c0f2adc96efaa0a..75d7df907630a63d23e88986db8c6c5744a90646 100755
--- a/Simulation/SimuJobTransforms/scripts/TestBeam_tf.py
+++ b/Simulation/SimuJobTransforms/scripts/TestBeam_tf.py
@@ -1,17 +1,14 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 """
 Run Geant4 simulation on generated events and produce a HITS file.
 """
 
-import os.path
 import sys
 import time
 
-import logging
-
 # Setup core logging here
 from PyJobTransforms.trfLogger import msg
 msg.info('logging set in %s' % sys.argv[0])
@@ -22,9 +19,6 @@ from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from SimuJobTransforms.simTrfArgs import addSimIOTrfArgs,addCommonSimTrfArgs, addCommonSimDigTrfArgs, addTestBeamArgs
 
-
-import PyJobTransforms.trfArgClasses as trfArgClasses
-
 # Prodsys hack...
 ListOfDefaultPositionalKeys=['--AMIConfig', '--AMITag', '--DBRelease', '--DataRunNumber', '--Eta', '--Theta', '--Z', '--asetup', '--athena', '--athenaopts', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--enableLooperKiller', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--firstEvent', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputEvgenFile', '--jobNumber', '--maxEvents', '--outputHITSFile', '--physicsList', '--postExec', '--postInclude', '--preExec', '--preInclude', '--randomSeed', '--reportName', '--reportType', '--runNumber', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--tcmalloc', '--testBeamConfig', '--useISF']
 
@@ -46,7 +40,7 @@ def main():
     sys.exit(trf.exitCode)
 
 def getTransform():
-    trf = transform(executor = athenaExecutor(name = 'TestBeamTf', skeletonFile = 'SimuJobTransforms/skeleton.TestBeam.py', skeletonCA = 'SimuJobTransforms.TestBeam_Skeleton',
+    trf = transform(executor = athenaExecutor(name = 'TestBeamTf', skeletonCA = 'SimuJobTransforms.TestBeam_Skeleton',
                                               substep = 'TBsim', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz', inData=['NULL','Evgen'], outData=['HITS','NULL'] )) #may have to add evgen to outData if cosmics/cavern background jobs don't work.
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
diff --git a/Tools/FullChainTransforms/scripts/FastChain_tf.py b/Tools/FullChainTransforms/scripts/FastChain_tf.py
index 348b36f05d00bb6f49fa2aef6b6d1feeda745823..623210edef49b5db6b7e0208d082f19ddb9395de 100755
--- a/Tools/FullChainTransforms/scripts/FastChain_tf.py
+++ b/Tools/FullChainTransforms/scripts/FastChain_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 #  FastChain_tf.py
 #  One step transform to run SIM+DIGI as one job, then reco
@@ -20,7 +20,6 @@ from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments, ad
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addRecoSubsteps, addAllRecoArgs
 from SimuJobTransforms.simTrfArgs import addCommonSimTrfArgs, addBasicDigiArgs, addCommonSimDigTrfArgs, addTrackRecordArgs, addSim_tfArgs, addPileUpTrfArgs
-from PATJobTransforms.PATTransformUtils import addPhysValidationFiles, addValidationArguments, appendPhysValidationSubstep
 
 from PyJobTransforms.trfArgClasses import argFactory, argList, argRDOFile
 
@@ -44,14 +43,14 @@ def getTransform():
     addRecoSubsteps(executorSet)
 
     # Sim + Digi - factor these out into an importable function in time
-    executorSet.add(athenaExecutor(name = 'EVNTtoRDO', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'EVNTtoRDO',
                                    skeletonCA = 'FullChainTransforms.FastChainSkeleton',
                                    substep = 'simdigi', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
                                    inData=['NULL','EVNT', 'RDO_BKG', 'BS_SKIM'],
                                    outData=['RDO','NULL'] ))
 
     # Sim + Overlay - execute with the argument --steering "doFCwOverlay"
-    executorSet.add(athenaExecutor(name = 'EVNTtoRDOwOverlay', skeletonFile = None,
+    executorSet.add(athenaExecutor(name = 'EVNTtoRDOwOverlay',
                                    substep = 'simoverlay', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
                                    inData = ['NULL'], outData = ['NULL']))
 
@@ -82,11 +81,6 @@ def getTransform():
     from OverlayConfiguration.OverlayTransformHelpers import addOverlayArguments
     addOverlayArguments(trf.parser)
 
-    # Add PhysVal
-    addPhysValidationFiles(trf.parser)
-    addValidationArguments(trf.parser)
-    appendPhysValidationSubstep(trf)
-
     return trf
 
 def addFastChainTrfArgs(parser):
diff --git a/Tools/FullChainTransforms/scripts/FullChain_tf.py b/Tools/FullChainTransforms/scripts/FullChain_tf.py
index c90303d8b6ffa1ebfbc7cef861d4a2e00ec0d619..224ce170f9ec121b5d8534a53705157b4794ce87 100755
--- a/Tools/FullChainTransforms/scripts/FullChain_tf.py
+++ b/Tools/FullChainTransforms/scripts/FullChain_tf.py
@@ -21,7 +21,7 @@ from RecJobTransforms.recTransformUtils import addRecoSubsteps, addAllRecoArgs
 from SimuJobTransforms.simTrfArgs import addCosmicsTrfArgs, addForwardDetTrfArgs, addCommonSimTrfArgs, addBasicDigiArgs, addPileUpTrfArgs, addCommonSimDigTrfArgs, addTrackRecordArgs, addSim_tfArgs
 from SimuJobTransforms.SimTransformUtils import addDigitizationSubstep
 
-ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--CosmicFilterVolume', '--CosmicFilterVolume2', '--CosmicPtSlice', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--LucidOn', '--ZDCOn', '--asetup', '--athena', '--athenaopts', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--doAllNoise', '--enableLooperKiller', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--firstEvent', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputESDFile', '--inputEVNTFile', '--inputEVNT_TRFile', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--jobNumber', '--maxEvents', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--orphanKiller', '--outputAODFile', '--outputAOD_SKIMFile', '--outputD2AODM_WMUNUFile', '--outputD2AODM_ZEEFile', '--outputD2AODM_ZMUMUFile', '--outputD2AOD_DIONIAFile', '--outputD2AOD_DIPHOFile', '--outputD2AOD_H4LFile', '--outputD2AOD_WENUFile', '--outputD2AOD_ZEEFile', '--outputD2ESDM_TRKJETFile', '--outputD2ESD_DIPHOFile', '--outputD2ESD_JPSIUPSMMFile', '--outputD2ESD_WENUFile', '--outputD2ESD_WMUNUFile', '--outputD2ESD_ZMMFile', '--outputDAODFile', '--outputDAODM_HIGHMJJFile', '--outputDAODM_HSG1File', '--outputDAODM_SGLEMFile', '--outputDAODM_SGLMUFile', '--outputDAODM_SGLPHFile', '--outputDAODM_SGLTAUFile', '--outputDAOD_2EMFile', '--outputDAOD_2L2QHSG2File', '--outputDAOD_2LHSG2File', '--outputDAOD_2MUFile', '--outputDAOD_2PHFile', '--outputDAOD_4LHSG2File', '--outputDAOD_EGLOOSEFile', '--outputDAOD_ELLOOSE18File', '--outputDAOD_ELLOOSEFile', '--outputDAOD_EMJETFile', '--outputDAOD_EMMETFile', '--outputDAOD_EMMUFile', '--outputDAOD_EMTAUFile', '--outputDAOD_H4LBREMRECFile', '--outputDAOD_HIGHMDIJETFile', '--outputDAOD_HSG2File', '--outputDAOD_JETMETFile', '--outputDAOD_JPSIMUMUFile', '--outputDAOD_MUFile', '--outputDAOD_MUJETFile', '--outputDAOD_MUMETFile', '--outputDAOD_MUTAUFile', '--outputDAOD_ONIAMUMUFile', '--outputDAOD_PHLOOSEFile', '--outputDAOD_RNDMFile', '--outputDAOD_SKIMELFile', '--outputDAOD_SUSYEGAMMAFile', '--outputDAOD_SUSYJETSFile', '--outputDAOD_SUSYMUONSFile', '--outputDAOD_TAUJETFile', '--outputDAOD_TESTFile', '--outputDAOD_UPSIMUMUFile', '--outputDAOD_ZEEGAMMAFile', '--outputDAOD_ZMUMUGAMMAFile', '--outputDESDM_EOVERPFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_BEAMSPOTFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_METFile', '--outputDESDM_MUONFile', '--outputDESDM_RPVLLCCFile', '--outputDESDM_RPVLLFile', '--outputDESDM_TRACKFile', '--outputDESD_CALJETFile', '--outputDESD_CALOCOMMFile', '--outputDESD_COLLCANDFile', '--outputDESD_CTLFWJETFile', '--outputDESD_EGTAUCOMMFile', '--outputDESD_EMCLUSCOMMFile', '--outputDESD_FWJETFile', '--outputDESD_HIRAREFile', '--outputDESD_IDCOMMFile', '--outputDESD_IDPROJCOMMFile', '--outputDESD_MBIASFile', '--outputDESD_MUONCOMMFile', '--outputDESD_ONIAMUMUHIFile', '--outputDESD_PHOJETFile', '--outputDESD_PIXELCOMMFile', '--outputDESD_PRESCALEDFile', '--outputDESD_RANDOMCOMMFile', '--outputDESD_RPCCOMMFile', '--outputDESD_SCTCOMMFile', '--outputDESD_SGLELFile', '--outputDESD_SGLMUFile', '--outputDESD_SKIMELFile', '--outputDESD_TGCCOMMFile', '--outputDESD_TILECOMMFile', '--outputDNTUPFile', '--outputDRAW_IDPROJCOMMFile', '--outputDRAW_WENUFile', '--outputDRAW_WMUNUFile', '--outputDRAW_ZEEFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputEVNT_TRFile', '--outputHISTFile', '--outputHIST_AODFile', '--outputHITSFile', '--outputNTUP_2L2QHSG2File', '--outputNTUP_2LHSG2File', '--outputNTUP_4LHSG2File', '--outputNTUP_BKGDFile', '--outputNTUP_BTAGD3PDFile', '--outputNTUP_BTAGEFFFile', '--outputNTUP_BTAGFULLFile', '--outputNTUP_BTAGGHOSTFile', '--outputNTUP_BTAGSLIMFile', '--outputNTUP_CLUSTERCORRECTIONFile', '--outputNTUP_COMMONFile', '--outputNTUP_EGAMMAFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_HSG2File', '--outputNTUP_HSG5GAMHFile', '--outputNTUP_HSG5GAMZFile', '--outputNTUP_HSG5WHFile', '--outputNTUP_HSG5WHQFile', '--outputNTUP_HSG5WHUFile', '--outputNTUP_HSG5ZBBFile', '--outputNTUP_HSG5ZHLLFile', '--outputNTUP_HSG5ZHLLUFile', '--outputNTUP_HSG5ZHMETFile', '--outputNTUP_HSG5ZHMETUFile', '--outputNTUP_IDVTXFile', '--outputNTUP_IDVTXLUMIFile', '--outputNTUP_JETMETEMCLFile', '--outputNTUP_JETMETFULLFile', '--outputNTUP_JETMETFile', '--outputNTUP_JETMETWZFile', '--outputNTUP_L1CALOFile', '--outputNTUP_L1CALOPROBFile', '--outputNTUP_L1TGCFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPFile', '--outputNTUP_MINBIASFile', '--outputNTUP_MUFASTFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_MUONFile', '--outputNTUP_PHOTONFile', '--outputNTUP_PHYSICSFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SMBKGEFile', '--outputNTUP_SMBKGMUFile', '--outputNTUP_SMDILEPFile', '--outputNTUP_SMDYEEFile', '--outputNTUP_SMDYMUMUFile', '--outputNTUP_SMLIGHTFile', '--outputNTUP_SMQCDFile', '--outputNTUP_SMTRILEPFile', '--outputNTUP_SMWENUFile', '--outputNTUP_SMWENUJJFile', '--outputNTUP_SMWMUNUFile', '--outputNTUP_SMWMUNUJJFile', '--outputNTUP_SMWZFile', '--outputNTUP_SMWZSOFTFile', '--outputNTUP_SMZEEFile', '--outputNTUP_SMZMUMUFile', '--outputNTUP_SUSY01LEPFile', '--outputNTUP_SUSY23LEPFile', '--outputNTUP_SUSY34LEPFile', '--outputNTUP_SUSYBOOSTFile', '--outputNTUP_SUSYFile', '--outputNTUP_SUSYLEPTAUFile', '--outputNTUP_SUSYLLPFile', '--outputNTUP_SUSYRAZORFile', '--outputNTUP_SUSYSKIMFile', '--outputNTUP_SUSYTAGFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TAUFULLFile', '--outputNTUP_TAUFile', '--outputNTUP_TAUMEDIUMFile', '--outputNTUP_TAUSMALLFile', '--outputNTUP_TOPBOOSTFile', '--outputNTUP_TOPEJETFile', '--outputNTUP_TOPELFile', '--outputNTUP_TOPFile', '--outputNTUP_TOPJETFile', '--outputNTUP_TOPMUFile', '--outputNTUP_TPHSG2File', '--outputNTUP_TRIGBJETFile', '--outputNTUP_TRIGFile', '--outputNTUP_TRIGMUFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WPRIMEENFile', '--outputNTUP_WPRIMEMNFile', '--outputNTUP_WZFile', '--outputNTUP_ZPRIMEEEFile', '--outputNTUP_ZPRIMEMMFile', '--outputRDOFile', '--outputTAGFile', '--physicsList', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--randomSeed', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--showGraph', '--showPath', '--showSteps', '--simulator', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--tcmalloc', '--testPileUpConfig', '--tmpRDO', '--trigFilterList', '--triggerConfig', '--useISF']
+ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--CosmicFilterVolume', '--CosmicFilterVolume2', '--CosmicPtSlice', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--LucidOn', '--ZDCOn', '--asetup', '--athena', '--athenaopts', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--doAllNoise', '--enableLooperKiller', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--firstEvent', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputESDFile', '--inputEVNTFile', '--inputEVNT_TRFile', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--jobNumber', '--maxEvents', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--orphanKiller', '--outputAODFile', '--outputAOD_SKIMFile', '--outputD2AODM_WMUNUFile', '--outputD2AODM_ZEEFile', '--outputD2AODM_ZMUMUFile', '--outputD2AOD_DIONIAFile', '--outputD2AOD_DIPHOFile', '--outputD2AOD_H4LFile', '--outputD2AOD_WENUFile', '--outputD2AOD_ZEEFile', '--outputD2ESDM_TRKJETFile', '--outputD2ESD_DIPHOFile', '--outputD2ESD_JPSIUPSMMFile', '--outputD2ESD_WENUFile', '--outputD2ESD_WMUNUFile', '--outputD2ESD_ZMMFile', '--outputDAODFile', '--outputDAODM_HIGHMJJFile', '--outputDAODM_HSG1File', '--outputDAODM_SGLEMFile', '--outputDAODM_SGLMUFile', '--outputDAODM_SGLPHFile', '--outputDAODM_SGLTAUFile', '--outputDAOD_2EMFile', '--outputDAOD_2L2QHSG2File', '--outputDAOD_2LHSG2File', '--outputDAOD_2MUFile', '--outputDAOD_2PHFile', '--outputDAOD_4LHSG2File', '--outputDAOD_EGLOOSEFile', '--outputDAOD_ELLOOSE18File', '--outputDAOD_ELLOOSEFile', '--outputDAOD_EMJETFile', '--outputDAOD_EMMETFile', '--outputDAOD_EMMUFile', '--outputDAOD_EMTAUFile', '--outputDAOD_H4LBREMRECFile', '--outputDAOD_HIGHMDIJETFile', '--outputDAOD_HSG2File', '--outputDAOD_JETMETFile', '--outputDAOD_JPSIMUMUFile', '--outputDAOD_MUFile', '--outputDAOD_MUJETFile', '--outputDAOD_MUMETFile', '--outputDAOD_MUTAUFile', '--outputDAOD_ONIAMUMUFile', '--outputDAOD_PHLOOSEFile', '--outputDAOD_RNDMFile', '--outputDAOD_SKIMELFile', '--outputDAOD_SUSYEGAMMAFile', '--outputDAOD_SUSYJETSFile', '--outputDAOD_SUSYMUONSFile', '--outputDAOD_TAUJETFile', '--outputDAOD_TESTFile', '--outputDAOD_UPSIMUMUFile', '--outputDAOD_ZEEGAMMAFile', '--outputDAOD_ZMUMUGAMMAFile', '--outputDESDM_EOVERPFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_BEAMSPOTFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_METFile', '--outputDESDM_MUONFile', '--outputDESDM_RPVLLCCFile', '--outputDESDM_RPVLLFile', '--outputDESDM_TRACKFile', '--outputDESD_CALJETFile', '--outputDESD_CALOCOMMFile', '--outputDESD_COLLCANDFile', '--outputDESD_CTLFWJETFile', '--outputDESD_EGTAUCOMMFile', '--outputDESD_EMCLUSCOMMFile', '--outputDESD_FWJETFile', '--outputDESD_HIRAREFile', '--outputDESD_IDCOMMFile', '--outputDESD_IDPROJCOMMFile', '--outputDESD_MBIASFile', '--outputDESD_MUONCOMMFile', '--outputDESD_ONIAMUMUHIFile', '--outputDESD_PHOJETFile', '--outputDESD_PIXELCOMMFile', '--outputDESD_PRESCALEDFile', '--outputDESD_RANDOMCOMMFile', '--outputDESD_RPCCOMMFile', '--outputDESD_SCTCOMMFile', '--outputDESD_SGLELFile', '--outputDESD_SGLMUFile', '--outputDESD_SKIMELFile', '--outputDESD_TGCCOMMFile', '--outputDESD_TILECOMMFile', '--outputDNTUPFile', '--outputDRAW_IDPROJCOMMFile', '--outputDRAW_WENUFile', '--outputDRAW_WMUNUFile', '--outputDRAW_ZEEFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputEVNT_TRFile', '--outputHISTFile', '--outputHIST_AODFile', '--outputHITSFile', '--outputNTUP_2L2QHSG2File', '--outputNTUP_2LHSG2File', '--outputNTUP_4LHSG2File', '--outputNTUP_BKGDFile', '--outputNTUP_BTAGD3PDFile', '--outputNTUP_BTAGEFFFile', '--outputNTUP_BTAGFULLFile', '--outputNTUP_BTAGGHOSTFile', '--outputNTUP_BTAGSLIMFile', '--outputNTUP_CLUSTERCORRECTIONFile', '--outputNTUP_COMMONFile', '--outputNTUP_EGAMMAFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_HSG2File', '--outputNTUP_HSG5GAMHFile', '--outputNTUP_HSG5GAMZFile', '--outputNTUP_HSG5WHFile', '--outputNTUP_HSG5WHQFile', '--outputNTUP_HSG5WHUFile', '--outputNTUP_HSG5ZBBFile', '--outputNTUP_HSG5ZHLLFile', '--outputNTUP_HSG5ZHLLUFile', '--outputNTUP_HSG5ZHMETFile', '--outputNTUP_HSG5ZHMETUFile', '--outputNTUP_IDVTXFile', '--outputNTUP_IDVTXLUMIFile', '--outputNTUP_JETMETEMCLFile', '--outputNTUP_JETMETFULLFile', '--outputNTUP_JETMETFile', '--outputNTUP_JETMETWZFile', '--outputNTUP_L1CALOFile', '--outputNTUP_L1CALOPROBFile', '--outputNTUP_L1TGCFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPFile', '--outputNTUP_MINBIASFile', '--outputNTUP_MUFASTFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_MUONFile', '--outputNTUP_PHOTONFile', '--outputNTUP_PHYSICSFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SMBKGEFile', '--outputNTUP_SMBKGMUFile', '--outputNTUP_SMDILEPFile', '--outputNTUP_SMDYEEFile', '--outputNTUP_SMDYMUMUFile', '--outputNTUP_SMLIGHTFile', '--outputNTUP_SMQCDFile', '--outputNTUP_SMTRILEPFile', '--outputNTUP_SMWENUFile', '--outputNTUP_SMWENUJJFile', '--outputNTUP_SMWMUNUFile', '--outputNTUP_SMWMUNUJJFile', '--outputNTUP_SMWZFile', '--outputNTUP_SMWZSOFTFile', '--outputNTUP_SMZEEFile', '--outputNTUP_SMZMUMUFile', '--outputNTUP_SUSY01LEPFile', '--outputNTUP_SUSY23LEPFile', '--outputNTUP_SUSY34LEPFile', '--outputNTUP_SUSYBOOSTFile', '--outputNTUP_SUSYFile', '--outputNTUP_SUSYLEPTAUFile', '--outputNTUP_SUSYLLPFile', '--outputNTUP_SUSYRAZORFile', '--outputNTUP_SUSYSKIMFile', '--outputNTUP_SUSYTAGFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TAUFULLFile', '--outputNTUP_TAUFile', '--outputNTUP_TAUMEDIUMFile', '--outputNTUP_TAUSMALLFile', '--outputNTUP_TOPBOOSTFile', '--outputNTUP_TOPEJETFile', '--outputNTUP_TOPELFile', '--outputNTUP_TOPFile', '--outputNTUP_TOPJETFile', '--outputNTUP_TOPMUFile', '--outputNTUP_TPHSG2File', '--outputNTUP_TRIGBJETFile', '--outputNTUP_TRIGFile', '--outputNTUP_TRIGMUFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WPRIMEENFile', '--outputNTUP_WPRIMEMNFile', '--outputNTUP_WZFile', '--outputNTUP_ZPRIMEEEFile', '--outputNTUP_ZPRIMEMMFile', '--outputRDOFile', '--physicsList', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--randomSeed', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--showGraph', '--showPath', '--showSteps', '--simulator', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--tcmalloc', '--testPileUpConfig', '--tmpRDO', '--trigFilterList', '--triggerConfig', '--useISF']
 
 @stdTrfExceptionHandler
 @sigUsrStackTrace
diff --git a/Tools/PROCTools/python/UploadAMITag.py b/Tools/PROCTools/python/UploadAMITag.py
index 32f1bde28912e2cfc0993f72043fe8ab4a1571ba..df2a4b8feb4b172cda97aa2b68a5126eee17e5d7 100755
--- a/Tools/PROCTools/python/UploadAMITag.py
+++ b/Tools/PROCTools/python/UploadAMITag.py
@@ -25,7 +25,6 @@ OutputsVsStreams={
 # The basics:
     'outputESDFile': {'dstype': 'ESD', 'ifMatch': '(?!.*DRAW.*)', 'HumanOutputs': 'always produced.'},
     'outputAODFile': {'dstype': 'AOD', 'ifMatch': cpProjTag+'(?!.(.*DRAW.*|.*ZeroBias.*x[0-9].*))', 'HumanOutputs': 'always produced except for ZeroBias (ZB-1) stream and HI.'},
-    'outputTAGFile': {'dstype': 'TAG', 'ifMatch': HIProjTag+'(?!.(.*DRAW.*|.*ZeroBias.*x[0-9].*))', 'HumanOutputs': 'Produced for HI/HIp and comm when AOD is disabled'},
     'outputHISTFile': {'dstype': 'HIST', 'ifMatch': '(?!.(.*DRAW.*|.*debugrec.*))', 'HumanOutputs': 'always produced except for debug stream'},  # note was disabled for Pb-Pb HardProbes
     
 # Ntuples
@@ -152,7 +151,6 @@ def GetProcessConfigs(release,patcharea):
     processConfigs['aodmerge'] = {
         'inputs': {'inputAODFile': {}},
         'outputs': {'outputAODFile': {'dstype': 'AOD'},
-                    'outputTAGFile': {'dstype': 'TAG'}
                     },
         'phconfig': {'--ignoreerrors': 'ALL', 'autoConfiguration': 'everything', 'preExec': 'rec.doDPD.set_Value_and_Lock(False)'},
         'transformation': 'Merging_trf.py',
diff --git a/Tools/PROCTools/python/UploadTfAMITag.py b/Tools/PROCTools/python/UploadTfAMITag.py
index f40a4324ca2ccc9bbb7c3289ca1bfd7d08c1f7ec..9dbd097575ccafb2db2ca082bf26077edd68f768 100755
--- a/Tools/PROCTools/python/UploadTfAMITag.py
+++ b/Tools/PROCTools/python/UploadTfAMITag.py
@@ -43,7 +43,6 @@ OutputsVsStreams = {
     #'outputESDFile': {'dstype': '!replace RAW ESD', 'ifMatch': '(?!.*DRAW.*)(?!.*physics_Main.*)', 'HumanOutputs': 'always produced, except for DRAW input and physics_Main'},
     'outputESDFile': {'dstype': '!replace RAW ESD', 'ifMatch': '(?!.*DRAW.*)(?!.(.*physics_Main\\..*|.*Background.*|.*L1Topo.*))', 'HumanOutputs': 'always produced, except for DRAW input and physics_Main'},
     'outputAODFile': {'dstype': '!replace RAW AOD', 'ifMatch': cphiProjTag+'(?!.*DRAW_RPVLL.*)(?!.*Background.*)', 'HumanOutputs': 'always produced except for DRAW_RPVLL.'},
-    'outputTAGFile': {'dstype': 'TAG', 'ifMatch': 'data[0-9][0-9]_(cos|1beam|.*eV|comm)(.*express_express\\..*)(?!.(.*DRAW.*))', 'HumanOutputs': 'Produced in express stream'},
     'outputHISTFile': {'dstype': 'HIST', 'ifMatch': '(?!.(.*DRAW.*|.*debugrec.*))', 'HumanOutputs': 'always produced except for DRAW and debugrec'},  # note was disabled for Pb-Pb HardProbes
     'outputRDOFile': {'dstype': 'RDO', 'ifMatch': cphiProjTag, 'HumanOutputs': 'always produced.'},
 # NTuples
@@ -170,16 +169,6 @@ def GetProcessConfigs(release):
                           'trfsetupcmd': setupScript+' '+rel+' '+specialT0Setup },
         'description': 'Trf for combined DQM histogram merging and DQM webpage creation, to get periodic DQ monitoring updates. '}
 
-    # TAG merging (no TAG_COMM anymore)
-    processConfigs['tagmerge'] = {
-        'inputs': {'inputTAGFile': {}},
-        'outputs': {'outputTAG_MRGFile': {'dstype': 'TAG' }},
-        'phconfig': {},
-        'transformation': 'TAGMerge_tf.py',
-        'tasktransinfo': {'trfpath': 'TAGMerge_tf.py', 
-                          'trfsetupcmd': setupScript+' '+rel+' '+specialT0Setup },
-        'description': 'Trf for TAG merging, runs CollAppend from release area. ' }
-    
     # NTUP merging
     processConfigs['ntupmerge'] = {
         'inputs': {'inputNTUP_MUONCALIBFile': {}},
@@ -195,7 +184,6 @@ def GetProcessConfigs(release):
     processConfigs['aodmerge'] = {
         'inputs': {'inputAODFile': {}},
         'outputs': {'outputAOD_MRGFile': {'dstype': 'AOD'}
-                    #'outputTAGFile': {'dstype': 'TAG', 'ifMatch': '(?!.*calibration.*)'}
                     },
         'phconfig': {'autoConfiguration': 'everything'},
         'transformation': 'AODMerge_tf.py',
@@ -323,11 +311,11 @@ if __name__ == '__main__':
     process=None
     if inPickleFile.endswith('.pickle'): 
         process='reco'
-    elif (inPickleFile in ['histmerge', 'tagmerge', 'ntupmerge', 'aodmerge', 'daodmerge', 'dpdmerge', 'fastmon']):
+    elif (inPickleFile in ['histmerge', 'ntupmerge', 'aodmerge', 'daodmerge', 'dpdmerge', 'fastmon']):
         process = inPickleFile
     else:
         s = "Don't know how to interpret argument: '%s'.\n"%inPickleFile
-        s += "Possible arguments are: histmerge, tagmerge, ntupmerge, aodmerge, daodmerge, dpdmerge\n"
+        s += "Possible arguments are: histmerge, ntupmerge, aodmerge, daodmerge, dpdmerge\n"
         s += "...or for reconstruction tags: a pickeled dic named *.pickle\n"
         raise RuntimeError(s)
 
diff --git a/Tools/PyJobTransforms/python/HelloWorldSkeleton.py b/Tools/PyJobTransforms/python/HelloWorldSkeleton.py
index 9c92f41cbe49b7c33cc49ea4397dfb81ba25af3a..1b71f37919eb2f8b971b5ac3f2f4ba22f9248bd8 100644
--- a/Tools/PyJobTransforms/python/HelloWorldSkeleton.py
+++ b/Tools/PyJobTransforms/python/HelloWorldSkeleton.py
@@ -31,6 +31,10 @@ def fromRunArgs(runArgs):
     # To respect --athenaopts 
     flags.fillFromArgs()
 
+    # Run 10 events by default
+    if flags.Exec.MaxEvents == -1:
+        flags.Exec.MaxEvents = 10
+
     flags.lock()
 
     cfg=MainServicesCfg(flags)
diff --git a/Tools/PyJobTransforms/python/trfArgClasses.py b/Tools/PyJobTransforms/python/trfArgClasses.py
index 5d74e022307f9647f30f72bf9fc1d87006b21b8c..d694ab19fc249f224198c9aa91163068c9af2dab 100644
--- a/Tools/PyJobTransforms/python/trfArgClasses.py
+++ b/Tools/PyJobTransforms/python/trfArgClasses.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @package PyJobTransforms.trfArgClasses
 # @brief Transform argument class definitions
@@ -1474,7 +1474,6 @@ class argPOOLFile(argAthenaFile):
                             'POOL_MRG_OUTPUT' : argPOOLFile(output, type=self.type, io='output')}
         myMergeConf = executorConfig(myargdict, myDataDictionary)
         myMerger = athenaExecutor(name='POOLMergeAthenaMP{0}{1}'.format(self._subtype, counter), conf=myMergeConf, 
-                                  skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
                                   skeletonCA = 'RecJobTransforms.MergePool_Skeleton',
                                   inData=set(['POOL_MRG_INPUT']), outData=set(['POOL_MRG_OUTPUT']),
                                   disableMT=True, disableMP=True)
@@ -1512,7 +1511,7 @@ class argHITSFile(argPOOLFile):
         myDataDictionary = {'HITS' : argHITSFile(inputs, type=self.type, io='input'),
                             'HITS_MRG' : argHITSFile(output, type=self.type, io='output')}
         myMergeConf = executorConfig(myargdict, myDataDictionary)
-        myMerger = athenaExecutor(name = mySubstepName, skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
+        myMerger = athenaExecutor(name = mySubstepName,
                                   skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
                                   conf=myMergeConf, 
                                   inData=set(['HITS']), outData=set(['HITS_MRG']),
@@ -1590,7 +1589,7 @@ class argRDOFile(argPOOLFile):
         myDataDictionary = {'RDO' : argHITSFile(inputs, type=self.type, io='input'),
                             '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',
+        myMerger = athenaExecutor(name = 'RDOMergeAthenaMP{0}'.format(counter),
                                   skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
                                   conf=myMergeConf, 
                                   inData=set(['RDO']), outData=set(['RDO_MRG']),
@@ -1645,70 +1644,6 @@ class argEVNTFile(argPOOLFile):
         self._resetMetadata(inputs + [output])
         return myMerger
     
-## @brief TAG file class
-#  @details Has a different validation routine to ESD/AOD POOL files
-class argTAGFile(argPOOLFile):
-
-    integrityFunction = "returnIntegrityOfTAGFile"
-
-    ## @brief Simple integrity checked for TAG files
-    #  @details Checks that the event count in the POOLCollectionTree is the same as the AthFile value
-    def _getIntegrity(self, files):
-        for fname in files:
-            eventCount = NTUPEntries(fname, ['POOLCollectionTree'])
-            if eventCount is None:
-                msg.error('Got a bad event count for the POOLCollectionTree in {0}: {1}'.format(fname, eventCount))
-                self._fileMetadata[fname]['integrity'] = False
-                return
-            if eventCount != self.getSingleMetadata(fname, 'nentries'):
-                msg.error('Event count for {0} from POOLCollectionTree disagrees with AthFile:'
-                          ' {1} != {2}'.format(fname, eventCount, self.getSingleMetadata(fname, 'nentries')))
-                self._fileMetadata[fname]['integrity'] = False
-                return
-            self._fileMetadata[fname]['integrity'] = True
-            
-    ## @brief Method which can be used to merge files of this type
-    #  @param output Target filename for this merge
-    #  @param inputs List of files to merge
-    #  @param argdict argdict of the transform
-    #  @note @c argdict is not normally used as this is a @em vanilla merge
-    def selfMerge(self, output, inputs, counter=0, argdict={}):
-        msg.debug('selfMerge attempted for {0} -> {1} with {2}'.format(inputs, output, argdict))
-        
-        # First do a little sanity check
-        for fname in inputs:
-            if fname not in self._value:
-                raise trfExceptions.TransformMergeException(trfExit.nameToCode('TRF_FILEMERGE_PROBLEM'), 
-                                                            "File {0} is not part of this agument: {1}".format(fname, self))
-        
-        from PyJobTransforms.trfExe import tagMergeExecutor, executorConfig
-        
-        ## @note Modify argdict
-        myargdict = self._mergeArgs(argdict) 
-        
-        # We need a tagMergeExecutor to do the merge
-        myDataDictionary = {'TAG_MRG_INPUT' : argTAGFile(inputs, type=self.type, io='input'),
-                            'TAG_MRG_OUTPUT' : argTAGFile(output, type=self.type, io='output')}
-        myMergeConf = executorConfig(myargdict, myDataDictionary)
-        myMerger = tagMergeExecutor(name='TAGMergeAthenaMP{0}{1}'.format(self._subtype, counter), exe = 'CollAppend', 
-                                        conf=myMergeConf, 
-                                        inData=set(['TAG_MRG_INPUT']), outData=set(['TAG_MRG_OUTPUT']),)
-        myMerger.doAll(input=set(['TAG_MRG_INPUT']), output=set(['TAG_MRG_OUTPUT']))
-        
-        # OK, if we got to here with no exceptions, we're good shape
-        # Now update our own list of files to reflect the merge
-        for fname in inputs:
-            self._value.remove(fname)
-        self._value.append(output)
-
-        msg.debug('Post self-merge files are: {0}'.format(self._value))
-        self._resetMetadata(inputs + [output])
-        return myMerger
-
-    @property
-    def prodsysDescription(self):
-        desc=super(argTAGFile, self).prodsysDescription
-        return desc
 
 ## @brief Data quality histogram file class
 class argHISTFile(argFile):
@@ -2365,7 +2300,6 @@ class argSubstepSteering(argSubstep):
     # "doOverlay" - run event overlay on presampled RDOs instead of standard HITtoRDO digitization
     # "doFCwOverlay" - run FastChain with MC-overlay (EVNTtoRDOwOverlay) instead of standard PU digitization (EVNTtoRDO)
     # "afterburn" - run the B decay afterburner for event generation
-    # "doRAWtoESD" - run legacy split workflow (RAWtoESD + ESDtoAOD)
     # "doRAWtoALL" - (deprecated) produce all DESDs and AODs directly from bytestream
     # "doTRIGtoALL" - (deprecated) produce AODs directly from trigger RDOs
     steeringAlises = {
@@ -2376,10 +2310,6 @@ class argSubstepSteering(argSubstep):
                       'doFCwOverlay': {'EVNTtoRDO': [('in', '-', 'EVNT'), ('out', '-', 'RDO')],
                                        'EVNTtoRDOwOverlay': [('in', '+', ('EVNT', 'RDO_BKG')), ('out', '+', 'RDO'), ('out', '+', 'RDO_SGNL')]},
                       'afterburn': {'generate': [('out', '-', 'EVNT')]},
-                      'doRAWtoESD': {'RAWtoALL': [('in', '-', 'BS'), ('in', '-', 'RDO'),
-                                                  ('out', '-', 'ESD'), ('out', '-', 'AOD')],
-                                     'RAWtoESD': [('in', '+', 'BS'), ('in', '+', 'RDO'),
-                                                  ('out', '+', ('ESD', 'HIST_ESD_INT')),],},
                       'doRAWtoALL': {},
                       'doTRIGtoALL': {}
                       }
diff --git a/Tools/PyJobTransforms/python/trfArgs.py b/Tools/PyJobTransforms/python/trfArgs.py
index df385a79e013ecad18a2ae0ab5c6fe8125310c65..3bbf7c90c38aba8addf5dbf8967319b1180506ac 100644
--- a/Tools/PyJobTransforms/python/trfArgs.py
+++ b/Tools/PyJobTransforms/python/trfArgs.py
@@ -391,13 +391,13 @@ class dpdType(object):
         #  if your data is made in a non-standard step
         if substeps == []:
             if 'RAW' in name:
-                self._substeps = ['RAWtoESD']
+                self._substeps = ['RAWtoALL']
             elif 'ESD' in name:
-                self._substeps = ['RAWtoESD']
+                self._substeps = ['RAWtoALL']
             elif 'AOD' in name:
-                self._substeps = ['ESDtoAOD']
+                self._substeps = ['RAWtoALL']
             elif 'NTUP' in name:
-                self._substeps = ['ESDtoDPD', 'AODtoDPD']
+                self._substeps = ['RAWtoALL', 'AODtoDPD']
         else:
             self._substeps = substeps
             
@@ -568,7 +568,7 @@ def addTriggerArguments(parser, addTrigFilter=True):
     if addTrigFilter:
         parser.add_argument('--trigFilterList',
                             type=argFactory(trfArgClasses.argList), nargs="+",
-                            help='Trigger filter list (multiple values can be given separately or split on commas; only understood in RAWtoALL/RAWtoESD)', 
+                            help='Trigger filter list (multiple values can be given separately or split on commas; only understood in RAWtoALL)', 
                             group='Trigger')
 
 ## Tea for two and two for tea... these arguments are used for testing
diff --git a/Tools/PyJobTransforms/python/trfExe.py b/Tools/PyJobTransforms/python/trfExe.py
index af8b31f4dd2c5ab6184f38c018d785724fa96b6a..2d5e8a423464ca770d9f36d6a8bea819908fb4a1 100755
--- a/Tools/PyJobTransforms/python/trfExe.py
+++ b/Tools/PyJobTransforms/python/trfExe.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @package PyJobTransforms.trfExe
 #
@@ -877,7 +877,7 @@ class athenaExecutor(scriptExecutor):
     #  uses repr(), so the RHS is the same as the python object in the transform; @c runtimeRunargs uses str() so 
     #  that a string can be interpreted at runtime; @c literalRunargs allows the direct insertion of arbitary python
     #  snippets into the runArgs file.
-    def __init__(self, name = 'athena', trf = None, conf = None, skeletonFile = 'PyJobTransforms/skeleton.dummy.py', skeletonCA=None, 
+    def __init__(self, name = 'athena', trf = None, conf = None, skeletonFile=None, skeletonCA=None, 
                  inData = set(), outData = set(), inputDataTypeCountCheck = None, exe = 'athena.py', exeArgs = ['athenaopts'], 
                  substep = None, inputEventTest = True, perfMonFile = None, tryDropAndReload = True, extraRunargs = {}, runtimeRunargs = {},
                  literalRunargs = [], dataArgs = [], checkEventCount = False, errorMaskFiles = None,
@@ -1846,7 +1846,7 @@ class hybridPOOLMergeExecutor(athenaExecutor):
     #  @param inputEventTest Boolean switching the skipEvents < inputEvents test
     #  @param perfMonFile Name of perfmon file for this substep (used to retrieve vmem/rss information)
     #  @param tryDropAndReload Boolean switch for the attempt to add '--drop-and-reload' to athena args
-    def __init__(self, name = 'hybridPOOLMerge', trf = None, conf = None, skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py', skeletonCA=None,
+    def __init__(self, name = 'hybridPOOLMerge', trf = None, conf = None, skeletonFile=None, skeletonCA='RecJobTransforms.MergePool_Skeleton',
                  inData = set(), outData = set(), exe = 'athena.py', exeArgs = ['athenaopts'], substep = None, inputEventTest = True,
                  perfMonFile = None, tryDropAndReload = True, extraRunargs = {},
                  manualDataDictionary = None, memMonitor = True):
@@ -2124,50 +2124,6 @@ class bsMergeExecutor(scriptExecutor):
         super(bsMergeExecutor, self).postExecute()
 
 
-class tagMergeExecutor(scriptExecutor):
-    
-    def preExecute(self, input = set(), output = set()):
-        self.setPreExeStart()
-        # Just need to write the customised CollAppend command line
-        self._cmd = [self._exe, '-src']
-        for dataType in input:
-            for fname in self.conf.dataDictionary[dataType].value:
-                self._cmd.extend(['PFN:{0}'.format(fname), 'RootCollection'])
-        self._cmd.extend(['-dst', 'PFN:{0}'.format(self.conf.dataDictionary[list(output)[0]].value[0]), 'RootCollection', '-nevtcached', '5000'])
-        
-        # In AthenaMP jobs the output file can be created empty, which CollAppend does not like
-        # so remove it
-        if os.access(self.conf.dataDictionary[list(output)[0]].value[0], os.F_OK):
-            os.unlink(self.conf.dataDictionary[list(output)[0]].value[0]) 
-        
-        super(tagMergeExecutor, self).preExecute(input=input, output=output)
-
-        
-    def validate(self):
-        self.setValStart()
-        super(tagMergeExecutor, self).validate()
-        
-        # Now scan the logfile...
-        try:
-            msg.debug('Scanning TAG merging logfile {0}'.format(self._logFileName))
-            with open(self._logFileName) as logfile:
-                for line in logfile:
-                    # Errors are signaled by 'error' (case independent) and NOT ('does not exist' or 'hlterror')
-                    # Logic copied from Tier 0 TAGMerge_trf.py
-                    if 'error' in line.lower():
-                        if 'does not exist' in line:
-                            continue
-                        if 'hlterror' in line:
-                            continue
-                        raise trfExceptions.TransformValidationException(trfExit.nameToCode('TRF_EXEC_LOGERROR'),
-                                                                         'Found this error message in the logfile {0}: {1}'.format(self._logFileName, line))
-        except (OSError, IOError) as e:
-                        raise trfExceptions.TransformValidationException(trfExit.nameToCode('TRF_EXEC_LOGERROR'),
-                                                                         'Exception raised while attempting to scan logfile {0}: {1}'.format(self._logFileName, e))            
-        self._valStop = os.times()
-        msg.debug('valStop time is {0}'.format(self._valStop))
-
-
 ## @brief Archive transform
 class archiveExecutor(scriptExecutor):
 
diff --git a/Tools/PyJobTransforms/python/trfFileValidationFunctions.py b/Tools/PyJobTransforms/python/trfFileValidationFunctions.py
index ef33bdce37557b67a23461c07ac3439f6ba16fb8..a06fbcbb03544cb92906a382889e69a1731cc09b 100644
--- a/Tools/PyJobTransforms/python/trfFileValidationFunctions.py
+++ b/Tools/PyJobTransforms/python/trfFileValidationFunctions.py
@@ -1,5 +1,5 @@
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## @package PyJobTransforms.trfFileValidationFunctions
 # @brief Transform file validation functions
@@ -45,17 +45,6 @@ def returnIntegrityOfBSFile(fname):
     else:
         return (False, "integrity of {fileName} bad: return code: {integrityStatus}".format(fileName = str(fname), integrityStatus = rc))
 
-### @brief Integrity function for file class argTAGFile
-def returnIntegrityOfTAGFile(fname):
-    from PyJobTransforms.trfFileUtils import AthenaLiteFileInfo
-    dictionaryOfAthenaFileInfo = AthenaLiteFileInfo(fname, "TAG", retrieveKeys = ['nentries',])
-    msg.debug("dictionary of Athena file information: {a}".format(a = dictionaryOfAthenaFileInfo))
-    eventCount = dictionaryOfAthenaFileInfo[fname]['nentries']
-    if eventCount is None:
-        return (False, "integrity of {fileName} bad: got a bad event count in {fileName}: {eventCount}".format(fileName = str(fname), eventCount = eventCount))
-    else:
-        return (True, "integrity of {fileName} good".format(fileName = str(fname)))
-
 ## @brief Integrity function for file class argHISTFile
 def returnIntegrityOfHISTFile(fname):
     rc = 0 # (default behaviour)
diff --git a/Tools/PyJobTransforms/scripts/Athena_tf.py b/Tools/PyJobTransforms/scripts/Athena_tf.py
index d0644198467462e0edcb72a8671e6584a228072f..c01f0070bc5cf2bdeb752c0fae379f5ef60330d6 100755
--- a/Tools/PyJobTransforms/scripts/Athena_tf.py
+++ b/Tools/PyJobTransforms/scripts/Athena_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## A simple athena transform. 
 # @version $Id: Athena_tf.py 557865 2013-08-12 21:54:36Z graemes $ 
@@ -35,7 +35,7 @@ def main():
 
 ## Get the base transform with all arguments added
 def getTransform():
-    trf = transform(executor = athenaExecutor(name = 'athena'))
+    trf = transform(executor = athenaExecutor(name='athena', skeletonCA='PyJobTransforms.HelloWorldSkeleton'))
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
     addMyArgs(trf.parser)
diff --git a/Tools/PyJobTransforms/scripts/HelloWorld_tf.py b/Tools/PyJobTransforms/scripts/HelloWorld_tf.py
index 24a55b0b2a045f2e75c232845921b20ad16f192c..8250d2ed16cbaf479ec35988f7d57ff09473010a 100755
--- a/Tools/PyJobTransforms/scripts/HelloWorld_tf.py
+++ b/Tools/PyJobTransforms/scripts/HelloWorld_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## A simple tranform running HelloWorld 
 
@@ -34,7 +34,6 @@ def main():
 def getTransform():
     trf = transform(executor = athenaExecutor(name = 'athena', 
                                               substep='HelloWorld',
-                                              skeletonFile=None,
                                               skeletonCA="PyJobTransforms.HelloWorldSkeleton"))
     addAthenaArguments(trf.parser)
     addDetectorArguments(trf.parser)
diff --git a/Tools/PyJobTransforms/scripts/Merge_tf.py b/Tools/PyJobTransforms/scripts/Merge_tf.py
index 0870fea7961052eaecdad1f82b51ee40e64aa0b9..29ddd39000aeb4d7a6b07f39c4619d11cecd6b65 100755
--- a/Tools/PyJobTransforms/scripts/Merge_tf.py
+++ b/Tools/PyJobTransforms/scripts/Merge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## Merge_tf.py - Transform for merging any data type
 
@@ -17,7 +17,6 @@ from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
 from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
 from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs
 from PyJobTransforms.trfExe import DQMergeExecutor
-from PyJobTransforms.trfExe import tagMergeExecutor
 from PyJobTransforms.trfExe import bsMergeExecutor
 from PyJobTransforms.trfArgs import addD3PDArguments, addExtraDPDTypes
 from PATJobTransforms.PATTransformUtils import addNTUPMergeSubsteps, addPhysValidationMergeFiles
@@ -41,13 +40,8 @@ def main():
 
 def getTransform():
     executorSet = set()
-    executorSet.add(hybridPOOLMergeExecutor(name = 'ESDMerge', skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
-                                   skeletonCA = 'RecJobTransforms.MergePool_Skeleton', inData = ['ESD'], outData = ['ESD_MRG']))
-    executorSet.add(hybridPOOLMergeExecutor(name = 'AODMerge', skeletonFile = 'RecJobTransforms/skeleton.MergePool_tf.py',
-                                   skeletonCA = 'RecJobTransforms.MergePool_Skeleton', inData = ['AOD'], outData = ['AOD_MRG']))
-    executorSet.add(athenaExecutor(name = 'AODtoTAG', skeletonFile = 'RecJobTransforms/skeleton.AODtoTAG_tf.py',
-                                   inData = ['AOD_MRG'], outData = ['TAG'],))
-    executorSet.add(tagMergeExecutor(name = 'TAGFileMerge', exe = 'CollAppend', inData = set(['TAG']), outData = set(['TAG_MRG'])))
+    executorSet.add(hybridPOOLMergeExecutor(name = 'ESDMerge', inData = ['ESD'], outData = ['ESD_MRG']))
+    executorSet.add(hybridPOOLMergeExecutor(name = 'AODMerge', inData = ['AOD'], outData = ['AOD_MRG']))
     executorSet.add(DQMergeExecutor(name = 'DQHistogramMerge', inData = [('HIST_ESD', 'HIST_AOD'), 'HIST'], outData = ['HIST_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']))
@@ -71,11 +65,11 @@ def getTransform():
     try:
         from SimuJobTransforms.SimTransformUtils import addHITSMergeArguments
         addHITSMergeArguments(trf.parser)
-        trf.appendToExecutorSet(athenaExecutor(name = 'HITSMerge', substep="hitsmerge", skeletonFile = 'SimuJobTransforms/skeleton.HITSMerge.py',
+        trf.appendToExecutorSet(athenaExecutor(name = 'HITSMerge', substep='hitsmerge',
                                                skeletonCA = 'SimuJobTransforms.HITSMerge_Skeleton',
                                                tryDropAndReload = False, inData = ['HITS'], outData = ['HITS_MRG']))
 
-        trf.appendToExecutorSet(athenaExecutor(name = 'RDOMerge', skeletonFile = 'SimuJobTransforms/skeleton.RDOMerge.py',
+        trf.appendToExecutorSet(athenaExecutor(name = 'RDOMerge',
                                 skeletonCA = 'SimuJobTransforms.RDOMerge_Skeleton',
                                 inData = ['RDO'], outData = ['RDO_MRG']))
 
@@ -116,17 +110,6 @@ def addMyArgs(parser):
     parser.add_argument('--outputAOD_MRGFile', '--outputAODFile', 
                         type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output', type='aod'),
                         help='Output merged AOD file', group='AODMerge_tf')
-    parser.add_argument('--outputTAGFile', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='output', type='tag'), 
-                        help='Output TAG file', group='AODMerge_tf')
-
-    parser.defineArgGroup('TAGMerge_tf', 'TAG merging specific options')
-    parser.add_argument('--inputTAGFile', nargs='+', 
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='input'),
-                        help='Input TAG file(s)', group='TAGMerge_tf')
-    parser.add_argument('--outputTAG_MRGFile',
-                        type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='output'),
-                        help='Output merged TAG file', group='TAGMerge_tf')
 
     parser.defineArgGroup('DQHistMerge_tf', 'DQ merge specific options')
     parser.add_argument('--inputHISTFile', nargs='+', 
diff --git a/Tools/PyJobTransforms/scripts/ValidateFiles_tf.py b/Tools/PyJobTransforms/scripts/ValidateFiles_tf.py
index d28d49f0b462aaec17b7e46717c314857fcddb08..177a533497d401ad7caf9e62c994f2cc9189d279 100755
--- a/Tools/PyJobTransforms/scripts/ValidateFiles_tf.py
+++ b/Tools/PyJobTransforms/scripts/ValidateFiles_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 ## A transform just getting some default file arguments (only to test file validation )
 
@@ -44,7 +44,6 @@ def addArgs(parser):
     parser.add_argument('--outputESDFile', type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output', type='esd', multipleOK=True), nargs='+')
     parser.add_argument('--outputAODFile', type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output', type='aod', multipleOK=True), nargs='+')
     parser.add_argument('--outputRDOFile', type=trfArgClasses.argFactory(trfArgClasses.argPOOLFile, io='output', type='rdo', multipleOK=True), nargs='+')
-    parser.add_argument('--outputTAGFile', type=trfArgClasses.argFactory(trfArgClasses.argTAGFile, io='output', type='tag', multipleOK=True), nargs='+')
     parser.add_argument('--outputEVNTFile', type=trfArgClasses.argFactory(trfArgClasses.argEVNTFile, io='output', type='evnt', multipleOK=True), nargs='+')
     parser.add_argument('--outputHISTFile', type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', type='hist', multipleOK=True), nargs='+')
     parser.add_argument('--outputTXT_FTKIPFile', type=trfArgClasses.argFactory(trfArgClasses.argFTKIPFile, io='output', multipleOK=True), nargs='+')
diff --git a/Tools/PyJobTransforms/scripts/makeTrfJSONSignatures.py b/Tools/PyJobTransforms/scripts/makeTrfJSONSignatures.py
index 66c370bed0eb0b60f995d1a4200cba1bc9b0bfe0..8d76d0da7e4cace946d45d166f1807dff10030f8 100755
--- a/Tools/PyJobTransforms/scripts/makeTrfJSONSignatures.py
+++ b/Tools/PyJobTransforms/scripts/makeTrfJSONSignatures.py
@@ -24,7 +24,6 @@ def _getTransformsFromPATH():
         'ESDtoAOD_tf.py',
         'ExeWrap_tf.py',
         'Sleep_tf.py',
-        'RAWtoESD_tf.py',
     ])
 
     ##########################################################################
diff --git a/Tools/PyJobTransforms/test/test_AODMerge_tf.py b/Tools/PyJobTransforms/test/test_AODMerge_tf.py
index 41cd3ee4febadee2f48484456efbba94443c7878..f85ffec174926dd8dd2580933301e47a8e8190bf 100755
--- a/Tools/PyJobTransforms/test/test_AODMerge_tf.py
+++ b/Tools/PyJobTransforms/test/test_AODMerge_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 # $Id: test_AODMerge_tf.py 617963 2014-09-22 13:13:07Z graemes $
 # Run a EVNTMerge job and test key metadata in the output
@@ -9,8 +9,6 @@
 import glob
 import json
 import subprocess
-import os
-import os.path
 import sys
 import unittest
 
@@ -26,7 +24,6 @@ class AODMergetest(unittest.TestCase):
         cmd = ['AODMerge_tf.py', '--inputAODFile']
         cmd.extend(inputs)
         cmd.extend(['--outputAOD_MRGFile', 'merged.AOD.pool.root'])
-        cmd.extend(['--outputTAGFile', 'TAG.pool.root'])
         cmd.extend(['--reportName', 'jobReportFast'])
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
@@ -50,7 +47,6 @@ class AODMergetest(unittest.TestCase):
         cmd = ['AODMerge_tf.py', '--inputAODFile']
         cmd.extend(inputs)
         cmd.extend(['--outputAOD_MRGFile', 'slowmerged.AOD.pool.root'])
-        cmd.extend(['--outputTAGFile', 'slowTAG.pool.root'])
         cmd.extend(['--reportName', 'jobReportSlow'])
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
diff --git a/Tools/PyJobTransforms/test/test_LogFileScanner.py b/Tools/PyJobTransforms/test/test_LogFileScanner.py
index f4d2723db429625389253f3947eb71951b24f1f1..305a1918626c5ea302d4daf880a7ef668ff759ed 100755
--- a/Tools/PyJobTransforms/test/test_LogFileScanner.py
+++ b/Tools/PyJobTransforms/test/test_LogFileScanner.py
@@ -1,15 +1,12 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 #
 # Run a few simple "Athena_tf.py" jobs and check that logfile scanning produces the correct results
 # $Id: test_LogFileScanner.py 576626 2013-12-21 23:29:31Z graemes $
 #
 
-import json
 import subprocess
-import os
-import os.path
 import sys
 import unittest
 
@@ -18,7 +15,7 @@ from PyJobTransforms.trfLogger import msg
 class LogscanTest(unittest.TestCase):
     
     def test_athenaNormalScan(self):
-        cmd = ['Athena_tf.py']
+        cmd = ['Athena_tf.py', '--CA']
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
         while p.poll() is None:
@@ -31,7 +28,7 @@ class LogscanTest(unittest.TestCase):
         
 
     def test_athenaDisableFilter(self):
-        cmd = ['Athena_tf.py', '--ignoreFiles', 'None']
+        cmd = ['Athena_tf.py', '--CA', '--ignoreFiles', 'None']
         msg.info('Will run this transform: {0}'.format(cmd))
         cmd.extend(['--reportName', 'jobReportDisable'])
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
@@ -45,7 +42,7 @@ class LogscanTest(unittest.TestCase):
 
 
     def test_athenaManualFilter(self):
-        cmd = ['Athena_tf.py', '--ignoreFiles', 'None']
+        cmd = ['Athena_tf.py', '--CA', '--ignoreFiles', 'None']
         cmd.extend(['--ignorePatterns', 'An ERROR message', 'A FATAL error message'])
         cmd.extend(['--reportName', 'jobReportManual'])
         msg.info('Will run this transform: {0}'.format(cmd))
@@ -60,7 +57,7 @@ class LogscanTest(unittest.TestCase):
 
 
     def test_athenaManualRegexp(self):
-        cmd = ['Athena_tf.py', '--ignoreFiles', 'None']
+        cmd = ['Athena_tf.py', '--CA', '--ignoreFiles', 'None']
         cmd.extend(['--ignorePatterns', 'An? (ERROR|FATAL) .*message'])
         cmd.extend(['--reportName', 'jobReportRegexp'])
         msg.info('Will run this transform: {0}'.format(cmd))
diff --git a/Tools/PyJobTransforms/test/test_Reco_tf.py b/Tools/PyJobTransforms/test/test_Reco_tf.py
index 21c56aa783325898488523fdd4c050693eaeb216..9a0240b50a48d7c45b72b982bce7e4cdf344b356 100755
--- a/Tools/PyJobTransforms/test/test_Reco_tf.py
+++ b/Tools/PyJobTransforms/test/test_Reco_tf.py
@@ -1,6 +1,6 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 # Run a Reco job and test key metadata in the output
 #
@@ -8,8 +8,6 @@
 import glob
 import json
 import subprocess
-import os
-import os.path
 import sys
 import unittest
 
@@ -28,7 +26,6 @@ class Reco_tftest(unittest.TestCase):
         cmd.extend(['--outputESDFile', 'my.ESD.pool.root', '--autoConfiguration', 'everything'])
         cmd.extend(['--outputAODFile', 'my.AOD.pool.root'])
         cmd.extend(['--outputHISTFile', 'my.HIST.root'])
-        cmd.extend(['--outputTAGFile', 'my.TAG.pool.root'])
         cmd.extend(['--maxEvents', '10'])
         cmd.extend(['--preExec', 'rec.doTrigger=False'])  # This is temporary while trigger doesn't work in r19
         ## Event counting currently broken for multi-step transforms
diff --git a/Tools/PyJobTransforms/test/test_TAGMerge_tf.py b/Tools/PyJobTransforms/test/test_TAGMerge_tf.py
deleted file mode 100755
index b1f9f20cb8f5640292edaac38e0b88a348900f9d..0000000000000000000000000000000000000000
--- a/Tools/PyJobTransforms/test/test_TAGMerge_tf.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-# Run a TAGMerge job and test key metadata in the output
-#
-
-import glob
-import json
-import subprocess
-import os
-import os.path
-import sys
-import unittest
-
-from PyJobTransforms.trfLogger import msg
-
-sourceFiles = '/afs/cern.ch/work/g/graemes/ddm/data12_8TeV.00207865.physics_JetTauEtmiss.merge.TAG.r4065_p1278_tid01030417_00/TAG.*'
-
-class TAGMergetest(unittest.TestCase):
-    
-    def test_runTAGMerge(self):
-        inputs = glob.glob(sourceFiles)
-        self.assertEqual(len(inputs), 2)
-        cmd = ['TAGMerge_tf.py', '--inputTAGFile']
-        cmd.extend(inputs)
-        cmd.extend(['--outputTAG_MRGFile', 'merged.TAG.pool.root'])
-        msg.info('Will run this transform: {0}'.format(cmd))
-        p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
-        while p.poll() is None:
-            line = p.stdout.readline()
-            sys.stdout.write(line.decode())
-        # Hoover up remaining buffered output lines
-        for line in p.stdout:
-            sys.stdout.write(line)
-        self.assertEqual(p.returncode, 0)
-        
-        # Now load metadata and test a few important values
-        with open('jobReport.json') as jr:
-            md = json.load(jr)
-            self.assertEqual(isinstance(md, dict), True)
-            self.assertEqual(md['files']['output'][0]['subFiles'][0]['nentries'], 78232)
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/Tools/PyJobTransforms/test/test_trfSubstepIntegration.py b/Tools/PyJobTransforms/test/test_trfSubstepIntegration.py
index 8ec97425ed5702125a5c084539ae36ccf0cf383d..62504e1c543b8377171e74f36cb84ac967f63879 100755
--- a/Tools/PyJobTransforms/test/test_trfSubstepIntegration.py
+++ b/Tools/PyJobTransforms/test/test_trfSubstepIntegration.py
@@ -31,7 +31,7 @@ class trfExitTests(unittest.TestCase):
                 steps.append(m.group(1))
         self.assertEqual(p.returncode, 0)
         self.assertTrue("HITtoRDO" in steps)
-        self.assertTrue("RAWtoESD" in steps)
+        self.assertTrue("RAWtoALL" in steps)
 
     def test_FullChain_tf(self):
         cmd = ['FullChain_tf.py', '--showSteps']
@@ -47,7 +47,7 @@ class trfExitTests(unittest.TestCase):
         self.assertEqual(p.returncode, 0)
         self.assertTrue("EVNTtoHITS" in steps)
         self.assertTrue("HITtoRDO" in steps)
-        self.assertTrue("RAWtoESD" in steps)
+        self.assertTrue("RAWtoALL" in steps)
         
 if __name__ == '__main__':
     unittest.main()
diff --git a/Tools/PyJobTransforms/test/test_trfUtilsDBRelease.py b/Tools/PyJobTransforms/test/test_trfUtilsDBRelease.py
index 6c815c89cb0023e604cb4df28cd9a3ca335c2b72..4ad9d7e3cd52596a68c97f4a172aa4ea2e6da15e 100755
--- a/Tools/PyJobTransforms/test/test_trfUtilsDBRelease.py
+++ b/Tools/PyJobTransforms/test/test_trfUtilsDBRelease.py
@@ -1,11 +1,10 @@
 #! /usr/bin/env python
 
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 #
 # Test the various DBRelease scenarios
 #
 
-import json
 import subprocess
 import os
 import os.path
@@ -21,7 +20,7 @@ class DBReleasetest(unittest.TestCase):
     
     # Standard setup using CVMFS
     def test_cvmfsStandard(self):
-        cmd = ['Athena_tf.py', '--DBRelease', '23.3.1']
+        cmd = ['Athena_tf.py', '--CA', '--DBRelease', '23.3.1']
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
         while p.poll() is None:
@@ -34,7 +33,7 @@ class DBReleasetest(unittest.TestCase):
     
     # Setup using CVMFS 'current'
     def test_cvmfsCurrent(self):
-        cmd = ['Athena_tf.py', '--DBRelease', 'current']
+        cmd = ['Athena_tf.py', '--CA', '--DBRelease', 'current']
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
         while p.poll() is None:
@@ -57,7 +56,7 @@ class DBReleasetest(unittest.TestCase):
                 pass
             else:
                 raise
-        cmd = ['Athena_tf.py', '--DBRelease', 'DBRelease-22.7.1.tar.gz']
+        cmd = ['Athena_tf.py', '--CA', '--DBRelease', 'DBRelease-22.7.1.tar.gz']
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
         while p.poll() is None:
@@ -109,7 +108,7 @@ class DBReleasetest(unittest.TestCase):
     
     # Negative test - use an illegal name format
     def test_illegalName(self):
-        cmd = ['Athena_tf.py', '--DBRelease', 'FailMeHarder']
+        cmd = ['Athena_tf.py', '--CA', '--DBRelease', 'FailMeHarder']
         msg.info('Will run this transform: {0}'.format(cmd))
         p = subprocess.Popen(cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1)
         while p.poll() is None:
diff --git a/Tools/PyJobTransforms/test/test_trfUtilsParallelJobProcessorData.py b/Tools/PyJobTransforms/test/test_trfUtilsParallelJobProcessorData.py
index 0db55ea72c15bcd64695c4d6186776ededdb01bf..ec35c957678e3381225b624b7263808dc91db172 100755
--- a/Tools/PyJobTransforms/test/test_trfUtilsParallelJobProcessorData.py
+++ b/Tools/PyJobTransforms/test/test_trfUtilsParallelJobProcessorData.py
@@ -118,34 +118,6 @@ class TestOutputFileValidationInParallel(unittest.TestCase):
 #             sys.stdout.write(line)
 #         self.assertEqual(p.returncode, 0)
 # 
-#     ## @brief unit test for TAG
-#     #  @detail This method is a unit test for output file validation of TAG data
-#     #  using the parallel job processor.
-#     def test_TAG(self):
-#         msg.info("\n\n\n\nTAG OUTPUT FILE VALIDATION USING PARALLEL JOB PROCESSOR")
-#         cmd = [
-#             'ValidateFiles_tf.py',
-#             '--outputTAGFile',
-#             fileTAG1,
-#             '--parallelFileValidation',
-#             'True',
-#             '--verbose'
-#         ]
-#         p = subprocess.Popen(
-#             cmd,
-#             shell = False,
-#             stdout = subprocess.PIPE,
-#             stderr = subprocess.STDOUT,
-#             bufsize = 1
-#         )
-#         while p.poll() is None:
-#             line = p.stdout.readline()
-#             sys.stdout.write(line)
-#         # Clean remaining buffered output lines.
-#         for line in p.stdout:
-#             sys.stdout.write(line)
-#         self.assertEqual(p.returncode, 0)
-# 
 #     ## @brief unit test for BS
 #     #  @detail This method is a unit test for output file validation of BS data
 #     #  using the parallel job processor.
diff --git a/Tools/PyJobTransformsCore/python/full_trfarg.py b/Tools/PyJobTransformsCore/python/full_trfarg.py
index 4cc43b32980761f645080f61bb38c0aebf762a6b..6e9bb8dfe7555b6ca41fc72308da6fdec297b786 100755
--- a/Tools/PyJobTransformsCore/python/full_trfarg.py
+++ b/Tools/PyJobTransformsCore/python/full_trfarg.py
@@ -6,7 +6,7 @@ import os
 import copy
 from PyJobTransformsCore.basic_trfarg import Argument, BoolArg, InputDataFileArg, InputTarFileAndSetupArg, InputTarFileArg, IntegerArg, OutputDataFileArg, OutputFileArg, StringArg
 from PyJobTransformsCore.envutil import find_joboptions
-from PyJobTransformsCore.trfutil import AODFile, BSFile, DPDFile, ESDFile, EvgenFile, FTKIPFile, HistogramFile, HitsFile, JiveXMLTGZFile, MonitorHistFile, NtupleFile, RDOFile, SANFile, TAGFile, expandStringToList, strip_suffix
+from PyJobTransformsCore.trfutil import AODFile, BSFile, DPDFile, ESDFile, EvgenFile, FTKIPFile, HistogramFile, HitsFile, JiveXMLTGZFile, MonitorHistFile, NtupleFile, RDOFile, SANFile, expandStringToList, strip_suffix
 from PyJobTransformsCore.trferr import JobOptionsNotFoundError, TransformArgumentError, TransformDefinitionError
 from PyJobTransformsCore import fileutil
 
@@ -164,31 +164,6 @@ class OutputAODFileArg(OutputDataFileArg):
         return True
 
 
-class InputTAGFileArg(InputDataFileArg):
-    """Input file that contains TAGs"""
-    def __init__(self,help='default',name='default', **kwargs ):
-        InputDataFileArg.__init__(self,help,TAGFile(),name, **kwargs )
-
-    def isFullArgument(self):
-        return True
-
-class InputTAG_AODFileArg(InputDataFileArg):
-    """Input file that contains TAGs pointing to AODs, in particular"""
-    def __init__(self,help='default',name='default', **kwargs ):
-        InputDataFileArg.__init__(self,help,TAGFile(),name, **kwargs )
-
-    def isFullArgument(self):
-        return True
-
-class OutputTAGFileArg(OutputDataFileArg):
-    """Output file that contains TAGs"""
-    def __init__(self,help='default',name='default', temporary = False, intermediate = False, **validationDict ):
-        OutputDataFileArg.__init__(self,help,TAGFile(),name, temporary, intermediate, **validationDict )
-
-    def isFullArgument(self):
-        return True
-
-
 class OutputSANFileArg(OutputFileArg):
     """Output file that contains SANs"""
     def __init__(self,help='default',name='default', temporary = False, intermediate = False, **validationDict ):
diff --git a/Tools/PyJobTransformsCore/python/trfutil.py b/Tools/PyJobTransformsCore/python/trfutil.py
index a45eb9584a6378ec88f6d4372c74b81964ad0c74..ac42e954a14cb27b27cbb71ede14ea9818bcdd6a 100755
--- a/Tools/PyJobTransformsCore/python/trfutil.py
+++ b/Tools/PyJobTransformsCore/python/trfutil.py
@@ -1611,37 +1611,6 @@ class AODFile( PoolDataFile ):
         PoolDataFile.__init__(self,contents)
 
 
-class TAGFile( RootTTreeFile ):
-    defaultContents = 'tag'
-    def __init__(self,contents=defaultContents):
-        RootTTreeFile.__init__(self,contents)
-        
-    def getGUID(self, filename):
-        # Use FClistGUID, then fallback to AthFile (N.B. tag files have funny names in the PFC!)
-        rc, guid = getGUIDfromPFC("RootCollection||PFN:" + filename)
-        if guid is not None:
-            return guid
-        if rc != 0:
-            print ('Warning: Problem with PFC')
-            
-        print ("GUID retrieval: Now attempting to use AthFile to retrieve GUID from %s." % filename)
-        guid = getCachedFileInfo( filename, 'file_guid' )
-        if guid is None:
-            print ("ERROR: GUID retrieval failed.")
-        return guid
-
-
-    def eventCount( self, arg ):
-        """Return number of events in file of argument arg.
-        Return None if event count is not applicable to file type."""
-        try:
-            fName = arg.value()
-        except Exception as e:
-            print ("Event count failed for %s: %s" % ( arg, e ))
-            return None
-        return ntup_entries( fname = fName, tree_names = "POOLCollectionTree" )
-
-
 class SANFile( RootTTreeFile ):
     defaultContents = 'san'
     def __init__(self,contents=defaultContents):
diff --git a/Tools/Tier0ChainTests/scripts/tct_recotrf.py b/Tools/Tier0ChainTests/scripts/tct_recotrf.py
index e83b4dc91463f06959a2e8887919e1a8635676a5..20436b27ed22906b704b06085b5b70099e694375 100755
--- a/Tools/Tier0ChainTests/scripts/tct_recotrf.py
+++ b/Tools/Tier0ChainTests/scripts/tct_recotrf.py
@@ -318,17 +318,14 @@ def generateRecoTrfCmd(config):
         #ntuplist = ['NTUP_HI','NTUP_TRKVALID']
         ntuplist = []
         config.outputAODFile = "myAOD_%s_%d.pool.root" % (config.trigStream_,config.jobnum_)
-        config.outputTAGFile = "myTAG_%s_%d.root" % (config.trigStream_,config.jobnum_)
     elif config.doHIP_:
         desdlist = []
         drawlist = []
         #ntuplist = ['NTUP_HI','NTUP_MINBIAS','NTUP_TRKVALID']
         ntuplist = []
         config.outputAODFile = "myAOD_%s_%d.pool.root" % (config.trigStream_,config.jobnum_)
-        config.outputTAGFile = "myTAG_%s_%d.root" % (config.trigStream_,config.jobnum_)
     else:
         config.outputAODFile = "myAOD_%s_%d.AOD.pool.root" % (config.trigStream_,config.jobnum_)
-        config.outputTAGFile = "myTAG_%s_%d.root" % (config.trigStream_,config.jobnum_)
     if not config.dropDAODs_:
         for dtype in daodlist:
             setattr(config,'output%sFile' % dtype,
diff --git a/Tools/Tier0ChainTests/scripts/tct_runAll.sh b/Tools/Tier0ChainTests/scripts/tct_runAll.sh
index fbf5914aebb5a82808ed19ee9d71f55bf7d05a2d..42c655be0d057efc03fe6e148bdcd03889dc0757 100755
--- a/Tools/Tier0ChainTests/scripts/tct_runAll.sh
+++ b/Tools/Tier0ChainTests/scripts/tct_runAll.sh
@@ -161,7 +161,7 @@ echo ${RUNCMD}
 echo 
 
 ## make tag file
-RUNCMD="AODtoTAG_trf.py maxEvents=-1 trigStream=${TRIGSTR} inputAODFile=MergedAOD.pool.root autoConfiguration=FieldAndGeo,ConditionsTag outputTAGFile=myTag.pool.root ${TRFARGS}"
+RUNCMD="AODtoTAG_trf.py maxEvents=-1 trigStream=${TRIGSTR} inputAODFile=MergedAOD.pool.root autoConfiguration=FieldAndGeo,ConditionsTag ${TRFARGS}"
 echo
 echo ">> Now running command:"
 echo ">> ===================="