diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py
index cbac1ef3a7fc309e34954d5d8704aa744a862759..8be017b64f9f6d0c2de4efe80583843dc60e295b 100644
--- a/Simulation/Digitization/python/DigiAlgConfig.py
+++ b/Simulation/Digitization/python/DigiAlgConfig.py
@@ -44,7 +44,7 @@ def getStandardTruthPileUpTools():
             PileUpToolsList += [ "MergeMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
         if DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
-            PileUpToolsList += [ "MergeTrackRecordCollTool" ]
+            PileUpToolsList += [ "MergeMuonEntryLayerTool" ]
         if DetFlags.writeRDOPool.Calo_on(): #possibly this should be digitize.Calo_on()
             PileUpToolsList += [ "MergeCalibHitsTool" ]
     return PileUpToolsList
@@ -61,7 +61,7 @@ def getStandardSignalOnlyTruthPileUpTools():
             PileUpToolsList += [ "SignalOnlyMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
         if not athenaCommonFlags.DoFullChain() and DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
-            PileUpToolsList += [ "MergeTrackRecordCollTool" ]
+            PileUpToolsList += [ "MergeMuonEntryLayerTool" ]
         if DetFlags.writeRDOPool.Calo_on(): #possibly this should be digitize.Calo_on()
             PileUpToolsList += [ "MergeCalibHitsTool" ]
     return PileUpToolsList
@@ -86,7 +86,7 @@ def getStandardInTimeOnlyTruthPileUpTools():
             PileUpToolsList += [ "InTimeOnlyMcEventCollTool" ]
         PileUpToolsList += [ "MergeTruthJetsTool" ]
         if not athenaCommonFlags.DoFullChain() and DetFlags.writeRDOPool.Muon_on(): #possibly this should be digitize.Muon_on()
-            PileUpToolsList += [ "MergeTrackRecordCollTool" ]
+            PileUpToolsList += [ "MergeMuonEntryLayerTool" ]
         if DetFlags.writeRDOPool.Calo_on(): #possibly this should be digitize.Calo_on()
             PileUpToolsList += [ "MergeCalibHitsTool" ]
     return PileUpToolsList
diff --git a/Simulation/Digitization/python/DigiOutput.py b/Simulation/Digitization/python/DigiOutput.py
index 97c20ed88121182c5bce58092518fc0a4e4da633..1d1ca0f906281e4c5a04da73134a163cb07623c3 100644
--- a/Simulation/Digitization/python/DigiOutput.py
+++ b/Simulation/Digitization/python/DigiOutput.py
@@ -75,10 +75,10 @@ def getStreamRDO_ItemList(log):
     if DetFlags.writeRDOPool.Truth_on():
         StreamRDO_ItemList+=["McEventCollection#*"]
         StreamRDO_ItemList+=["TrackRecordCollection#*"]
-        StreamRDO_ItemList+=["xAOD::JetContainer#InTimeAntiKt4TruthJets"]
-        StreamRDO_ItemList+=["xAOD::JetAuxContainer#InTimeAntiKt4TruthJetsAux."]
-        StreamRDO_ItemList+=["xAOD::JetContainer#OutOfTimeAntiKt4TruthJets"]
-        StreamRDO_ItemList+=["xAOD::JetAuxContainer#OutOfTimeAntiKt4TruthJetsAux."]
+        StreamRDO_ItemList+=["xAOD::JetContainer#*InTimeAntiKt4TruthJets"]
+        StreamRDO_ItemList+=["xAOD::JetAuxContainer#*InTimeAntiKt4TruthJetsAux."]
+        StreamRDO_ItemList+=["xAOD::JetContainer#*OutOfTimeAntiKt4TruthJets"]
+        StreamRDO_ItemList+=["xAOD::JetAuxContainer#*OutOfTimeAntiKt4TruthJetsAux."]
         if DetFlags.writeRDOPool.Calo_on():
             StreamRDO_ItemList += ["CaloCalibrationHitContainer#*"]
             # Temporary for debugging MBTSHits
diff --git a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
index c0678e7b9e3a94e045f8a7d06e0e240848094cf2..86c202e10292dcda9cd217e3cc5e10c86f74db87 100755
--- a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
+++ b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
@@ -167,7 +167,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
 
     def test___StandardSignalOnlyTruthPileUpToolsAlg_PileUpTools(self):
-        expected_PileUpTools = ['MergeMcEventCollTool/SignalOnlyMcEventCollTool','MergeTruthJetsTool/MergeTruthJetsTool','MergeTrackRecordCollTool/MergeTrackRecordCollTool','MergeCalibHitsTool/MergeCalibHitsTool','BCM_DigitizationTool/BCM_DigitizationTool','PixelDigitizationTool/PixelDigitizationTool','SCT_DigitizationTool/SCT_DigitizationTool','TRTDigitizationTool/TRTDigitizationTool','LArPileUpTool/LArPileUpTool','TileHitVecToCntTool/TileHitVecToCntTool','CscDigitizationTool/CscDigitizationTool','MdtDigitizationTool/MdtDigitizationTool','RpcDigitizationTool/RpcDigitizationTool','TgcDigitizationTool/TgcDigitizationTool','MergeRecoTimingObjTool/MergeRecoTimingObjTool']
+        expected_PileUpTools = ['MergeMcEventCollTool/SignalOnlyMcEventCollTool','MergeTruthJetsTool/MergeTruthJetsTool','MergeTrackRecordCollTool/MergeMuonEntryLayerTool','MergeCalibHitsTool/MergeCalibHitsTool','BCM_DigitizationTool/BCM_DigitizationTool','PixelDigitizationTool/PixelDigitizationTool','SCT_DigitizationTool/SCT_DigitizationTool','TRTDigitizationTool/TRTDigitizationTool','LArPileUpTool/LArPileUpTool','TileHitVecToCntTool/TileHitVecToCntTool','CscDigitizationTool/CscDigitizationTool','MdtDigitizationTool/MdtDigitizationTool','RpcDigitizationTool/RpcDigitizationTool','TgcDigitizationTool/TgcDigitizationTool','MergeRecoTimingObjTool/MergeRecoTimingObjTool']
         self._assert_Algorithm_property_unordered_equal(
             'StandardSignalOnlyTruthPileUpToolsAlg',
             'PileUpTools',
@@ -176,7 +176,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___MergeTruthJetsTool_properties(self):
         tested_configurable_name = 'ToolSvc.MergeTruthJetsTool'
-        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing']
+        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'InTimeOutputTruthJetCollKey', 'LastXing', 'OutOfTimeTruthJetCollKey']
         expected_nonstring_properties = {'LastXing': '100', 'FirstXing': '-500'}
         expected_string_properties = {} # Not checking any specific property values
         self._detailed_ConfigurablePropertiesCheck(
@@ -186,9 +186,9 @@ class TestDigitizationMC16a(unittest.TestCase):
             expected_string_properties)
 
 
-    def test___MergeTrackRecordCollTool_properties(self):
-        tested_configurable_name = 'ToolSvc.MergeTrackRecordCollTool'
-        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing']
+    def test___MergeMuonEntryLayerTool_properties(self):
+        tested_configurable_name = 'ToolSvc.MergeMuonEntryLayerTool'
+        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing', 'TrackRecordCollKey', 'TrackRecordCollOutputKey']
         expected_nonstring_properties = {'LastXing': '1', 'FirstXing': '-1'}
         expected_string_properties = {} # Not checking any specific property values
         self._detailed_ConfigurablePropertiesCheck(
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
index fa0b3a1732e8fd07bf691e80fb5502b8b1f07393..ba9f44b452a9f24dfd198aae2e69099f6c8d706f 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
@@ -6,7 +6,7 @@ from AthenaCommon import CfgMgr
 ############################################################################
 
 def genericMergeMcEventCollTool(name="MergeMcEventCollTool", **kwargs):
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent")
     else:
@@ -99,7 +99,14 @@ def getMergeTruthJetsTool(name="MergeTruthJetsTool", **kwargs):
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", TruthJet_FirstXing() )
         kwargs.setdefault("LastXing",  TruthJet_LastXing() )
-    #kwargs.setdefault("OutputLevel",  1 )
+
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("InTimeOutputTruthJetCollKey", overlayFlags.bkgPrefix() + "InTimeAntiKt4TruthJets")
+        kwargs.setdefault("OutOfTimeTruthJetCollKey", overlayFlags.bkgPrefix() + "OutOfTimeAntiKt4TruthJets")
+    else:
+        kwargs.setdefault("InTimeOutputTruthJetCollKey", "InTimeAntiKt4TruthJets")
+        kwargs.setdefault("OutOfTimeTruthJetCollKey", "OutOfTimeAntiKt4TruthJets")
 
     return CfgMgr.MergeTruthJetsTool(name, **kwargs)
 
@@ -111,7 +118,7 @@ def getNewMergeMcEventCollTool_Base(name="NewMergeMcEventCollTool_Base", **kwarg
     if digitizationFlags.doXingByXingPileUp(): # PileUpTool approach
         kwargs.setdefault("FirstXing", -30000)
         kwargs.setdefault("LastXing",   30000)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent")
     else:
@@ -135,7 +142,7 @@ def getNewMergeMcEventCollTool_Signal(name="NewMergeMcEventCollTool_Signal", **k
 def getNewMergeMcEventCollTool_MinBias(name="NewMergeMcEventCollTool_MinBias", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.MinimumBias)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_PU")
     else:
@@ -145,7 +152,7 @@ def getNewMergeMcEventCollTool_MinBias(name="NewMergeMcEventCollTool_MinBias", *
 def getNewMergeMcEventCollTool_HighPtMinBias(name="NewMergeMcEventCollTool_HighPtMinBias", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.HighPtMinimumBias)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HighPtPU")
     else:
@@ -155,7 +162,7 @@ def getNewMergeMcEventCollTool_HighPtMinBias(name="NewMergeMcEventCollTool_HighP
 def getNewMergeMcEventCollTool_Cavern(name="NewMergeMcEventCollTool_Cavern", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.Cavern)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_Cavern")
     else:
@@ -165,7 +172,7 @@ def getNewMergeMcEventCollTool_Cavern(name="NewMergeMcEventCollTool_Cavern", **k
 def getNewMergeMcEventCollTool_HaloGas(name="NewMergeMcEventCollTool_HaloGas", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.HaloGas)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HaloGas")
     else:
@@ -182,7 +189,7 @@ def getInTimeOnlyNewMergeMcEventCollTool_Base(name="InTimeOnlyNewMergeMcEventCol
 def getInTimeOnlyNewMergeMcEventCollTool_MinBias(name="InTimeOnlyNewMergeMcEventCollTool_MinBias", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.MinimumBias)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_PU")
     else:
@@ -192,7 +199,7 @@ def getInTimeOnlyNewMergeMcEventCollTool_MinBias(name="InTimeOnlyNewMergeMcEvent
 def getInTimeOnlyNewMergeMcEventCollTool_HighPtMinBias(name="InTimeOnlyNewMergeMcEventCollTool_HighPtMinBias", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.HighPtMinimumBias)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HighPtPU")
     else:
@@ -202,7 +209,7 @@ def getInTimeOnlyNewMergeMcEventCollTool_HighPtMinBias(name="InTimeOnlyNewMergeM
 def getInTimeOnlyNewMergeMcEventCollTool_Cavern(name="InTimeOnlyNewMergeMcEventCollTool_Cavern", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.Cavern)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_Cavern")
     else:
@@ -212,7 +219,7 @@ def getInTimeOnlyNewMergeMcEventCollTool_Cavern(name="InTimeOnlyNewMergeMcEventC
 def getInTimeOnlyNewMergeMcEventCollTool_HaloGas(name="InTimeOnlyNewMergeMcEventCollTool_HaloGas", **kwargs):
     from Digitization import PileUpEventType
     kwargs.setdefault("PileUpType", PileUpEventType.HaloGas)
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent_HaloGas")
     else:
@@ -249,14 +256,29 @@ def MergeTrackRecordCollTool(name="MergeTrackRecordCollTool", **kwargs):
 
 def MergeCaloEntryLayerTool(name="MergeCaloEntryLayerTool", **kwargs):
     kwargs.setdefault("TrackRecordCollKey", "CaloEntryLayer" )
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TrackRecordCollOutputKey", overlayFlags.bkgPrefix() + "CaloEntryLayer")
+    else:
+        kwargs.setdefault("TrackRecordCollOutputKey", "CaloEntryLayer" )
     return MergeTrackRecordCollTool(name, **kwargs)
 
 def MergeMuonEntryLayerTool(name="MergeMuonEntryLayerTool", **kwargs):
     kwargs.setdefault("TrackRecordCollKey", "MuonEntryLayer" )
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TrackRecordCollOutputKey", overlayFlags.bkgPrefix() + "MuonEntryLayer")
+    else:
+        kwargs.setdefault("TrackRecordCollOutputKey", "MuonEntryLayer" )
     return MergeTrackRecordCollTool(name, **kwargs)
 
 def MergeMuonExitLayerTool(name="MergeMuonExitLayerTool", **kwargs):
     kwargs.setdefault("TrackRecordCollKey", "MuonExitLayer" )
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TrackRecordCollOutputKey", overlayFlags.bkgPrefix() + "MuonExitLayer")
+    else:
+        kwargs.setdefault("TrackRecordCollOutputKey", "MuonExitLayer" )
     return MergeTrackRecordCollTool(name, **kwargs)
 
 
@@ -336,7 +358,7 @@ def MergeRecoTimingObjTool(name="MergeRecoTimingObjTool", **kwargs):
         kwargs.setdefault("LastXing",  TimingObj_LastXing() )
 
     kwargs.setdefault("RecoTimingObjInputKey", "EVNTtoHITS_timings")
-    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
         from OverlayCommonAlgs.OverlayFlags import overlayFlags
         kwargs.setdefault("RecoTimingObjOutputKey", overlayFlags.bkgPrefix() + "EVNTtoHITS_timings")
     else:
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.cxx
index 5e32c46ebf435394d9d4a6a8bde318199492a89f..83ec5fe105a423a88f99000b862fffc799d612d1 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.cxx
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "MergeTrackRecordCollTool.h"
@@ -7,7 +7,6 @@
 #include "AthenaKernel/errorcheck.h"
 #include "PileUpTools/PileUpMergeSvc.h"
 #include "StoreGate/StoreGateSvc.h"
-#include "TrackRecord/TrackRecordCollection.h"
 
 MergeTrackRecordCollTool::MergeTrackRecordCollTool(const std::string& type,
                                                    const std::string& name,
@@ -19,6 +18,13 @@ MergeTrackRecordCollTool::MergeTrackRecordCollTool(const std::string& type,
   declareProperty("TrackRecordCollKey", m_trRecCollKey=std::string("MuonEntryLayer"));
 }
 
+StatusCode MergeTrackRecordCollTool::initialize()
+{
+  ATH_MSG_DEBUG( "initialize()" );
+  ATH_CHECK( m_outputKey.initialize() );
+  return StatusCode::SUCCESS;
+}
+
 StatusCode MergeTrackRecordCollTool::prepareEvent(unsigned int nInputEvents)
 {
   ATH_MSG_DEBUG ( "Calling prepareEvent(): " << name() << " - package version " << PACKAGE_VERSION );
@@ -41,12 +47,17 @@ StatusCode MergeTrackRecordCollTool::processBunchXing(int bunchXing,
 	if (m_pMergeSvc->retrieveSingleSubEvtData(m_trRecCollKey.value(), oldColl,
 						  bunchXing, bSubEvents).isSuccess())
 	    {
-	      TrackRecordCollection* newColl = new TrackRecordCollection();
+        SG::WriteHandle<TrackRecordCollection> outputCollection(m_outputKey);
+        ATH_CHECK(outputCollection.record(std::make_unique<TrackRecordCollection>()));
+        if (!outputCollection.isValid()) {
+          ATH_MSG_ERROR("Could not record output TrackRecordCollection " << outputCollection.name() << " to store " << outputCollection.store());
+          return StatusCode::FAILURE;
+        }
+
 	      for(auto trcit : *oldColl)
-		{
-		  newColl->push_back( TrackRecord(trcit) );
-		}
-	      CHECK(evtStore()->record(newColl, m_trRecCollKey));
+        {
+          outputCollection->push_back( TrackRecord(trcit) );
+        }
 	      ATH_MSG_DEBUG( "processBunchXing: copied original event TrackRecordCollection" );
 	      m_firstSubEvent=false;
 	    }
@@ -93,14 +104,19 @@ StatusCode MergeTrackRecordCollTool::processAllSubEvents()
         {
           //FIXME we are forced to do a deep copy
           const TrackRecordCollection &oldColl=*(truthList.begin())->second;
-          TrackRecordCollection *newColl = new TrackRecordCollection();
+
+          SG::WriteHandle<TrackRecordCollection> outputCollection(m_outputKey);
+          ATH_CHECK(outputCollection.record(std::make_unique<TrackRecordCollection>()));
+          if (!outputCollection.isValid()) {
+            ATH_MSG_ERROR("Could not record output TrackRecordCollection " << outputCollection.name() << " to store " << outputCollection.store());
+            return StatusCode::FAILURE;
+          }
 
           for (auto trcit : oldColl)
             {
-              newColl->push_back( TrackRecord(trcit) );
+              outputCollection->push_back( TrackRecord(trcit) );
             }
 
-          CHECK(evtStore()->record(newColl, m_trRecCollKey));
           ATH_MSG_DEBUG ( "processAllSubEvents: copied original event TrackRecordCollection" );
         }
       else
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.h b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.h
index 5b45faf081c666d5ffff6caef4cc6907df898d79..897af20837976107bd53111905858cbff766a1da 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.h
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeTrackRecordCollTool.h
@@ -1,11 +1,12 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef MCTRUTHSIMALGS_MERGETRACKRECORDCOLLTOOL_H
 #define MCTRUTHSIMALGS_MERGETRACKRECORDCOLLTOOL_H
 
 #include "PileUpTools/PileUpToolBase.h"
+#include "TrackRecord/TrackRecordCollection.h"
 
 #include "GaudiKernel/Property.h"
 #include "GaudiKernel/ServiceHandle.h"
@@ -25,6 +26,8 @@ public:
   MergeTrackRecordCollTool(const std::string& type,
                            const std::string& name,
                            const IInterface* parent);
+  /// Initialize tool
+  virtual StatusCode initialize() override final;
   ///called before the subevts loop. Not (necessarily) able to access
   ///SubEvents
   virtual StatusCode prepareEvent(unsigned int nInputEvents) override final;
@@ -46,6 +49,7 @@ public:
 private:
   ServiceHandle<PileUpMergeSvc> m_pMergeSvc;
   StringProperty m_trRecCollKey;
+  SG::WriteHandleKey<TrackRecordCollection> m_outputKey{ this, "TrackRecordCollOutputKey", "MuonExitLayer", "" };
   bool m_firstSubEvent;
 };
 #endif //MCTRUTHSIMALGS_MERGETRACKRECORDCOLLTOOL_H