diff --git a/Simulation/SimuJobTransforms/python/simTrfArgs.py b/Simulation/SimuJobTransforms/python/simTrfArgs.py
index 9090f0f939eac4dcf6648525515f63a996cd0288..658432f740db33b99414c6321a14c252abbf33af 100644
--- a/Simulation/SimuJobTransforms/python/simTrfArgs.py
+++ b/Simulation/SimuJobTransforms/python/simTrfArgs.py
@@ -7,7 +7,7 @@ import unittest
 import pickle
 import os
 
-from PyJobTransforms.trfArgClasses import argFactory, argFile, argInt, argFloat, argString, argSubstep, trfArgParser, argList, argBool, argPOOLFile, argHITSFile, argRDOFile, argSubstepInt, argSubstepBool, argSubstepString
+from PyJobTransforms.trfArgClasses import argFactory, argFile, argInt, argFloat, argString, argSubstep, trfArgParser, argList, argBool, argPOOLFile, argEVNT_TRFile, argHITSFile, argRDOFile, argSubstepInt, argSubstepBool, argSubstepString
 #from PyJobTransforms.trfLogger import stdLogLevels
 #from PyJobTransforms.trfDecorators import silent
 #from PyJobTransforms.trfExitCodes import trfExit
@@ -136,10 +136,10 @@ def addCosmicsTrfArgs(parser):
 def addTrackRecordArgs(parser):
     parser.defineArgGroup('TrackRecords', 'TrackRecord related options')
     parser.add_argument('--inputEVNT_TRFile', nargs='+',
-                        type=argFactory(argPOOLFile, io='input'),
+                        type=argFactory(argEVNT_TRFile, io='input'),
                         help='Input Track Record file - sometimes used in Cosmic ray or cavern background simulation jobs.', group='TrackRecords')
     parser.add_argument('--outputEVNT_TRFile', nargs='+',
-                        type=argFactory(argPOOLFile, io='output', type='evnt'),
+                        type=argFactory(argEVNT_TRFile, io='output', type='evnt'),
                         help='Output Track Record file - sometimes used in Cosmic ray or cavern background simulation jobs.', group='TrackRecords')
     parser.add_argument('--trackRecordType',
                         type=argFactory(argSubstepString), metavar='CONFIGNAME',
diff --git a/Simulation/SimuJobTransforms/share/skeleton.EVNT_TRMerge.py b/Simulation/SimuJobTransforms/share/skeleton.EVNT_TRMerge.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3b34381f974d6f3a46ae747022e80fb32603f4b
--- /dev/null
+++ b/Simulation/SimuJobTransforms/share/skeleton.EVNT_TRMerge.py
@@ -0,0 +1,167 @@
+#import glob, os, re
+import traceback
+
+from AthenaCommon.Logging import logging
+merEvTrLog = logging.getLogger('MergeEVNT_TR')
+
+merEvTrLog.info( '****************** STARTING HIT MERGING *****************' )
+
+merEvTrLog.info( '**** Transformation run arguments' )
+merEvTrLog.info( str(runArgs) )
+
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+#==============================================================
+# Job definition parameters:
+#==============================================================
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+#Jobs should stop if an include fails.
+if hasattr(runArgs,"IgnoreConfigError"):
+    athenaCommonFlags.AllowIgnoreConfigError=runArgs.IgnoreConfigError
+else:
+    athenaCommonFlags.AllowIgnoreConfigError=False
+
+from AthenaCommon.AppMgr import theApp
+EvtMax=-1
+if hasattr(runArgs,"maxEvents"):
+    EvtMax = runArgs.maxEvents
+theApp.EvtMax = EvtMax
+
+#--------------------------------------------------------------
+# Peek at input to configure DetFlags
+#--------------------------------------------------------------
+if not hasattr(runArgs,"inputEVNT_TRFile"):
+    raise RuntimeError("No inputEVNT_TRFile provided.")
+
+#from SimuJobTransforms.HitsFilePeeker import HitsFilePeeker
+#HitsFilePeeker(runArgs, merEvTrLog)
+from AthenaCommon.DetFlags import DetFlags
+DetFlags.geometry.all_setOff()
+
+#==============================================================
+# Job Configuration parameters:
+#==============================================================
+## Pre-exec
+if hasattr(runArgs,"preExec"):
+    merEvTrLog.info("transform pre-exec")
+    for cmd in runArgs.preExec:
+        merEvTrLog.info(cmd)
+        exec(cmd)
+
+## Pre-include
+if hasattr(runArgs,"preInclude"):
+    for fragment in runArgs.preInclude:
+        include(fragment)
+
+#--------------------------------------------------------------
+# Load POOL support
+#--------------------------------------------------------------
+from AthenaCommon.AppMgr import ServiceMgr
+from AthenaPoolCnvSvc.AthenaPoolCnvSvcConf import AthenaPoolCnvSvc
+ServiceMgr += AthenaPoolCnvSvc()
+
+import AthenaPoolCnvSvc.ReadAthenaPool
+
+from CLIDComps.CLIDCompsConf import ClassIDSvc
+ServiceMgr += ClassIDSvc()
+#include( "PartPropSvc/PartPropSvc.py" )
+
+# load all possible converters for EventCheck
+#GeoModelSvc = Service( "GeoModelSvc" )
+#GeoModelSvc.IgnoreTagDifference=True
+
+# set up all detector description stuff
+#from AtlasGeoModel import SetGeometryVersion
+#from AtlasGeoModel import GeoModelInit
+
+from AthenaCommon.DetFlags import DetFlags
+DetFlags.Print()
+
+#--------------------------------------------------------------
+# Setup Input
+#--------------------------------------------------------------
+In = runArgs.inputEVNT_TRFile
+EventSelector = ServiceMgr.EventSelector
+EventSelector.InputCollections = In
+
+# Check collection type
+try:
+  EventSelector.CollectionType = CollType
+except:
+  print "Reading from file"
+
+SkipEvents=0
+if hasattr(runArgs,"skipEvents"):
+    SkipEvents = runArgs.skipEvents
+ServiceMgr.EventSelector.SkipEvents = SkipEvents
+
+#--------------------------------------------------------------
+# Setup Output
+#--------------------------------------------------------------
+if not hasattr(runArgs,"outputEVNT_TR_MRGFile"):
+    raise RuntimeError("No outputEVNT_TR_MRGFile provided.")
+Out = runArgs.outputEVNT_TR_MRGFile
+from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
+try:
+  StreamEVGEN = AthenaPoolOutputStream( "StreamEVGEN", Out, True )
+except:
+  StreamEVGEN = AthenaPoolOutputStream( "StreamEVGEN", "DidNotSetOutputName.root", True )
+StreamEVGEN.TakeItemsFromInput=True
+StreamEVGEN.ForceRead=True  #force read of output data objs
+# The next line is an example on how to exclude clid's if they are causing a  problem
+#StreamEVGEN.ExcludeList = ['6421#*']
+
+# Look for lists of filter algorithms
+try:
+  StreamEVGEN.AcceptAlgs = AcceptList
+except:
+  print "No accept algs indicated in AcceptList"
+try:
+  StreamEVGEN.RequireAlgs = RequireList
+except:
+  print "No accept algs indicated in RequireList"
+try:
+  StreamEVGEN.VetoAlgs = VetoList
+except:
+  print "No accept algs indicated in VetoList"
+
+# Perfmon
+from PerfMonComps.PerfMonFlags import jobproperties as pmon_properties
+pmon_properties.PerfMonFlags.doMonitoring=True
+pmon_properties.PerfMonFlags.doSemiDetailedMonitoring=True
+pmon_properties.PerfMonFlags.OutputFile = "ntuple_EVNT_TRMerge"
+
+MessageSvc = ServiceMgr.MessageSvc
+MessageSvc.OutputLevel = INFO
+
+StreamEVGEN.ExtendProvenanceRecord = False
+
+ServiceMgr.AthenaPoolCnvSvc.MaxFileSizes = [ "15000000000" ]
+
+#--------------------------------------------------------------
+# Ensure IOVDbSvc.GlobalTag is configured
+# - protection against bad EVNT_TR file metadata
+#--------------------------------------------------------------
+if not hasattr(ServiceMgr,'IOVDbSvc'):
+    from IOVDbSvc.IOVDbSvcConf import IOVDbSvc
+    ServiceMgr += IOVDbSvc()
+if not hasattr(ServiceMgr.IOVDbSvc, 'GlobalTag') or not ServiceMgr.IOVDbSvc.GlobalTag:
+    from AthenaCommon.GlobalFlags import globalflags
+    ServiceMgr.IOVDbSvc.GlobalTag = globalflags.ConditionsTag.get_Value()
+
+#--------------------------------------------------------------
+
+## Post-include
+if hasattr(runArgs,"postInclude"):
+    for fragment in runArgs.postInclude:
+        include(fragment)
+
+## Post-exec
+if hasattr(runArgs,"postExec"):
+    merEvTrLog.info("transform post-exec")
+    for cmd in runArgs.postExec:
+        merEvTrLog.info(cmd)
+        exec(cmd)
+#--------------------------------------------------------------
+print topSequence
diff --git a/Tools/PyJobTransforms/python/trfArgClasses.py b/Tools/PyJobTransforms/python/trfArgClasses.py
index b5a93129daf02aaf40e5186325be15fea219d8f2..500b0bac6e71afc08fdf92250da63ce2d8771a60 100644
--- a/Tools/PyJobTransforms/python/trfArgClasses.py
+++ b/Tools/PyJobTransforms/python/trfArgClasses.py
@@ -1388,6 +1388,45 @@ class argHITSFile(argPOOLFile):
         self._resetMetadata(inputs + [output])
         return myMerger
 
+
+class argEVNT_TRFile(argPOOLFile):
+
+    integrityFunction = "returnIntegrityOfPOOLFile"
+
+    ## @brief Method which can be used to merge EVNT_TR files
+    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))
+        
+        ## @note Modify argdict
+        mySubstepName = 'EVNT_TRMergeAthenaMP{0}'.format(counter)
+        myargdict = self._mergeArgs(argdict)
+        
+        from PyJobTransforms.trfExe import athenaExecutor, executorConfig
+        myDataDictionary = {'EVNT_TR' : argEVNT_TRFile(inputs, type=self.type, io='input'),
+                            'EVNT_TR_MRG' : argEVNT_TRFile(output, type=self.type, io='output')}
+        myMergeConf = executorConfig(myargdict, myDataDictionary)
+        myMerger = athenaExecutor(name = mySubstepName, skeletonFile = 'SimuJobTransforms/skeleton.EVNT_TRMerge.py',
+                                  conf=myMergeConf, 
+                                  inData=set(['EVNT_TR']), outData=set(['EVNT_TR_MRG']), disableMP=True)
+        myMerger.doAll(input=set(['EVNT_TR']), output=set(['EVNT_TR_MRG']))
+        
+        # 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
+
+
 class argRDOFile(argPOOLFile):
 
     integrityFunction = "returnIntegrityOfPOOLFile"