diff --git a/Control/CalypsoExample/xAODTruthConversion/CMakeLists.txt b/Control/CalypsoExample/xAODTruthConversion/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d89706a2cc487690204f5c474fc6d3d91e533d24
--- /dev/null
+++ b/Control/CalypsoExample/xAODTruthConversion/CMakeLists.txt
@@ -0,0 +1,9 @@
+################################################################################
+# Package: xAODTruthConversion
+################################################################################
+
+# Declare the package name:
+atlas_subdir( xAODTruthConversion )
+
+# Install files from the package:
+atlas_install_scripts( scripts/*.py )
diff --git a/Control/CalypsoExample/xAODTruthConversion/scripts/runTruthCnv.py b/Control/CalypsoExample/xAODTruthConversion/scripts/runTruthCnv.py
new file mode 100644
index 0000000000000000000000000000000000000000..b51b4d4ba059d571921fe6328e13144ccf104f23
--- /dev/null
+++ b/Control/CalypsoExample/xAODTruthConversion/scripts/runTruthCnv.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+import sys
+from AthenaCommon.Constants import VERBOSE, INFO
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+
+def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs):
+    acc = ComponentAccumulator()
+
+    # Use digiSteeringConf from metadata to write full-PU truth
+    # Not available yet in metadata
+
+    # from PyUtils.MetaReader import read_metadata
+    # infile = flags.Input.Files[0]
+    # thisFileMD = read_metadata(infile, None, 'full')
+    # metadata = thisFileMD[infile]
+    # digiSteeringConf = metadata['/Digitization/Parameters'].get("digiSteeringConf","")
+    # if digiSteeringConf == 'StandardInTimeOnlyGeantinoTruthPileUpToolsAlg':
+    #     writeInTimePileUpTruth = True
+
+    kwargs.setdefault('WriteTruthMetaData', False)
+    kwargs.setdefault('AODContainerName', 'TruthEvent')
+    kwargs.setdefault('EventInfo','McEventInfo')
+
+    algo = CompFactory.xAODMaker.xAODTruthCnvAlg(name, **kwargs)
+    acc.addEventAlgo(algo, primary = True)
+
+    from OutputStreamAthenaPool.OutputStreamConfig import addToESD,addToAOD
+    toAOD = ["xAOD::TruthEventContainer#*", "xAOD::TruthEventAuxContainer#*",
+             "xAOD::TruthVertexContainer#*", "xAOD::TruthVertexAuxContainer#*",
+             "xAOD::TruthParticleContainer#*", "xAOD::TruthParticleAuxContainer#*"]
+    toESD = []
+
+    from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
+    if flags.Output.doWriteESD:
+        acc.merge(OutputStreamCfg(flags, "ESD", ItemList=toESD+toAOD, disableEventTag=True))
+    if flags.Output.doWriteAOD:
+        acc.merge(OutputStreamCfg(flags, "AOD", ItemList=toAOD))
+    return acc
+
+
+if __name__ == "__main__":
+    from AthenaCommon.Logging import log#, logging
+    from AthenaCommon.Configurable import Configurable
+    from CalypsoConfiguration.AllConfigFlags import ConfigFlags
+
+    Configurable.configurableRun3Behavior = True
+    
+# Flags for this job
+    ConfigFlags.Input.isMC = True                                # Needed to bypass autoconfig
+    ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02"             # Always needed; must match FaserVersion
+    ConfigFlags.GeoModel.FaserVersion     = "FASERNU-03"           # Default FASER geometry
+    ConfigFlags.Input.Files = ['my.HITS.pool.root']
+    ConfigFlags.Output.doWriteAOD = True
+    ConfigFlags.Output.doWriteESD = False
+    ConfigFlags.Output.AODFileName = "my.AOD.pool.root"
+
+    ConfigFlags.lock()
+
+# Configure components
+    from CalypsoConfiguration.MainServicesConfig import MainServicesCfg
+    acc = MainServicesCfg(ConfigFlags)
+
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    acc.merge(PoolReadCfg(ConfigFlags))
+
+    from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
+    acc.merge(PoolWriteCfg(ConfigFlags))
+
+# Set up algorithms
+
+    acc.merge(GEN_AOD2xAODCfg(ConfigFlags))
+
+    from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
+    acc.merge(EventInfoCnvAlgCfg(ConfigFlags, disableBeamSpot=True))
+
+    if ConfigFlags.Output.doWriteAOD:
+        ostream = acc.getEventAlgo("OutputStreamAOD")
+    else:
+        ostream = acc.getEventAlgo("OutputStreamESD")
+
+    ostream.ItemList += ["xAOD::EventInfo#EventInfo","xAOD::EventAuxInfo#EventInfoAux."]
+
+    algo = CompFactory.xAODReader.xAODTruthReader("TruthReader")
+    acc.addEventAlgo(algo)
+
+# Configure verbosity    
+    msgSvc = acc.getService("MessageSvc")
+    msgSvc.Format = "% F%30W%S%7W%R%T %0W%M"
+    # ConfigFlags.dump()
+    # logging.getLogger('forcomps').setLevel(VERBOSE)
+    acc.foreach_component("*").OutputLevel = VERBOSE
+    acc.foreach_component("*ClassID*").OutputLevel = INFO
+    log.setLevel(VERBOSE)
+    
+# Execute and finish
+    sys.exit(int(acc.run(maxEvents=-1).isFailure()))