diff --git a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
index a7d119dbe3049f825750caad4cc6f6cf852da46c..ffb07a67924b4dd41a7f06f5c03d88f624ad4a05 100644
--- a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
+++ b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
@@ -15,6 +15,12 @@ from AthenaCommon.Logging import logging
 
 overlayflaglog = logging.getLogger('Overlay_Flags')
 
+class isOverlayMT(JobProperty):
+    """Flag to separate the new MT-ready overlay from the old one"""
+    statusOn=True
+    allowedTypes=['bool']
+    StoredValue = False
+
 class isDataOverlay(JobProperty):
     """Flag to separate data vs MC overlay"""
     statusOn=True
@@ -51,6 +57,18 @@ class outputStore(JobProperty):
     allowedTypes=['str']
     StoredValue = 'StoreGateSvc'
 
+class bkgPrefix(JobProperty):
+    """Overlay background StoreGate key prefix"""
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue = 'Bkg_'
+
+class sigPrefix(JobProperty):
+    """Overlay signal StoreGate key prefix"""
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue = 'Sig_'
+
 class extraTagInfoPairs(JobProperty):
     """ workaround to correctly populate the /TagInfo metadata container
     """
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
index d0c8fadde07d6d4d9d30fbad60c68183a217e5fd..b78f88d810cdea3623e8daa4275c68764967916d 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
@@ -207,8 +207,15 @@ def commonSCT_DigitizationConfig(name,**kwargs):
 ######################################################################################
 
 def SCT_DigitizationTool(name="SCT_DigitizationTool", **kwargs):
-    kwargs.setdefault("OutputObjectName", "SCT_RDOs")
-    kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
+    from Digitization.DigitizationFlags import digitizationFlags
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("OutputObjectName", overlayFlags.bkgPrefix() + "SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", overlayFlags.bkgPrefix() + "SCT_SDO_Map")
+    else:
+        kwargs.setdefault("OutputObjectName", "SCT_RDOs")
+        kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
+
     kwargs.setdefault("HardScatterSplittingMode", 0)
     return commonSCT_DigitizationConfig(name,**kwargs)
 
diff --git a/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py b/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
index 3d6e9b778508f231d59bdc194a0458d7ee31bb77..5fc80db22d07b5232ed4f6843f668793044b3d8c 100644
--- a/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
+++ b/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
@@ -103,7 +103,12 @@ def getLArPileUpTool(name='LArPileUpTool', **kwargs): ## useLArFloat()=True,isOv
        kwargs.setdefault('HighGainThreshEMECIW',0)
 
     kwargs.setdefault('RndmEvtOverlay', isOverlay() )
-    kwargs.setdefault('DigitContainer', 'LArDigitContainer_MC' ) ##FIXME - should not be hard-coded
+
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault('DigitContainer', overlayFlags.bkgPrefix() + 'LArDigitContainer_MC')
+    else:
+        kwargs.setdefault('DigitContainer', 'LArDigitContainer_MC') ##FIXME - should not be hard-coded
 
     # if doing MC+MC overlay 
     from AthenaCommon.GlobalFlags import globalflags
diff --git a/LArCalorimeter/LArL1Sim/share/LArL1Sim_G4_jobOptions.py b/LArCalorimeter/LArL1Sim/share/LArL1Sim_G4_jobOptions.py
index 0522217fdef92dca10d6255cf0fcc00134bd24d0..850fe68f1c9b0dd0170ecb54e43b973733993166 100755
--- a/LArCalorimeter/LArL1Sim/share/LArL1Sim_G4_jobOptions.py
+++ b/LArCalorimeter/LArL1Sim/share/LArL1Sim_G4_jobOptions.py
@@ -10,3 +10,7 @@ digitizationFlags.rndmSeedList.addSeed("LArTTL1Maker", 335242, 7306589 )
 
 #include( "CaloConditions/CaloConditions_jobOptions.py" )
 
+if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+    from OverlayCommonAlgs.OverlayFlags import overlayFlags
+    theLArTTL1Maker.EmTTL1ContainerName = overlayFlags.bkgPrefix() + "LArTTL1EM"
+    theLArTTL1Maker.HadTTL1ContainerName = overlayFlags.bkgPrefix() + "LArTTL1HAD"
diff --git a/LArCalorimeter/LArROD/python/LArRODConfig.py b/LArCalorimeter/LArROD/python/LArRODConfig.py
index fd7166810b94123b6168b81e0aba2088ec7ca322..e9c1999802e30db369cbdfbb013158f3baf3f4ab 100644
--- a/LArCalorimeter/LArROD/python/LArRODConfig.py
+++ b/LArCalorimeter/LArROD/python/LArRODConfig.py
@@ -7,7 +7,13 @@ def getLArRawChannelBuilder(name="LArRawChannelBuilder" , **kwargs):
     from AthenaCommon.AppMgr import ToolSvc
 
     kwargs.setdefault('LArRawChannelKey', "LArRawChannels")
-    kwargs.setdefault('LArDigitKey', 'LArDigitContainer_MC')
+
+    from Digitization.DigitizationFlags import digitizationFlags
+    if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault('LArDigitKey', overlayFlags.bkgPrefix() + 'LArDigitContainer_MC')
+    else:
+        kwargs.setdefault('LArDigitKey', 'LArDigitContainer_MC')
 
     #Call required Cond-Algos:
     from LArRecUtils.LArAutoCorrTotalCondAlgDefault import  LArAutoCorrTotalCondAlgDefault
diff --git a/Simulation/Digitization/python/DigiOutput.py b/Simulation/Digitization/python/DigiOutput.py
index 87c6dc6d3fe55c21c0fee66979eda3c8a40c559e..e342b08971217f03da526d20351ece3670674a0a 100644
--- a/Simulation/Digitization/python/DigiOutput.py
+++ b/Simulation/Digitization/python/DigiOutput.py
@@ -136,7 +136,7 @@ def getStreamRDO_ItemList(log):
             if 'AddCaloDigi' in digitizationFlags.experimentalDigi():
                 StreamRDO_ItemList+=["LArDigitContainer#*"]
             elif digitizationFlags.PileUpPremixing:
-                StreamRDO_ItemList+=["LArDigitContainer#LArDigitContainer_MC"]
+                StreamRDO_ItemList+=["LArDigitContainer#*LArDigitContainer_MC"]
             else:
                 StreamRDO_ItemList+=["LArDigitContainer#LArDigitContainer_MC_Thinned"]
     if hasattr(DetFlags.digitize, 'HGTD_on') and DetFlags.digitize.HGTD_on():
@@ -206,8 +206,8 @@ def getStreamRDO_ItemList(log):
 
     if DetFlags.writeRDOPool.any_on():
         ## TimingAlg
-        StreamRDO_ItemList +=["RecoTimingObj#EVNTtoHITS_timings"]
-        StreamRDO_ItemList +=["RecoTimingObj#HITStoRDO_timings"]
+        StreamRDO_ItemList +=["RecoTimingObj#*EVNTtoHITS_timings"]
+        StreamRDO_ItemList +=["RecoTimingObj#*HITStoRDO_timings"]
 
     if DetFlags.writeRDOPool.any_on():
         # Pool Output
diff --git a/Simulation/Digitization/share/CaloDigitization.py b/Simulation/Digitization/share/CaloDigitization.py
index 8380913629178db3adc06af09798d9ea63c2ab8a..fbdc42b0f627f83205ceba8cf0d331086d985aef 100755
--- a/Simulation/Digitization/share/CaloDigitization.py
+++ b/Simulation/Digitization/share/CaloDigitization.py
@@ -16,8 +16,11 @@ from AthenaCommon.AppMgr import ServiceMgr
 if DetFlags.LAr_on():
     if DetFlags.digitize.LAr_on():
         job += CfgGetter.getAlgorithm("LArRawChannelBuilder", tryDefaultConfigurable=True)
-        from LArROD.LArDigits import DefaultLArDigitThinner
-        LArDigitThinner = DefaultLArDigitThinner('LArDigitThinner') # automatically added to topSequence
+
+        if not digitizationFlags.PileUpPremixing:        
+            from LArROD.LArDigits import DefaultLArDigitThinner
+            LArDigitThinner = DefaultLArDigitThinner('LArDigitThinner') # automatically added to topSequence
+
         if digitizationFlags.doDigiTruth():
           from LArROD.LArRawChannelGetter_DigiHSTruth import LArRawChannelGetter_DigiHSTruth
           LArRawChannelGetter_DigiHSTruth()
diff --git a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
index adde2f181f0527dfee939588ccb2ca46d8f574d7..57a81735ff312c5520170d9dc802d5468ba1dc01 100755
--- a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
+++ b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
@@ -223,9 +223,9 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___SignalOnlyMcEventCollTool_properties(self):
         tested_configurable_name = 'ToolSvc.SignalOnlyMcEventCollTool'
-        expected_property_list = ['KeepUnstable', 'SaveInTimeMinBias', 'AddBackgroundCollisionVertices', 'zRange', 'TruthCollKey', 'OnlySaveSignalTruth', 'OutOfTimeAbsEtaMax', 'rRange', 'CompressOutputCollection', 'ExtraOutputs', 'AbsEtaMax', 'LastXing', 'SaveOutOfTimeMinBias', 'ExtraInputs', 'DetStore', 'SaveCavernBackground', 'FirstXing', 'SaveRestOfMinBias', 'EvtStore', 'HighTimeToKeep', 'LowTimeToKeep']
+        expected_property_list = ['KeepUnstable', 'SaveInTimeMinBias', 'AddBackgroundCollisionVertices', 'zRange', 'TruthCollInputKey', 'TruthCollOutputKey', 'OnlySaveSignalTruth', 'OutOfTimeAbsEtaMax', 'rRange', 'CompressOutputCollection', 'ExtraOutputs', 'AbsEtaMax', 'LastXing', 'SaveOutOfTimeMinBias', 'ExtraInputs', 'DetStore', 'SaveCavernBackground', 'FirstXing', 'SaveRestOfMinBias', 'EvtStore', 'HighTimeToKeep', 'LowTimeToKeep']
         expected_nonstring_properties = {'KeepUnstable': 'False', 'SaveInTimeMinBias': 'True', 'AddBackgroundCollisionVertices': 'True', 'zRange': '200.0', 'OnlySaveSignalTruth': 'True', 'OutOfTimeAbsEtaMax': '3.0', 'rRange': '20.0', 'CompressOutputCollection': 'False', 'ExtraOutputs': '[]', 'AbsEtaMax': '5.0', 'LastXing': '0', 'SaveOutOfTimeMinBias': 'True', 'ExtraInputs': '[]', 'SaveCavernBackground': 'True', 'FirstXing': '0', 'SaveRestOfMinBias': 'False', 'HighTimeToKeep': '50.5', 'LowTimeToKeep': '-50.5'}
-        expected_string_properties = {'TruthCollKey': 'TruthEvent'}
+        expected_string_properties = {'TruthCollInputKey': 'TruthEvent', 'TruthCollOutputKey': 'TruthEvent'}
         self._detailed_ConfigurablePropertiesCheck(
             tested_configurable_name,
             expected_property_list,
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
index 418193216c3f3245fda6a05ca4397372c844bfaf..3a212e7483e9d144446a0d6deb193bd5c3e9b83a 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/python/MCTruthSimAlgsConfig.py
@@ -6,7 +6,13 @@ from AthenaCommon import CfgMgr
 ############################################################################
 
 def genericMergeMcEventCollTool(name="MergeMcEventCollTool", **kwargs):
-    kwargs.setdefault("TruthCollKey", "TruthEvent")
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("TruthCollOutputKey", overlayFlags.bkgPrefix() + "TruthEvent")
+    else:
+        kwargs.setdefault("TruthCollOutputKey", "TruthEvent")
+    kwargs.setdefault("TruthCollInputKey", "TruthEvent")
+    
     kwargs.setdefault("LowTimeToKeep", -50.5)
     kwargs.setdefault("HighTimeToKeep", 50.5)
     kwargs.setdefault("KeepUnstable", False)
@@ -197,6 +203,13 @@ def MergeRecoTimingObjTool(name="MergeRecoTimingObjTool", **kwargs):
         kwargs.setdefault("FirstXing", TimingObj_FirstXing() )
         kwargs.setdefault("LastXing",  TimingObj_LastXing() )
 
+    kwargs.setdefault("RecoTimingObjInputKey", "EVNTtoHITS_timings")
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        kwargs.setdefault("RecoTimingObjOutputKey", overlayFlags.bkgPrefix() + "EVNTtoHITS_timings")
+    else:
+        kwargs.setdefault("RecoTimingObjOutputKey", "EVNTtoHITS_timings")
+
     return CfgMgr.MergeRecoTimingObjTool(name, **kwargs)
 
 
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.cxx
index 2f3150cfce8f9f3a6cb0ae0f1ba52874c349e930..88454c01922f45561eaced7b59cc9e36b0357453 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.cxx
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.cxx
@@ -136,7 +136,8 @@ MergeMcEventCollTool::MergeMcEventCollTool(const std::string& type,
   m_addBackgroundCollisionVertices(true),
   m_signal_event_number(0)
 {
-  declareProperty("TruthCollKey",   m_truthCollKey=std::string("TruthEvent"));
+  declareProperty("TruthCollInputKey",   m_truthCollInputKey=std::string("TruthEvent"));
+  declareProperty("TruthCollOutputKey",   m_truthCollOutputKey=std::string("TruthEvent"));
   declareProperty("KeepUnstable",   m_keepUnstable=false, "do not cut unstable particles");
   declareProperty("AbsEtaMax",      m_absEtaMax=5.0);
   declareProperty("OutOfTimeAbsEtaMax",      m_absEtaMax_outOfTime=3.0);
@@ -188,7 +189,7 @@ StatusCode MergeMcEventCollTool::prepareEvent(unsigned int nInputEvents) {
   if (0 == m_nInputMcEventColls) {
     msg(MSG::ERROR)
       << "prepareEvent: TimedTruthList with key "
-      << m_truthCollKey.value()
+      << m_truthCollInputKey.value()
       << " is empty" << endmsg;
     return StatusCode::RECOVERABLE;
   }
@@ -210,10 +211,10 @@ StatusCode MergeMcEventCollTool::processAllSubEvents() {
   //first get the list of McEventCollections
   typedef PileUpMergeSvc::TimedList<McEventCollection>::type TimedTruthList;
   TimedTruthList truthList;
-  if (!m_pMergeSvc->retrieveSubEvtsData(m_truthCollKey.value(), truthList).isSuccess() ) {
+  if (!m_pMergeSvc->retrieveSubEvtsData(m_truthCollInputKey.value(), truthList).isSuccess() ) {
     msg(MSG::ERROR)
       << "execute: Can not find TimedTruthList with key "
-      << m_truthCollKey.value() << endmsg;
+      << m_truthCollInputKey.value() << endmsg;
     return StatusCode::RECOVERABLE;
   }
 
@@ -225,7 +226,7 @@ StatusCode MergeMcEventCollTool::processAllSubEvents() {
   if (0 == m_nInputMcEventColls) {
     msg(MSG::ERROR)
       << "execute: TimedTruthList with key "
-      << m_truthCollKey.value()
+      << m_truthCollInputKey.value()
       << " is empty" << endmsg;
     return StatusCode::RECOVERABLE;
   }
@@ -281,9 +282,9 @@ StatusCode MergeMcEventCollTool::processBunchXing(int bunchXing,
   //loop over the McEventCollections (each one assumed to containing exactly one GenEvent) of the various input events
   while (iEvt != eSubEvents) {
     const McEventCollection *pMEC(NULL);
-    if (!m_pMergeSvc->retrieveSingleSubEvtData(m_truthCollKey.value(), pMEC,
+    if (!m_pMergeSvc->retrieveSingleSubEvtData(m_truthCollInputKey.value(), pMEC,
 					       bunchXing, iEvt).isSuccess()){
-      ATH_MSG_ERROR("McEventCollection not found for event key " << m_truthCollKey.value());
+      ATH_MSG_ERROR("McEventCollection not found for event key " << m_truthCollInputKey.value());
       return StatusCode::FAILURE;
     }
 
@@ -396,7 +397,7 @@ StatusCode MergeMcEventCollTool::processFirstSubEvent(const McEventCollection *p
   }
   m_startingIndexForBackground=currentMcEventCollectionIndex;
   m_nBkgEventsReadSoFar=0; //number of input events/eventcolls read so far. Used to build index of output GenEvent in ovrl McEvColl
-  sc = evtStore()->record(m_pOvrlMcEvColl, m_truthCollKey);//**BIG TEST**//sc=StatusCode::SUCCESS;
+  sc = evtStore()->record(m_pOvrlMcEvColl, m_truthCollOutputKey);//**BIG TEST**//sc=StatusCode::SUCCESS;
   ATH_MSG_DEBUG( "Starting loop on Background events ... " );
 
   return sc;
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.h b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.h
index c919cb63046eb8d85343c65d7afdb267ea4858e4..feb2f44dd4055c792bfb5ab8d3ea140562923c2b 100755
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.h
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeMcEventCollTool.h
@@ -72,7 +72,9 @@ private:
   //** New McEventCollection to be written out to file
   McEventCollection* m_pOvrlMcEvColl;
   //** Name of input McEventCollection
-  StringProperty m_truthCollKey;
+  StringProperty m_truthCollInputKey;
+  //** Name of output McEventCollection
+  StringProperty m_truthCollOutputKey;
   //** Should unstable particles should be kept?
   BooleanProperty m_keepUnstable;
   //** Eta cut-off for INTIME GenParticles
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.cxx
index 70781b11eff69773d2bfd0035601dbaf8a063327..4c14335f21ffa82c5371e563ea8b27237b11e47e 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.cxx
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.cxx
@@ -14,10 +14,12 @@ MergeRecoTimingObjTool::MergeRecoTimingObjTool(const std::string& type,
                                                const IInterface* parent) :
   PileUpToolBase(type, name, parent),
   m_pMergeSvc("PileUpMergeSvc", name),
-  m_recTimingObjKey("EVNTtoHITS_timings"),
+  m_recTimingObjInputKey("EVNTtoHITS_timings"),
+  m_recTimingObjOutputKey("EVNTtoHITS_timings"),
   m_firstSubEvent(true)
 {
-  declareProperty("RecoTimingObjKey", m_recTimingObjKey);//=std::string("EVNTtoHITS_timings"));
+  declareProperty("RecoTimingObjInputKey", m_recTimingObjInputKey);
+  declareProperty("RecoTimingObjOutputKey", m_recTimingObjOutputKey);
 }
 
 StatusCode MergeRecoTimingObjTool::prepareEvent(unsigned int nInputEvents)
@@ -38,7 +40,7 @@ StatusCode MergeRecoTimingObjTool::processBunchXing(int bunchXing,
       if (bSubEvents != eSubEvents)
         {
 	  const RecoTimingObj *oldColl(0);
-	  if (m_pMergeSvc->retrieveSingleSubEvtData(m_recTimingObjKey.value(), oldColl,
+	  if (m_pMergeSvc->retrieveSingleSubEvtData(m_recTimingObjInputKey.value(), oldColl,
 						    bunchXing, bSubEvents).isSuccess())
 	    {
 	      CHECK(processRecoTimingObj(oldColl));
@@ -79,7 +81,7 @@ StatusCode MergeRecoTimingObjTool::processAllSubEvents()
     }
 
   const RecoTimingObj *oldColl(NULL);
-  if( !m_pMergeSvc->retrieveOriginal(m_recTimingObjKey.value(), oldColl).isSuccess() || !oldColl)
+  if( !m_pMergeSvc->retrieveOriginal(m_recTimingObjInputKey.value(), oldColl).isSuccess() || !oldColl)
     {
       ATH_MSG_DEBUG ( "processAllSubEventss: Cannot find RecoTimingObj in input HITS file" );
       return StatusCode::SUCCESS;
@@ -91,7 +93,7 @@ StatusCode MergeRecoTimingObjTool::processAllSubEvents()
 StatusCode MergeRecoTimingObjTool::processRecoTimingObj(const RecoTimingObj* inputObj)
 {
   RecoTimingObj *outputRecoTimingObj = new RecoTimingObj(*inputObj); //CHECK copy constructor is OK!!
-  CHECK(evtStore()->record(outputRecoTimingObj, m_recTimingObjKey.value()));
+  CHECK(evtStore()->record(outputRecoTimingObj, m_recTimingObjOutputKey.value()));
   ATH_MSG_DEBUG( "processRecoTimingObj: copied original event RecoTimingObj" );
   return StatusCode::SUCCESS;
 }
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.h b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.h
index 5b8172f69f65bd3b05243d5d133b63c2942ac05e..d4d4671c9eb6d84cd01589f4900ef0553ef26dd7 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.h
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/MergeRecoTimingObjTool.h
@@ -46,7 +46,8 @@ private:
   /// share code between two approaches
   virtual StatusCode processRecoTimingObj(const RecoTimingObj *inputObj);
   ServiceHandle<PileUpMergeSvc> m_pMergeSvc;
-  StringProperty m_recTimingObjKey;
+  StringProperty m_recTimingObjInputKey;
+  StringProperty m_recTimingObjOutputKey;
   bool m_firstSubEvent;
 };
 #endif
diff --git a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
index d9818a640a885aea0af8b760f6aba60aa511209d..e284c64766333c2f1ce7112db550e4deb4dd0725 100644
--- a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
+++ b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py
@@ -401,8 +401,13 @@ topSeq = AlgSequence()
 topSeq.TimeOut = 43200 * Units.s
 
 try:
+    timingOutput = "HITStoRDO_timings"
+    if 'OverlayMT' in digitizationFlags.experimentalDigi():
+        from OverlayCommonAlgs.OverlayFlags import overlayFlags
+        timingOutput = overlayFlags.bkgPrefix() + timingOutput
+
     from RecAlgs.RecAlgsConf import TimingAlg
-    topSeq+=TimingAlg("DigiTimerBegin", TimingObjOutputName = "HITStoRDO_timings")
+    topSeq += TimingAlg("DigiTimerBegin", TimingObjOutputName = timingOutput)
 except:
     digilog.warning('Could not add TimingAlg, no timing info will be written out.')
 
diff --git a/Simulation/SimulationJobOptions/share/digitization/postInclude.ReadFromEvgen.py b/Simulation/SimulationJobOptions/share/digitization/postInclude.ReadFromEvgen.py
index d3a7f4427424c6066ef8b6f1a39258be4cc2a5d9..171a91be2d090bfa565eff142ef7d22e0f8651eb 100644
--- a/Simulation/SimulationJobOptions/share/digitization/postInclude.ReadFromEvgen.py
+++ b/Simulation/SimulationJobOptions/share/digitization/postInclude.ReadFromEvgen.py
@@ -35,7 +35,8 @@ PileUpEventLoopMgr.bkgCaches += [ minBiasCache ]
 
 MergeMcEventCollection = Algorithm( "MergeMcEventCollection" )
 if hasattr(MergeMcEventCollection, 'MergeMcEventCollTool'):
-    MergeMcEventCollection.MergeMcEventCollTool.TruthCollKey = "GEN_EVENT"
+    MergeMcEventCollection.MergeMcEventCollTool.TruthCollInputKey = "GEN_EVENT"
+    MergeMcEventCollection.MergeMcEventCollTool.TruthCollOutputKey = "GEN_EVENT"
 else:
     MergeMcEventCollection.TruthCollKey = "GEN_EVENT"
 
@@ -52,5 +53,3 @@ print 'ZLM container thingy:',itemlist
 itemlist += [ "IOVMetaDataContainer#_Digitization_Parameters" ]
 
 print StreamRDO.MetaDataItemList
-
-