diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
index 6529e23a8e2e760288c56f4d5cfcd484d49eee0c..9988b612aecf6cb103f2aabad48141cd2792cfb8 100644
--- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
+++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
@@ -554,42 +554,57 @@ if rec.readESD() and rec.doESD():
     rec.doTrigger=False
     recAlgs.doTrigger=False
     logRecExCommon_topOptions.info("detected re-reconstruction from ESD, will switch trigger OFF !")
-#try:
+
+# Disable Trigger output reading in MC if there is none, unless running Trigger selection algorithms
+if not globalflags.InputFormat.is_bytestream() and not recAlgs.doTrigger:
+    try:
+        from RecExConfig.ObjKeyStore import cfgKeyStore
+        from PyUtils.MetaReaderPeeker import convert_itemList
+        cfgKeyStore.addManyTypesInputFile(convert_itemList(layout='#join'))
+        # Check for Run-1, Run-2 or Run-3 Trigger content in the input file
+        if not cfgKeyStore.isInInputFile("HLT::HLTResult", "HLTResult_EF") \
+                and not cfgKeyStore.isInInputFile("xAOD::TrigNavigation", "TrigNavigation") \
+                and not cfgKeyStore.isInInputFile("xAOD::TrigCompositeContainer", "HLTNav_Summary"):
+            logRecExCommon_topOptions.info('Disabled rec.doTrigger because recAlgs.doTrigger=False and there is no Trigger content in the input file')
+            rec.doTrigger = False
+    except Exception:
+        logRecExCommon_topOptions.warning('Failed to check input file for Trigger content, leaving rec.doTrigger value unchanged (%s)', rec.doTrigger)
+
 if rec.doTrigger:
-    if globalflags.DataSource() == 'data'and globalflags.InputFormat == 'bytestream':
+    if globalflags.DataSource() == 'data' and globalflags.InputFormat == 'bytestream':
         try:
             include("TriggerJobOpts/BStoESD_Tier0_HLTConfig_jobOptions.py")
         except Exception:
             treatException("Could not import TriggerJobOpts/BStoESD_Tier0_HLTConfig_jobOptions.py . Switching trigger off !" )
-            recAlgs.doTrigger=False
+            rec.doTrigger = recAlgs.doTrigger = False
     else:
         try:
             from TriggerJobOpts.TriggerGetter import TriggerGetter
             triggerGetter = TriggerGetter()
         except Exception:
             treatException("Could not import TriggerJobOpts.TriggerGetter . Switched off !" )
-            recAlgs.doTrigger=False
-
-# Run-3 Trigger Outputs: Don't run any trigger - only pass the HLT contents from ESD to AOD
-if rec.readESD() and rec.doAOD():
-    from AthenaConfiguration.AllConfigFlags import ConfigFlags
-    # The simplest protection in case ConfigFlags.Input.Files is not set, doesn't cover all cases:
-    if ConfigFlags.Input.Files == ['_ATHENA_GENERIC_INPUTFILE_NAME_'] and athenaCommonFlags.FilesInput():
-        ConfigFlags.Input.Files = athenaCommonFlags.FilesInput()
-
-    if ConfigFlags.Trigger.EDMVersion == 3:
-        # Add HLT output
-        from TriggerJobOpts.HLTTriggerResultGetter import HLTTriggerResultGetter
-        hltOutput = HLTTriggerResultGetter()
-        # Add Trigger menu metadata
-        if rec.doFileMetaData():
-            from RecExConfig.ObjKeyStore import objKeyStore
-            metadataItems = [ "xAOD::TriggerMenuContainer#TriggerMenu",
-                              "xAOD::TriggerMenuAuxContainer#TriggerMenuAux." ]
-            objKeyStore.addManyTypesMetaData( metadataItems )
-        # Add L1 output (to be consistent with R2)
-        from TrigEDMConfig.TriggerEDM import getLvl1AODList
-        objKeyStore.addManyTypesStreamAOD(getLvl1AODList())
+            rec.doTrigger = recAlgs.doTrigger = False
+
+    # ESDtoAOD Run-3 Trigger Outputs: Don't run any trigger - only pass the HLT contents from ESD to AOD
+    if rec.readESD() and rec.doAOD():
+        from AthenaConfiguration.AllConfigFlags import ConfigFlags
+        # The simplest protection in case ConfigFlags.Input.Files is not set, doesn't cover all cases:
+        if ConfigFlags.Input.Files == ['_ATHENA_GENERIC_INPUTFILE_NAME_'] and athenaCommonFlags.FilesInput():
+            ConfigFlags.Input.Files = athenaCommonFlags.FilesInput()
+
+        if ConfigFlags.Trigger.EDMVersion == 3:
+            # Add HLT output
+            from TriggerJobOpts.HLTTriggerResultGetter import HLTTriggerResultGetter
+            hltOutput = HLTTriggerResultGetter()
+            # Add Trigger menu metadata
+            if rec.doFileMetaData():
+                from RecExConfig.ObjKeyStore import objKeyStore
+                metadataItems = [ "xAOD::TriggerMenuContainer#TriggerMenu",
+                                "xAOD::TriggerMenuAuxContainer#TriggerMenuAux." ]
+                objKeyStore.addManyTypesMetaData( metadataItems )
+            # Add L1 output (to be consistent with R2)
+            from TrigEDMConfig.TriggerEDM import getLvl1AODList
+            objKeyStore.addManyTypesStreamAOD(getLvl1AODList())
 
 AODFix_postTrigger()
 
diff --git a/Reconstruction/RecExample/RecExConfig/python/RecAlgsFlags.py b/Reconstruction/RecExample/RecExConfig/python/RecAlgsFlags.py
index 720352aba5d741d5d4e75267513ca4c50c28cfa6..77ae0617c99778f5eecd80b765b95d91736b2718 100755
--- a/Reconstruction/RecExample/RecExConfig/python/RecAlgsFlags.py
+++ b/Reconstruction/RecExample/RecExConfig/python/RecAlgsFlags.py
@@ -102,9 +102,11 @@ class doEgammaBremReco(JobProperty):
     StoredValue=False 
 class doTrigger(JobProperty):
     """ Switch for trigger"""
+    # TODO: Remove this flag and assume False in all client configuration
+    # once the Run-2 trigger execution is removed from release 22
     statusOn=True 
     allowedTypes=['bool']
-    StoredValue=True 
+    StoredValue=False
 class doAtlfast(JobProperty):
     """ Switch for fast simulation (but normally run at ESD->AOD stage)"""
     statusOn=True
diff --git a/Reconstruction/RecJobTransforms/share/skeleton.ESDtoAOD_tf.py b/Reconstruction/RecJobTransforms/share/skeleton.ESDtoAOD_tf.py
index 7014c91ffcc1b92e8c803971027a8ac2a66a9e4c..443fd878689762e1a7844e9f06cea9d76f21869c 100644
--- a/Reconstruction/RecJobTransforms/share/skeleton.ESDtoAOD_tf.py
+++ b/Reconstruction/RecJobTransforms/share/skeleton.ESDtoAOD_tf.py
@@ -52,21 +52,11 @@ if hasattr(runArgs,"outputAODFile"):
     rec.doAOD.set_Value_and_Lock( True )
     rec.doWriteAOD.set_Value_and_Lock( True ) 
     athenaCommonFlags.PoolAODOutput.set_Value_and_Lock( runArgs.outputAODFile )
-    # Begin temporary block for Run-3 Trigger outputs
-    if ConfigFlags.Trigger.EDMVersion == 3:
-        # Lock DQ configuration to prevent downstream override
-        from AthenaMonitoring.DQMonFlags import DQMonFlags
-        print('DQMonFlags override')
-        if not rec.doTrigger():
-            DQMonFlags.useTrigger.set_Value_and_Lock(False)
-        if DQMonFlags.useTrigger() and rec.doTrigger():
-            DQMonFlags.useTrigger.set_Value_and_Lock(True)
-        # Don't run any trigger - only pass the HLT contents from ESD to AOD
-        # Configure here, and extract HLT content in RecExCommon_topOptions
-        # after the rest of the job is configured
-        from RecExConfig.RecAlgsFlags import recAlgs
-        recAlgs.doTrigger.set_Value_and_Lock( False )
-        rec.doTrigger.set_Value_and_Lock( False )
+    # Lock DQ configuration to prevent downstream override
+    # RB 15/12/2020: This logic was added in !36737, not sure if still needed
+    from AthenaMonitoring.DQMonFlags import DQMonFlags
+    print('DQMonFlags.useTrigger override')
+    DQMonFlags.useTrigger.set_Value_and_Lock(rec.doTrigger() and DQMonFlags.useTrigger())
 
 if hasattr(runArgs,"outputTAGFile"):
     # should be used as outputTAGFile_e2a=myTAG.root so that it does not trigger AODtoTAG