diff --git a/Simulation/SimuJobTransforms/python/SimTransformUtils.py b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
index 27553bed7c6c74f035a066304ba4296ad0f85dae..0d1c60da63482a7fba386d95c9ef9ee0c94dca6b 100644
--- a/Simulation/SimuJobTransforms/python/SimTransformUtils.py
+++ b/Simulation/SimuJobTransforms/python/SimTransformUtils.py
@@ -9,6 +9,68 @@ import PyJobTransforms.trfArgClasses as trfArgClasses
 
 from PyJobTransforms.trfExe import athenaExecutor
 
+### Returns the toal number of needed events
+def pileUpCalc(nSignalEvts, refreshRate, nSubEvtPerBunch,nBunches):
+    totalSubEvts  = nBunches*nSubEvtPerBunch
+    totalSubEvts += totalSubEvts*refreshRate*nSignalEvts
+    return totalSubEvts
+
+
+### Preparing the list of required input PU files
+import math
+def makeBkgInputCol(initialList, nBkgEvtsPerCrossing, correctForEmptyBunchCrossings, logger):
+    uberList = []
+    refreshrate = 1.0
+
+    nSignalEvts = 1000
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    if (athenaCommonFlags.EvtMax.get_Value()>0):
+        nSignalEvts = int(athenaCommonFlags.EvtMax.get_Value())
+        logger.info('Number of signal events (from athenaCommonFlags.EvtMax) = %s.', nSignalEvts )
+    else:
+        nSignalEvts = 0
+        import PyUtils.AthFile as athFile
+        for inFile in athenaCommonFlags.PoolHitsInput.get_Value():
+            try:
+                inputFile = athFile.fopen(inFile)
+                nSignalEvts += int(inputFile.nentries)
+                del inputFile
+            except:
+                logger.warning("Unable to open file [%s]"%inFile)
+                logger.warning('caught:\n%s',err)
+                import traceback
+                traceback.print_exc()
+        logger.info('Number of signal events (read from files) = %s.', nSignalEvts )
+
+    nBkgEventsPerFile = 5000
+    try:
+        import PyUtils.AthFile as athFile
+        inputFile = athFile.fopen(initialList[0])
+        nBkgEventsPerFile = int(inputFile.nentries)
+        logger.info('Number of background events per file (read from file) = %s.', nBkgEventsPerFile )
+        del inputFile
+    except:
+        import traceback
+        traceback.print_exc()
+        logger.warning('Failed to count the number of background events in %s. Assuming 5000 - if this is an overestimate the job may die.', initialList[0])
+
+    from Digitization.DigitizationFlags import digitizationFlags
+    from AthenaCommon.BeamFlags import jobproperties
+    Nbunches = 1 + digitizationFlags.finalBunchCrossing.get_Value() - digitizationFlags.initialBunchCrossing.get_Value()
+    nbunches = int(Nbunches)
+    if correctForEmptyBunchCrossings:
+        nbunches = int(math.ceil(float(nbunches) * float(digitizationFlags.bunchSpacing.get_Value())/float(jobproperties.Beam.bunchSpacing.get_Value())))
+    logger.info('Simulating a maximum of %s colliding-bunch crossings (%s colliding+non-colliding total) per signal event', nbunches, Nbunches)
+    nBkgEventsForJob = pileUpCalc(float(nSignalEvts), 1.0, float(nBkgEvtsPerCrossing), nbunches)
+    logger.info('Number of background events required: %s. Number of background events in input files: %s', nBkgEventsForJob, (nBkgEventsPerFile*len(initialList)) )
+    numberOfRepetitionsRequired =float(nBkgEventsForJob)/float(nBkgEventsPerFile*len(initialList))
+    NumberOfRepetitionsRequired = 1 + int(math.ceil(numberOfRepetitionsRequired))
+    for i in range(0, NumberOfRepetitionsRequired):
+        uberList+=initialList
+    logger.info('Expanding input list from %s to %s', len(initialList), len(uberList))
+    return uberList
+
+
 ### Add Argument Methods
 def addCommonSimDigArguments(parser):
     from SimuJobTransforms.simTrfArgs import addForwardDetTrfArgs, addCommonSimDigTrfArgs
diff --git a/Simulation/SimuJobTransforms/python/simTrfArgs.py b/Simulation/SimuJobTransforms/python/simTrfArgs.py
index 9090f0f939eac4dcf6648525515f63a996cd0288..4d5cef0995cb4002bcb9b2d730e8c12dd8e3b8c9 100644
--- a/Simulation/SimuJobTransforms/python/simTrfArgs.py
+++ b/Simulation/SimuJobTransforms/python/simTrfArgs.py
@@ -80,19 +80,19 @@ def addPileUpTrfArgs(parser):
                         type=argFactory(argBool),
                         help='Calculates the number of background events that will be require for a given pile-up configuration.', group='PileUp')
     parser.add_argument('--inputLowPtMinbiasHitsFile','--LowPtMinbiasHitsFile', nargs='+',
-                        type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True),
+                        type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True),
                         help='Input HITS file for low pT minimum bias pile-up sub-events', group='PileUp')
     parser.add_argument('--inputHighPtMinbiasHitsFile','--HighPtMinbiasHitsFile', nargs='+',
-                        type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True),
+                        type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True),
                         help='Input HITS file for high pT minimum bias pile-up sub-events', group='PileUp')
     parser.add_argument('--inputCavernHitsFile', '--cavernHitsFile', nargs='+',
-                        type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True),
+                        type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True),
                         help='Input HITS file for cavern background sub-events', group='PileUp')
     parser.add_argument('--inputBeamHaloHitsFile', '--beamHaloHitsFile', nargs='+',
-                        type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True),
+                        type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True),
                         help='Input HITS file for beam halo sub-events', group='PileUp'),
     parser.add_argument('--inputBeamGasHitsFile', '--beamGasHitsFile', nargs='+',
-                        type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True),
+                        type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True),
                         help='Input HITS file for beam gas sub-events', group='PileUp')
     parser.add_argument('--numberOfLowPtMinBias',
                         type=argFactory(argFloat),
diff --git a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
index 99c927fbe18e85a82bfabab416bbcbd1680596c7..b1b644756b8fc4dd53e7d4ce6ff56142bfe4b460 100644
--- a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
+++ b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
@@ -123,10 +123,7 @@ del PileUpConfigOverride
 #--------------------------------------------------------------
 # Test Pile-up configuration
 #--------------------------------------------------------------
-def pileUpCalc(nSignalEvts, refreshRate, nSubEvtPerBunch,nBunches):
-    totalSubEvts  = nBunches*nSubEvtPerBunch
-    totalSubEvts += totalSubEvts*refreshRate*nSignalEvts
-    return totalSubEvts
+from SimuJobTransforms.SimTransformUtils import pileUpCalc
 if hasattr(runArgs,"testPileUpConfig"):
     nSignalEvts=1000
     if (athenaCommonFlags.EvtMax>0):
@@ -206,6 +203,7 @@ if hasattr(runArgs,"PileUpPremixing"):
 #--------------------------------------------------------------
 # Pileup configuration
 #--------------------------------------------------------------
+from SimuJobTransforms.SimTransformUtils import makeBkgInputCol
 def HasInputFiles(runArgs, key):
     if hasattr(runArgs, key):
         cmd='runArgs.%s' % key
@@ -213,57 +211,6 @@ def HasInputFiles(runArgs, key):
             return True
     return False
 
-def makeBkgInputCol(initialList, nBkgEvtsPerCrossing, correctForEmptyBunchCrossings):
-    uberList = []
-    refreshrate = 1.0
-
-    nSignalEvts = 1000
-    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-    if (athenaCommonFlags.EvtMax.get_Value()>0):
-        nSignalEvts = int(athenaCommonFlags.EvtMax.get_Value())
-        digilog.info('Number of signal events (from athenaCommonFlags.EvtMax) = %s.', nSignalEvts )
-    else:
-        nSignalEvts = 0
-        import PyUtils.AthFile as athFile
-        for inFile in athenaCommonFlags.PoolHitsInput.get_Value():
-            try:
-                inputFile = athFile.fopen(inFile)
-                nSignalEvts += int(inputFile.nentries)
-                del inputFile
-            except:
-                digilog.warning("Unable to open file [%s]"%inFile)
-                digilog.warning('caught:\n%s',err)
-                import traceback
-                traceback.print_exc()
-        digilog.info('Number of signal events (read from files) = %s.', nSignalEvts )
-
-    nBkgEventsPerFile = 5000
-    try:
-        import PyUtils.AthFile as athFile
-        inputFile = athFile.fopen(initialList[0])
-        nBkgEventsPerFile = int(inputFile.nentries)
-        digilog.info('Number of background events per file (read from file) = %s.', nBkgEventsPerFile )
-        del inputFile
-    except:
-        import traceback
-        traceback.print_exc()
-        digilog.warning('Failed to count the number of background events in %s. Assuming 5000 - if this is an overestimate the job may die.', initialList[0])
-
-    from Digitization.DigitizationFlags import digitizationFlags
-    from AthenaCommon.BeamFlags import jobproperties
-    Nbunches = 1 + digitizationFlags.finalBunchCrossing.get_Value() - digitizationFlags.initialBunchCrossing.get_Value()
-    nbunches = int(Nbunches)
-    if correctForEmptyBunchCrossings:
-        nbunches = int(math.ceil(float(nbunches) * float(digitizationFlags.bunchSpacing.get_Value())/float(jobproperties.Beam.bunchSpacing.get_Value())))
-    digilog.info('Simulating a maximum of %s colliding-bunch crossings (%s colliding+non-colliding total) per signal event', nbunches, Nbunches)
-    nBkgEventsForJob = pileUpCalc(float(nSignalEvts), 1.0, float(nBkgEvtsPerCrossing), nbunches)
-    digilog.info('Number of background events required: %s. Number of background events in input files: %s', nBkgEventsForJob, (nBkgEventsPerFile*len(initialList)) )
-    numberOfRepetitionsRequired =float(nBkgEventsForJob)/float(nBkgEventsPerFile*len(initialList))
-    NumberOfRepetitionsRequired = 1 + int(math.ceil(numberOfRepetitionsRequired))
-    for i in range(0, NumberOfRepetitionsRequired):
-        uberList+=initialList
-    digilog.info('Expanding input list from %s to %s', len(initialList), len(uberList))
-    return uberList
 
 ## Low Pt minbias set-up
 bkgArgName="LowPtMinbiasHitsFile"
@@ -272,7 +219,7 @@ if hasattr(runArgs, "inputLowPtMinbiasHitsFile"):
 if HasInputFiles(runArgs, bkgArgName):
     exec("bkgArg = runArgs."+bkgArgName)
     digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg,
-                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True)
+                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True, digilog)
 if digitizationFlags.LowPtMinBiasInputCols.statusOn:
     digitizationFlags.doLowPtMinBias = True
 else:
@@ -285,7 +232,7 @@ if hasattr(runArgs, "inputHighPtMinbiasHitsFile"):
 if HasInputFiles(runArgs, bkgArgName):
     exec("bkgArg = runArgs."+bkgArgName)
     digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg,
-                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True)
+                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True, digilog)
 if digitizationFlags.HighPtMinBiasInputCols.statusOn:
     digitizationFlags.doHighPtMinBias = True
 else:
@@ -298,7 +245,7 @@ if hasattr(runArgs, "inputCavernHitsFile"):
 if HasInputFiles(runArgs, bkgArgName):
     exec("bkgArg = runArgs."+bkgArgName)
     digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg,
-                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()))
+                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), digilog)
 if digitizationFlags.cavernInputCols.statusOn:
     digitizationFlags.doCavern = True
 else:
@@ -311,7 +258,7 @@ if hasattr(runArgs, "inputBeamHaloHitsFile"):
 if HasInputFiles(runArgs, bkgArgName):
     exec("bkgArg = runArgs."+bkgArgName)
     digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg,
-                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True)
+                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True, digilog)
 if digitizationFlags.beamHaloInputCols.statusOn:
     digitizationFlags.doBeamHalo = True
 else:
@@ -324,7 +271,7 @@ if hasattr(runArgs, "inputBeamGasHitsFile"):
 if HasInputFiles(runArgs, bkgArgName):
     exec("bkgArg = runArgs."+bkgArgName)
     digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg,
-                                                         digitizationFlags.numberOfBeamGas.get_Value(), True)
+                                                         digitizationFlags.numberOfBeamGas.get_Value(), True, digilog)
 if digitizationFlags.beamGasInputCols.statusOn:
     digitizationFlags.doBeamGas = True
 else:
diff --git a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
index fde12ad917fc9652f1a5bcb27957abf75fc7d78e..c43037791feb8839969b2120bb75e5811903def1 100644
--- a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
+++ b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py
@@ -1143,6 +1143,79 @@ if hasattr(runArgs,"digiSteeringConf"):
 #--------------------------------------------------------------
 # Pileup configuration - removed as pileup will be handled on-the-fly
 #--------------------------------------------------------------
+from SimuJobTransforms.SimTransformUtils import makeBkgInputCol
+def HasInputFiles(runArgs, key):
+    if hasattr(runArgs, key):
+        cmd='runArgs.%s' % key
+        if eval(cmd):
+            return True
+    return False
+
+## Low Pt minbias set-up
+bkgArgName="LowPtMinbiasHitsFile"
+if hasattr(runArgs, "inputLowPtMinbiasHitsFile"):
+    bkgArgName="inputLowPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.LowPtMinBiasInputCols.statusOn:
+    digitizationFlags.doLowPtMinBias = True
+else:
+    digitizationFlags.doLowPtMinBias = False
+
+## High Pt minbias set-up
+bkgArgName="HighPtMinbiasHitsFile"
+if hasattr(runArgs, "inputHighPtMinbiasHitsFile"):
+    bkgArgName="inputHighPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.HighPtMinBiasInputCols.statusOn:
+    digitizationFlags.doHighPtMinBias = True
+else:
+    digitizationFlags.doHighPtMinBias = False
+
+## Cavern Background set-up
+bkgArgName="cavernHitsFile"
+if hasattr(runArgs, "inputCavernHitsFile"):
+    bkgArgName="inputCavernHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg,
+                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log)
+if digitizationFlags.cavernInputCols.statusOn:
+    digitizationFlags.doCavern = True
+else:
+    digitizationFlags.doCavern = False
+
+## Beam Halo set-up
+bkgArgName="beamHaloHitsFile"
+if hasattr(runArgs, "inputBeamHaloHitsFile"):
+    bkgArgName="inputBeamHaloHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg,
+                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamHaloInputCols.statusOn:
+    digitizationFlags.doBeamHalo = True
+else:
+    digitizationFlags.doBeamHalo = False
+
+## Beam Gas set-up
+bkgArgName="beamGasHitsFile"
+if hasattr(runArgs, "inputBeamGasHitsFile"):
+    bkgArgName="inputBeamGasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg,
+                                                         digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamGasInputCols.statusOn:
+    digitizationFlags.doBeamGas = True
+else:
+    digitizationFlags.doBeamGas = False
+
 
 #--------------------------------------------------------------
 # Other configuration: LVL1, turn off sub detectors, calo noise
diff --git a/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py
index 422b4986599d50f436e4e5c101c385071daaf692..cd7c1567779805e393684743d2769047cde9f0a8 100644
--- a/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py
+++ b/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py
@@ -338,6 +338,78 @@ if hasattr(runArgs,"digiSteeringConf"):
 #--------------------------------------------------------------
 # Pileup configuration - removed as pileup will be handled on-the-fly
 #--------------------------------------------------------------
+from SimuJobTransforms.SimTransformUtils import makeBkgInputCol
+def HasInputFiles(runArgs, key):
+    if hasattr(runArgs, key):
+        cmd='runArgs.%s' % key
+        if eval(cmd):
+            return True
+    return False
+
+## Low Pt minbias set-up
+bkgArgName="LowPtMinbiasHitsFile"
+if hasattr(runArgs, "inputLowPtMinbiasHitsFile"):
+    bkgArgName="inputLowPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                              digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.LowPtMinBiasInputCols.statusOn:
+    digitizationFlags.doLowPtMinBias = True
+else:
+    digitizationFlags.doLowPtMinBias = False
+
+## High Pt minbias set-up
+bkgArgName="HighPtMinbiasHitsFile"
+if hasattr(runArgs, "inputHighPtMinbiasHitsFile"):
+    bkgArgName="inputHighPtMinbiasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg,
+                                                               digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log)
+if digitizationFlags.HighPtMinBiasInputCols.statusOn:
+    digitizationFlags.doHighPtMinBias = True
+else:
+    digitizationFlags.doHighPtMinBias = False
+
+## Cavern Background set-up
+bkgArgName="cavernHitsFile"
+if hasattr(runArgs, "inputCavernHitsFile"):
+    bkgArgName="inputCavernHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg,
+                                                        digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log)
+if digitizationFlags.cavernInputCols.statusOn:
+    digitizationFlags.doCavern = True
+else:
+    digitizationFlags.doCavern = False
+
+## Beam Halo set-up
+bkgArgName="beamHaloHitsFile"
+if hasattr(runArgs, "inputBeamHaloHitsFile"):
+    bkgArgName="inputBeamHaloHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg,
+                                                          digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamHaloInputCols.statusOn:
+    digitizationFlags.doBeamHalo = True
+else:
+    digitizationFlags.doBeamHalo = False
+
+## Beam Gas set-up
+bkgArgName="beamGasHitsFile"
+if hasattr(runArgs, "inputBeamGasHitsFile"):
+    bkgArgName="inputBeamGasHitsFile"
+if HasInputFiles(runArgs, bkgArgName):
+    exec("bkgArg = runArgs."+bkgArgName)
+    digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg,
+                                                         digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log)
+if digitizationFlags.beamGasInputCols.statusOn:
+    digitizationFlags.doBeamGas = True
+else:
+    digitizationFlags.doBeamGas = False
 
 #--------------------------------------------------------------
 # Other configuration: LVL1, turn off sub detectors, calo noise