diff --git a/Control/AthenaCommon/python/AthenaCommonFlags.py b/Control/AthenaCommon/python/AthenaCommonFlags.py
index 8bdf9fc99842917b5bf08a87e53c5642be77f31f..321b3ef4b1708d2a3f3473dd90b16921e7e5ef74 100755
--- a/Control/AthenaCommon/python/AthenaCommonFlags.py
+++ b/Control/AthenaCommon/python/AthenaCommonFlags.py
@@ -348,6 +348,12 @@ class MCChannelNumber(JobProperty):
     allowedTypes=['int']
     StoredValue = 0
 
+class MCCampaign(JobProperty):
+    """MC campaign"""
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue = ''
+
 ##-----------------------------------------------------------------------------
 ## 2nd step
 ## Definition of the AthenaCommon flag container
@@ -392,6 +398,7 @@ jobproperties.AthenaCommonFlags.add_JobProperty(isOnlineStateless)
 jobproperties.AthenaCommonFlags.add_JobProperty(RuntimeStrictness)
 jobproperties.AthenaCommonFlags.add_JobProperty(DoFullChain)
 jobproperties.AthenaCommonFlags.add_JobProperty(MCChannelNumber)
+jobproperties.AthenaCommonFlags.add_JobProperty(MCCampaign)
 
 ##-----------------------------------------------------------------------------
 ## 5th step
diff --git a/Control/AthenaConfiguration/python/AllConfigFlags.py b/Control/AthenaConfiguration/python/AllConfigFlags.py
index 93373eac8e6bf47e7ed28917e14455785618e41b..3fb0d4c1740e9f8c6cb32739b11b7c291816bf0a 100644
--- a/Control/AthenaConfiguration/python/AllConfigFlags.py
+++ b/Control/AthenaConfiguration/python/AllConfigFlags.py
@@ -4,6 +4,7 @@ from AthenaCommon.SystemOfUnits import TeV
 from AthenaConfiguration.AthConfigFlags import AthConfigFlags, isGaudiEnv
 from AthenaConfiguration.AutoConfigFlags import GetFileMD, getInitialTimeStampsFromRunNumbers, getRunToTimestampDict, getSpecialConfigurationMetadata
 from AthenaConfiguration.Enums import BeamType, Format, ProductionStep, BunchStructureSource, Project
+from Campaigns.Utils import Campaign
 from PyUtils.moduleExists import moduleExists
 
 
@@ -46,6 +47,7 @@ def _createCfgFlags():
     acf.addFlag('Input.FailOnUnknownCollections', False)
 
     acf.addFlag('Input.ProjectName', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("project_name", "data17_13TeV")) # former global.ProjectName
+    acf.addFlag('Input.MCCampaign', lambda prevFlags : Campaign(GetFileMD(prevFlags.Input.Files).get("mc_campaign", "")), enum=Campaign)
     acf.addFlag('Input.TriggerStream', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("stream", "") if prevFlags.Input.Format == Format.BS
                                                           else GetFileMD(prevFlags.Input.Files).get("triggerStreamOfFile", "")) # former global.TriggerStream
     acf.addFlag('Input.Format', lambda prevFlags : Format.BS if GetFileMD(prevFlags.Input.Files).get("file_type", "BS") == "BS" else Format.POOL, enum=Format) # former global.InputFormat
diff --git a/Event/EventInfoMgt/python/TagInfoMgrConfig.py b/Event/EventInfoMgt/python/TagInfoMgrConfig.py
index c2ba4a315cc111a87b49c6cb314f8f6a9584ace7..a3e9badaf9e10eaef220bc7c3548b83dc498b624 100644
--- a/Event/EventInfoMgt/python/TagInfoMgrConfig.py
+++ b/Event/EventInfoMgt/python/TagInfoMgrConfig.py
@@ -1,24 +1,27 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator, ConfigurationError
 from AthenaConfiguration.ComponentFactory import CompFactory
-import os
 
 
-def TagInfoMgrCfg(configFlags,tagValuePairs={}):
-
-    #Sanity check:
-    if not isinstance(tagValuePairs,dict):
+def TagInfoMgrCfg(flags, tagValuePairs={}):
+    # Sanity check:
+    if not isinstance(tagValuePairs, dict):
         raise ConfigurationError("Parameter extraTagValuePairs is supposed to be a dictionary")
 
-    #Build project-version string for the TagInfoMgr
-    project = os.getenv('AtlasProject',"Unknown")
-    version = os.getenv('AtlasVersion',"Unknown")
+    # Build project-version string for the TagInfoMgr
+    from os import getenv
+    project = getenv("AtlasProject", "Unknown")
+    version = getenv("AtlasVersion", "Unknown")
     atlasRelease=project+"-"+version
 
     tagValuePairs.update({"AtlasRelease" : atlasRelease})
 
-    result=ComponentAccumulator()
-    result.addService(CompFactory.TagInfoMgr(ExtraTagValuePairs = tagValuePairs), primary=True)
+    from Campaigns.Utils import Campaign
+    if flags.Input.isMC and flags.Input.MCCampaign is not Campaign.Unknown:
+        tagValuePairs.update({"mc_campaign" : flags.Input.MCCampaign.value})
+
+    result = ComponentAccumulator()
+    result.addService(CompFactory.TagInfoMgr(ExtraTagValuePairs=tagValuePairs), primary=True)
     return result
 
 
@@ -30,7 +33,7 @@ if __name__ == "__main__":
     ConfigFlags.lock()
 
     acc = TagInfoMgrCfg( ConfigFlags, {"SomeKey": "SomeValue"} )
-    acc2 =  TagInfoMgrCfg( ConfigFlags, {"OtherKey":"OtherValue", "SomeKey": "SomeValue"} )
+    acc2 = TagInfoMgrCfg( ConfigFlags, {"OtherKey": "OtherValue", "SomeKey": "SomeValue"} )
     acc.merge(acc2)
 
     assert "SomeKey" in acc.getService("TagInfoMgr").ExtraTagValuePairs
diff --git a/Event/xAOD/xAODMetaData/Root/FileMetaDataAccessors_v1.cxx b/Event/xAOD/xAODMetaData/Root/FileMetaDataAccessors_v1.cxx
index 0f3d9b573c4188e2986a4136e16b52b789c95fe0..8d24b96c5d13586fb61f29443d20f68ffc5a4c92 100644
--- a/Event/xAOD/xAODMetaData/Root/FileMetaDataAccessors_v1.cxx
+++ b/Event/xAOD/xAODMetaData/Root/FileMetaDataAccessors_v1.cxx
@@ -50,6 +50,7 @@ namespace xAOD {
          DECLARE_STRING_ACCESSOR( conditionsTag );
          DECLARE_STRING_ACCESSOR( beamType );
          DECLARE_STRING_ACCESSOR( simFlavour );
+         DECLARE_STRING_ACCESSOR( mcCampaign );
 
       default:
          std::cerr << "xAOD::FileMetaData_v1    ERROR No string accessor for "
diff --git a/Event/xAOD/xAODMetaData/Root/FileMetaData_v1.cxx b/Event/xAOD/xAODMetaData/Root/FileMetaData_v1.cxx
index e082fc11dcd3fbbdaaf2815064eed9a73535377a..171e7c7c8d5c5f83d95b0c31a8c9b426d6c5fc82 100644
--- a/Event/xAOD/xAODMetaData/Root/FileMetaData_v1.cxx
+++ b/Event/xAOD/xAODMetaData/Root/FileMetaData_v1.cxx
@@ -432,6 +432,7 @@ std::ostream& operator<< ( std::ostream& out,
       PRINT_TYPE( mcProcID );
       PRINT_TYPE( simFlavour );
       PRINT_TYPE( isDataOverlay );
+      PRINT_TYPE( mcCampaign );
 
    default:
       out << "UNKNOWN (" << static_cast< int >( type ) << ")";
diff --git a/Event/xAOD/xAODMetaData/xAODMetaData/versions/FileMetaData_v1.h b/Event/xAOD/xAODMetaData/xAODMetaData/versions/FileMetaData_v1.h
index d54539dac8979a00b6ba33f2a6c527dfb78a76dc..22a3aa4a51f518657bfd98c6193b225dc2722320 100644
--- a/Event/xAOD/xAODMetaData/xAODMetaData/versions/FileMetaData_v1.h
+++ b/Event/xAOD/xAODMetaData/xAODMetaData/versions/FileMetaData_v1.h
@@ -75,8 +75,10 @@ namespace xAOD {
          simFlavour = 10,
          /// Used data overlay for backgrounds [bool]
          isDataOverlay = 11,
+         /// MC campaign [string]
+         mcCampaign = 12,
          /// End marker
-         END = 12
+         END = 13
       }; // enum MetaDataType
 
       /// Get a pre-defined string value out of the object
diff --git a/Event/xAOD/xAODMetaDataCnv/src/FileMetaDataCreatorTool.cxx b/Event/xAOD/xAODMetaDataCnv/src/FileMetaDataCreatorTool.cxx
index 6a6b9daca8ec7b10a6994f17820f7483d183d293..6092039167cd6d459b8c0ca37e069590a8adbfe7 100644
--- a/Event/xAOD/xAODMetaDataCnv/src/FileMetaDataCreatorTool.cxx
+++ b/Event/xAOD/xAODMetaDataCnv/src/FileMetaDataCreatorTool.cxx
@@ -223,6 +223,8 @@ StatusCode
 
       set(xAOD::FileMetaData::beamType, m_tagInfoMgr->findTag("beam_type"));
 
+      set(xAOD::FileMetaData::mcCampaign, m_tagInfoMgr->findTag("mc_campaign"));
+
       std::string beamEnergy = m_tagInfoMgr->findTag("beam_energy");
       try {
         set(xAOD::FileMetaData::beamEnergy,
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
index 59d8cd9f965f5cde03d6e6673881cd0af4797c97..c646852cb82d0ef05a6abdefb57b5e7a03a990b9 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
@@ -3,6 +3,7 @@
 # AnaAlgorithm import(s):
 from AnaAlgorithm.AnaAlgSequence import AnaAlgSequence
 from AnaAlgorithm.DualUseConfig import createAlgorithm, addPrivateTool
+from Campaigns.Utils import Campaign
 
 try:
     from AthenaCommon.Logging import logging
@@ -27,10 +28,10 @@ def makePileupAnalysisSequence( dataType, campaign=None, files=None, useDefaultC
 
     toolConfigFiles = []
     toolLumicalcFiles = []
-    if files is not None and (campaign is None or userPileupConfigs is None):
-        if campaign is None:
+    if files is not None and (campaign is None or campaign is Campaign.Unknown or userPileupConfigs is None):
+        if campaign is None or campaign is Campaign.Unknown:
             from Campaigns.Utils import getMCCampaign
-            campaign = getMCCampaign(files=files)
+            campaign = getMCCampaign(files)
             if campaign:
                 log.info(f'Autoconfiguring PRW with campaign: {campaign}')
             else:
diff --git a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/python/AutoconfigurePRW.py b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/python/AutoconfigurePRW.py
index b4d7ad02292c7ab49f2636b5d3c43f50a6e42a1c..65c90ea4d9b7f1d5e19d13defc5d6813d61cfca1 100644
--- a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/python/AutoconfigurePRW.py
+++ b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/python/AutoconfigurePRW.py
@@ -1,11 +1,11 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
-from Campaigns.Utils import getMCCampaign
+from Campaigns.Utils import Campaign, getMCCampaign
 
 
 def getLumicalcFiles(campaign):
     list = []
 
-    if campaign in ['mc16a', 'mc20a']:
+    if campaign in [Campaign.MC16a, Campaign.MC20a]:
         list.append(
             'GoodRunsLists/data15_13TeV/20170619/PHYS_StandardGRL_All_Good_25ns_276262-284484_OflLumi-13TeV-008.root'
         )
@@ -13,17 +13,17 @@ def getLumicalcFiles(campaign):
             'GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root'
         )
 
-    elif campaign in ['mc16d', 'mc20d']:
+    elif campaign in [Campaign.MC16d, Campaign.MC20d]:
         list.append(
             'GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.lumicalc.OflLumi-13TeV-010.root'
         )
 
-    elif campaign in ['mc16e', 'mc20e']:
+    elif campaign in [Campaign.MC16e, Campaign.MC20e]:
         list.append(
             'GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root'
         )
 
-    elif campaign in ['mc21a']:
+    elif campaign in [Campaign.MC21a]:
         list.append(
             'GoodRunsLists/data22_13p6TeV/20220902/ilumicalc_histograms_None_430536-430648_OflLumi-Run3-001.root'
         )
@@ -31,7 +31,7 @@ def getLumicalcFiles(campaign):
     else:
         raise ValueError(f'Unsupported campaign {campaign}')
 
-    if campaign in ['mc16a', 'mc20a']:
+    if campaign in [Campaign.MC16a, Campaign.MC20a]:
         assert(len(list) == 2)
     else:
         assert(len(list) == 1)
@@ -42,16 +42,16 @@ def getLumicalcFiles(campaign):
 def actualMuFiles(campaign):
     list = []
 
-    if campaign in ['mc16d', 'mc20d']:
+    if campaign in [Campaign.MC16d, Campaign.MC20d]:
         list.append(
             'GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root'
         )
-    elif campaign in ['mc16e', 'mc20e']:
+    elif campaign in [Campaign.MC16e, Campaign.MC20e]:
         list.append(
             'GoodRunsLists/data18_13TeV/20190318/physics_25ns_Triggerno17e33prim.actualMu.OflLumi-13TeV-010.root'
         )
 
-    if campaign in ['mc16d', 'mc20d', 'mc16e', 'mc20e']:
+    if campaign in [Campaign.MC16d, Campaign.MC20d, Campaign.MC16e, Campaign.MC20e]:
         assert(len(list) == 1)
     else:
         assert(len(list) == 0)
@@ -62,19 +62,19 @@ def actualMuFiles(campaign):
 def defaultConfigFiles(campaign):
     list = []
 
-    if campaign in ['mc20a']:
+    if campaign in [Campaign.MC20a]:
         list.append(
             'PileupReweighting/mc20_common/mc20a.284500.physlite.prw.v1.root'
         )
-    elif campaign in ['mc20d']:
+    elif campaign in [Campaign.MC20d]:
         list.append(
             'PileupReweighting/mc20_common/mc20d.300000.physlite.prw.v1.root'
         )
-    elif campaign in ['mc20e']:
+    elif campaign in [Campaign.MC20e]:
         list.append(
             'PileupReweighting/mc20_common/mc20e.310000.physlite.prw.v1.root'
         )
-    elif campaign in ['mc21a']:
+    elif campaign in [Campaign.MC21a]:
         list.append(
             'PileupReweighting/mc21_common/mc21a.410000.physlite.prw.v1.root'
         )
@@ -93,7 +93,7 @@ def getConfigurationFiles(campaign=None, dsid=None, data_type=None, files=None,
 
     if files is not None and (campaign is None or dsid is None or data_type is None):
         if campaign is None:
-            campaign = getMCCampaign(files=files)
+            campaign = getMCCampaign(files)
 
         if dsid is None or data_type is None:
             from AthenaConfiguration.AutoConfigFlags import GetFileMD
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
index b14fb05e3d8fb42c64a946e88cd2e5bd21666399..c0c3cf3bf994e4293986b4a16aa4a0e913c7f26a 100755
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PHYSLITE.py
@@ -151,11 +151,12 @@ def PHYSLITEKernelCfg(ConfigFlags, name='PHYSLITEKernel', **kwargs):
     #    acc.merge(GeoModelCfg(ConfigFlags))    
 
     # Create a pile-up analysis sequence
-    from AsgAnalysisAlgorithms.PileupAnalysisSequence import makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType, files=ConfigFlags.Input.Files, useDefaultConfig=True )
-    pileupSequence.configure( inputName = {}, outputName = {} )
-    for element in pileupSequence.getGaudiConfig2Components():
-        acc.addEventAlgo(element)
+    if ConfigFlags.Input.isMC:
+        from AsgAnalysisAlgorithms.PileupAnalysisSequence import makePileupAnalysisSequence
+        pileupSequence = makePileupAnalysisSequence( dataType, campaign=ConfigFlags.Input.MCCampaign, files=ConfigFlags.Input.Files, useDefaultConfig=True )
+        pileupSequence.configure( inputName = {}, outputName = {} )
+        for element in pileupSequence.getGaudiConfig2Components():
+            acc.addEventAlgo(element)
 
     # Include, and then set up the electron analysis sequence:
     from EgammaAnalysisAlgorithms.ElectronAnalysisSequence import  makeElectronAnalysisSequence
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
index ead80a314c5524e9b33b23d93baaa924df2e3791..36b36c0c90c87b16eff4dddaf4200e70b511d717 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
@@ -209,12 +209,15 @@ if DerivationFrameworkIsMonteCarlo:
   dataType = "mc"
 
 # Create a pile-up analysis sequence
-from AsgAnalysisAlgorithms.PileupAnalysisSequence import makePileupAnalysisSequence
-from RecExConfig.RecoFunctions import InputFileNames
-pileupSequence = makePileupAnalysisSequence( dataType, files=InputFileNames(), useDefaultConfig=True )
-pileupSequence.configure( inputName = {}, outputName = {} )
-print( pileupSequence ) # For debugging
-SeqPHYSLITE += pileupSequence
+if DerivationFrameworkIsMonteCarlo:
+  from AsgAnalysisAlgorithms.PileupAnalysisSequence import makePileupAnalysisSequence
+  from RecExConfig.RecoFunctions import InputFileNames
+  from AthenaCommon.AthenaCommonFlags  import athenaCommonFlags
+  from Campaigns.Utils import Campaign
+  pileupSequence = makePileupAnalysisSequence( dataType, campaign=Campaign(athenaCommonFlags.MCCampaign()), files=InputFileNames(), useDefaultConfig=True )
+  pileupSequence.configure( inputName = {}, outputName = {} )
+  print( pileupSequence ) # For debugging
+  SeqPHYSLITE += pileupSequence
 
 # Include, and then set up the electron analysis sequence:
 from EgammaAnalysisAlgorithms.ElectronAnalysisSequence import  makeElectronAnalysisSequence
diff --git a/Projects/AnalysisBase/package_filters.txt b/Projects/AnalysisBase/package_filters.txt
index df1b2c20ffebc564763ee25a064085bb5e4563e5..3cf1e9ec538e896471336462e864534e232ea790 100644
--- a/Projects/AnalysisBase/package_filters.txt
+++ b/Projects/AnalysisBase/package_filters.txt
@@ -113,6 +113,7 @@
 + Reconstruction/LwtnnUtils
 + Simulation/SimulationConfig
 + Tools/ART
++ Tools/Campaigns
 + Tools/DirectIOART
 + Tools/PathResolver
 + Tools/PyUtils
diff --git a/Projects/AthAnalysis/package_filters.txt b/Projects/AthAnalysis/package_filters.txt
index a920a63552b76c7ceae0a40190242da7f12951ea..1508639ec4624ea3c4ff981f32bc887f1c620eaf 100644
--- a/Projects/AthAnalysis/package_filters.txt
+++ b/Projects/AthAnalysis/package_filters.txt
@@ -108,8 +108,10 @@
 + Reconstruction/egamma/egammaRecEvent
 + Reconstruction/egamma/egammaUtils
 + Reconstruction/tauRecTools
++ Simulation/SimulationConfig
 + Tools/PathResolver
 + Tools/ART
++ Tools/Campaigns
 + Tools/DirectIOART
 + Trigger/TrigAnalysis/TrigAnalysisInterfaces
 + Trigger/TrigAnalysis/TrigBunchCrossingTool
diff --git a/Projects/AthGeneration/package_filters.txt b/Projects/AthGeneration/package_filters.txt
index 5b8f763d98a5522eebcdab80e906a31a5061d32c..6091772fd3bac498044626db002fc3b0d0e99957 100644
--- a/Projects/AthGeneration/package_filters.txt
+++ b/Projects/AthGeneration/package_filters.txt
@@ -191,6 +191,7 @@
 + Reconstruction/RecExample/RecExConfig
 + Simulation/Tools/AtlasCLHEP_RandomGenerators
 + Tools/ART
++ Tools/Campaigns
 + Tools/PathResolver
 + Tools/PmbCxxUtils
 + Tools/PyJobTransforms
diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
index ef414ef76759a98187c64eafa1ba040be656328c..29b6f4bfe22bb856d1610233491c01035c630ca1 100644
--- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
+++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
@@ -137,6 +137,9 @@ svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"beam_type": jobproperties.Beam.bea
                                             "project_name": str(rec.projectName()),
                                             "AtlasRelease_" + rec.OutputFileNameForRecoStep(): rec.AtlasReleaseVersion()
                                             })
+if athenaCommonFlags.MCCampaign():
+    svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"mc_campaign": athenaCommonFlags.MCCampaign()})
+
 # Set AMITag in /TagInfo
 from PyUtils import AMITagHelper
 AMITagHelper.SetAMITag(outputTag=rec.AMITag())
diff --git a/Tools/Campaigns/python/MC16.py b/Tools/Campaigns/python/MC16.py
index 69a60c54a1be343c845e4f9bfb7270621b160280..6515cb995c66d4475420c2ae7e4d53ea5d2c0113 100644
--- a/Tools/Campaigns/python/MC16.py
+++ b/Tools/Campaigns/python/MC16.py
@@ -1,12 +1,14 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
-from SimulationConfig.SimEnums import SimulationFlavour, TruthStrategy
-from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp, LArConfigRun2NoPileUp
+from Campaigns.Utils import Campaign
 
 
 def MC16a(flags):
     """MC16a flags for MC to match 2015 and 2016 data"""
+    flags.Input.MCCampaign = Campaign.MC16a
+
     flags.Beam.NumberOfCollisions = 20.
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
     flags.Digitization.HighGainEMECIW = True
 
@@ -22,8 +24,11 @@ def MC16a(flags):
 
 def MC16d(flags):
     """MC16d flags for MC to match 2017 data"""
+    flags.Input.MCCampaign = Campaign.MC16d
+
     flags.Beam.NumberOfCollisions = 20.
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -38,8 +43,11 @@ def MC16d(flags):
 
 def MC16e(flags):
     """MC16e flags for MC to match 2018 data"""
+    flags.Input.MCCampaign = Campaign.MC16e
+
     flags.Beam.NumberOfCollisions = 20.
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -56,6 +64,7 @@ def MC16NoPileUp(flags):
     """MC16 flags for MC without pile-up"""
     flags.Beam.NumberOfCollisions = 0.
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2NoPileUp
     LArConfigRun2NoPileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -64,6 +73,7 @@ def MC16NoPileUp(flags):
 
 def MC16Simulation(flags):
     """MC16 flags for simulation"""
+    from SimulationConfig.SimEnums import SimulationFlavour, TruthStrategy
     flags.Sim.PhysicsList = 'FTFP_BERT_ATL'
     flags.Sim.TruthStrategy = TruthStrategy.MC15aPlus
 
diff --git a/Tools/Campaigns/python/MC20.py b/Tools/Campaigns/python/MC20.py
index d84fd6e0adaeae568564a39b571226f665c95f85..e9c3bcc8be16ce86d913471f87ba9dfe633357c8 100644
--- a/Tools/Campaigns/python/MC20.py
+++ b/Tools/Campaigns/python/MC20.py
@@ -1,16 +1,18 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
 from AthenaConfiguration.Enums import ProductionStep
-from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp, LArConfigRun2NoPileUp
+from Campaigns.Utils import Campaign
 
 
 def MC20a(flags):
     """MC20a flags for MC to match 2015 and 2016 data"""
+    flags.Input.MCCampaign = Campaign.MC20a
+
     flags.Beam.NumberOfCollisions = 20.
     flags.Digitization.InputBeamSigmaZ = 42
 
     flags.Digitization.UseUpdatedTGCConditions = True
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
     flags.Digitization.HighGainEMECIW = True
 
@@ -35,11 +37,14 @@ def MC20a(flags):
 
 def MC20d(flags):
     """MC20d flags for MC to match 2017 data"""
+    flags.Input.MCCampaign = Campaign.MC20d
+
     flags.Beam.NumberOfCollisions = 20.
     flags.Digitization.InputBeamSigmaZ = 42
 
     flags.Digitization.UseUpdatedTGCConditions = True
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -63,11 +68,14 @@ def MC20d(flags):
 
 def MC20e(flags):
     """MC20e flags for MC to match 2018 data"""
+    flags.Input.MCCampaign = Campaign.MC20e
+
     flags.Beam.NumberOfCollisions = 20.
     flags.Digitization.InputBeamSigmaZ = 42
 
     flags.Digitization.UseUpdatedTGCConditions = True
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2PileUp
     LArConfigRun2PileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -96,6 +104,7 @@ def MC20NoPileUp(flags):
 
     flags.Digitization.UseUpdatedTGCConditions = True
 
+    from LArConfiguration.LArConfigRun2 import LArConfigRun2NoPileUp
     LArConfigRun2NoPileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
diff --git a/Tools/Campaigns/python/MC21.py b/Tools/Campaigns/python/MC21.py
index bd2ed515bcc3517b28cdfeeb35fac5dd138cfdfe..29e905c39300b61e1446b8c7df4cb9cd06f6e3f9 100644
--- a/Tools/Campaigns/python/MC21.py
+++ b/Tools/Campaigns/python/MC21.py
@@ -1,13 +1,15 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
-from SimulationConfig.SimEnums import SimulationFlavour, TruthStrategy
 from AthenaConfiguration.Enums import ProductionStep
-from LArConfiguration.LArConfigRun3 import LArConfigRun3PileUp, LArConfigRun3NoPileUp
+from Campaigns.Utils import Campaign
 
 
 def MC21a(flags):
     """MC21a flags for MC to match initial Run 3 data"""
+    flags.Input.MCCampaign = Campaign.MC21a
+
     flags.Beam.NumberOfCollisions = 60.
 
+    from LArConfiguration.LArConfigRun3 import LArConfigRun3PileUp
     LArConfigRun3PileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -45,6 +47,7 @@ def MC21NoPileUp(flags):
     flags.Beam.NumberOfCollisions = 0.
     flags.Input.ConditionsRunNumber = 410000
 
+    from LArConfiguration.LArConfigRun3 import LArConfigRun3NoPileUp
     LArConfigRun3NoPileUp(flags)
 
     flags.Tile.BestPhaseFromCOOL = False
@@ -64,6 +67,7 @@ def BeamspotSplitMC21a():
 
 def MC21SimulationBase(flags):
     """MC21 base flags for simulation"""
+    from SimulationConfig.SimEnums import SimulationFlavour, TruthStrategy
     flags.Sim.PhysicsList = 'FTFP_BERT_ATL'
     flags.Sim.TruthStrategy = TruthStrategy.MC15aPlus
 
diff --git a/Tools/Campaigns/python/PhaseII.py b/Tools/Campaigns/python/PhaseII.py
index c659b5af36201b168d753b51b11a38e815f93234..d18b1404a4f03c2254d8324098e0b891f5e4bc1b 100644
--- a/Tools/Campaigns/python/PhaseII.py
+++ b/Tools/Campaigns/python/PhaseII.py
@@ -1,6 +1,4 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
-from SimulationConfig.SimEnums import TruthStrategy
-
 
 def PhaseIIPileUpBase(flags, collisions=200):
     """Phase-II Upgrade / Run 4 flags for MC with pile-up"""
@@ -131,6 +129,7 @@ def PhaseIINoPileUp(flags):
 
 def PhaseIISimulation(flags):
     """Phase-II Upgrade / Run 4 flags for simulation"""
+    from SimulationConfig.SimEnums import TruthStrategy
     flags.Sim.PhysicsList = 'FTFP_BERT_ATL'
     flags.Sim.TruthStrategy = TruthStrategy.MC15aPlus
 
diff --git a/Tools/Campaigns/python/Utils.py b/Tools/Campaigns/python/Utils.py
index 541735aa14c0a835135a965dacccb0334caf0662..f8da028647e3d8eb6dfef4c76979cbd640165e61 100644
--- a/Tools/Campaigns/python/Utils.py
+++ b/Tools/Campaigns/python/Utils.py
@@ -1,39 +1,46 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+from AthenaConfiguration.Enums import FlagEnum
+class Campaign(FlagEnum):
+    Unknown = ''
+    MC16a = 'mc16a'
+    MC16d = 'mc16d'
+    MC16e = 'mc16e'
+    MC20a = 'mc20a'
+    MC20d = 'mc20d'
+    MC20e = 'mc20e'
+    MC21a = 'mc21a'
 
-# Production r-tags for different campaigns
-reco_campaigns = { 
-    'mc16a': ['r9280', 'r9287', 'r9364'],
-    'mc16d': ['r10069', 'r10201', 'r10211','r10212'],
-    'mc16e': ['r10724'],
-    'mc20a': ['r13167'],
-    'mc20d': ['r13144'],
-    'mc20e': ['r13145'],
-    'mc21a': ['r13768', 'r13829'],
+# Campaign run numbers (only latest campaigns)
+campaign_runs = {
+    284500: Campaign.MC20a,
+    300000: Campaign.MC20d,
+    310000: Campaign.MC20e,
+    410000: Campaign.MC21a,
 }
 
 # Function to get the campaign
-def getMCCampaign(ami_tag=None, project_name=None, files=None):
+def getMCCampaign(files):
     # Auto-configure from file
-    if files is not None and ami_tag is None and project_name is None:
-        from AthenaConfiguration.AutoConfigFlags import GetFileMD
-        metadata = GetFileMD(files)
-        ami_tag = metadata.get('AMITag', '')
-        project_name = metadata.get('project_name', '')
+    from AthenaConfiguration.AutoConfigFlags import GetFileMD
+    metadata = GetFileMD(files)
+    mc_campaign = Campaign(metadata.get('mc_campaign', ''))
+    project_name = metadata.get('project_name', '')
+    run_numbers = metadata.get('runNumbers', [])
 
-    assert ami_tag is not None
-    assert project_name is not None
+    if mc_campaign is not Campaign.Unknown:
+        return mc_campaign
 
-    for c in reco_campaigns:
-        for r in reco_campaigns[c]:
-            if r in ami_tag:
-                return c
+    if run_numbers:
+        mc_campaign = campaign_runs.get(run_numbers[0], Campaign.Unknown)
 
     # MC-equivalent projects for data
-    if 'data18' in project_name:
-        return 'mc20e'
+    if 'data22' in project_name:
+        return Campaign.MC21a
+    elif 'data18' in project_name:
+        return Campaign.MC20e
     elif 'data17' in project_name:
-        return 'mc20d'
+        return Campaign.MC20d
     elif 'data16' in project_name or 'data15' in project_name:
-        return 'mc20a'
+        return Campaign.MC20a
 
-    return None
+    return mc_campaign
diff --git a/Tools/Campaigns/share/MC16a.py b/Tools/Campaigns/share/MC16a.py
index 01e21645530f32cbbbcee21dcc576ada8a60dd01..23ea9265ea00b7a8da58759e1ddc467e3d8ad04f 100644
--- a/Tools/Campaigns/share/MC16a.py
+++ b/Tools/Campaigns/share/MC16a.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC16a.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC16d.py b/Tools/Campaigns/share/MC16d.py
index e2faff8472f2dd67c7277fed02a5c8825ccdd9a1..50e7bcc7dfedaef1d1c7da6037b9b3389ccc5d1f 100644
--- a/Tools/Campaigns/share/MC16d.py
+++ b/Tools/Campaigns/share/MC16d.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC16d.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC16e.py b/Tools/Campaigns/share/MC16e.py
index e2faff8472f2dd67c7277fed02a5c8825ccdd9a1..b733099e8dde32022b4e2fc8841e8dc18961081a 100644
--- a/Tools/Campaigns/share/MC16e.py
+++ b/Tools/Campaigns/share/MC16e.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC16e.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC20a.py b/Tools/Campaigns/share/MC20a.py
index 829ee9589fcf59b0b1b454823ef573e4d969bc5a..687e958e126bf074ed5ed21cd6fe9357161c7af0 100644
--- a/Tools/Campaigns/share/MC20a.py
+++ b/Tools/Campaigns/share/MC20a.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC20a.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC20d.py b/Tools/Campaigns/share/MC20d.py
index 9ce673b5a1bc0e6aa0ad165b79ea7670b3eb386d..b114282ac46dfffdf55773e39557aa6ab5f824e0 100644
--- a/Tools/Campaigns/share/MC20d.py
+++ b/Tools/Campaigns/share/MC20d.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC20d.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC20e.py b/Tools/Campaigns/share/MC20e.py
index 9ce673b5a1bc0e6aa0ad165b79ea7670b3eb386d..552389304fcd2e5e751dc4f39d7ac763e257e6b2 100644
--- a/Tools/Campaigns/share/MC20e.py
+++ b/Tools/Campaigns/share/MC20e.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC20e.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(20.0)
diff --git a/Tools/Campaigns/share/MC21a.py b/Tools/Campaigns/share/MC21a.py
index 526c7afd32fcc5d4a909b0fa8da64851b30b6de1..5336ee2d30a6483007624c0a0310b5e6df239157 100644
--- a/Tools/Campaigns/share/MC21a.py
+++ b/Tools/Campaigns/share/MC21a.py
@@ -1,4 +1,7 @@
 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from Campaigns.Utils import Campaign
+athenaCommonFlags.MCCampaign.set_Value_and_Lock(Campaign.MC21a.value)
 
 from AthenaCommon.BeamFlags import jobproperties as bf
 bf.Beam.numberOfCollisions.set_Value_and_Lock(60.0)
diff --git a/Tools/PROCTools/data/q443_AOD_content.ref b/Tools/PROCTools/data/q443_AOD_content.ref
index 494fe7c500bca3c0b842aacd6475a716948fb5b3..5e8d8299aee68a49fcc98762fb8ef32de837764e 100644
--- a/Tools/PROCTools/data/q443_AOD_content.ref
+++ b/Tools/PROCTools/data/q443_AOD_content.ref
@@ -726,6 +726,7 @@ FileMetaDataAuxDyn.beamType
 FileMetaDataAuxDyn.conditionsTag
 FileMetaDataAuxDyn.geometryVersion
 FileMetaDataAuxDyn.isDataOverlay
+FileMetaDataAuxDyn.mcCampaign
 FileMetaDataAuxDyn.mcProcID
 FileMetaDataAuxDyn.simFlavour
 ForwardElectronClusters
diff --git a/Tools/PROCTools/data/q445_AOD_content.ref b/Tools/PROCTools/data/q445_AOD_content.ref
index 37ff340933be0f2c622d2d7965de2b027bb391c7..14a660aed09a434f2b31027dc0d108b5ec1666cc 100644
--- a/Tools/PROCTools/data/q445_AOD_content.ref
+++ b/Tools/PROCTools/data/q445_AOD_content.ref
@@ -346,6 +346,7 @@ FileMetaDataAuxDyn.beamType
 FileMetaDataAuxDyn.conditionsTag
 FileMetaDataAuxDyn.geometryVersion
 FileMetaDataAuxDyn.isDataOverlay
+FileMetaDataAuxDyn.mcCampaign
 FileMetaDataAuxDyn.mcProcID
 FileMetaDataAuxDyn.simFlavour
 ForwardElectronClusters
diff --git a/Tools/PROCTools/data/q446_AOD_content.ref b/Tools/PROCTools/data/q446_AOD_content.ref
index 505f70eef0d5221448da44fff294c264167e7a78..24c0133b66a155b578255eec7d1b026c84af3e7b 100644
--- a/Tools/PROCTools/data/q446_AOD_content.ref
+++ b/Tools/PROCTools/data/q446_AOD_content.ref
@@ -246,6 +246,7 @@ FileMetaDataAuxDyn.beamType
 FileMetaDataAuxDyn.conditionsTag
 FileMetaDataAuxDyn.geometryVersion
 FileMetaDataAuxDyn.isDataOverlay
+FileMetaDataAuxDyn.mcCampaign
 FileMetaDataAuxDyn.mcProcID
 FileMetaDataAuxDyn.simFlavour
 ForwardElectronClusters
diff --git a/Tools/PyUtils/CMakeLists.txt b/Tools/PyUtils/CMakeLists.txt
index b132ef9f967ff85add07b9998e23029eafc12d71..6de3adc1bbbdac773b1b49ba9d9ce823ce4a338e 100644
--- a/Tools/PyUtils/CMakeLists.txt
+++ b/Tools/PyUtils/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
 
 # Declare the package name:
 atlas_subdir( PyUtils )
@@ -11,6 +11,11 @@ if( XAOD_STANDALONE )
                                   python/RootUtils.py
                                   python/Helpers.py
                                   POST_BUILD_CMD ${ATLAS_FLAKE8} )
+    atlas_install_scripts( bin/meta-reader.py bin/meta-diff.py
+                           POST_BUILD_CMD ${ATLAS_FLAKE8} )
+
+    atlas_add_alias( meta-reader "meta-reader.py" )
+    atlas_add_alias( meta-diff   "meta-diff.py" )
 else()
     # External dependencies:
     find_package( decorator )
diff --git a/Tools/PyUtils/python/MetaReader.py b/Tools/PyUtils/python/MetaReader.py
index 2f179dd8740aa32a31ff5f6bb49834fe9778304d..c6e69352a9ce5aca34c399c372146998e79c4851 100644
--- a/Tools/PyUtils/python/MetaReader.py
+++ b/Tools/PyUtils/python/MetaReader.py
@@ -392,7 +392,7 @@ def read_metadata(filenames, file_type = None, mode = 'lite', promote = None, me
                 meta_dict = make_peeker(meta_dict)
 
             if promote:
-                meta_dict = promote_keys(meta_dict)
+                meta_dict = promote_keys(meta_dict, mode)
 
             # If AnalysisBase the itemList must be grabbed another way
             if not isGaudiEnv():
@@ -957,11 +957,15 @@ def make_lite(meta_dict):
                         meta_dict[filename][key].pop(item)
 
         if '/TagInfo' in file_content:
-            keys_to_keep = ['beam_energy', 'beam_type', 'GeoAtlas', 'IOVDbGlobalTag', 'AODFixVersion', 'project_name']
+            keys_to_keep = ['beam_energy', 'beam_type', 'GeoAtlas', 'IOVDbGlobalTag', 'AODFixVersion', 'project_name', 'mc_campaign']
 
             for item in list(meta_dict[filename]['/TagInfo']):
                 if item not in keys_to_keep:
                     meta_dict[filename]['/TagInfo'].pop(item)
+
+            # default values:
+            if 'mc_campaign' not in meta_dict[filename]['/TagInfo']:
+                meta_dict[filename]['/TagInfo']['mc_campaign'] = ''
     return meta_dict
 
 
@@ -993,7 +997,8 @@ def make_peeker(meta_dict):
                 'project_name',
                 'triggerStreamOfFile',
                 'AtlasRelease',
-                'specialConfiguration'
+                'specialConfiguration',
+                'mc_campaign',
             ]
             for item in list(meta_dict[filename]['/TagInfo']):
                 if item not in keys_to_keep:
@@ -1029,7 +1034,7 @@ def make_peeker(meta_dict):
     return meta_dict
 
 
-def promote_keys(meta_dict):
+def promote_keys(meta_dict, mode):
     for filename, file_content in meta_dict.items():
         md = meta_dict[filename]
         for key in file_content:
@@ -1056,22 +1061,23 @@ def promote_keys(meta_dict):
                 break
 
             if not isGaudiEnv() and key in md['metadata_items'] and 'FileMetaData' in key:
-                md.update(md[key])
-
                 if 'beamType' in md[key]:
                     md['beam_type'] = md[key]['beamType']
 
                 if 'runNumbers' in md[key]:
-                    md['mc_event_number'] = md[key]['runNumbers'][0]
+                    md['runNumbers'] = md[key]['runNumbers']
 
                 if 'mcProcID' in md[key]:
                     md['mc_channel_number'] = int(md[key]['mcProcID'])
 
+                if 'mcCampaign' in md[key]:
+                    md['mc_campaign'] = md[key]['mcCampaign']
+
                 if 'lumiBlocks' in md[key]:
                     md['lumiBlockNumbers'] = md[key]['lumiBlocks']
                 
-                if 'amiTag' in md[key]:
-                    md['processingTags'] = md[key]['amiTag']
+                if mode == 'peeker' and 'amiTag' in md[key]:
+                    md['AMITag'] = md[key]['amiTag']
 
                 if 'beamEnergy' in md[key]:
                     md['beam_energy'] = md[key]['beamEnergy']
@@ -1081,6 +1087,9 @@ def promote_keys(meta_dict):
 
                 # EventType checks
                 md['eventTypes'] = []
+                if mode == 'peeker' and 'simFlavour' in md[key]:
+                    md['SimulationFlavour'] = md[key]['simFlavour']
+
                 if 'simFlavour' in md[key] and ('FullG4' in md[key]['simFlavour'] or 'ATLFAST' in md[key]['simFlavour']):
                     md['eventTypes'].append('IS_SIMULATION')
                 else:
@@ -1091,7 +1100,14 @@ def promote_keys(meta_dict):
                 else:
                   md['eventTypes'].append('IS_TESTBEAM')
 
-                meta_dict[filename].pop(key)
+                if 'dataType' in md[key]:
+                    md['processingTags'] = [md[key]['dataType']]
+
+                if mode == 'peeker' and 'productionRelease' in md[key]:
+                    md['AtlasRelease'] = md[key]['productionRelease']
+
+                if mode == 'lite':
+                    meta_dict[filename].pop(key)
                 break
 
         if '/TagInfo' in file_content: