diff --git a/Event/xAOD/xAODAssociations/xAODAssociations/xAODAssociationsDict.h b/Event/xAOD/xAODAssociations/xAODAssociations/xAODAssociationsDict.h
index 6350678bb1806a758f3ff3b3411619389d05a644..caa256a45e20649b0103ae2c3b078b5af989f1a1 100644
--- a/Event/xAOD/xAODAssociations/xAODAssociations/xAODAssociationsDict.h
+++ b/Event/xAOD/xAODAssociations/xAODAssociations/xAODAssociationsDict.h
@@ -16,4 +16,16 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODASSOCIATIONS {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD,
+                                  TrackParticleClusterAssociationContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CaloClusterContainer );
+   };
+}
+
 #endif // XAODASSOCIATIONS_XAODASSOCIATIONSDICT_H
diff --git a/Event/xAOD/xAODBase/CMakeLists.txt b/Event/xAOD/xAODBase/CMakeLists.txt
index 60db4aa1e07c0d97966edf07542b1997e650a8e7..97c640fda79fad99ba7e6784d4c0f636712cfc9c 100644
--- a/Event/xAOD/xAODBase/CMakeLists.txt
+++ b/Event/xAOD/xAODBase/CMakeLists.txt
@@ -1,29 +1,19 @@
-# $Id: CMakeLists.txt 744422 2016-05-03 11:34:39Z krasznaa $
-################################################################################
-# Package: xAODBase
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODBase )
 
-# Extra dependencies based on what environment we are in:
+# Extra dependencies based on what environment we are in.
+set( extra_libs )
 if( NOT XAOD_STANDALONE )
-   set( extra_deps Control/AthenaKernel )
    set( extra_libs AthenaKernel )
 endif()
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   ${extra_deps}
-   PRIVATE
-   Control/AthLinks )
-
-# External dependencies:
+# External dependencies.
 find_package( ROOT COMPONENTS Core Physics )
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODBase
    xAODBase/*.h Root/*.cxx
    PUBLIC_HEADERS xAODBase
@@ -31,21 +21,27 @@ atlas_add_library( xAODBase
    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers ${extra_libs}
    PRIVATE_LINK_LIBRARIES AthLinks )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODBase/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::IParticleContainer" )
+
 atlas_add_dictionary( xAODBaseDict
    xAODBase/xAODBaseDict.h
-   xAODBase/selection.xml
-   LINK_LIBRARIES xAODBase )
+   ${_selectionFile}
+   LINK_LIBRARIES AthContainers AthLinks xAODBase )
 
 atlas_add_dictionary( xAODBaseObjectTypeDict
    xAODBase/xAODBaseObjectTypeDict.h
-   xAODBase/selection-ObjectType.xml)
+   xAODBase/selection-ObjectType.xml )
 
+# Install files from the package.
 atlas_install_python_modules( python/*.py )
 
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( ut_xAODObjectType_test
    SOURCES test/ut_xAODObjectType_test.cxx
    LINK_LIBRARIES xAODBase )
 
 atlas_add_test( ut_xAODObjectType_pytest
-	        SCRIPT test/ut_xAODObjectType_pytest.py)
+   SCRIPT test/ut_xAODObjectType_pytest.py )
diff --git a/Event/xAOD/xAODBase/xAODBase/selection.xml b/Event/xAOD/xAODBase/xAODBase/selection.xml
index 89f4f352ab142c612210b546f0003c83d76fbb1a..e6cc6e4c323132d8a701069bfb91189933c463ed 100644
--- a/Event/xAOD/xAODBase/xAODBase/selection.xml
+++ b/Event/xAOD/xAODBase/xAODBase/selection.xml
@@ -1,4 +1,4 @@
-<!-- $Id: selection.xml 618909 2014-09-29 10:16:52Z krasznaa $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
   <!-- All the dictionaries for xAOD::IParticle: -->
@@ -6,22 +6,7 @@
   <class name="xAOD::IParticleContainer" />
   <class name="std::vector<xAOD::IParticle*>" />
 
-  <!-- All smart pointer dictionaries for xAOD::IParticle -->
-  <class name="DataLink<xAOD::IParticleContainer>" />
-  <class name="std::vector<DataLink<xAOD::IParticleContainer> >" />
-
-  <class name="ElementLink<xAOD::IParticleContainer>" />
-  <class name="std::vector<ElementLink<xAOD::IParticleContainer> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::IParticleContainer> > >" />
-
   <!-- The helper functions: -->
   <function pattern="xAOD::*" />
 
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-  </exclusion>
-
 </lcgdict>
diff --git a/Event/xAOD/xAODBase/xAODBase/xAODBaseDict.h b/Event/xAOD/xAODBase/xAODBase/xAODBaseDict.h
index 62bf3ed6647e63f1bf5cd1adf5e19f1a0ff9e53a..fe51d07835b9c794658d7b1c560146b8293f110f 100644
--- a/Event/xAOD/xAODBase/xAODBase/xAODBaseDict.h
+++ b/Event/xAOD/xAODBase/xAODBase/xAODBaseDict.h
@@ -1,10 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODBaseDict.h 618909 2014-09-29 10:16:52Z krasznaa $
 #ifndef XAODBASE_XAODBASEDICT_H
 #define XAODBASE_XAODBASEDICT_H
 
@@ -14,12 +11,13 @@
 // EDM include(s):
 #include "AthLinks/DataLink.h"
 #include "AthLinks/ElementLink.h"
+#include "AthContainers/tools/AuxTypeVectorFactory.h"
 
 // Local include(s):
-#include "xAODBase/ObjectType.h"
 #include "xAODBase/IParticleContainer.h"
 #include "xAODBase/IParticleHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODBASE {
       xAOD::IParticleContainer c1;
@@ -28,79 +26,37 @@ namespace {
       ElementLink< xAOD::IParticleContainer > l3;
       std::vector< ElementLink< xAOD::IParticleContainer > > l4;
       std::vector< std::vector< ElementLink< xAOD::IParticleContainer > > > l5;
+      SG::AuxTypeVectorFactory< DataLink< xAOD::IParticleContainer > > l6;
+      SG::AuxTypeVectorFactory< ElementLink< xAOD::IParticleContainer > > l7;
+      SG::AuxTypeVectorFactory< std::vector< ElementLink< xAOD::IParticleContainer > > > l8;
    };
 }
 
+// Not sure if this line is necessary but it shouldn't hurt...
 template class DataVector<xAOD::IParticle>;
 
-template
-bool& xAOD::IParticle::auxdata< bool >( const std::string& name,
-                                        const std::string& clsname = "" );
-
-template
-float& xAOD::IParticle::auxdata< float >( const std::string& name,
-                                          const std::string& clsname = "" );
-
-template
-int& xAOD::IParticle::auxdata< int >( const std::string& name,
-                                      const std::string& clsname = "" );
-template
-unsigned int&
-xAOD::IParticle::auxdata< unsigned int >( const std::string& name,
-                                          const std::string& clsname = "" );
-
-template
-uint8_t& xAOD::IParticle::auxdata< uint8_t >( const std::string& name,
-                                              const std::string& clsname = "" );
-
-template
-const bool&
-xAOD::IParticle::auxdata< bool >( const std::string& name,
-                                  const std::string& clsname = "" ) const;
-
-template
-const float&
-xAOD::IParticle::auxdata< float >( const std::string& name,
-                                   const std::string& clsname = "" ) const;
-
-template
-const int&
-xAOD::IParticle::auxdata< int >( const std::string& name,
-                                 const std::string& clsname = "" ) const;
-
-template
-const unsigned int&
-xAOD::IParticle::auxdata< unsigned int >( const std::string& name,
-                                          const std::string& clsname = "" ) const;
-
-template
-const uint8_t&
-xAOD::IParticle::auxdata< uint8_t >( const std::string& name,
-                                     const std::string& clsname = "" ) const;
-
-template
-bool
-xAOD::IParticle::isAvailable< bool >( const std::string& name,
-                                      const std::string& clsname = "" ) const;
-
-template
-bool
-xAOD::IParticle::isAvailable< float >( const std::string& name,
-                                       const std::string& clsname = "" ) const;
-
-template
-bool
-xAOD::IParticle::isAvailable< int >( const std::string& name,
-                                     const std::string& clsname = "" ) const;
-
-template
-bool
-xAOD::IParticle::isAvailable< unsigned int >( const std::string& name,
-                                              const std::string& clsname = "" ) const;
-
-template
-bool
-xAOD::IParticle::isAvailable< uint8_t >( const std::string& name,
-                                         const std::string& clsname = "" ) const;
+/// Helper macro for instantiating all the template functions that we need a
+/// dictionary for.
+#define INST_AUXFUNC( TYPE )                                                   \
+   template TYPE&                                                              \
+   xAOD::IParticle::auxdata< TYPE >( const std::string& name,                  \
+                                     const std::string& clsname = "" );        \
+   template const TYPE&                                                        \
+   xAOD::IParticle::auxdata< TYPE >( const std::string& name,                  \
+                                     const std::string& clsname = "" ) const;  \
+   template bool                                                               \
+   xAOD::IParticle::isAvailable< TYPE >( const std::string& name,              \
+                                         const std::string& clsname = "" ) const
+
+// Instantiate the functions for a couple of regularly used types.
+INST_AUXFUNC( bool );
+INST_AUXFUNC( float );
+INST_AUXFUNC( double );
+INST_AUXFUNC( int );
+INST_AUXFUNC( unsigned int );
+INST_AUXFUNC( uint8_t );
+
+// Clean up.
+#undef INST_AUXFUNC
 
 #endif // XAODBASE_XAODBASEDICT_H
diff --git a/Event/xAOD/xAODCore/xAODCore/tools/DictHelpers.h b/Event/xAOD/xAODCore/xAODCore/tools/DictHelpers.h
index b19c04e1bc66f0eb7348f7f49bdb469bd81af783..e8c503b898815ceb6427eae1e0439c975002a192 100644
--- a/Event/xAOD/xAODCore/xAODCore/tools/DictHelpers.h
+++ b/Event/xAOD/xAODCore/xAODCore/tools/DictHelpers.h
@@ -13,4 +13,49 @@
 // System include(s).
 #include <vector>
 
+/// Macro instantiating all the container "interface" and smart pointer types
+/// that we need a dictionary for.
+#define XAOD_INSTANTIATE_CONTAINER_TYPES( TYPE )                               \
+   TYPE dummy_##TYPE##_1;                                                      \
+   DataLink< TYPE > dummy_##TYPE##_2;                                          \
+   ElementLink< TYPE > dummy_##TYPE##_3;                                       \
+   std::vector< DataLink< TYPE > > dummy_##TYPE##_4;                           \
+   std::vector< ElementLink< TYPE > > dummy_##TYPE##_5;                        \
+   std::vector< std::vector< ElementLink< TYPE > > > dummy_##TYPE##_6;         \
+   SG::AuxTypeVectorFactory< DataLink< TYPE > > dummy_##TYPE##_7;              \
+   SG::AuxTypeVectorFactory< ElementLink< TYPE > > dummy_##TYPE##_8;           \
+   SG::AuxTypeVectorFactory< std::vector< ElementLink< TYPE > > >              \
+      dummy_##TYPE##_9
+
+/// Macro instantiating all the container "interface" and smart pointer types
+/// that we need a dictionary for.
+#define XAOD_INSTANTIATE_NS_CONTAINER_TYPES( NS, TYPE )                        \
+   NS::TYPE dummy_##NS##_##TYPE##_1;                                           \
+   DataLink< NS::TYPE > dummy_##NS##_##TYPE##_2;                               \
+   ElementLink< NS::TYPE > dummy_##NS##_##TYPE##_3;                            \
+   std::vector< DataLink< NS::TYPE > > dummy_##NS##_##TYPE##_4;                \
+   std::vector< ElementLink< NS::TYPE > > dummy_##NS##_##TYPE##_5;             \
+   std::vector< std::vector< ElementLink< NS::TYPE > > >                       \
+      dummy_##NS##_##TYPE##_6;                                                 \
+   SG::AuxTypeVectorFactory< DataLink< NS::TYPE > > dummy_##NS##_##TYPE##_7;   \
+   SG::AuxTypeVectorFactory< ElementLink< NS::TYPE > > dummy_##NS##_##TYPE##_8;\
+   SG::AuxTypeVectorFactory< std::vector< ElementLink< NS::TYPE > > >          \
+      dummy_##NS##_##TYPE##_9
+
+/// Macro instantiating all the single object smart pointer types that we need
+/// a dictionary for.
+#define XAOD_INSTANTIATE_OBJECT_TYPES( TYPE )                                  \
+   TYPE dummy_##TYPE##_1;                                                      \
+   DataLink< TYPE > dummy_##TYPE##_2;                                          \
+   std::vector< DataLink< TYPE > > dummy_##TYPE##_3;                           \
+   SG::AuxTypeVectorFactory< DataLink< TYPE > > dummy_##TYPE##_4
+
+/// Macro instantiating all the single object smart pointer types that we need
+/// a dictionary for.
+#define XAOD_INSTANTIATE_NS_OBJECT_TYPES( NS, TYPE )                           \
+   NS::TYPE dummy_##NS##_##TYPE##_1;                                           \
+   DataLink< NS::TYPE > dummy_##NS##_##TYPE##_2;                               \
+   std::vector< DataLink< NS::TYPE > > dummy_##NS##_##TYPE##_3;                \
+   SG::AuxTypeVectorFactory< DataLink< NS::TYPE > > dummy_##NS##_##TYPE##_4
+
 #endif // XAODCORE_TOOLS_DICTHELPERS_H
diff --git a/Event/xAOD/xAODCutFlow/xAODCutFlow/xAODCutFlowDict.h b/Event/xAOD/xAODCutFlow/xAODCutFlow/xAODCutFlowDict.h
index 2de68b28bd85862a9bd25eb7453f123379b4afd2..ed07a009729182bd9474adf251e5b4d4082f67d5 100644
--- a/Event/xAOD/xAODCutFlow/xAODCutFlow/xAODCutFlowDict.h
+++ b/Event/xAOD/xAODCutFlow/xAODCutFlow/xAODCutFlowDict.h
@@ -18,4 +18,12 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODCUTFLOW {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CutBookkeeperContainer_v1 );
+   };
+}
+
 #endif // XAODCUTFLOW_XAODCUTFLOWDICT_H
diff --git a/Event/xAOD/xAODEgamma/Root/EgammaTruthxAODHelpers.cxx b/Event/xAOD/xAODEgamma/Root/EgammaTruthxAODHelpers.cxx
index 0d3506586a3d243b5d929ff76638815ee8f646de..7bafae29c31145972105cc4d174998e6ade3db44 100644
--- a/Event/xAOD/xAODEgamma/Root/EgammaTruthxAODHelpers.cxx
+++ b/Event/xAOD/xAODEgamma/Root/EgammaTruthxAODHelpers.cxx
@@ -15,12 +15,50 @@
 
 // ==================================================================
 
-const xAOD::Electron* xAOD::EgammaHelpers::getRecoElectron(const xAOD::TruthParticle* particle){
-  return getLink<xAOD::Electron>(particle, "recoElectronLink");
+/// Accessor for the "recoElectronLink" dynamic variable
+///
+/// It is declared outside of the @c xAOD::EgammaHelpers::getRecoElectron(...)
+/// call to make sure that the auxiliary ID registry would know about this type
+/// as soon as the library holding this code is loaded.
+///
+static const SG::AuxElement::Accessor< ElementLink< xAOD::ElectronContainer > >
+   recoElectronLinkAcc( "recoElectronLink" );
+
+const xAOD::Electron*
+xAOD::EgammaHelpers::getRecoElectron( const xAOD::TruthParticle* particle ) {
+
+   if( ! recoElectronLinkAcc.isAvailable( *particle ) ) {
+      return nullptr;
+   }
+   const ElementLink< xAOD::ElectronContainer >& link =
+      recoElectronLinkAcc( *particle );
+   if( ! link.isValid() ) {
+      return nullptr;
+   }
+   return *link;
 }
 
-const xAOD::Photon* xAOD::EgammaHelpers::getRecoPhoton(const xAOD::TruthParticle* particle){
-  return getLink<xAOD::Photon>(particle, "recoPhotonLink");
+/// Accessor for the "recoPhotonLink" dynamic variable
+///
+/// It is declared outside of the @c xAOD::EgammaHelpers::getRecoPhoton(...)
+/// call to make sure that the auxiliary ID registry would know about this type
+/// as soon as the library holding this code is loaded.
+///
+static const SG::AuxElement::Accessor< ElementLink< xAOD::PhotonContainer > >
+   recoPhotonLinkAcc( "recoPhotonLink" );
+
+const xAOD::Photon*
+xAOD::EgammaHelpers::getRecoPhoton( const xAOD::TruthParticle* particle ) {
+
+   if( ! recoPhotonLinkAcc.isAvailable( *particle ) ) {
+      return nullptr;
+   }
+   const ElementLink< xAOD::PhotonContainer >& link =
+      recoPhotonLinkAcc( *particle );
+   if( ! link.isValid() ) {
+      return nullptr;
+   }
+   return *link;
 }
 // ==================================================================
 
diff --git a/Event/xAOD/xAODEgamma/Root/Egamma_v1.cxx b/Event/xAOD/xAODEgamma/Root/Egamma_v1.cxx
index 32ef4d44e6252e30783f2ca3e805401e63dd98cb..9f5c2e0304077bd374354b6e98220d7dbe734bbe 100644
--- a/Event/xAOD/xAODEgamma/Root/Egamma_v1.cxx
+++ b/Event/xAOD/xAODEgamma/Root/Egamma_v1.cxx
@@ -2,8 +2,6 @@
   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
-// $Id: Egamma_v1$
-
 // EDM include(s):
 #include "xAODCore/AuxStoreAccessorMacros.h"
 // Local include(s):
@@ -183,13 +181,26 @@ void Egamma_v1::setAuthor(uint16_t newAuthor) {
   acc(*this) = newAuthor;
 }
 
+/// Accessor for the "ambiguityLink" dynamic variable
+///
+/// It is declared outside of the @c xAOD::Egamma_v1::ambiguousObject() call to
+/// make sure that the auxiliary ID registry would know about this type as soon
+/// as the library holding this code is loaded.
+///
+static const SG::AuxElement::Accessor< ElementLink< xAOD::EgammaContainer > >
+   ambiguityLinkAcc( "ambiguityLink" );
+
 /// ambiguous
-const Egamma_v1* Egamma_v1::ambiguousObject() const{
-  static const SG::AuxElement::Accessor<ElementLink<xAOD::EgammaContainer> > acc("ambiguityLink");
-  if(acc.isAvailable(*this) && acc(*this).isValid()){
-    return (*acc(*this));
-  }
-  return nullptr;
+const Egamma_v1* Egamma_v1::ambiguousObject() const {
+
+   if( ! ambiguityLinkAcc.isAvailable( *this ) ) {
+      return nullptr;
+   }
+   const ElementLink< xAOD::EgammaContainer >& link = ambiguityLinkAcc( *this );
+   if( ! link.isValid() ) {
+      return nullptr;
+   }
+   return *link;
 }
 
 
diff --git a/Event/xAOD/xAODEventShape/xAODEventShape/xAODEventShapeDict.h b/Event/xAOD/xAODEventShape/xAODEventShape/xAODEventShapeDict.h
index 76b2cacf40e77a76cf75293643dca40dbfe84af6..640ade665ee303a2de4842420d2148bb46b637bf 100644
--- a/Event/xAOD/xAODEventShape/xAODEventShape/xAODEventShapeDict.h
+++ b/Event/xAOD/xAODEventShape/xAODEventShape/xAODEventShapeDict.h
@@ -14,4 +14,12 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODEVENTSHAPE {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_OBJECT_TYPES( xAOD, EventShape_v1 );
+   };
+}
+
 #endif // XAODEVENTSHAPE_XAODEVENTSHAPEDICT_H
diff --git a/Event/xAOD/xAODForward/xAODForward/xAODForwardDict.h b/Event/xAOD/xAODForward/xAODForward/xAODForwardDict.h
index 8ff5083ab832a6493019fb88c2983190a7972316..db909621bc8c091c2dc5b219a616a3e0d8f40b5f 100644
--- a/Event/xAOD/xAODForward/xAODForward/xAODForwardDict.h
+++ b/Event/xAOD/xAODForward/xAODForward/xAODForwardDict.h
@@ -75,4 +75,30 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODFORWARD {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPDataContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPToFHitContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPSiHitContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPSiHitContainer_v2 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPSiHitsClusterContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPTrackContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPTrackContainer_v2 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, AFPProtonContainer_v1 );
+
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, ALFADataContainer_v1 );
+
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, ZdcModuleContainer_v1 );
+
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MBTSModuleContainer_v1 );
+
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, ForwardEventInfoContainer_v1 );
+
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TriggerTowerContainer );
+   };
+}
+
 #endif // XAODFORWARD_XAODFORWARDDICT_H
diff --git a/Event/xAOD/xAODHIEvent/xAODHIEvent/xAODHIEventDict.h b/Event/xAOD/xAODHIEvent/xAODHIEvent/xAODHIEventDict.h
index 922dd5699368fd6970e647594d1f48b73d4be582..f6288ac13b686da730e3861efd2d16b362ae1791 100644
--- a/Event/xAOD/xAODHIEvent/xAODHIEvent/xAODHIEventDict.h
+++ b/Event/xAOD/xAODHIEvent/xAODHIEvent/xAODHIEventDict.h
@@ -19,4 +19,13 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODHIEVENT {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, HIEventShapeContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, HIEventShapeContainer_v2 );
+   };
+}
+
 #endif // XAODEVENTINFO_XAODEVENTINFODICT_H
diff --git a/Event/xAOD/xAODLuminosity/xAODLuminosity/xAODLuminosityDict.h b/Event/xAOD/xAODLuminosity/xAODLuminosity/xAODLuminosityDict.h
index 848d3e12ee60303a1e38a1e4658ac0298550bb3e..ec088d2927c7219716f9f2bea29ca1ee53014cbf 100644
--- a/Event/xAOD/xAODLuminosity/xAODLuminosity/xAODLuminosityDict.h
+++ b/Event/xAOD/xAODLuminosity/xAODLuminosity/xAODLuminosityDict.h
@@ -23,4 +23,13 @@
 // EDM include(s).
 #include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODLUMINOSITY {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, BCMRawDataContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, LumiBlockRangeContainer_v1 );
+   };
+}
+
 #endif // XAODLUMINOSITY_XAODLUMINOSITYDICT_H
diff --git a/Event/xAOD/xAODMetaData/CMakeLists.txt b/Event/xAOD/xAODMetaData/CMakeLists.txt
index a64542e880812cf5b58d7324d29fad1ed95015d0..f77376ca1b5f729c340a7ac9b95cf18173de94ed 100644
--- a/Event/xAOD/xAODMetaData/CMakeLists.txt
+++ b/Event/xAOD/xAODMetaData/CMakeLists.txt
@@ -1,31 +1,28 @@
-# $Id: CMakeLists.txt 761521 2016-07-13 07:27:10Z krasznaa $
-################################################################################
-# Package: xAODMetaData
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODMetaData )
 
-find_package( ROOT )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Event/xAOD/xAODCore )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODMetaData
    xAODMetaData/*.h xAODMetaData/version/*.h Root/*.h Root/*.cxx
    PUBLIC_HEADERS xAODMetaData
    LINK_LIBRARIES AthContainers xAODCore )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODMetaData/selection.xml
+   OUTPUT _selectionFile
+   OBJECTS "xAOD::FileMetaData_v1" )
+
 atlas_add_dictionary( xAODMetaDataDict
    xAODMetaData/xAODMetaDataDict.h
-   xAODMetaData/selection.xml
-   LINK_LIBRARIES ${ROOT_LIBRARIES} xAODMetaData )
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODMetaData )
 
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( ut_xAODFileMetaData_MetaDataType_test
    SOURCES test/ut_xAODFileMetaData_MetaDataType_test.cxx
    LINK_LIBRARIES xAODMetaData )
@@ -34,5 +31,5 @@ atlas_add_test( ut_xaodmetadata_filemetadata_eq_test
    SOURCES test/ut_xaodmetadata_filemetadata_eq_test.cxx
    LINK_LIBRARIES xAODMetaData )
 
-# Generate CLIDs from the library:
+# Generate CLIDs from the library.
 atlas_generate_cliddb( xAODMetaData )
diff --git a/Event/xAOD/xAODMetaData/xAODMetaData/selection.xml b/Event/xAOD/xAODMetaData/xAODMetaData/selection.xml
index aa2342c6d0000f9e1ce82932bf190f1dc656714e..95134b98a4074104da607162d5fb4269ad054155 100644
--- a/Event/xAOD/xAODMetaData/xAODMetaData/selection.xml
+++ b/Event/xAOD/xAODMetaData/xAODMetaData/selection.xml
@@ -1,10 +1,14 @@
-<!-- $Id: selection.xml 670157 2015-05-27 11:52:51Z krasznaa $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- FileMetaData_v1 dictionaries: -->
-  <class name="xAOD::FileMetaData_v1"
-         id="C87E3828-4A7A-480A-95DE-0339539F6A0F" />
-  <class name="xAOD::FileMetaDataAuxInfo_v1"
-         id="BEE2BECF-A936-4078-9FDD-AD703C9ADF9F" />
+  <!-- xAOD::FileMetaData interface type(s). -->
+   <class name="xAOD::FileMetaData_v1"
+          id="C87E3828-4A7A-480A-95DE-0339539F6A0F" />
+   <typedef name="xAOD::FileMetaData" />
+
+   <!-- xAOD::FileMetaData auxiliary type(s). -->
+   <class name="xAOD::FileMetaDataAuxInfo_v1"
+          id="BEE2BECF-A936-4078-9FDD-AD703C9ADF9F" />
+   <typedef name="xAOD::FileMetaDataAuxInfo" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODMetaData/xAODMetaData/xAODMetaDataDict.h b/Event/xAOD/xAODMetaData/xAODMetaData/xAODMetaDataDict.h
index 4a802bad686ff48c697c2d4591b4a7ecba273589..181101e08b0b66b8d0ea7c06d53e2907ecadfafd 100644
--- a/Event/xAOD/xAODMetaData/xAODMetaData/xAODMetaDataDict.h
+++ b/Event/xAOD/xAODMetaData/xAODMetaData/xAODMetaDataDict.h
@@ -1,15 +1,25 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODMetaDataDict.h 670157 2015-05-27 11:52:51Z krasznaa $
 #ifndef XAODMETADATA_XAODMETADATADICT_H
 #define XAODMETADATA_XAODMETADATADICT_H
 
-// Local include(s):
+// Local include(s).
+#include "xAODMetaData/FileMetaData.h"
+#include "xAODMetaData/FileMetaDataAuxInfo.h"
 #include "xAODMetaData/versions/FileMetaData_v1.h"
 #include "xAODMetaData/versions/FileMetaDataAuxInfo_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODMETADATA {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_OBJECT_TYPES( xAOD, FileMetaData_v1 );
+   };
+}
+
 #endif // XAODMETADATA_XAODMETADATADICT_H
diff --git a/Event/xAOD/xAODMuon/CMakeLists.txt b/Event/xAOD/xAODMuon/CMakeLists.txt
index dc635487f80095c1983ed1e77fb0a534a382267b..daa84f6143f87e7836bb2ba05119fbb3059a998e 100644
--- a/Event/xAOD/xAODMuon/CMakeLists.txt
+++ b/Event/xAOD/xAODMuon/CMakeLists.txt
@@ -1,51 +1,40 @@
-# $Id: CMakeLists.txt 790886 2016-12-22 22:03:35Z ssnyder $
-################################################################################
-# Package: xAODMuon
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODMuon )
 
-# Extra dependencies, based on the build environment:
+# External dependencies.
+find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
+
+# Extra dependencies, based on the build environment.
+set( extra_libs )
 if( NOT XAOD_ANALYSIS AND NOT GENERATIONBASE )
-   set( extra_deps Tracking/TrkEvent/TrkSegment )
    set( extra_libs TrkSegment )
 endif()
 
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs ${extra_libs} GenVector )
-    endif()
-endif()
-
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCaloEvent
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODPrimitives
-   Event/xAOD/xAODTracking
-   MuonSpectrometer/MuonStationIndex
-   ${extra_deps} )
-
-find_package( ROOT COMPONENTS Core GenVector )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODMuon
    xAODMuon/*.h xAODMuon/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODMuon
-   LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCaloEvent xAODCore
-   xAODPrimitives xAODTracking MuonStationIndexLib ${extra_libs} )
+   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+   LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase
+   xAODCaloEvent xAODCore xAODPrimitives xAODTracking MuonStationIndexLib
+   ${extra_libs} )
+
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODMuon/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::MuonContainer_v1" "xAOD::MuonSegmentContainer_v1"
+              "xAOD::SlowMuonContainer_v1" )
 
 atlas_add_dictionary( xAODMuonDict
    xAODMuon/xAODMuonDict.h
-   xAODMuon/selection.xml
-   LINK_LIBRARIES xAODMuon
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODMuon
    EXTRA_FILES Root/dict/*.cxx )
 
+# Test(s) in the package.
 atlas_add_test( xAODMuon_Muon_test
    SOURCES test/xAODMuon_Muon_test.cxx
    LINK_LIBRARIES xAODMuon )
diff --git a/Event/xAOD/xAODMuon/xAODMuon/selection.xml b/Event/xAOD/xAODMuon/xAODMuon/selection.xml
index e68fa1c1886dbce46492e203fc94bcfbda166a02..f20f4d6521c43de6cb5cd5e74a1f25f3ec9ca199 100644
--- a/Event/xAOD/xAODMuon/xAODMuon/selection.xml
+++ b/Event/xAOD/xAODMuon/xAODMuon/selection.xml
@@ -1,82 +1,48 @@
-<?xml version="1.0"?>
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- MuonAux _v2 dictionaries: -->
-  <class name="xAOD::MuonAuxContainer_v2"
-         id="AB53C81C-B10C-11E4-AC59-6C3BE51AB9F1"/>
-  
-  <!-- MuonAux _v3 dictionaries: -->
-  <class name="xAOD::MuonAuxContainer_v3"
-                id="ECC65005-302B-4662-ACBA-D2CE5A0218B8"/>
-
-  <!-- MuonAux _v4 dictionaries: -->
-  <class name="xAOD::MuonAuxContainer_v4"
-	 id="8251F481-EA4C-4852-AE72-BED87E6FD2FB"/>
-
-  <!-- MuonAux _v5 dictionaries: -->
-  <class name="xAOD::MuonAuxContainer_v5"
-	 id="9245FA19-1552-4BBB-8CC3-57224E57A466"/>
-
-  <!-- Muon_v1 dictionaries: -->
-  <class name="xAOD::Muon_v1" />
-  <class name="xAOD::MuonContainer_v1"
-         id="F84AE51A-F309-4844-B286-8E94C655B724"/>
-
-  <class name="xAOD::MuonAuxContainer_v1"
-         id="EC9B677A-B3BA-4C75-87D3-373FC478291E"/>
-
-  <!-- All smart pointer dictionaries for xAOD::Muon v1-->
-  <class name="DataLink<xAOD::MuonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::MuonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::MuonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::MuonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::MuonContainer_v1> > >" />
-
-
-
-  <!-- MuonSegment_v1 dictionaries -->
-  <class name="xAOD::MuonSegment_v1"/>
-  <class name="xAOD::MuonSegmentAuxContainer_v1"
-         id="51739E92-98A5-11E3-B7F4-6C3BE51AB9F1"/>
-  <class name="xAOD::MuonSegmentContainer_v1"
-         id="9516C67E-98A5-11E3-BDFD-6C3BE51AB9F1"/>
-
-  <!-- All smart pointer dictionaries for xAOD::MuonSegment -->
-  <class name="DataLink<xAOD::MuonSegmentContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::MuonSegmentContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::MuonSegmentContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::MuonSegmentContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::MuonSegmentContainer_v1> > >" />
-
-  <!-- SlowMuon_v1 dictionaries -->
-  <class name="xAOD::SlowMuon_v1"/>
-  <class name="xAOD::SlowMuonAuxContainer_v1"
-         id="B0B4F66B-C261-4403-AB96-D71249A9CDEC"/>
-  <class name="xAOD::SlowMuonContainer_v1"
-         id="78E011F9-AD91-40A8-95E9-E288A5A583FE"/>
-
-  <!-- All smart pointer dictionaries for xAOD::SlowMuon -->
-  <class name="DataLink<xAOD::SlowMuonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::SlowMuonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::SlowMuonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::SlowMuonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::SlowMuonContainer_v1> > >" />
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class pattern="xAOD::TrackParticle*" />
-    <class pattern="DataVector<xAOD::TrackParticle*" />
-    <class pattern="ElementLink<DataVector<xAOD::TrackParticle*" />
-    <class pattern="xAOD::CaloCluster*" />
-    <class pattern="DataVector<xAOD::CaloCluster*" />
-    <class pattern="ElementLink<DataVector<xAOD::CaloCluster*" />
-  </exclusion>
+   <!-- xAOD::Muon interface type(s). -->
+   <class name="xAOD::Muon_v1" />
+   <class name="xAOD::MuonContainer_v1"
+          id="F84AE51A-F309-4844-B286-8E94C655B724" />
+   <typedef name="xAOD::Muon" />
+   <typedef name="xAOD::MuonContainer" />
+
+   <!-- xAOD::Muon auxiliary type(s). -->
+   <class name="xAOD::MuonAuxContainer_v1"
+          id="EC9B677A-B3BA-4C75-87D3-373FC478291E" />
+   <class name="xAOD::MuonAuxContainer_v2"
+          id="AB53C81C-B10C-11E4-AC59-6C3BE51AB9F1" />
+   <class name="xAOD::MuonAuxContainer_v3"
+          id="ECC65005-302B-4662-ACBA-D2CE5A0218B8" />
+   <class name="xAOD::MuonAuxContainer_v4"
+          id="8251F481-EA4C-4852-AE72-BED87E6FD2FB" />
+   <class name="xAOD::MuonAuxContainer_v5"
+          id="9245FA19-1552-4BBB-8CC3-57224E57A466" />
+   <typedef name="xAOD::MuonAuxContainer" />
+
+   <!-- xAOD::MuonSegment interfac type(s). -->
+   <class name="xAOD::MuonSegment_v1"/>
+   <class name="xAOD::MuonSegmentContainer_v1"
+          id="9516C67E-98A5-11E3-BDFD-6C3BE51AB9F1" />
+   <typedef name="xAOD::MuonSegment" />
+   <typedef name="xAOD::MuonSegmentContainer" />
+
+   <!-- xAOD::MuonSegment auxiliary type(s). -->
+   <class name="xAOD::MuonSegmentAuxContainer_v1"
+          id="51739E92-98A5-11E3-B7F4-6C3BE51AB9F1" />
+   <typedef name="xAOD::MuonSegmentAuxContainer" />
+
+   <!-- xAOD::SlowMuon interface type(s). -->
+   <class name="xAOD::SlowMuon_v1" />
+   <class name="xAOD::SlowMuonContainer_v1"
+          id="78E011F9-AD91-40A8-95E9-E288A5A583FE" />
+   <typedef name="xAOD::SlowMuon" />
+   <typedef name="xAOD::SlowMuonContainer" />
+
+   <!-- xAOD::SlowMuon auxiliary type(s). -->
+   <class name="xAOD::SlowMuonAuxContainer_v1"
+          id="B0B4F66B-C261-4403-AB96-D71249A9CDEC" />
+   <typedef name="xAOD::SlowMuonAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODMuon/xAODMuon/versions/MuonSegment_v1.h b/Event/xAOD/xAODMuon/xAODMuon/versions/MuonSegment_v1.h
index 8547ba1c8c2c3745285e11758a453f194f93b0ab..b86a2baeec48939cb2ed57df49f9ca238c0ceffb 100644
--- a/Event/xAOD/xAODMuon/xAODMuon/versions/MuonSegment_v1.h
+++ b/Event/xAOD/xAODMuon/xAODMuon/versions/MuonSegment_v1.h
@@ -1,7 +1,7 @@
+// Dear emacs, this is -*- c++ -*-
 /*
   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef XAODMUON_VERSIONS_MUONSEGMENT_V1_H
 #define XAODMUON_VERSIONS_MUONSEGMENT_V1_H
 
@@ -33,7 +33,7 @@ namespace xAOD {
   class MuonSegment_v1 : public SG::AuxElement {
 
   public:
-    
+
     /// Default constructor
     MuonSegment_v1();
 
@@ -84,22 +84,22 @@ namespace xAOD {
     /// Set the 'Fit Quality' information.
     void setFitQuality(float chiSquared, float numberDoF);
     /// @}
-    
-    /// @name Identification 
+
+    /// @name Identification
 	/// The general muon identification scheme is defined here: https://cds.cern.ch/record/681542/files/com-muon-2002-019.pdf
     /// @{
     /// Returns the sector number
     int sector() const;
     /// Returns the chamber index
-    Muon::MuonStationIndex::ChIndex chamberIndex() const;
+    ::Muon::MuonStationIndex::ChIndex chamberIndex() const;
     /// Returns the eta index, which corresponds to stationEta in the offline identifiers (and the ).
     int etaIndex() const;
     /// Returns the main technology of the segment.
-    Muon::MuonStationIndex::TechnologyIndex technology() const;
+    ::Muon::MuonStationIndex::TechnologyIndex technology() const;
     /// Set the identifier
-    void setIdentifier(int sector, Muon::MuonStationIndex::ChIndex chamberIndex, int etaIndex, Muon::MuonStationIndex::TechnologyIndex technology);
-    /// @}    
-    
+    void setIdentifier(int sector, ::Muon::MuonStationIndex::ChIndex chamberIndex, int etaIndex, ::Muon::MuonStationIndex::TechnologyIndex technology);
+    /// @}
+
     /// @name Hit counts functions
     /// Returns the number of hits
     /// @{
@@ -113,7 +113,7 @@ namespace xAOD {
     void setNHits(int nPrecisionHits, int nPhiLayers, int nTrigEtaLayers);
     /// @}
 
-#if !(defined(GENERATIONBASE) || defined(XAOD_ANALYSIS))        
+#if !(defined(GENERATIONBASE) || defined(XAOD_ANALYSIS))
     const ElementLink< ::Trk::SegmentCollection >& muonSegment() const;
     void setMuonSegment(const ElementLink< ::Trk::SegmentCollection >& segment);
 #endif
diff --git a/Event/xAOD/xAODMuon/xAODMuon/xAODMuonDict.h b/Event/xAOD/xAODMuon/xAODMuon/xAODMuonDict.h
index e6f21d8ea9445ccdbd58753913a988b50a3eaf28..9cacffd24dda749e4c6c5f2bd95c7cff9602b946 100644
--- a/Event/xAOD/xAODMuon/xAODMuon/xAODMuonDict.h
+++ b/Event/xAOD/xAODMuon/xAODMuon/xAODMuonDict.h
@@ -1,75 +1,53 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef XAODMUON_XAODMUONDICT_H
 #define XAODMUON_XAODMUONDICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-# ifndef EIGEN_DONT_VECTORIZE
-#   define EIGEN_DONT_VECTORIZE
-# endif
-#endif // __GCCXML__
- 
-// Local include(s):
-
+// Local include(s).
+#include "xAODMuon/Muon.h"
+#include "xAODMuon/MuonContainer.h"
+#include "xAODMuon/MuonAuxContainer.h"
+#include "xAODMuon/versions/Muon_v1.h"
 #include "xAODMuon/versions/MuonContainer_v1.h"
 #include "xAODMuon/versions/MuonAuxContainer_v1.h"
 #include "xAODMuon/versions/MuonAuxContainer_v2.h"
 #include "xAODMuon/versions/MuonAuxContainer_v3.h"
 #include "xAODMuon/versions/MuonAuxContainer_v4.h"
 #include "xAODMuon/versions/MuonAuxContainer_v5.h"
-#include "xAODMuon/MuonContainer.h"
-#include "xAODMuon/MuonAuxContainer.h"
+
+#include "xAODMuon/MuonSegment.h"
 #include "xAODMuon/MuonSegmentContainer.h"
 #include "xAODMuon/MuonSegmentAuxContainer.h"
+#include "xAODMuon/versions/MuonSegment_v1.h"
+#include "xAODMuon/versions/MuonSegmentContainer_v1.h"
+#include "xAODMuon/versions/MuonSegmentAuxContainer_v1.h"
+
+#include "xAODMuon/SlowMuon.h"
 #include "xAODMuon/SlowMuonContainer.h"
 #include "xAODMuon/SlowMuonAuxContainer.h"
+#include "xAODMuon/versions/SlowMuon_v1.h"
+#include "xAODMuon/versions/SlowMuonContainer_v1.h"
+#include "xAODMuon/versions/SlowMuonAuxContainer_v1.h"
 
 // EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-#if !(defined(GENERATIONBASE) || defined(XAOD_ANALYSIS))
-#include "TrkSegment/SegmentCollection.h"
-#endif // not XAOD_ANALYSIS or GENERATIONBASE
+#include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODMUON {
-      // Classes in this package
-     xAOD::MuonContainer                                                       c1;
-      xAOD::MuonSegmentContainer                                               c2;
-      xAOD::SlowMuonContainer                                                  c4;
-      // Links for Muon
-      DataLink< xAOD::MuonContainer >                                          l1;
-      ElementLink< xAOD::MuonContainer >                                       l2;
-      std::vector< DataLink< xAOD::MuonContainer > >                           l3;
-      std::vector< ElementLink< xAOD::MuonContainer > >                        l4;
-      std::vector< std::vector< ElementLink< xAOD::MuonContainer > > >         l5;
-      // Segments
-      DataLink< xAOD::MuonSegmentContainer >                                      l6;
-      ElementLink< xAOD::MuonSegmentContainer >                                   l7;
-      std::vector< DataLink< xAOD::MuonSegmentContainer > >                       l8;
-      std::vector< ElementLink< xAOD::MuonSegmentContainer > >                    l9;
-      std::vector< std::vector< ElementLink< xAOD::MuonSegmentContainer > > >    l10;
-      // Slow Muons
-      DataLink< xAOD::SlowMuonContainer >                                        l11;
-      ElementLink< xAOD::SlowMuonContainer >                                     l12;
-      std::vector< DataLink< xAOD::SlowMuonContainer > >                         l13;
-      std::vector< ElementLink< xAOD::SlowMuonContainer > >                      l14;
-      std::vector< std::vector< ElementLink< xAOD::SlowMuonContainer > > >       l15;
-      // Instantiations of links used by this package
-      ElementLink< xAOD::CaloClusterContainer >                                   i1;
-      ElementLink< xAOD::TrackParticleContainer >                                 i2;
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MuonContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MuonSegmentContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, SlowMuonContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CaloClusterContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
 #if !(defined(GENERATIONBASE) || defined(XAOD_ANALYSIS))
       // These lines are still needed in order for Reflex to see the
       // member variable of xAOD::MuonSegmentAuxContainer_v1 correctly.
-      Trk::SegmentCollection                                                      c3;
-      ElementLink< Trk::SegmentCollection >                                       i3;
-      std::vector<ElementLink< Trk::SegmentCollection > >                         i4;
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( Trk, SegmentCollection );
 #endif // not (defined(GENERATIONBASE) || defined(XAOD_ANALYSIS))
    };
 }
diff --git a/Event/xAOD/xAODPFlow/CMakeLists.txt b/Event/xAOD/xAODPFlow/CMakeLists.txt
index 9c385b524b23d786f05ff8c61a5b1474a9ca4624..c230887d74cc90e39d6fd476be623432c5b5b2ab 100644
--- a/Event/xAOD/xAODPFlow/CMakeLists.txt
+++ b/Event/xAOD/xAODPFlow/CMakeLists.txt
@@ -1,30 +1,11 @@
-# $Id: CMakeLists.txt 744541 2016-05-03 15:55:30Z krasznaa $
-################################################################################
-# Package: xAODPFlow
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODPFlow )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCaloEvent
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODTracking )
-
-# External dependencies:
-find_package( ROOT COMPONENTS Core Physics GenVector)
-
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
+# External dependencies.
+find_package( ROOT COMPONENTS Core Physics GenVector )
+find_package( xAODUtilities )
 
 # Component(s) in the package:
 atlas_add_library( xAODPFlow
@@ -32,10 +13,15 @@ atlas_add_library( xAODPFlow
    PUBLIC_HEADERS xAODPFlow
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase
-   xAODCaloEvent xAODCore xAODTracking ${extra_libs} )
+   xAODCaloEvent xAODCore xAODTracking )
+
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODPFlow/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::PFOContainer_v1" "xAOD::TrackCaloClusterContainer_v1" )
 
 atlas_add_dictionary( xAODPFlowDict
    xAODPFlow/xAODPFlowDict.h
-   xAODPFlow/selection.xml
-   LINK_LIBRARIES xAODPFlow
+   ${_selectionFile}
+   LINK_LIBRARIES AthLinks xAODCore xAODPFlow
    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODPFlow/xAODPFlow/selection.xml b/Event/xAOD/xAODPFlow/xAODPFlow/selection.xml
index c5a81b4c6e7339a704d0457a76588bbdfab964f6..3aeaf198bd1b976c36bc640a2b98ac67410f2c56 100644
--- a/Event/xAOD/xAODPFlow/xAODPFlow/selection.xml
+++ b/Event/xAOD/xAODPFlow/xAODPFlow/selection.xml
@@ -1,58 +1,38 @@
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- PFO_v1 dictionaries: -->
-  <class name="xAOD::PFO_v1" />
-
-  <class name="xAOD::PFOContainer_v1"
-         id="476378BF-054D-499E-9CC9-000F501B30F2" />
-
-  <class name="xAOD::PFOAuxContainer_v1"
-         id="F691F845-4A3D-466A-9187-FED7837D9372" />
-  
-  <!-- TrackCaloCluster_v1 dictionaries: -->
-  <class name="xAOD::TrackCaloCluster_v1" />
-  
-  <class name="xAOD::TrackCaloClusterAuxContainer_v1"
-         id="E3492C37-2469-4346-BCBA-7A18CACD46AC"/>
-  <class name="xAOD::TrackCaloClusterContainer_v1"
-         id="84C52180-1AC0-4877-BAD3-B5C7A71F9125"/>
-
-  <!-- Link types pointing at clusters: -->
-  <class name="DataLink<xAOD::PFOContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::PFOContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::PFOContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::PFOContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::PFOContainer_v1> > >" />
-
-  <class name="ElementLink<xAOD::IParticleContainer>" />
-  <class name="std::vector< ElementLink<xAOD::IParticleContainer> >" />
-  <class name="std::vector<std::vector< ElementLink<xAOD::IParticleContainer> > >" />
-    
-  <enum pattern="xAOD::PFODetails::*" />
-  <class name="std::vector<xAOD::PFODetails::PFOLeptonType>" />
-
-  <!-- All smart pointer dictionaries for xAOD::IParticle -->
-  <class name="DataLink<xAOD::TrackCaloClusterContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TrackCaloClusterContainer_v1> >" />
- 
-  <class name="ElementLink<xAOD::TrackCaloClusterContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrackCaloClusterContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrackCaloClusterContainer_v1> > >" />
-
-  <!-- Extra types needed -->
-  <class name="std::pair<ElementLink<DataVector<xAOD::CaloCluster_v1> >,double>" />
-  <class name="std::vector<std::vector<std::pair<ElementLink<DataVector<xAOD::CaloCluster_v1> >,double> > >" />
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class name="ElementLink<DataVector<xAOD::IParticle> >" />
-    <class pattern="xAOD::Vertex*" />
-    <class pattern="DataVector<xAOD::Vertex*" />
-    <class pattern="ElementLink<DataVector<xAOD::Vertex*" />
-  </exclusion>
+   <!-- xAOD::PFO interface type(s). -->
+   <class name="xAOD::PFO_v1" />
+   <class name="xAOD::PFOContainer_v1"
+          id="476378BF-054D-499E-9CC9-000F501B30F2" />
+   <typedef name="xAOD::PFO" />
+   <typedef name="xAOD::PFOContainer" />
+
+   <!-- xAOD::PFO auxiliary type(s). -->
+   <class name="xAOD::PFOAuxContainer_v1"
+          id="F691F845-4A3D-466A-9187-FED7837D9372" />
+   <typedef name="xAOD::PFOAuxContainer" />
+
+   <!-- xAOD::TrackCaloCluster interface type(s). -->
+   <class name="xAOD::TrackCaloCluster_v1" />
+   <class name="xAOD::TrackCaloClusterContainer_v1"
+          id="84C52180-1AC0-4877-BAD3-B5C7A71F9125"/>
+   <typedef name="xAOD::TrackCaloCluster" />
+   <typedef name="xAOD::TrackCaloClusterContainer" />
+
+   <!-- xAOD::TrackCaloCluster auxiliary type(s). -->
+   <class name="xAOD::TrackCaloClusterAuxContainer_v1"
+          id="E3492C37-2469-4346-BCBA-7A18CACD46AC"/>
+   <typedef name="xAOD::TrackCaloClusterAuxContainer" />
+
+   <!-- Other type(s). -->
+   <enum pattern="xAOD::PFODetails::*" />
+
+   <!-- Weird/bad types used by the PFO reconstruction as attributes on -->
+   <!-- xAOD::PFO objects. :-( -->
+   <class name="std::pair<ElementLink<xAOD::CaloClusterContainer_v1>,double>" />
+   <class name="std::vector<std::pair<ElementLink<xAOD::CaloClusterContainer_v1>,double> >" />
+   <class name="std::vector<std::vector<std::pair<ElementLink<xAOD::CaloClusterContainer_v1>,double> > >" />
+   <class name="std::vector<xAOD::PFODetails::PFOLeptonType>" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODPFlow/xAODPFlow/xAODPFlowDict.h b/Event/xAOD/xAODPFlow/xAODPFlow/xAODPFlowDict.h
index b12e786c55d1975bb7360229c9cf33c7f201f459..1d8ff5a619cdedd614fd0f97babaad81dd21db60 100644
--- a/Event/xAOD/xAODPFlow/xAODPFlow/xAODPFlowDict.h
+++ b/Event/xAOD/xAODPFlow/xAODPFlow/xAODPFlowDict.h
@@ -1,58 +1,51 @@
+// Dear emacs, this is -*- c++ -*-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-/* Class to set what goes in the dictionary  - authors M. Hodgkinson amd M. Janus */
-
 #ifndef XAODPFLOW_XAODPFODICT_H
 #define XAODPFLOW_XAODPFODICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
 // Local include(s):
+#include "xAODPFlow/PFO.h"
 #include "xAODPFlow/PFOContainer.h"
 #include "xAODPFlow/PFOAuxContainer.h"
+#include "xAODPFlow/versions/PFO_v1.h"
 #include "xAODPFlow/versions/PFOContainer_v1.h"
 #include "xAODPFlow/versions/PFOAuxContainer_v1.h"
+
+#include "xAODPFlow/TrackCaloCluster.h"
+#include "xAODPFlow/TrackCaloClusterContainer.h"
+#include "xAODPFlow/TrackCaloClusterAuxContainer.h"
+#include "xAODPFlow/versions/TrackCaloCluster_v1.h"
 #include "xAODPFlow/versions/TrackCaloClusterContainer_v1.h"
 #include "xAODPFlow/versions/TrackCaloClusterAuxContainer_v1.h"
+
 #include "xAODPFlow/PFODefs.h"
 
-namespace {
-  struct GCCXML_DUMMY_INSTANTIATION_XAODPFLOW {
-    xAOD::PFOContainer_v1                                                           c1;
-    DataLink< xAOD::PFOContainer_v1 >                                               l1;
-    ElementLink< xAOD::PFOContainer_v1 >                                            l2;
-    std::vector< DataLink< xAOD::PFOContainer_v1 > >                                l4;
-    std::vector< ElementLink< xAOD::PFOContainer_v1 > >                             l5;
-    std::vector< std::vector< ElementLink< xAOD::PFOContainer_v1 > > >              l6;
-                                                                                    
-    xAOD::IParticleContainer                                                        c2;
-    ElementLink< xAOD::IParticleContainer >                                         l8;
-    std::vector< ElementLink<xAOD::IParticleContainer > >                           l9;
-    std::vector< std::vector< ElementLink<xAOD::IParticleContainer > > >            l10;
-    std::vector< xAOD::PFODetails::PFOLeptonType >                                  l11;
-    ElementLink< xAOD::VertexContainer >                                            l12;
-    
-    xAOD::TrackCaloClusterContainer_v1                                              c3;
-    DataLink< xAOD::TrackCaloClusterContainer_v1 >                                  l13;
-    std::vector< DataLink< xAOD::TrackCaloClusterContainer_v1 > >                   l14;
-    ElementLink< xAOD::TrackCaloClusterContainer_v1 >                               l15;
-    std::vector< ElementLink< xAOD::TrackCaloClusterContainer_v1 > >                l16;
-    std::vector< std::vector< ElementLink< xAOD::TrackCaloClusterContainer_v1 > > > l17;
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+#include "AthLinks/ElementLink.h"
 
-    std::vector<std::vector<std::pair<ElementLink<DataVector<xAOD::CaloCluster_v1> >,double> > > l18;
-    
+// System include(s).
+#include <utility>
+#include <vector>
+
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODFLOW {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, PFOContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackCaloClusterContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, IParticleContainer );
+      // Weird/bad types used by the PFO reconstruction as attributes on
+      // xAOD::PFO objects. :-(
+      std::pair< ElementLink< xAOD::CaloClusterContainer >, double > dummy1;
+      std::vector< std::pair< ElementLink< xAOD::CaloClusterContainer >, double > >
+         dummy2;
+      std::vector< std::vector< std::pair< ElementLink< xAOD::CaloClusterContainer >, double > > >
+         dummy3;
+      std::vector< xAOD::PFODetails::PFOLeptonType > dummy4;
    };
 }
 
diff --git a/Event/xAOD/xAODParticleEvent/CMakeLists.txt b/Event/xAOD/xAODParticleEvent/CMakeLists.txt
index 01524f17a62c16da3ceaffbf1ab8c08662d08aaa..1aaa8d18c80d0f833debf7fd837a2813e9308dc9 100644
--- a/Event/xAOD/xAODParticleEvent/CMakeLists.txt
+++ b/Event/xAOD/xAODParticleEvent/CMakeLists.txt
@@ -1,44 +1,28 @@
-# $Id: CMakeLists.txt 751314 2016-06-01 09:14:59Z krasznaa $
-################################################################################
-# Package: xAODParticleEvent
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODParticleEvent )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODEgamma
-   Event/xAOD/xAODJet
-   Event/xAOD/xAODMissingET
-   Event/xAOD/xAODMuon
-   Event/xAOD/xAODTau
-   Event/xAOD/xAODTruth )
-
-# External dependencies:
+# External dependencies.
 find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODParticleEvent
    xAODParticleEvent/*.h xAODParticleEvent/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODParticleEvent
-   LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCore xAODEgamma xAODJet
-   xAODMissingET xAODMuon xAODTau xAODTruth ${extra_libs} )
+   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+   LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCore
+   xAODEgamma xAODJet xAODMissingET xAODMuon xAODTau xAODTruth )
+
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODParticleEvent/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::ParticleContainer_v1"
+              "xAOD::CompositeParticleContainer_v1" )
 
 atlas_add_dictionary( xAODParticleEventDict
    xAODParticleEvent/xAODParticleEventDict.h
-   xAODParticleEvent/selection.xml
-   LINK_LIBRARIES ${extra_libs} xAODParticleEvent
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODParticleEvent
    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODParticleEvent/xAODParticleEvent/selection.xml b/Event/xAOD/xAODParticleEvent/xAODParticleEvent/selection.xml
index daad8f1538b8f3363f5242b9452afa6a21fefe0c..f60f9b63c8f0e6aeef68f9af679fc48f7dc64846 100644
--- a/Event/xAOD/xAODParticleEvent/xAODParticleEvent/selection.xml
+++ b/Event/xAOD/xAODParticleEvent/xAODParticleEvent/selection.xml
@@ -1,80 +1,28 @@
-<!-- $Id$ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- xAOD::IParticleLink_v1 dictionaries: -->
-  <class name="xAOD::IParticleLink_v1">
-    <!-- <field name="m_proxy" transient="true"/> -->
-    <!-- <field name="m_element" transient="true"/> -->
-  </class>
-  <!-- <read sourceClass="xAOD::IParticleLink_v1" version="[1-]"
-        targetClass="xAOD::IParticleLink_v1" source=""
-        >
-    <![CDATA[
-      // Let the object prepare for being used:
-      newObj->toTransient();
-    ]]>
-  </read> -->
-
-  <class name="xAOD::IParticleLinkContainer_v1"
-         id="E3A75D69-B84E-41DD-AB67-B5FF6ACBC243" />
-  <!-- <read sourceClass="xAOD::IParticleLink_v1" version="[1-]"
-        targetClass="xAOD::IParticleLink_v1" source="" target="" >
-    <![CDATA[
-       m_p4Cached = false;
-    ]]>
-  </read> -->
-
-  <!-- <class name="xAOD::IParticleLinkAuxContainer_v1"
-         id="3BA65D0C-E2DC-4D7A-84F6-4A1D0EA8728D" /> -->
-
-
-  <!-- Particle_v1 dictionaries: -->
-  <class name="xAOD::Particle_v1" />
-
-  <class name="xAOD::ParticleContainer_v1"
-         id="CE9D717A-A6DD-4BCA-A946-63A730E0EA3B" />
-
-  <class name="xAOD::ParticleAuxContainer_v1"
-         id="B53E64D2-C5EA-4B93-9B3C-F4506C823708" />
-
-  <!-- Smart pointers to Particle_v1: -->
-  <class name="DataLink<xAOD::ParticleContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::ParticleContainer_v1> >" />
-  <class name="ElementLink<xAOD::ParticleContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::ParticleContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::ParticleContainer_v1> > >" />
-
-
-
-  <!-- CompositeParticle_v1 dictionaries: -->
-  <class name="xAOD::CompositeParticle_v1" />
-
-  <class name="xAOD::CompositeParticleContainer_v1"
-         id="C65FFC20-CC41-4C6D-BEDF-B10E935EBFCC" />
-
-  <class name="xAOD::CompositeParticleAuxContainer_v1"
-         id="E43BBAC2-214D-4AFC-927D-AA0EE2C9217C" />
-
-  <!-- Smart pointers to CompositeParticle_v1: -->
-  <class name="DataLink<xAOD::CompositeParticleContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::CompositeParticleContainer_v1> >" />
-  <class name="ElementLink<xAOD::CompositeParticleContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::CompositeParticleContainer_v1> >" />
-  <class name="ElementLinkVector<xAOD::CompositeParticleContainer_v1>" />
-  <class name="std::vector<ElementLinkVector<xAOD::CompositeParticleContainer_v1> >" />
-
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class name="ElementLink<xAOD::IParticleContainer>" />
-    <class name="DataVector<xAOD::MissingET_v1>" />
-    <class name="ElementLink<xAOD::MissingETContainer_v1>" />
-    <!-- <class name="std::vector<ElementLink<xAOD::IParticleContainer> >" /> -->
-    <!-- <class name="std::vector<std::vector<ElementLink<xAOD::IParticleContainer> > >" /> -->
-  </exclusion>
+   <!-- xAOD::Particle interface type(s). -->
+   <class name="xAOD::Particle_v1" />
+   <class name="xAOD::ParticleContainer_v1"
+          id="CE9D717A-A6DD-4BCA-A946-63A730E0EA3B" />
+   <typedef name="xAOD::Particle" />
+   <typedef name="xAOD::ParticleContainer" />
+
+   <!-- xAOD::Particle auxiliary type(s). -->
+   <class name="xAOD::ParticleAuxContainer_v1"
+          id="B53E64D2-C5EA-4B93-9B3C-F4506C823708" />
+   <typedef name="xAOD::ParticleAuxContainer" />
+
+   <!-- xAOD::CompositeParticle interface type(s). -->
+   <class name="xAOD::CompositeParticle_v1" />
+   <class name="xAOD::CompositeParticleContainer_v1"
+          id="C65FFC20-CC41-4C6D-BEDF-B10E935EBFCC" />
+   <typedef name="xAOD::CompositeParticle" />
+   <typedef name="xAOD::CompositeParticleContainer" />
+
+   <!-- xAOD::CompositeParticle auxiliary type(s). -->
+   <class name="xAOD::CompositeParticleAuxContainer_v1"
+          id="E43BBAC2-214D-4AFC-927D-AA0EE2C9217C" />
+   <typedef name="xAOD::CompositeParticleAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODParticleEvent/xAODParticleEvent/xAODParticleEventDict.h b/Event/xAOD/xAODParticleEvent/xAODParticleEvent/xAODParticleEventDict.h
index 81b76f04301e40cbff7125a783b233f9e1146791..9371be2e1327f71e88793e09f7b3cb5b33a111b2 100644
--- a/Event/xAOD/xAODParticleEvent/xAODParticleEvent/xAODParticleEventDict.h
+++ b/Event/xAOD/xAODParticleEvent/xAODParticleEvent/xAODParticleEventDict.h
@@ -1,65 +1,38 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODParticleEventDict.h 649922 2015-02-26 12:20:50Z kkoeneke $
 #ifndef XAODPARTICLEEVENT_XAODPARTICLEEVENTDICT_H
 #define XAODPARTICLEEVENT_XAODPARTICLEEVENTDICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-
-// STL
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
-#include "xAODParticleEvent/IParticleLinkContainer.h"
+// Local include(s).
+#include "xAODParticleEvent/Particle.h"
 #include "xAODParticleEvent/ParticleContainer.h"
 #include "xAODParticleEvent/ParticleAuxContainer.h"
+#include "xAODParticleEvent/versions/Particle_v1.h"
+#include "xAODParticleEvent/versions/ParticleContainer_v1.h"
+#include "xAODParticleEvent/versions/ParticleAuxContainer_v1.h"
+
+#include "xAODParticleEvent/CompositeParticle.h"
 #include "xAODParticleEvent/CompositeParticleContainer.h"
 #include "xAODParticleEvent/CompositeParticleAuxContainer.h"
+#include "xAODParticleEvent/versions/CompositeParticle_v1.h"
+#include "xAODParticleEvent/versions/CompositeParticleContainer_v1.h"
+#include "xAODParticleEvent/versions/CompositeParticleAuxContainer_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
 namespace {
-  struct GCCXML_DUMMY_INSTANTIATION_XAODPARTICLEEVENT {
-    xAOD::IParticleLinkContainer_v1                                              ipl_c1;
-    DataLink< xAOD::IParticleLinkContainer_v1 >                                  ipl_l1;
-    ElementLink< xAOD::IParticleLinkContainer_v1 >                               ipl_l2;
-    std::vector< DataLink< xAOD::IParticleLinkContainer_v1 > >                   ipl_l3;
-    std::vector< ElementLink< xAOD::IParticleLinkContainer_v1 > >                ipl_l4;
-    std::vector< std::vector< ElementLink< xAOD::IParticleLinkContainer_v1 > > > ipl_l5;
-
-    xAOD::ParticleContainer_v1                                              p_c1;
-    DataLink< xAOD::ParticleContainer_v1 >                                  p_l1;
-    ElementLink< xAOD::ParticleContainer_v1 >                               p_l2;
-    std::vector< DataLink< xAOD::ParticleContainer_v1 > >                   p_l3;
-    std::vector< ElementLink< xAOD::ParticleContainer_v1 > >                p_l4;
-    std::vector< std::vector< ElementLink< xAOD::ParticleContainer_v1 > > > p_l5;
-
-    xAOD::CompositeParticleContainer_v1                                              cp_c1;
-    DataLink< xAOD::CompositeParticleContainer_v1 >                                  cp_l1;
-    ElementLink< xAOD::CompositeParticleContainer_v1 >                               cp_l2;
-    std::vector< DataLink< xAOD::CompositeParticleContainer_v1 > >                   cp_l3;
-    std::vector< ElementLink< xAOD::CompositeParticleContainer_v1 > >                cp_l4;
-    std::vector< std::vector< ElementLink< xAOD::CompositeParticleContainer_v1 > > > cp_l5;
-
-    // // Smart pointers needed for the correct generation of the auxiliary
-    // // class dictionaries:
-    // std::vector< xAOD::IParticleLinkContainer > el1;
-    // ElementLink< xAOD::IParticleContainer > el7;
-    // std::vector< ElementLink< xAOD::IParticleContainer > > el8;
-    // std::vector< std::vector< ElementLink< xAOD::IParticleContainer > > > el9;
-
-  };
+   struct GCCXML_DUMMY_INSTANTIATION_XAODPARTICLEEVENT {
+      // Types for which dictionaries are built.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, ParticleContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD,
+                                           CompositeParticleContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, IParticleContainer );
+   };
 }
 
 #endif // XAODPARTICLEEVENT_XAODPARTICLEEVENTDICT_H
diff --git a/Event/xAOD/xAODTau/CMakeLists.txt b/Event/xAOD/xAODTau/CMakeLists.txt
index c69a066b94aeadd1c9bd6877cc365e04d4ad9f0b..733c76aac7d7b62cfb98000e71e804cf8457cf0d 100644
--- a/Event/xAOD/xAODTau/CMakeLists.txt
+++ b/Event/xAOD/xAODTau/CMakeLists.txt
@@ -1,46 +1,32 @@
-# $Id: CMakeLists.txt 775886 2016-09-29 16:03:02Z griffith $ 
-################################################################################
-# Package: xAODTau
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTau )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODJet
-   Event/xAOD/xAODPFlow
-   Event/xAOD/xAODTracking
-   Event/xAOD/xAODTruth )
-
-# External dependencies:
+# External dependencies.
 find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTau
    xAODTau/*.h xAODTau/*.icc xAODTau/versions/*.h
    Root/*.h Root/*.icc Root/*.cxx
    PUBLIC_HEADERS xAODTau
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCore
-   xAODJet xAODPFlow xAODTracking xAODTruth ${extra_libs} )
+   xAODJet xAODPFlow xAODTracking xAODTruth )
+
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTau/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TauJetContainer_v1" "xAOD::TauJetContainer_v2"
+              "xAOD::TauJetContainer_v3" "xAOD::DiTauJetContainer_v1"
+              "xAOD::TauTrackContainer_v1" )
 
 atlas_add_dictionary( xAODTauDict
    xAODTau/xAODTauDict.h
-   xAODTau/selection.xml
-   LINK_LIBRARIES xAODTau
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTau
    EXTRA_FILES Root/dict/*.cxx )
 
 atlas_add_dictionary( xAODTau_cDict
@@ -48,8 +34,7 @@ atlas_add_dictionary( xAODTau_cDict
    xAODTau/selection_c.xml
    LINK_LIBRARIES xAODTau )
 
-
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( xAODTau_TauJet_test
    SOURCES test/xAODTau_TauJet_test.cxx
    LINK_LIBRARIES xAODTau )
diff --git a/Event/xAOD/xAODTau/xAODTau/selection.xml b/Event/xAOD/xAODTau/xAODTau/selection.xml
index 6ac6160bad59ede27235e9c8751380abaa1cfdfb..56e075cd6eeb7191cb1552fc56d1bc2e5d93157f 100644
--- a/Event/xAOD/xAODTau/xAODTau/selection.xml
+++ b/Event/xAOD/xAODTau/xAODTau/selection.xml
@@ -1,129 +1,74 @@
-<!-- $Id: selection.xml 767396 2016-08-11 02:39:30Z griffith $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- TauJet_v1 dictionaries: -->
-  <class name="xAOD::TauJet_v1" />
-
-  <class name="xAOD::TauJetContainer_v1"
-         id="93CCE680-47C0-11E3-997C-02163E00A614" />
-  <class name="xAOD::TauJetAuxContainer_v1"
-         id="EA3CE9A0-18D8-49FD-B978-62857D8D8FD0" />
-
-  <class name="DataLink<xAOD::TauJetContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TauJetContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::TauJetContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TauJetContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TauJetContainer_v1> > >" />
-
-  <!-- TauJet_v2 dictionaries: -->
-  <class name="xAOD::TauJet_v2" />
-
-  <class name="xAOD::TauJetContainer_v2"
-         id="AACF5DF5-2D1A-4678-9188-756C27314E2F" />
-  <class name="xAOD::TauJetAuxContainer_v2"
-         id="2853B3D8-136E-444D-AB48-24B1A0E13083" />
-
-  <class name="DataLink<xAOD::TauJetContainer_v2>" />
-  <class name="std::vector<DataLink<xAOD::TauJetContainer_v2> >" />
-
-  <class name="ElementLink<xAOD::TauJetContainer_v2>" />
-  <class name="std::vector<ElementLink<xAOD::TauJetContainer_v2> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TauJetContainer_v2> > >" />
-
-
-  <!-- TauJet_v3 dictionaries: -->
-  <class name="xAOD::TauJet_v3" />
-
-  <class name="xAOD::TauJetContainer_v3"
-         id="9A1207C5-E25F-4974-A9D6-A51DB37F09F9" />
-  <class name="xAOD::TauJetAuxContainer_v3"
-         id="77AA6800-DDAD-44E8-AD90-003D48082A94" />
-
-  <class name="DataLink<xAOD::TauJetContainer_v3>" />
-  <class name="std::vector<DataLink<xAOD::TauJetContainer_v3> >" />
-
-  <class name="ElementLink<xAOD::TauJetContainer_v3>" />
-  <class name="std::vector<ElementLink<xAOD::TauJetContainer_v3> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TauJetContainer_v3> > >" />
-
-
-  <!-- Tell ROOT that it should automatically convert the v1 smart pointer -->
-  <!-- types into v2 types. Making it possible to read back other objects -->
-  <!-- from older files that are pointing at TauJets. -->
-  <read sourceClass="DataLink<xAOD::TauJetContainer_v1>" version="[1-]"
-        targetClass="DataLink<xAOD::TauJetContainer_v2>"
-        source="" target="" />
-  <read sourceClass="DataLink<xAOD::TauJetContainer_v1>" version="[1-]"
-        targetClass="DataLink<xAOD::TauJetContainer_v3>"
-        source="" target="" />
-  <read sourceClass="DataLink<xAOD::TauJetContainer_v2>" version="[2-]"
-        targetClass="DataLink<xAOD::TauJetContainer_v3>"
-        source="" target="" />
-  <read sourceClass="ElementLink<xAOD::TauJetContainer_v1>" version="[1-]"
-        targetClass="ElementLink<xAOD::TauJetContainer_v2>"
-        source="" target="" />
-  <read sourceClass="ElementLink<xAOD::TauJetContainer_v1>" version="[1-]"
-        targetClass="ElementLink<xAOD::TauJetContainer_v3>"
-        source="" target="" />
-  <read sourceClass="ElementLink<xAOD::TauJetContainer_v2>" version="[2-]"
-        targetClass="ElementLink<xAOD::TauJetContainer_v3>"
-        source="" target="" />
-
-
-  <!-- DiTauJet_v1 dictionaries: -->
-  <class name="xAOD::DiTauJet_v1" />
-
-  <class name="xAOD::DiTauJetContainer_v1"
-        id="0AD18017-0347-4F89-976E-6DA3149DA622" />
-  <class name="xAOD::DiTauJetAuxContainer_v1"
-        id="52A49486-FE88-4448-87E0-5878B69975D1" />
-
-  <class name="DataLink<xAOD::DiTauJetContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::DiTauJetContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::DiTauJetContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::DiTauJetContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::DiTauJetContainer_v1> > >" />
-
-
-  <!-- TauTrack_v1 dictionaries: -->
-  <class name="xAOD::TauTrack_v1" />
-
-  <class name="xAOD::TauTrackContainer_v1"
-        id="A45C1CC2-E6BE-4D99-BB49-3CE80AACEDDA" />
-  <class name="xAOD::TauTrackAuxContainer_v1"
-        id="E36C4BCF-0180-461F-8767-46768A7F3573" />
-
-  <class name="DataLink<xAOD::TauTrackContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TauTrackContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::TauTrackContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TauTrackContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TauTrackContainer_v1> > >" />
-
-  <!--Add Helper Functions -->
-  <function pattern="xAOD::TauHelpers::*" />
-  
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class name="ElementLink<DataVector<xAOD::IParticle> >" />
-    <class pattern="xAOD::TrackParticle*" />
-    <class pattern="DataVector<xAOD::TrackParticle*" />
-    <class pattern="ElementLink<DataVector<xAOD::TrackParticle*" />
-    <class pattern="xAOD::Vertex*" />
-    <class pattern="DataVector<xAOD::Vertex*" />
-    <class pattern="ElementLink<DataVector<xAOD::Vertex*" />
-    <class pattern="xAOD::Jet*" />
-    <class pattern="DataVector<xAOD::Jet*" />
-    <class pattern="ElementLink<DataVector<xAOD::Jet*" />
-    <class pattern="xAOD::PFO*" />
-    <class pattern="DataVector<xAOD::PFO*" />
-    <class pattern="ElementLink<DataVector<xAOD::PFO*" />
-  </exclusion>
+   <!-- xAOD::TauJet interface type(s). -->
+   <class name="xAOD::TauJet_v1" />
+   <class name="xAOD::TauJetContainer_v1"
+          id="93CCE680-47C0-11E3-997C-02163E00A614" />
+   <class name="xAOD::TauJet_v2" />
+   <class name="xAOD::TauJetContainer_v2"
+          id="AACF5DF5-2D1A-4678-9188-756C27314E2F" />
+   <class name="xAOD::TauJet_v3" />
+   <class name="xAOD::TauJetContainer_v3"
+          id="9A1207C5-E25F-4974-A9D6-A51DB37F09F9" />
+   <typedef name="xAOD::TauJet" />
+   <typedef name="xAOD::TauJetContainer" />
+
+   <!-- xAOD::TauJet auxiliary type(s). -->
+   <class name="xAOD::TauJetAuxContainer_v1"
+          id="EA3CE9A0-18D8-49FD-B978-62857D8D8FD0" />
+   <class name="xAOD::TauJetAuxContainer_v2"
+          id="2853B3D8-136E-444D-AB48-24B1A0E13083" />
+   <class name="xAOD::TauJetAuxContainer_v3"
+          id="77AA6800-DDAD-44E8-AD90-003D48082A94" />
+   <typedef name="xAOD::TauJetAuxContainer" />
+
+   <!-- Tell ROOT that it should automatically convert between smart pointer -->
+   <!-- types. -->
+   <read sourceClass="DataLink<xAOD::TauJetContainer_v1>" version="[1-]"
+         targetClass="DataLink<xAOD::TauJetContainer_v2>"
+         source="" target="" />
+   <read sourceClass="DataLink<xAOD::TauJetContainer_v1>" version="[1-]"
+         targetClass="DataLink<xAOD::TauJetContainer_v3>"
+         source="" target="" />
+   <read sourceClass="DataLink<xAOD::TauJetContainer_v2>" version="[2-]"
+         targetClass="DataLink<xAOD::TauJetContainer_v3>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::TauJetContainer_v1>" version="[1-]"
+         targetClass="ElementLink<xAOD::TauJetContainer_v2>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::TauJetContainer_v1>" version="[1-]"
+         targetClass="ElementLink<xAOD::TauJetContainer_v3>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::TauJetContainer_v2>" version="[2-]"
+         targetClass="ElementLink<xAOD::TauJetContainer_v3>"
+         source="" target="" />
+
+   <!-- xAOD::DiTauJet interface type(s). -->
+   <class name="xAOD::DiTauJet_v1" />
+   <class name="xAOD::DiTauJetContainer_v1"
+         id="0AD18017-0347-4F89-976E-6DA3149DA622" />
+   <typedef name="xAOD::DiTauJet" />
+   <typedef name="xAOD::DiTauJetContainer" />
+
+   <!-- xAOD::DiTauJet auxiliary type(s). -->
+   <class name="xAOD::DiTauJetAuxContainer_v1"
+         id="52A49486-FE88-4448-87E0-5878B69975D1" />
+   <typedef name="xAOD::DiTauJetAuxContainer" />
+
+   <!-- xAOD::TauTrack interface type(s). -->
+   <class name="xAOD::TauTrack_v1" />
+   <class name="xAOD::TauTrackContainer_v1"
+         id="A45C1CC2-E6BE-4D99-BB49-3CE80AACEDDA" />
+   <typedef name="xAOD::TauTrack" />
+   <typedef name="xAOD::TauTrackContainer" />
+
+   <!-- xAOD::TauTrack auxiliary type(s). -->
+   <class name="xAOD::TauTrackAuxContainer_v1"
+         id="E36C4BCF-0180-461F-8767-46768A7F3573" />
+   <typedef name="xAOD::TauTrackAuxContainer" />
+
+   <!-- Helper function(s). -->
+   <function pattern="xAOD::TauHelpers::*" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTau/xAODTau/xAODTauDict.h b/Event/xAOD/xAODTau/xAODTau/xAODTauDict.h
index 211a84aef0a0151af575cf07cc73c88e60b4c10a..f1ddc0aacff574fd3f8929cff1fd78f08f0aa26d 100644
--- a/Event/xAOD/xAODTau/xAODTau/xAODTauDict.h
+++ b/Event/xAOD/xAODTau/xAODTau/xAODTauDict.h
@@ -1,115 +1,57 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTauDict.h 796007 2017-02-07 15:38:04Z griffith $
 #ifndef XAODTAU_XAODTAUDICT_H
 #define XAODTAU_XAODTAUDICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-#include "AthLinks/ElementLinkVector.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODTau/TauJet.h"
+#include "xAODTau/TauJetContainer.h"
+#include "xAODTau/TauJetAuxContainer.h"
+#include "xAODTau/versions/TauJet_v1.h"
 #include "xAODTau/versions/TauJetContainer_v1.h"
 #include "xAODTau/versions/TauJetAuxContainer_v1.h"
+#include "xAODTau/versions/TauJet_v2.h"
 #include "xAODTau/versions/TauJetContainer_v2.h"
 #include "xAODTau/versions/TauJetAuxContainer_v2.h"
+#include "xAODTau/versions/TauJet_v3.h"
 #include "xAODTau/versions/TauJetContainer_v3.h"
 #include "xAODTau/versions/TauJetAuxContainer_v3.h"
-#include "xAODTau/versions/DiTauJetContainer_v1.h"
-#include "xAODTau/versions/DiTauJetAuxContainer_v1.h"
-#include "xAODTau/versions/TauTrackContainer_v1.h"
-#include "xAODTau/versions/TauTrackAuxContainer_v1.h"
-#include "xAODTau/TauJetContainer.h"
-#include "xAODTau/TauJetAuxContainer.h"
+
+#include "xAODTau/DiTauJet.h"
 #include "xAODTau/DiTauJetContainer.h"
 #include "xAODTau/DiTauJetAuxContainer.h"
+#include "xAODTau/versions/DiTauJet_v1.h"
+#include "xAODTau/versions/DiTauJetContainer_v1.h"
+#include "xAODTau/versions/DiTauJetAuxContainer_v1.h"
+
+#include "xAODTau/TauTrack.h"
 #include "xAODTau/TauTrackContainer.h"
 #include "xAODTau/TauTrackAuxContainer.h"
+#include "xAODTau/versions/TauTrack_v1.h"
+#include "xAODTau/versions/TauTrackContainer_v1.h"
+#include "xAODTau/versions/TauTrackAuxContainer_v1.h"
 
+#include "xAODTau/TauxAODHelpers.h"
 
-/// Declare a dummy CLID for xAOD::TauJetContainer_v1. This is only necessary
-/// to get DataLink<xAOD::TauJetContainer_v1> and
-/// ElementLink<xAOD::TauJetContainer_v1> compiling in the dictionary. The CLID
-/// is not needed in the "real" code, since users are never exposed to the _v1
-/// classes in Athena anymore.
-CLASS_DEF( xAOD::TauJetContainer_v1, 12345678, 10 )
-CLASS_DEF( xAOD::TauJetContainer_v2, 123456789, 10 )
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
 namespace {
-  struct GCCXML_DUMMY_INSTANTIATION_XAODTAU {
-    xAOD::TauJetContainer_v1 c1;
-    DataLink< xAOD::TauJetContainer_v1 > l1;
-    ElementLink< xAOD::TauJetContainer_v1 > l2;
-    ElementLinkVector< xAOD::TauJetContainer_v1 > l3;
-    std::vector< DataLink< xAOD::TauJetContainer_v1 > > l4;
-    std::vector< ElementLink< xAOD::TauJetContainer_v1 > > l5;
-    std::vector< std::vector< ElementLink< xAOD::TauJetContainer_v1 > > > l6;
-    std::vector< ElementLinkVector< xAOD::TauJetContainer_v1 > > l7;
-
-    xAOD::TauJetContainer_v2 c2;
-    DataLink< xAOD::TauJetContainer_v2 > l8;
-    ElementLink< xAOD::TauJetContainer_v2 > l9;
-    ElementLinkVector< xAOD::TauJetContainer_v2 > l10;
-    std::vector< DataLink< xAOD::TauJetContainer_v2 > > l11;
-    std::vector< ElementLink< xAOD::TauJetContainer_v2 > > l12;
-    std::vector< std::vector< ElementLink< xAOD::TauJetContainer_v2 > > > l13;
-    std::vector< ElementLinkVector< xAOD::TauJetContainer_v2 > > l14;
-
-    xAOD::DiTauJetContainer_v1 c3;
-    DataLink< xAOD::DiTauJetContainer_v1 > l15;
-    ElementLink< xAOD::DiTauJetContainer_v1 > l16;
-    ElementLinkVector< xAOD::DiTauJetContainer_v1 > l17;
-    std::vector< DataLink< xAOD::DiTauJetContainer_v1 > > l18;
-    std::vector< ElementLink< xAOD::DiTauJetContainer_v1 > > l19;
-    std::vector< std::vector< ElementLink< xAOD::DiTauJetContainer_v1 > > > l20;
-    std::vector< ElementLinkVector< xAOD::DiTauJetContainer_v1 > > l21;
-
-    xAOD::TauTrackContainer_v1 c4;
-    DataLink< xAOD::TauTrackContainer_v1 > l22;
-    ElementLink< xAOD::TauTrackContainer_v1 > l23;
-    ElementLinkVector< xAOD::TauTrackContainer_v1 > l24;
-    std::vector< DataLink< xAOD::TauTrackContainer_v1 > > l25;
-    std::vector< ElementLink< xAOD::TauTrackContainer_v1 > > l26;
-    std::vector< std::vector< ElementLink< xAOD::TauTrackContainer_v1 > > > l27;
-    std::vector< ElementLinkVector< xAOD::TauTrackContainer_v1 > > l28;
-
-    xAOD::TauJetContainer_v2 c5;
-    DataLink< xAOD::TauJetContainer_v2 > l29;
-    ElementLink< xAOD::TauJetContainer_v2 > l30;
-    ElementLinkVector< xAOD::TauJetContainer_v2 > l31;
-    std::vector< DataLink< xAOD::TauJetContainer_v2 > > l32;
-    std::vector< ElementLink< xAOD::TauJetContainer_v2 > > l33;
-    std::vector< std::vector< ElementLink< xAOD::TauJetContainer_v2 > > > l34;
-    std::vector< ElementLinkVector< xAOD::TauJetContainer_v2 > > l35;
-
-
-    // Instantiate the classes used by xAOD::TauJetAuxContainer, so that
-    // Reflex would see them with their "correct type". Note that the
-    // dictionary for these types comes from other places. This instantiation
-    // is just needed for "Reflex related technical reasons"...
-    ElementLink< xAOD::TrackParticleContainer > auxlink1;
-    std::vector< ElementLink< xAOD::TrackParticleContainer > > auxlink2;
-    ElementLink< xAOD::JetContainer > auxlink3;
-    std::vector< ElementLink< xAOD::JetContainer > > auxlink4;
-    ElementLink< xAOD::PFOContainer > auxlink5;
-    std::vector< ElementLink< xAOD::PFOContainer > > auxlink6;
-    ElementLink< xAOD::VertexContainer > auxlink7;
-    std::vector< ElementLink< xAOD::VertexContainer > > auxlink8;
-    ElementLink< xAOD::TauTrackContainer > auxlink9;
-    std::vector< ElementLink< xAOD::TauTrackContainer > > auxlink10;
+   struct GCCXML_DUMMY_INSTANTIATION_XAODTAU {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TauJetContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TauJetContainer_v2 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TauJetContainer_v3 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, DiTauJetContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TauTrackContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, VertexContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JetContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, PFOContainer );
    };
 }
 
diff --git a/Event/xAOD/xAODTrigBphys/CMakeLists.txt b/Event/xAOD/xAODTrigBphys/CMakeLists.txt
index 9fc1887f553f709f4d2c3644467ff82f92a3c863..a27d641423a21500af332f8392de215ca8bba5bd 100644
--- a/Event/xAOD/xAODTrigBphys/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigBphys/CMakeLists.txt
@@ -1,34 +1,24 @@
-################################################################################
-# Package: xAODTrigBphys
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigBphys )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Event/xAOD/xAODCore
-                          Event/xAOD/xAODTracking
-                          PRIVATE
-                          Control/AthLinks )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigBphys
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigBphys
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers xAODCore xAODTracking
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks )
-
-atlas_add_dictionary( xAODTrigBphysDict
-                      xAODTrigBphys/xAODTrigBphysDict.h
-                      xAODTrigBphys/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers xAODCore xAODTracking AthLinks xAODTrigBphys
-                      EXTRA_FILES Root/dict/*.cxx )
+   xAODTrigBphys/*.h xAODTrigBphys/versions/*.h Root/*.cxx
+   PUBLIC_HEADERS xAODTrigBphys
+   LINK_LIBRARIES AthContainers AthLinks xAODCore xAODTracking )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigBphys/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigBphysContainer_v1" )
 
+atlas_add_dictionary( xAODTrigBphysDict
+   xAODTrigBphys/xAODTrigBphysDict.h
+   ${_selectionFile}
+   LINK_LIBRARIES xAODTrigBphys
+   EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigBphys/xAODTrigBphys/selection.xml b/Event/xAOD/xAODTrigBphys/xAODTrigBphys/selection.xml
index 6dfe8352c559b92989694c9afdfdb57dcf5cc013..fd11c8a13f9692d87014873fe577e049e05c3f95 100644
--- a/Event/xAOD/xAODTrigBphys/xAODTrigBphys/selection.xml
+++ b/Event/xAOD/xAODTrigBphys/xAODTrigBphys/selection.xml
@@ -1,28 +1,16 @@
-<!-- $Id: selection.xml 646005 2015-02-11 13:20:20Z krasznaa $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- TrigBphys dictionaries -->
-  <class name="xAOD::TrigBphys_v1" />
-  <class name="xAOD::TrigBphysContainer_v1"
-         id="FD05137E-421B-40B5-AB7C-D119C5490784" />
-  <class name="xAOD::TrigBphysAuxContainer_v1"
-         id="C7246162-DB5D-4ACA-BF20-838A1B2BC4A3" />
+   <!-- xAOD::TrigBphys interface type(s). -->
+   <class name="xAOD::TrigBphys_v1" />
+   <class name="xAOD::TrigBphysContainer_v1"
+          id="FD05137E-421B-40B5-AB7C-D119C5490784" />
+   <typedef name="xAOD::TrigBphys" />
+   <typedef name="xAOD::TrigBphysContainer" />
 
-  <class name="DataLink<xAOD::TrigBphysContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TrigBphysContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::TrigBphysContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigBphysContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigBphysContainer_v1> > >" />
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class name="ElementLink<DataVector<xAOD::IParticle> >" />
-    <class name="ElementLink<DataVector<xAOD::TrackParticle_v1> >" />
-  </exclusion>
+   <!-- xAOD::TrigBphys auxiliary type(s). -->
+   <class name="xAOD::TrigBphysAuxContainer_v1"
+          id="C7246162-DB5D-4ACA-BF20-838A1B2BC4A3" />
+   <typedef name="xAOD::TrigBphysAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigBphys/xAODTrigBphys/xAODTrigBphysDict.h b/Event/xAOD/xAODTrigBphys/xAODTrigBphys/xAODTrigBphysDict.h
index f0ce4dc4e1ea36b591422a5839ba28bc9704c7d4..c2b6c7f0290bfcdcaac41aa9e9c47d41f6f96805 100644
--- a/Event/xAOD/xAODTrigBphys/xAODTrigBphys/xAODTrigBphysDict.h
+++ b/Event/xAOD/xAODTrigBphys/xAODTrigBphys/xAODTrigBphysDict.h
@@ -1,54 +1,29 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
+#ifndef XAODTRIGBPHYS_XAODTRIGBPHYSDICT_H
+#define XAODTRIGBPHYS_XAODTRIGBPHYSDICT_H
 
-// $Id: xAODTrigBphysDict.h 632753 2014-12-01 17:04:27Z jwalder $
-#ifndef XAODTRIGBPHYS_AODTRIGBPHYSDICT_H
-#define XAODTRIGBPHYS_AODTRIGBPHYSDICT_H
-
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODTrigBphys/TrigBphys.h"
 #include "xAODTrigBphys/TrigBphysContainer.h"
+#include "xAODTrigBphys/TrigBphysAuxContainer.h"
 #include "xAODTrigBphys/versions/TrigBphys_v1.h"
 #include "xAODTrigBphys/versions/TrigBphysContainer_v1.h"
 #include "xAODTrigBphys/versions/TrigBphysAuxContainer_v1.h"
 
-namespace{
-  struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGBPHYS {
-
-      xAOD::TrigBphysContainer_v1 bphys_l1;
-      ElementLink< xAOD::TrigBphysContainer_v1 > bphys_l2;
-      DataLink< xAOD::TrigBphysContainer_v1 > bphys_l3;
-      std::vector< ElementLink< xAOD::TrigBphysContainer_v1 > > bphys_l4;
-      std::vector< DataLink< xAOD::TrigBphysContainer_v1 > > bphys_l5;
-      std::vector< std::vector< ElementLink< xAOD::TrigBphysContainer_v1 > > > bphys_l6;
-      std::vector< std::vector< ElementLink< xAOD::TrackParticleContainer > > > bphys_17;
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
-     // Instantiate the classes used by xAOD::xAODTrigBphys so that
-     // Reflex would see them with their "correct type". Note that the
-     // dictionary for these types comes from other places. This instantiation
-     // is just needed for "Reflex related technical reasons"...
-     ElementLink< xAOD::TrackParticleContainer > auxlink1;
-     std::vector< ElementLink< xAOD::TrackParticleContainer > > auxlink2;
-     std::vector< std::vector< ElementLink< xAOD::TrackParticleContainer > > > auxlink3;
-
-     ElementLink< xAOD::IParticleContainer > auxlink4;
-     std::vector< ElementLink< xAOD::IParticleContainer > > auxlink5;
-     std::vector< std::vector< ElementLink< xAOD::IParticleContainer > > > auxlink6;
-  };
+// Instantiate all necessary types for the dictionary.
+namespace{
+   struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGBPHYS {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigBphysContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
+   };
 }
 
-#endif // XAODTRIGBPHYS_AODTRIGBPHYSDICT_H
+#endif // XAODTRIGBPHYS_XAODTRIGBPHYSDICT_H
diff --git a/Event/xAOD/xAODTrigCalo/CMakeLists.txt b/Event/xAOD/xAODTrigCalo/CMakeLists.txt
index b0bbbb5aab2fbac0a16fd3b9cbc501f6754ce416..70bdf84fa1fbc59d3c8411e596ded0ffb06a952e 100644
--- a/Event/xAOD/xAODTrigCalo/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigCalo/CMakeLists.txt
@@ -1,34 +1,28 @@
-################################################################################
-# Package: xAODTrigCalo
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigCalo )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Calorimeter/CaloGeoHelpers
-                          Control/AthContainers
-                          Event/xAOD/xAODCore
-                          PRIVATE
-                          Control/AthLinks )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigCalo
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigCalo
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES CaloGeoHelpers AthContainers xAODCore
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks )
+   xAODTrigCalo/*.h xAODTrigCalo/versions/*.h Root/*.cxx
+   PUBLIC_HEADERS xAODTrigCalo
+   LINK_LIBRARIES CaloGeoHelpers AthContainers xAODCore )
 
-atlas_add_dictionary( xAODTrigCaloDict
-                      xAODTrigCalo/xAODTrigCaloDict.h
-                      xAODTrigCalo/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} CaloGeoHelpers AthContainers xAODCore AthLinks xAODTrigCalo
-                      EXTRA_FILES Root/dict/*.cxx )
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigCalo/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigCaloClusterContainer_v1"
+              "xAOD::TrigEMClusterContainer_v1" )
 
+atlas_add_dictionary( xAODTrigCaloDict
+   xAODTrigCalo/xAODTrigCaloDict.h
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTrigCalo
+   EXTRA_FILES Root/dict/*.cxx )
 
+# Generate CLIDs for the library explicitly.
+atlas_generate_cliddb( xAODTrigCalo )
diff --git a/Event/xAOD/xAODTrigCalo/xAODTrigCalo/selection.xml b/Event/xAOD/xAODTrigCalo/xAODTrigCalo/selection.xml
index 8f246e62c7a9510232927be8768dcce9f6525c64..712ae13c8ca2589ad5ce2742c9e89a778a0cbd9b 100644
--- a/Event/xAOD/xAODTrigCalo/xAODTrigCalo/selection.xml
+++ b/Event/xAOD/xAODTrigCalo/xAODTrigCalo/selection.xml
@@ -1,42 +1,35 @@
-<!-- $Id: selection.xml 692011 2015-08-28 17:19:22Z wigleswt $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- TrigCaloCluster_v1 dictionaries: -->
-  <class name="xAOD::TrigCaloCluster_v1" />
-  <class name="xAOD::TrigCaloClusterContainer_v1"
-         id="0C7F7869-C67A-4E4A-8793-358F8B32DFEA" />
-  <class name="xAOD::TrigCaloClusterAuxContainer_v1"
-         id="4A2F55AF-D465-42A8-A4CF-2DB84D9628E5" />
+   <!-- xAOD::TrigCaloCluster interface type(s). -->
+   <class name="xAOD::TrigCaloCluster_v1" />
+   <class name="xAOD::TrigCaloClusterContainer_v1"
+          id="0C7F7869-C67A-4E4A-8793-358F8B32DFEA" />
+   <typedef name="xAOD::TrigCaloCluster" />
+   <typedef name="xAOD::TrigCaloClusterContainer" />
 
-  <class name="ElementLink<xAOD::TrigCaloClusterContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigCaloClusterContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigCaloClusterContainer_v1> > >" />
+   <!-- xAOD::TrigCaloCluster auxiliary type(s). -->
+   <class name="xAOD::TrigCaloClusterAuxContainer_v1"
+          id="4A2F55AF-D465-42A8-A4CF-2DB84D9628E5" />
+   <typedef name="xAOD::TrigCaloClusterAuxContainer" />
 
-  <!-- TrigEMCluster_v1 dictionaries: -->
-  <class name="xAOD::TrigEMCluster_v1" />
-  <class name="xAOD::TrigEMClusterContainer_v1"
-         id="B37C59EC-1A1E-467C-BFCE-52EA08694C60" />
-  <class name="xAOD::TrigEMClusterAuxContainer_v1"
-         id="CE08F151-A2BA-44ED-B854-7D8B9C8679DE" />
+   <!-- xAOD::TrigEMCluster interface type(s). -->
+   <class name="xAOD::TrigEMCluster_v1" />
+   <class name="xAOD::TrigEMClusterContainer_v1"
+          id="B37C59EC-1A1E-467C-BFCE-52EA08694C60" />
+   <typedef name="xAOD::TrigEMCluster" />
+   <typedef name="xAOD::TrigEMClusterContainer" />
 
-  <!-- TrigEMCluster_v2 dictionaries: -->
-  <class name="xAOD::TrigEMClusterAuxContainer_v2"
-         id="2AC227DF-EE58-4469-AE60-F066F75DC0DD" />
+   <!-- xAOD::TrigEMCluster auxiliary type(s). -->
+   <class name="xAOD::TrigEMClusterAuxContainer_v1"
+          id="CE08F151-A2BA-44ED-B854-7D8B9C8679DE" />
+   <class name="xAOD::TrigEMClusterAuxContainer_v2"
+          id="2AC227DF-EE58-4469-AE60-F066F75DC0DD" />
+   <typedef name="xAOD::TrigEMClusterAuxContainer" />
 
-  <class name="ElementLink<xAOD::TrigEMClusterContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigEMClusterContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigEMClusterContainer_v1> > >" />
-  
-  
-  <class name="xAOD::CaloClusterTrigAuxContainer_v1"  
-         id="F25EBF21-75CD-4CB7-B33E-76B46213A49B" />
-  
-  
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-  </exclusion>
+   <!-- xAOD::CaloCluster auxiliary type(s). -->
+   <class name="xAOD::CaloClusterTrigAuxContainer_v1"
+          id="F25EBF21-75CD-4CB7-B33E-76B46213A49B" />
+   <typedef name="xAOD::CaloClusterTrigAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigCalo/xAODTrigCalo/xAODTrigCaloDict.h b/Event/xAOD/xAODTrigCalo/xAODTrigCalo/xAODTrigCaloDict.h
index b698d215db835f86e107c888856a8caf573ab438..35d8e7c8a02b7a2bfcdf46bb354ce50cf57926d3 100644
--- a/Event/xAOD/xAODTrigCalo/xAODTrigCalo/xAODTrigCaloDict.h
+++ b/Event/xAOD/xAODTrigCalo/xAODTrigCalo/xAODTrigCaloDict.h
@@ -1,47 +1,39 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTrigCaloDict.h 692011 2015-08-28 17:19:22Z wigleswt $
 #ifndef XAODTRIGCALO_XAODTRIGCALODICT_H
 #define XAODTRIGCALO_XAODTRIGCALODICT_H
 
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
 // Local include(s):
+#include "xAODTrigCalo/TrigCaloCluster.h"
 #include "xAODTrigCalo/TrigCaloClusterContainer.h"
+#include "xAODTrigCalo/TrigCaloClusterAuxContainer.h"
 #include "xAODTrigCalo/versions/TrigCaloCluster_v1.h"
 #include "xAODTrigCalo/versions/TrigCaloClusterContainer_v1.h"
 #include "xAODTrigCalo/versions/TrigCaloClusterAuxContainer_v1.h"
 
+#include "xAODTrigCalo/TrigEMCluster.h"
 #include "xAODTrigCalo/TrigEMClusterContainer.h"
+#include "xAODTrigCalo/TrigEMClusterAuxContainer.h"
 #include "xAODTrigCalo/versions/TrigEMCluster_v1.h"
 #include "xAODTrigCalo/versions/TrigEMClusterContainer_v1.h"
 #include "xAODTrigCalo/versions/TrigEMClusterAuxContainer_v1.h"
 #include "xAODTrigCalo/versions/TrigEMClusterAuxContainer_v2.h"
 
+#include "xAODTrigCalo/CaloClusterTrigAuxContainer.h"
 #include "xAODTrigCalo/versions/CaloClusterTrigAuxContainer_v1.h"
 
-namespace{
-  struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGCALO {
-
-    xAOD::TrigCaloClusterContainer_v1 c3;
-    ElementLink< xAOD::TrigCaloClusterContainer_v1 > a1;
-    std::vector< ElementLink< xAOD::TrigCaloClusterContainer_v1 > > a3;
-    std::vector< std::vector< ElementLink< xAOD::TrigCaloClusterContainer_v1 > > > a4;
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
-    xAOD::TrigEMClusterContainer_v1 c4;
-    ElementLink< xAOD::TrigEMClusterContainer_v1 > b1;
-    std::vector< ElementLink< xAOD::TrigEMClusterContainer_v1 > > b3;
-    std::vector< std::vector< ElementLink< xAOD::TrigEMClusterContainer_v1 > > > b4;
-  };
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGCALO {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigCaloClusterContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigEMClusterContainer_v1 );
+   };
 }
 
 #endif // XAODTRIGCALO_XAODTRIGCALODICT_H
diff --git a/Event/xAOD/xAODTrigEgamma/CMakeLists.txt b/Event/xAOD/xAODTrigEgamma/CMakeLists.txt
index 65e4c29ef34323c25230c63d0c35c4470a9cea18..8bb8251d77203cd4f378680e4a6cd134dc3d77b8 100644
--- a/Event/xAOD/xAODTrigEgamma/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigEgamma/CMakeLists.txt
@@ -1,45 +1,27 @@
-################################################################################
-# Package: xAODTrigEgamma
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigEgamma )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Control/AthLinks
-                          Event/xAOD/xAODBase
-                          Event/xAOD/xAODCaloEvent
-                          Event/xAOD/xAODCore
-                          Event/xAOD/xAODEgamma
-                          Event/xAOD/xAODTracking
-                          Event/xAOD/xAODTrigCalo )
+# External dependencies.
+find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread GenVector )
-
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigEgamma
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigEgamma
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCaloEvent xAODCore xAODEgamma xAODTracking xAODTrigCalo
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ${extra_libs} )
+    xAODTrigEgamma/*.h xAODTrigEgamma/versions/*.h Root/*.cxx
+    PUBLIC_HEADERS xAODTrigEgamma
+    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase
+    xAODCaloEvent xAODCore xAODEgamma xAODTracking xAODTrigCalo )
 
-atlas_add_dictionary( xAODTrigEgammaDict
-                      xAODTrigEgamma/xAODTrigEgammaDict.h
-                      xAODTrigEgamma/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks
-                      xAODBase xAODCaloEvent xAODCore xAODEgamma xAODTracking
-                      xAODTrigCalo xAODTrigEgamma ${extra_libs}
-                      EXTRA_FILES Root/dict/*.cxx )
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigEgamma/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigPhotonContainer_v1" "xAOD::TrigElectronContainer_v1" )
 
+atlas_add_dictionary( xAODTrigEgammaDict
+    xAODTrigEgamma/xAODTrigEgammaDict.h
+    ${_selectionFile}
+    LINK_LIBRARIES xAODCore xAODTrigEgamma
+    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/selection.xml b/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/selection.xml
index 1bc649d8ace6673a5df64339a239e8a767d97e2a..97a1e870b45af7493c2b839e236d19a6c9dcf720 100644
--- a/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/selection.xml
+++ b/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/selection.xml
@@ -1,49 +1,37 @@
-<!-- $Id: selection.xml 705788 2015-11-04 13:06:35Z krasznaa $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- TrigPhoton_v1 dictionaries: -->
-  <class name="xAOD::TrigPhoton_v1"/>
-
-  <class name="xAOD::TrigPhotonContainer_v1"
-         id="DA2CDAF5-B0E8-4502-89A3-E342DFA9C250" />
-  <class name="xAOD::TrigPhotonAuxContainer_v1"
-         id="36B8B9E3-8F5E-4356-9315-EF4FA6959624" />
-
-  <class name="DataLink<xAOD::TrigPhotonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TrigPhotonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::TrigPhotonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigPhotonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigPhotonContainer_v1> > >" />
-
-  <!-- TrigElectron_v1 dictionaries: -->
-  <class name="xAOD::TrigElectron_v1" />
-
-  <class name="xAOD::TrigElectronContainer_v1"
-         id="3492BB27-3ED8-45E3-9A5B-7266949CEDA9" />
-  <class name="xAOD::TrigElectronAuxContainer_v1"
-         id="173425E6-51BB-4015-B960-3F7F83F26B9E" />
-
-  <class name="DataLink<xAOD::TrigElectronContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TrigElectronContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::TrigElectronContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigElectronContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigElectronContainer_v1> > >" />
-
-  <class name="xAOD::ElectronTrigAuxContainer_v1"
-         id="359610D5-3AEA-4DB4-837E-4C93F81014C2" />
-  <class name="xAOD::PhotonTrigAuxContainer_v1"
-         id="863989DB-F18B-4D93-A019-F3CBFF726176" />
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-    <class name="ElementLink<DataVector<xAOD::TrackParticle_v1> >" />
-    <class name="ElementLink<DataVector<xAOD::TrigEMCluster_v1> >" />
-  </exclusion>
+   <!-- xAOD::TrigPhoton interface type(s). -->
+   <class name="xAOD::TrigPhoton_v1"/>
+   <class name="xAOD::TrigPhotonContainer_v1"
+          id="DA2CDAF5-B0E8-4502-89A3-E342DFA9C250" />
+   <typedef name="xAOD::TrigPhoton" />
+   <typedef name="xAOD::TrigPhotonContainer" />
+
+   <!-- xAOD::TrigPhoton auxiliary type(s). -->
+   <class name="xAOD::TrigPhotonAuxContainer_v1"
+          id="36B8B9E3-8F5E-4356-9315-EF4FA6959624" />
+   <typedef name="xAOD::TrigPhotonAuxContainer" />
+
+    <!-- xAOD::TrigElectron interface type(s). -->
+   <class name="xAOD::TrigElectron_v1" />
+   <class name="xAOD::TrigElectronContainer_v1"
+          id="3492BB27-3ED8-45E3-9A5B-7266949CEDA9" />
+   <typedef name="xAOD::TrigElectron" />
+   <typedef name="xAOD::TrigElectronContainer" />
+
+   <!-- xAOD::TrigElectron auxiliary type(s). -->
+   <class name="xAOD::TrigElectronAuxContainer_v1"
+          id="173425E6-51BB-4015-B960-3F7F83F26B9E" />
+   <typedef name="xAOD::TrigElectronAuxContainer" />
+
+   <!-- xAODEgamma auxiliary type(s). -->
+   <class name="xAOD::ElectronTrigAuxContainer_v1"
+          id="359610D5-3AEA-4DB4-837E-4C93F81014C2" />
+   <typedef name="xAOD::ElectronTrigAuxContainer" />
+
+   <class name="xAOD::PhotonTrigAuxContainer_v1"
+          id="863989DB-F18B-4D93-A019-F3CBFF726176" />
+   <typedef name="xAOD::PhotonTrigAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/xAODTrigEgammaDict.h b/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/xAODTrigEgammaDict.h
index 15f8da8169d31550c95fb803f369e8dde431edb2..2782b8549cd7f116d5a6382887f8a479b91272eb 100644
--- a/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/xAODTrigEgammaDict.h
+++ b/Event/xAOD/xAODTrigEgamma/xAODTrigEgamma/xAODTrigEgammaDict.h
@@ -1,32 +1,21 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTrigEgammaDict.h 690869 2015-08-24 09:22:25Z rwhite $
 #ifndef XAODTRIGEGAMMA_XAODTRIGEGAMMADICT_H
 #define XAODTRIGEGAMMA_XAODTRIGEGAMMADICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-// STL include(s):
-#include <vector>
-	
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-//Local include(s)
+// Local include(s).
+#include "xAODTrigEgamma/TrigPhoton.h"
 #include "xAODTrigEgamma/TrigPhotonContainer.h"
+#include "xAODTrigEgamma/TrigPhotonAuxContainer.h"
 #include "xAODTrigEgamma/versions/TrigPhoton_v1.h"
 #include "xAODTrigEgamma/versions/TrigPhotonContainer_v1.h"
 #include "xAODTrigEgamma/versions/TrigPhotonAuxContainer_v1.h"
 
+#include "xAODTrigEgamma/TrigElectron.h"
 #include "xAODTrigEgamma/TrigElectronContainer.h"
+#include "xAODTrigEgamma/TrigElectronAuxContainer.h"
 #include "xAODTrigEgamma/versions/TrigElectron_v1.h"
 #include "xAODTrigEgamma/versions/TrigElectronContainer_v1.h"
 #include "xAODTrigEgamma/versions/TrigElectronAuxContainer_v1.h"
@@ -36,31 +25,20 @@
 #include "xAODTrigEgamma/versions/ElectronTrigAuxContainer_v1.h"
 #include "xAODTrigEgamma/versions/PhotonTrigAuxContainer_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace{
    struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGEGAMMA {
-	
-      xAOD::TrigElectronContainer_v1 electron_c1;
-      DataLink< xAOD::TrigElectronContainer_v1 > electron_dl1;
-      std::vector< DataLink< xAOD::TrigElectronContainer_v1 > > electron_dl2;
-      ElementLink< xAOD::TrigElectronContainer_v1 > electron_el1;
-      std::vector< ElementLink< xAOD::TrigElectronContainer_v1 > > electron_el2;
-      std::vector< std::vector< ElementLink< xAOD::TrigElectronContainer_v1 > > > electron_el3;
-
-      xAOD::TrigPhotonContainer_v1 photon_c1;
-      DataLink< xAOD::TrigPhotonContainer_v1 > photon_dl1;
-      std::vector< DataLink< xAOD::TrigPhotonContainer_v1 > > photon_dl2;
-      ElementLink< xAOD::TrigPhotonContainer_v1 > photon_el1;
-      std::vector< ElementLink< xAOD::TrigPhotonContainer_v1 > > photon_el2;
-      std::vector< std::vector< ElementLink< xAOD::TrigPhotonContainer_v1 > > > photon_el3;
-
-      // Declarations needed in order to generate the dictionaries of the
-      // auxiliary containers correctly:
-      ElementLink< xAOD::TrigEMClusterContainer > dummy1;
-      std::vector< ElementLink< xAOD::TrigEMClusterContainer > > dummy2;
-      ElementLink< xAOD::TrackParticleContainer > dummy3;
-      std::vector< ElementLink< xAOD::TrackParticleContainer > > dummy4;
-
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigElectronContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigPhotonContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigEMClusterContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, VertexContainer );
    };
-} // private namespace
+}
 
 #endif // XAODTRIGEGAMMA_XAODTRIGEGAMMADICT_H
diff --git a/Event/xAOD/xAODTrigL1Calo/CMakeLists.txt b/Event/xAOD/xAODTrigL1Calo/CMakeLists.txt
index e3bb7e36ad80f61b07ba08d8a6f4a719fc5f6033..6a2a6963d715c008cbd8331970d3470946c7c228 100644
--- a/Event/xAOD/xAODTrigL1Calo/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigL1Calo/CMakeLists.txt
@@ -1,41 +1,39 @@
-################################################################################
-# Package: xAODTrigL1Calo
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigL1Calo )
-
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Event/xAOD/xAODBase
-                          Event/xAOD/xAODCore
-                          PRIVATE
-                          Control/AthLinks )
-
                          
-# External dependencies:
-find_package( ROOT COMPONENTS Physics Core Tree MathCore Hist RIO pthread GenVector )
-
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
+# External dependencies.
+find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigL1Calo
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigL1Calo
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers xAODBase xAODCore
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks ${extra_libs} )
+    xAODTrigL1Calo/*.h xAODTrigL1Calo/versions/*.h Root/*.cxx
+    PUBLIC_HEADERS xAODTrigL1Calo
+    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers xAODBase xAODCore )
 
-atlas_add_dictionary( xAODTrigL1CaloDict
-                      xAODTrigL1Calo/xAODTrigL1CaloDict.h
-                      xAODTrigL1Calo/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} ${extra_libs} AthContainers xAODBase xAODCore AthLinks xAODTrigL1Calo
-                      EXTRA_FILES Root/dict/*.cxx )
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigL1Calo/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::JEMHitsContainer_v1" "xAOD::JEMEtSumsContainer_v1"
+              "xAOD::JEMRoIContainer_v1" "xAOD::CPMHitsContainer_v1"
+              "xAOD::CPMTowerContainer_v1" "xAOD::CPMRoIContainer_v1"
+              "xAOD::CMMCPHitsContainer_v1" "xAOD::CMMEtSumsContainer_v1"
+              "xAOD::CMMJetHitsContainer_v1" "xAOD::JetElementContainer_v1"
+              "xAOD::RODHeaderContainer_v1" "xAOD::RODHeaderContainer_v2"
+              "xAOD::TriggerTowerContainer_v1" "xAOD::TriggerTowerContainer_v2"
+              "xAOD::CMXCPHitsContainer_v1" "xAOD::CMXCPTobContainer_v1"
+              "xAOD::CMXJetHitsContainer_v1" "xAOD::CMXJetTobContainer_v1"
+              "xAOD::CMXEtSumsContainer_v1" "xAOD::CMXRoIContainer_v1"
+              "xAOD::CPMTowerContainer_v2" "xAOD::CPMTobRoIContainer_v1"
+              "xAOD::JEMEtSumsContainer_v2" "xAOD::JEMTobRoIContainer_v1"
+              "xAOD::JetElementContainer_v2" "xAOD::L1TopoRawDataContainer_v1"
+   OBJECTS "xAOD::CMMRoI_v1" )
 
+atlas_add_dictionary( xAODTrigL1CaloDict
+    xAODTrigL1Calo/xAODTrigL1CaloDict.h
+    ${_selectionFile}
+    LINK_LIBRARIES xAODCore xAODTrigL1Calo
+    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/selection.xml b/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/selection.xml
index 8b978f9fbc4c3bf80b117ca78279c8cc3053a0e0..3922b4a6e1ce935a25c679b2bb8ec4adaf7f656a 100644
--- a/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/selection.xml
+++ b/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/selection.xml
@@ -1,23 +1,28 @@
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!--  dictionaries: -->
-  
   <!-- Run1 EDM -->
-  
-  <!--   JEMHits -->
+
+  <!-- JEMHits -->
   <class name="xAOD::JEMHits_v1" />
   <class name="xAOD::JEMHitsContainer_v1"
          id="070F54C6-320D-4F22-BD42-C87C6AF99C38" />
   <class name="xAOD::JEMHitsAuxContainer_v1"
-         id="CE2C5182-53DD-46E0-9DFA-61C214A8FCE5" />  
-    
+         id="CE2C5182-53DD-46E0-9DFA-61C214A8FCE5" />
+  <typedef name="xAOD::JEMHits" />
+  <typedef name="xAOD::JEMHitsContainer" />
+  <typedef name="xAOD::JEMHitsAuxContainer" />
+
   <!-- JEMEtSums -->
   <class name="xAOD::JEMEtSums_v1" />
   <class name="xAOD::JEMEtSumsContainer_v1"
          id="DDB6D476-D1E2-490E-A81B-8D4FC65F1D81" />
   <class name="xAOD::JEMEtSumsAuxContainer_v1"
-         id="4D3C658D-597A-414E-AAA3-BE61A1D664C3" /> 
-  
+         id="4D3C658D-597A-414E-AAA3-BE61A1D664C3" />
+  <typedef name="xAOD::JEMEtSums" />
+  <typedef name="xAOD::JEMEtSumsContainer" />
+  <typedef name="xAOD::JEMEtSumsAuxContainer" />
+
   <!-- JEMRoI -->
   <class name="xAOD::JEMRoI_v1">
     <field name="s_wordIdVal" transient="true"/>
@@ -45,24 +50,32 @@
   <class name="xAOD::JEMRoIContainer_v1"
          id="52384828-A57D-477D-A8C8-597C78D02686" />
   <class name="xAOD::JEMRoIAuxContainer_v1"
-         id="959C24E5-9746-4C70-83FA-A0140C710039" /> 
-  
+         id="959C24E5-9746-4C70-83FA-A0140C710039" />
+  <typedef name="xAOD::JEMRoI" />
+  <typedef name="xAOD::JEMRoIContainer" />
+  <typedef name="xAOD::JEMRoIAuxContainer" />
 
-  <!--   CPMHits -->
+  <!-- CPMHits -->
   <class name="xAOD::CPMHits_v1" />
   <class name="xAOD::CPMHitsContainer_v1"
          id="3D15DF3F-E014-42E3-9614-37E4CD535F9C" />
   <class name="xAOD::CPMHitsAuxContainer_v1"
-         id="28FCEB20-A9DC-4FED-9FDD-00F46948E92E" />  
-  
-  <!--   CPMTower -->
+         id="28FCEB20-A9DC-4FED-9FDD-00F46948E92E" />
+  <typedef name="xAOD::CPMHits" />
+  <typedef name="xAOD::CPMHitsContainer" />
+  <typedef name="xAOD::CPMHitsAuxContainer" />
+
+  <!-- CPMTower -->
   <class name="xAOD::CPMTower_v1" />
   <class name="xAOD::CPMTowerContainer_v1"
          id="D220C61E-ECD1-427C-86D0-2C88E00ABBD2" />
   <class name="xAOD::CPMTowerAuxContainer_v1"
-         id="529B6BD7-7B7D-438C-94D7-BAA49A022C47" />  
-  
-  <!--   CPMRoI -->
+         id="529B6BD7-7B7D-438C-94D7-BAA49A022C47" />
+  <typedef name="xAOD::CPMTower" />
+  <typedef name="xAOD::CPMTowerContainer" />
+  <typedef name="xAOD::CPMTowerAuxContainer" />
+
+  <!-- CPMRoI -->
   <class name="xAOD::CPMRoI_v1">
     <field name="s_wordIdVal" transient="true"/>
     <field name="s_wordIdBit" transient="true"/>
@@ -71,98 +84,121 @@
     <field name="s_chipBit" transient="true"/>
     <field name="s_locationBit" transient="true"/>
     <field name="s_parityBit" transient="true"/>
-    <field name="s_saturationBit" transient="true"/>    
+    <field name="s_saturationBit" transient="true"/>
     <field name="s_hitsBit" transient="true"/>
-    <field name="s_wordIdMask" transient="true"/> 
+    <field name="s_wordIdMask" transient="true"/>
     <field name="s_crateMask" transient="true"/>
-    <field name="s_cpmMask" transient="true"/> 
+    <field name="s_cpmMask" transient="true"/>
     <field name="s_chipMask" transient="true"/>
-    <field name="s_locationMask" transient="true"/> 
+    <field name="s_locationMask" transient="true"/>
     <field name="s_parityMask" transient="true"/>
-    <field name="s_saturationMask" transient="true"/>     
+    <field name="s_saturationMask" transient="true"/>
     <field name="s_hitsMask" transient="true"/>
-  </class>  
+  </class>
   <class name="xAOD::CPMRoIContainer_v1"
          id="4B48CC07-6B22-46EC-9BD5-51379664B9BC" />
   <class name="xAOD::CPMRoIAuxContainer_v1"
-         id="8FA92C8D-214F-4B8F-84CA-CB7267CAD0F2" />  
+         id="8FA92C8D-214F-4B8F-84CA-CB7267CAD0F2" />
+  <typedef name="xAOD::CPMRoI" />
+  <typedef name="xAOD::CPMRoIContainer" />
+  <typedef name="xAOD::CPMRoIAuxContainer" />
 
-  <!--   CMMCPHits -->
+  <!-- CMMCPHits -->
   <class name="xAOD::CMMCPHits_v1" />
   <class name="xAOD::CMMCPHitsContainer_v1"
          id="8826CC48-CD08-4FD7-9AC4-358A4888271F" />
   <class name="xAOD::CMMCPHitsAuxContainer_v1"
          id="1951D4B4-D471-4256-8F0D-D666043E2889" />
+  <typedef name="xAOD::CMMCPHits" />
+  <typedef name="xAOD::CMMCPHitsContainer" />
+  <typedef name="xAOD::CMMCPHitsAuxContainer" />
 
-  <!--   CMMEtSums -->
+  <!-- CMMEtSums -->
   <class name="xAOD::CMMEtSums_v1" />
   <class name="xAOD::CMMEtSumsContainer_v1"
          id="186A613D-0C91-4880-9B09-B41C28B17B53" />
   <class name="xAOD::CMMEtSumsAuxContainer_v1"
-         id="A072EDD3-880D-46D0-A120-48C116FDB14E" /> 
-  
-  <!--   CMMJetHits -->
+         id="A072EDD3-880D-46D0-A120-48C116FDB14E" />
+  <typedef name="xAOD::CMMEtSums" />
+  <typedef name="xAOD::CMMEtSumsContainer" />
+  <typedef name="xAOD::CMMEtSumsAuxContainer" />
+
+  <!-- CMMJetHits -->
   <class name="xAOD::CMMJetHits_v1" />
   <class name="xAOD::CMMJetHitsContainer_v1"
          id="43B6130D-4C3F-4E22-9FE2-680E6DFA149F" />
   <class name="xAOD::CMMJetHitsAuxContainer_v1"
-         id="B3C8D000-0E7F-4A0D-8F05-6DA36FFC9DD7" />  
-  
-  <!--   CMMRoI -->
-  <class name="xAOD::CMMRoI_v1" 
+         id="B3C8D000-0E7F-4A0D-8F05-6DA36FFC9DD7" />
+  <typedef name="xAOD::CMMJetHits" />
+  <typedef name="xAOD::CMMJetHitsContainer" />
+  <typedef name="xAOD::CMMJetHitsAuxContainer" />
+
+  <!-- CMMRoI -->
+  <class name="xAOD::CMMRoI_v1"
          id="2BA7B6B2-69C6-40E8-8D2A-0398371EDC81" />
   <class name="xAOD::CMMRoIAuxInfo_v1"
-         id="B0CAB5B5-6B6B-437D-B353-1397C1F01B7E" />  
-  
+         id="B0CAB5B5-6B6B-437D-B353-1397C1F01B7E" />
+  <typedef name="xAOD::CMMRoI" />
+  <typedef name="xAOD::CMMRoIAuxInfo" />
 
-  <!--   JetElement -->
+  <!-- JetElement -->
   <class name="xAOD::JetElement_v1">
-    <field name="m_saturationThreshold" transient="true"/>     
+    <field name="m_saturationThreshold" transient="true"/>
     <field name="m_layerSaturationThreshold" transient="true"/>
-  </class>     
+  </class>
   <class name="xAOD::JetElementContainer_v1"
          id="B1103844-7187-4305-B20A-748591A54145" />
   <class name="xAOD::JetElementAuxContainer_v1"
-         id="7A0A2307-5729-4306-B520-4F75BBCC8E76" />  
-  
-  <!--   RODHeader -->
+         id="7A0A2307-5729-4306-B520-4F75BBCC8E76" />
+  <typedef name="xAOD::JetElement" />
+  <typedef name="xAOD::JetElementContainer" />
+  <typedef name="xAOD::JetElementAuxContainer" />
+
+  <!-- RODHeader -->
   <class name="xAOD::RODHeader_v1" />
   <class name="xAOD::RODHeaderContainer_v1"
          id="AA0924D2-23E2-47B3-8C7D-9D3B104B8990" />
   <class name="xAOD::RODHeaderAuxContainer_v1"
-         id="6524E46D-CC9C-43D2-BAE0-55310A6B316C" /> 
+         id="6524E46D-CC9C-43D2-BAE0-55310A6B316C" />
+  <typedef name="xAOD::RODHeader" />
+  <typedef name="xAOD::RODHeaderContainer" />
+  <typedef name="xAOD::RODHeaderAuxContainer" />
 
-  <!--   RODHeader Run2 EDM-->
+  <!-- RODHeader Run2 EDM-->
   <class name="xAOD::RODHeader_v2" />
   <class name="xAOD::RODHeaderContainer_v2"
          id="98368E90-F392-41D8-850C-317B65034544" />
   <class name="xAOD::RODHeaderAuxContainer_v2"
-         id="A94BA0CD-E57C-4C69-ADA1-CCB91BC0C36F" /> 
-  
-  <!--   TriggerTower -->
+         id="A94BA0CD-E57C-4C69-ADA1-CCB91BC0C36F" />
+
+  <!-- TriggerTower -->
   <class name="xAOD::TriggerTower_v1" />
   <class name="xAOD::TriggerTowerContainer_v1"
          id="DE2A7891-B5FE-4811-8178-EF106743312C" />
   <class name="xAOD::TriggerTowerAuxContainer_v1"
          id="3C5D20CF-6F77-4E67-B182-674EDFD2FE38" />  
-  
-  
+  <typedef name="xAOD::TriggerTower" />
+  <typedef name="xAOD::TriggerTowerContainer" />
+  <typedef name="xAOD::TriggerTowerAuxContainer" />
+
   <!-- Moving onto Run2 EDM -->
-    
-  <!--   TriggerTower -->
+
+  <!-- TriggerTower -->
   <class name="xAOD::TriggerTower_v2" />
   <class name="xAOD::TriggerTowerContainer_v2"
          id="730DE7B8-C24A-4567-A66D-0386DC50E9AC" />
   <class name="xAOD::TriggerTowerAuxContainer_v2"
-         id="07FF691A-A920-43B2-A4E7-637D335E6929" />  
-  
+         id="07FF691A-A920-43B2-A4E7-637D335E6929" />
+
   <!-- CMXCPHits_v1 -->
   <class name="xAOD::CMXCPHits_v1" />
   <class name="xAOD::CMXCPHitsContainer_v1"
          id="96ED5A94-473C-4E96-A348-78077310635F" />
   <class name="xAOD::CMXCPHitsAuxContainer_v1"
          id="F3F8A07D-536B-42EB-9792-E08DB1F76C1F" />
-
+  <typedef name="xAOD::CMXCPHits" />
+  <typedef name="xAOD::CMXCPHitsContainer" />
+  <typedef name="xAOD::CMXCPHitsAuxContainer" />
 
   <!-- CMXCPTob_v1 -->
   <class name="xAOD::CMXCPTob_v1" />
@@ -170,7 +206,9 @@
          id="5E70EF98-47ED-441F-8CC3-F1906AA2E8CD" />
   <class name="xAOD::CMXCPTobAuxContainer_v1"
          id="B4A55AC8-3D30-42AF-B954-82DA7D8A07CB" />
-
+  <typedef name="xAOD::CMXCPTob" />
+  <typedef name="xAOD::CMXCPTobContainer" />
+  <typedef name="xAOD::CMXCPTobAuxContainer" />
 
   <!-- CMXJetHits_v1 -->
   <class name="xAOD::CMXJetHits_v1" />
@@ -178,7 +216,9 @@
          id="492E21EF-A9B0-4262-80EE-4ADECDEA44E7" />
   <class name="xAOD::CMXJetHitsAuxContainer_v1"
          id="509DB371-6A95-4DE1-B950-751B99EBF5EC" />
-
+  <typedef name="xAOD::CMXJetHits" />
+  <typedef name="xAOD::CMXJetHitsContainer" />
+  <typedef name="xAOD::CMXJetHitsAuxContainer" />
 
   <!-- CMXJetTob_v1 -->
   <class name="xAOD::CMXJetTob_v1" />
@@ -186,7 +226,9 @@
          id="4116184D-A8AF-43B1-9990-9DF5C1010AB6" />
   <class name="xAOD::CMXJetTobAuxContainer_v1"
          id="094F5655-229B-49BE-870D-1E4D13866CED" />
-
+  <typedef name="xAOD::CMXJetTob" />
+  <typedef name="xAOD::CMXJetTobContainer" />
+  <typedef name="xAOD::CMXJetTobAuxContainer" />
 
   <!-- CMXEtSums_v1 -->
   <class name="xAOD::CMXEtSums_v1" />
@@ -194,8 +236,11 @@
          id="751F0DD4-FF7F-4950-9928-3198DA4B1AB4" />
   <class name="xAOD::CMXEtSumsAuxContainer_v1"
          id="B96297C3-769B-4084-9524-9D4D233B4896" />
-  
-  <!--   CMXRoI_v1 -->
+  <typedef name="xAOD::CMXEtSums" />
+  <typedef name="xAOD::CMXEtSumsContainer" />
+  <typedef name="xAOD::CMXEtSumsAuxContainer" />
+
+  <!-- CMXRoI_v1 -->
   <class name="xAOD::CMXRoI_v1" >
     <field name="s_wordIdVal0" transient="true"/>
     <field name="s_wordIdVal1" transient="true"/>
@@ -204,116 +249,114 @@
     <field name="s_sumEtHitsBit" transient="true"/>
     <field name="s_missingEtHitsBit" transient="true"/>
     <field name="s_missingEtSigHitsBit" transient="true"/>
-    <field name="s_energyBit" transient="true"/>    
+    <field name="s_energyBit" transient="true"/>
     <field name="s_overflowBit" transient="true"/>
-    <field name="s_sumTypeBit" transient="true"/> 
+    <field name="s_sumTypeBit" transient="true"/>
     <field name="s_wordIdMask" transient="true"/>
-    <field name="s_sumEtHitsMask" transient="true"/> 
+    <field name="s_sumEtHitsMask" transient="true"/>
     <field name="s_missingEtHitsMask" transient="true"/>
-    <field name="s_missingEtSigHitsMask" transient="true"/> 
+    <field name="s_missingEtSigHitsMask" transient="true"/>
     <field name="s_energyMask" transient="true"/>
-    <field name="s_overflowMask" transient="true"/>     
-    <field name="s_sumTypeMask" transient="true"/>   
-    <field name="s_exOffset" transient="true"/>    
+    <field name="s_overflowMask" transient="true"/>
+    <field name="s_sumTypeMask" transient="true"/>
+    <field name="s_exOffset" transient="true"/>
     <field name="s_eyOffset" transient="true"/>
-    <field name="s_etOffset" transient="true"/> 
+    <field name="s_etOffset" transient="true"/>
     <field name="s_maxRoiWords" transient="true"/>
-  </class>     
+  </class>
   <class name="xAOD::CMXRoIContainer_v1"
-         id="37420C80-6007-43B0-ADD3-63FAF6088EC8"/>
+         id="37420C80-6007-43B0-ADD3-63FAF6088EC8" />
   <class name="xAOD::CMXRoIAuxContainer_v1"
-         id="501FFFE3-9788-4A3C-9151-8466F32EF2B4" />    
+         id="501FFFE3-9788-4A3C-9151-8466F32EF2B4" />
+  <typedef name="xAOD::CMXRoI" />
+  <typedef name="xAOD::CMXRoIContainer" />
+  <typedef name="xAOD::CMXRoIAuxContainer" />
 
-
-  <!--   CPMTower_v2 -->
+  <!-- CPMTower_v2 -->
   <class name="xAOD::CPMTower_v2" />
   <class name="xAOD::CPMTowerContainer_v2"
          id="87CC5511-E7E5-4068-8F40-F44B0A1E9A3F" />
   <class name="xAOD::CPMTowerAuxContainer_v2"
-         id="E41859F4-0B8B-412B-A697-2B5A22C5B720" />  
-  
+         id="E41859F4-0B8B-412B-A697-2B5A22C5B720" />
+
   <!-- CPMTobRoI_v1 -->
   <class name="xAOD::CPMTobRoI_v1">
     <field name="s_wordIdVal" transient="true"/>
     <field name="s_wordIdBit" transient="true"/>
     <field name="s_crateBit" transient="true"/>
-    <field name="s_cpmBit" transient="true"/>  
+    <field name="s_cpmBit" transient="true"/>
     <field name="s_chipBit" transient="true"/>
     <field name="s_locationBit" transient="true"/>
     <field name="s_isolBit" transient="true"/>
-    <field name="s_energyBit" transient="true"/>    
+    <field name="s_energyBit" transient="true"/>
     <field name="s_wordIdMask" transient="true"/>
     <field name="s_crateMask" transient="true"/>
     <field name="s_cpmMask" transient="true"/>
-    <field name="s_chipMask" transient="true"/>    
+    <field name="s_chipMask" transient="true"/>
     <field name="s_locationMask" transient="true"/>
     <field name="s_isolMask" transient="true"/>
     <field name="s_energyMask" transient="true"/>
-    <field name="s_typeMask" transient="true"/>        
+    <field name="s_typeMask" transient="true"/>
   </class>
   <class name="xAOD::CPMTobRoIContainer_v1"
          id="B84B5967-8B6C-4743-AC18-FF68E13D9EA6" />
   <class name="xAOD::CPMTobRoIAuxContainer_v1"
          id="38CB660E-139B-4280-9517-B571CA680A37" />
-  
+  <typedef name="xAOD::CPMTobRoI" />
+  <typedef name="xAOD::CPMTobRoIContainer" />
+  <typedef name="xAOD::CPMTobRoIAuxContainer" />
+
   <!-- JEMEtSums -->
   <class name="xAOD::JEMEtSums_v2" />
   <class name="xAOD::JEMEtSumsContainer_v2"
          id="9EE079C0-5737-4710-A81D-278D97F01E50" />
   <class name="xAOD::JEMEtSumsAuxContainer_v2"
-         id="015D34AC-2FD5-4357-850E-04FD5EF6F945" />   
-
+         id="015D34AC-2FD5-4357-850E-04FD5EF6F945" />
 
   <!-- JEMTobRoI_v1 -->
   <class name="xAOD::JEMTobRoI_v1">
     <field name="s_wordIdVal" transient="true"/>
     <field name="s_wordIdBit" transient="true"/>
     <field name="s_crateBit" transient="true"/>
-    <field name="s_jemBit" transient="true"/>  
+    <field name="s_jemBit" transient="true"/>
     <field name="s_frameBit" transient="true"/>
     <field name="s_locationBit" transient="true"/>
     <field name="s_energySmallBit" transient="true"/>
-    <field name="s_energyLargeBit" transient="true"/>    
+    <field name="s_energyLargeBit" transient="true"/>
     <field name="s_wordIdMask" transient="true"/>
     <field name="s_crateMask" transient="true"/>
     <field name="s_jemMask" transient="true"/>
-    <field name="s_frameMask" transient="true"/>    
+    <field name="s_frameMask" transient="true"/>
     <field name="s_locationMask" transient="true"/>
     <field name="s_energySmallMask" transient="true"/>
-    <field name="s_energyLargeMask" transient="true"/>       
-  </class>    
+    <field name="s_energyLargeMask" transient="true"/>
+  </class>
   <class name="xAOD::JEMTobRoIContainer_v1"
          id="2C7D0000-4D7B-45D4-8EE5-B18F172A70C3" />
   <class name="xAOD::JEMTobRoIAuxContainer_v1"
          id="2EAA65B1-B1F3-4530-9413-E572D6282996" />
-  
-  
-  <!--   JetElement_v2 -->
+  <typedef name="xAOD::JEMTobRoI" />
+  <typedef name="xAOD::JEMTobRoIContainer" />
+  <typedef name="xAOD::JEMTobRoIAuxContainer" />
+
+  <!-- JetElement_v2 -->
   <class name="xAOD::JetElement_v2">
-    <field name="m_saturationThreshold" transient="true"/>     
+    <field name="m_saturationThreshold" transient="true"/>
     <field name="m_layerSaturationThreshold" transient="true"/>
-  </class>      
+  </class>
   <class name="xAOD::JetElementContainer_v2"
          id="C4E1BE3D-6499-41A6-9643-4EA716049F60" />
   <class name="xAOD::JetElementAuxContainer_v2"
-         id="A52FADFE-E250-43EC-9766-2898288521BF" />   
-  
+         id="A52FADFE-E250-43EC-9766-2898288521BF" />
+
   <!-- L1TopoRawData_v1 -->
   <class name="xAOD::L1TopoRawData_v1" />
   <class name="xAOD::L1TopoRawDataContainer_v1"
          id="59FD769F-86CA-4636-8AB0-61EB3E0482EA" />
   <class name="xAOD::L1TopoRawDataAuxContainer_v1"
-         id="E3D3AF1E-843A-4F21-A639-EE97040D3B6B" />  
-
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" /> 
-    <class pattern="ElementLink<DataVector<xAOD::IParticle*" />  
-  </exclusion>
+         id="E3D3AF1E-843A-4F21-A639-EE97040D3B6B" />
+  <typedef name="xAOD::L1TopoRawData" />
+  <typedef name="xAOD::L1TopoRawDataContainer" />
+  <typedef name="xAOD::L1TopoRawDataAuxContainer" />
 
 </lcgdict>
-
diff --git a/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/xAODTrigL1CaloDict.h b/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/xAODTrigL1CaloDict.h
index ddf7ba6a0c42b690e8e891d679ece05056fd55f5..025fa36bba731693d2712be9364c91d3a043b9fb 100644
--- a/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/xAODTrigL1CaloDict.h
+++ b/Event/xAOD/xAODTrigL1Calo/xAODTrigL1Calo/xAODTrigL1CaloDict.h
@@ -1,68 +1,90 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTrigL1CaloDict.h 694350 2015-09-11 12:02:19Z krasznaa $
 #ifndef XAODTRIGL1CALO_XAODTRIGL1CALOCALOEVENTDICT_H
 #define XAODTRIGL1CALO_XAODTRIGL1CALOCALOEVENTDICT_H
 
-// System include(s):
-#include <vector>
-
-// EDM include(s):
-/*
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-#include "AthLinks/ElementLinkVector.h"
-*/
-
 // Local include(s):
 // Run 1
+#include "xAODTrigL1Calo/JEMHits.h"
+#include "xAODTrigL1Calo/JEMHitsContainer.h"
+#include "xAODTrigL1Calo/JEMHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/JEMHits_v1.h"
 #include "xAODTrigL1Calo/versions/JEMHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/JEMHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/JEMEtSums.h"
+#include "xAODTrigL1Calo/JEMEtSumsContainer.h"
+#include "xAODTrigL1Calo/JEMEtSumsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/JEMEtSums_v1.h"
 #include "xAODTrigL1Calo/versions/JEMEtSumsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/JEMEtSumsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/JEMRoI.h"
+#include "xAODTrigL1Calo/JEMRoIContainer.h"
+#include "xAODTrigL1Calo/JEMRoIAuxContainer.h"
 #include "xAODTrigL1Calo/versions/JEMRoI_v1.h"
 #include "xAODTrigL1Calo/versions/JEMRoIContainer_v1.h"
 #include "xAODTrigL1Calo/versions/JEMRoIAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CPMHits.h"
+#include "xAODTrigL1Calo/CPMHitsContainer.h"
+#include "xAODTrigL1Calo/CPMHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CPMHits_v1.h"
 #include "xAODTrigL1Calo/versions/CPMHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CPMHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CPMTower.h"
+#include "xAODTrigL1Calo/CPMTowerContainer.h"
+#include "xAODTrigL1Calo/CPMTowerAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CPMTower_v1.h"
 #include "xAODTrigL1Calo/versions/CPMTowerContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CPMTowerAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CPMRoI.h"
+#include "xAODTrigL1Calo/CPMRoIContainer.h"
+#include "xAODTrigL1Calo/CPMRoIAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CPMRoI_v1.h"
 #include "xAODTrigL1Calo/versions/CPMRoIContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CPMRoIAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMMCPHits.h"
+#include "xAODTrigL1Calo/CMMCPHitsContainer.h"
+#include "xAODTrigL1Calo/CMMCPHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMMCPHits_v1.h"
 #include "xAODTrigL1Calo/versions/CMMCPHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMMCPHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMMEtSums.h"
+#include "xAODTrigL1Calo/CMMEtSumsContainer.h"
+#include "xAODTrigL1Calo/CMMEtSumsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMMEtSums_v1.h"
 #include "xAODTrigL1Calo/versions/CMMEtSumsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMMEtSumsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMMJetHits.h"
+#include "xAODTrigL1Calo/CMMJetHitsContainer.h"
+#include "xAODTrigL1Calo/CMMJetHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMMJetHits_v1.h"
 #include "xAODTrigL1Calo/versions/CMMJetHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMMJetHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMMRoI.h"
+#include "xAODTrigL1Calo/CMMRoIAuxInfo.h"
 #include "xAODTrigL1Calo/versions/CMMRoI_v1.h"
 #include "xAODTrigL1Calo/versions/CMMRoIAuxInfo_v1.h"
 
+#include "xAODTrigL1Calo/JetElement.h"
+#include "xAODTrigL1Calo/JetElementContainer.h"
+#include "xAODTrigL1Calo/JetElementAuxContainer.h"
 #include "xAODTrigL1Calo/versions/JetElement_v1.h"
 #include "xAODTrigL1Calo/versions/JetElementContainer_v1.h"
 #include "xAODTrigL1Calo/versions/JetElementAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/RODHeader.h"
+#include "xAODTrigL1Calo/RODHeaderContainer.h"
+#include "xAODTrigL1Calo/RODHeaderAuxContainer.h"
 #include "xAODTrigL1Calo/versions/RODHeader_v1.h"
 #include "xAODTrigL1Calo/versions/RODHeaderContainer_v1.h"
 #include "xAODTrigL1Calo/versions/RODHeaderAuxContainer_v1.h"
@@ -71,6 +93,9 @@
 #include "xAODTrigL1Calo/versions/RODHeaderContainer_v2.h"
 #include "xAODTrigL1Calo/versions/RODHeaderAuxContainer_v2.h"
 
+#include "xAODTrigL1Calo/TriggerTower.h"
+#include "xAODTrigL1Calo/TriggerTowerContainer.h"
+#include "xAODTrigL1Calo/TriggerTowerAuxContainer.h"
 #include "xAODTrigL1Calo/versions/TriggerTower_v1.h"
 #include "xAODTrigL1Calo/versions/TriggerTowerContainer_v1.h"
 #include "xAODTrigL1Calo/versions/TriggerTowerAuxContainer_v1.h"
@@ -80,26 +105,44 @@
 #include "xAODTrigL1Calo/versions/TriggerTowerContainer_v2.h"
 #include "xAODTrigL1Calo/versions/TriggerTowerAuxContainer_v2.h"
 
+#include "xAODTrigL1Calo/CMXCPHits.h"
+#include "xAODTrigL1Calo/CMXCPHitsContainer.h"
+#include "xAODTrigL1Calo/CMXCPHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXCPHits_v1.h"
 #include "xAODTrigL1Calo/versions/CMXCPHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXCPHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMXCPTob.h"
+#include "xAODTrigL1Calo/CMXCPTobContainer.h"
+#include "xAODTrigL1Calo/CMXCPTobAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXCPTob_v1.h"
 #include "xAODTrigL1Calo/versions/CMXCPTobContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXCPTobAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMXJetHits.h"
+#include "xAODTrigL1Calo/CMXJetHitsContainer.h"
+#include "xAODTrigL1Calo/CMXJetHitsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXJetHits_v1.h"
 #include "xAODTrigL1Calo/versions/CMXJetHitsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXJetHitsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMXJetTob.h"
+#include "xAODTrigL1Calo/CMXJetTobContainer.h"
+#include "xAODTrigL1Calo/CMXJetTobAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXJetTob_v1.h"
 #include "xAODTrigL1Calo/versions/CMXJetTobContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXJetTobAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMXEtSums.h"
+#include "xAODTrigL1Calo/CMXEtSumsContainer.h"
+#include "xAODTrigL1Calo/CMXEtSumsAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXEtSums_v1.h"
 #include "xAODTrigL1Calo/versions/CMXEtSumsContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXEtSumsAuxContainer_v1.h"
 
+#include "xAODTrigL1Calo/CMXRoI.h"
+#include "xAODTrigL1Calo/CMXRoIContainer.h"
+#include "xAODTrigL1Calo/CMXRoIAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CMXRoI_v1.h"
 #include "xAODTrigL1Calo/versions/CMXRoIContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CMXRoIAuxContainer_v1.h"
@@ -108,15 +151,20 @@
 #include "xAODTrigL1Calo/versions/CPMTowerContainer_v2.h"
 #include "xAODTrigL1Calo/versions/CPMTowerAuxContainer_v2.h"
 
+#include "xAODTrigL1Calo/CPMTobRoI.h"
+#include "xAODTrigL1Calo/CPMTobRoIContainer.h"
+#include "xAODTrigL1Calo/CPMTobRoIAuxContainer.h"
 #include "xAODTrigL1Calo/versions/CPMTobRoI_v1.h"
 #include "xAODTrigL1Calo/versions/CPMTobRoIContainer_v1.h"
 #include "xAODTrigL1Calo/versions/CPMTobRoIAuxContainer_v1.h"
 
-
 #include "xAODTrigL1Calo/versions/JEMEtSums_v2.h"
 #include "xAODTrigL1Calo/versions/JEMEtSumsContainer_v2.h"
 #include "xAODTrigL1Calo/versions/JEMEtSumsAuxContainer_v2.h"
 
+#include "xAODTrigL1Calo/JEMTobRoI.h"
+#include "xAODTrigL1Calo/JEMTobRoIContainer.h"
+#include "xAODTrigL1Calo/JEMTobRoIAuxContainer.h"
 #include "xAODTrigL1Calo/versions/JEMTobRoI_v1.h"
 #include "xAODTrigL1Calo/versions/JEMTobRoIContainer_v1.h"
 #include "xAODTrigL1Calo/versions/JEMTobRoIAuxContainer_v1.h"
@@ -125,332 +173,80 @@
 #include "xAODTrigL1Calo/versions/JetElementContainer_v2.h"
 #include "xAODTrigL1Calo/versions/JetElementAuxContainer_v2.h"
 
+#include "xAODTrigL1Calo/L1TopoRawData.h"
+#include "xAODTrigL1Calo/L1TopoRawDataContainer.h"
+#include "xAODTrigL1Calo/L1TopoRawDataAuxContainer.h"
 #include "xAODTrigL1Calo/versions/L1TopoRawData_v1.h"
 #include "xAODTrigL1Calo/versions/L1TopoRawDataContainer_v1.h"
 #include "xAODTrigL1Calo/versions/L1TopoRawDataAuxContainer_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
-// Versionless AuxContainers
-#include "xAODTrigL1Calo/CMMCPHitsAuxContainer.h"
-#include "xAODTrigL1Calo/CMMEtSumsAuxContainer.h"
-#include "xAODTrigL1Calo/CMMJetHitsAuxContainer.h"
-#include "xAODTrigL1Calo/CMMRoIAuxInfo.h"
-#include "xAODTrigL1Calo/CMXCPHitsAuxContainer.h"
-#include "xAODTrigL1Calo/CMXCPTobAuxContainer.h"
-#include "xAODTrigL1Calo/CMXEtSumsAuxContainer.h"
-#include "xAODTrigL1Calo/CMXJetHitsAuxContainer.h"
-#include "xAODTrigL1Calo/CMXJetTobAuxContainer.h"
-#include "xAODTrigL1Calo/CMXRoIAuxContainer.h"
-#include "xAODTrigL1Calo/CPMHitsAuxContainer.h"
-#include "xAODTrigL1Calo/CPMRoIAuxContainer.h"
-#include "xAODTrigL1Calo/CPMTobRoIAuxContainer.h"
-#include "xAODTrigL1Calo/CPMTowerAuxContainer.h"
-#include "xAODTrigL1Calo/JEMEtSumsAuxContainer.h"
-#include "xAODTrigL1Calo/JEMHitsAuxContainer.h"
-#include "xAODTrigL1Calo/JEMRoIAuxContainer.h"
-#include "xAODTrigL1Calo/JEMTobRoIAuxContainer.h"
-#include "xAODTrigL1Calo/JetElementAuxContainer.h"
-#include "xAODTrigL1Calo/RODHeaderAuxContainer.h"
-#include "xAODTrigL1Calo/TriggerTowerAuxContainer.h"
-#include "xAODTrigL1Calo/L1TopoRawDataAuxContainer.h"
-
-
+// Instantiate all necessary types for the dictionary.
 namespace {
   struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGL1CALO {
-      
+
     // Run 1
-    
-    // JEMHits  
-    xAOD::JEMHitsContainer_v1 JEMHits_v1_c1;
-     /*
-    DataLink< xAOD::JEMHitsContainer_v1 > JEMHits_v1_l1;
-    ElementLink< xAOD::JEMHitsContainer_v1 > JEMHits_v1_l2;
-    ElementLinkVector< xAOD::JEMHitsContainer_v1 > JEMHits_v1_l3;
-    std::vector< DataLink< xAOD::JEMHitsContainer_v1 > > JEMHits_v1_l4;
-    std::vector< ElementLink< xAOD::JEMHitsContainer_v1 > > JEMHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::JEMHitsContainer_v1 > > JEMHits_v1_l6;    
-     */
 
+    // JEMHits
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JEMHitsContainer_v1 );
     // JEMEtSums
-    xAOD::JEMEtSumsContainer_v1 JEMEtSums_v1_c1;
-     /*
-    DataLink< xAOD::JEMEtSumsContainer_v1 > JEMEtSums_v1_l1;
-    ElementLink< xAOD::JEMEtSumsContainer_v1 > JEMEtSums_v1_l2;
-    ElementLinkVector< xAOD::JEMEtSumsContainer_v1 > JEMEtSums_v1_l3;
-    std::vector< DataLink< xAOD::JEMEtSumsContainer_v1 > > JEMEtSums_v1_l4;
-    std::vector< ElementLink< xAOD::JEMEtSumsContainer_v1 > > JEMEtSums_v1_l5;
-    std::vector< ElementLinkVector< xAOD::JEMEtSumsContainer_v1 > > JEMEtSums_v1_l6;     
-     */
-
-    // JEMRoI   
-    xAOD::JEMRoIContainer_v1 JEMRoI_v1_c1;
-     /*
-    DataLink< xAOD::JEMRoIContainer_v1 > JEMRoI_v1_l1;
-    ElementLink< xAOD::JEMRoIContainer_v1 > JEMRoI_v1_l2;
-    ElementLinkVector< xAOD::JEMRoIContainer_v1 > JEMRoI_v1_l3;
-    std::vector< DataLink< xAOD::JEMRoIContainer_v1 > > JEMRoI_v1_l4;
-    std::vector< ElementLink< xAOD::JEMRoIContainer_v1 > > JEMRoI_v1_l5;
-    std::vector< ElementLinkVector< xAOD::JEMRoIContainer_v1 > > JEMRoI_v1_l6;      \
-     */
-
-    // CPMHits  
-    xAOD::CPMHitsContainer_v1 CPMHits_v1_c1;
-     /*
-    DataLink< xAOD::CPMHitsContainer_v1 > CPMHits_v1_l1;
-    ElementLink< xAOD::CPMHitsContainer_v1 > CPMHits_v1_l2;
-    ElementLinkVector< xAOD::CPMHitsContainer_v1 > CPMHits_v1_l3;
-    std::vector< DataLink< xAOD::CPMHitsContainer_v1 > > CPMHits_v1_l4;
-    std::vector< ElementLink< xAOD::CPMHitsContainer_v1 > > CPMHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CPMHitsContainer_v1 > > CPMHits_v1_l6;      
-     */
-    
-    // CPMTower  
-    xAOD::CPMTowerContainer_v1 CPMTower_v1_c1;
-     /*
-    DataLink< xAOD::CPMTowerContainer_v1 > CPMTower_v1_l1;
-    ElementLink< xAOD::CPMTowerContainer_v1 > CPMTower_v1_l2;
-    ElementLinkVector< xAOD::CPMTowerContainer_v1 > CPMTower_v1_l3;
-    std::vector< DataLink< xAOD::CPMTowerContainer_v1 > > CPMTower_v1_l4;
-    std::vector< ElementLink< xAOD::CPMTowerContainer_v1 > > CPMTower_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CPMTowerContainer_v1 > > CPMTower_v1_l6;        
-     */
-    
-    // CPMRoI 
-    xAOD::CPMRoIContainer_v1 CPMRoI_v1_c1;
-     /*
-    DataLink< xAOD::CPMRoIContainer_v1 > CPMRoI_v1_l1;
-    ElementLink< xAOD::CPMRoIContainer_v1 > CPMRoI_v1_l2;
-    ElementLinkVector< xAOD::CPMRoIContainer_v1 > CPMRoI_v1_l3;
-    std::vector< DataLink< xAOD::CPMRoIContainer_v1 > > CPMRoI_v1_l4;
-    std::vector< ElementLink< xAOD::CPMRoIContainer_v1 > > CPMRoI_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CPMRoIContainer_v1 > > CPMRoI_v1_l6;      
-     */
-
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JEMEtSumsContainer_v1 );
+    // JEMRoI
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JEMRoIContainer_v1 );
+    // CPMHits
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CPMHitsContainer_v1 );
+    // CPMTower
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CPMTowerContainer_v1 );
+    // CPMRoI
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CPMRoIContainer_v1 );
     // CMMCPHits
-    xAOD::CMMCPHitsContainer_v1 CMMCPHits_v1_c1;
-     /*
-    DataLink< xAOD::CMMCPHitsContainer_v1 > CMMCPHits_v1_l1;
-    ElementLink< xAOD::CMMCPHitsContainer_v1 > CMMCPHits_v1_l2;
-    ElementLinkVector< xAOD::CMMCPHitsContainer_v1 > CMMCPHits_v1_l3;
-    std::vector< DataLink< xAOD::CMMCPHitsContainer_v1 > > CMMCPHits_v1_l4;
-    std::vector< ElementLink< xAOD::CMMCPHitsContainer_v1 > > CMMCPHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMMCPHitsContainer_v1 > > CMMCPHits_v1_l6;     
-     */
-    
-    // CMMEtSums 
-    xAOD::CMMEtSumsContainer_v1 CMMEtSums_v1_c1;
-     /*
-    DataLink< xAOD::CMMEtSumsContainer_v1 > CMMEtSums_v1_l1;
-    ElementLink< xAOD::CMMEtSumsContainer_v1 > CMMEtSums_v1_l2;
-    ElementLinkVector< xAOD::CMMEtSumsContainer_v1 > CMMEtSums_v1_l3;
-    std::vector< DataLink< xAOD::CMMEtSumsContainer_v1 > > CMMEtSums_v1_l4;
-    std::vector< ElementLink< xAOD::CMMEtSumsContainer_v1 > > CMMEtSums_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMMEtSumsContainer_v1 > > CMMEtSums_v1_l6;    
-     */
-    
-    // CMMJetHits   
-    xAOD::CMMJetHitsContainer_v1 CMMJetHits_v1_c1;
-     /*
-    DataLink< xAOD::CMMJetHitsContainer_v1 > CMMJetHits_v1_l1;
-    ElementLink< xAOD::CMMJetHitsContainer_v1 > CMMJetHits_v1_l2;
-    ElementLinkVector< xAOD::CMMJetHitsContainer_v1 > CMMJetHits_v1_l3;
-    std::vector< DataLink< xAOD::CMMJetHitsContainer_v1 > > CMMJetHits_v1_l4;
-    std::vector< ElementLink< xAOD::CMMJetHitsContainer_v1 > > CMMJetHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMMJetHitsContainer_v1 > > CMMJetHits_v1_l6;        
-     */
-        
-    // JetElement  
-    xAOD::JetElementContainer_v1 JetElement_v1_c1;
-     /*
-    DataLink< xAOD::JetElementContainer_v1 > JetElement_v1_l1;
-    ElementLink< xAOD::JetElementContainer_v1 > JetElement_v1_l2;
-    ElementLinkVector< xAOD::JetElementContainer_v1 > JetElement_v1_l3;
-    std::vector< DataLink< xAOD::JetElementContainer_v1 > > JetElement_v1_l4;
-    std::vector< ElementLink< xAOD::JetElementContainer_v1 > > JetElement_v1_l5;
-    std::vector< ElementLinkVector< xAOD::JetElementContainer_v1 > > JetElement_v1_l6;        
-     */
-    
-    // RODHeader  
-    xAOD::RODHeaderContainer_v1 RODHeader_v1_c1;
-     /*
-    DataLink< xAOD::RODHeaderContainer_v1 > RODHeader_v1_l1;
-    ElementLink< xAOD::RODHeaderContainer_v1 > RODHeader_v1_l2;
-    ElementLinkVector< xAOD::RODHeaderContainer_v1 > RODHeader_v1_l3;
-    std::vector< DataLink< xAOD::RODHeaderContainer_v1 > > RODHeader_v1_l4;
-    std::vector< ElementLink< xAOD::RODHeaderContainer_v1 > > RODHeader_v1_l5;
-    std::vector< ElementLinkVector< xAOD::RODHeaderContainer_v1 > > RODHeader_v1_l6;      
-     */
-    
-    // TriggerTower 
-    xAOD::TriggerTowerContainer_v1 TriggerTower_v1_c1;
-     /*
-    DataLink< xAOD::TriggerTowerContainer_v1 > TriggerTower_v1_l1;
-    ElementLink< xAOD::TriggerTowerContainer_v1 > TriggerTower_v1_l2;
-    ElementLinkVector< xAOD::TriggerTowerContainer_v1 > TriggerTower_v1_l3;
-    std::vector< DataLink< xAOD::TriggerTowerContainer_v1 > > TriggerTower_v1_l4;
-    std::vector< ElementLink< xAOD::TriggerTowerContainer_v1 > > TriggerTower_v1_l5;
-    std::vector< ElementLinkVector< xAOD::TriggerTowerContainer_v1 > > TriggerTower_v1_l6;      
-     */
-    
-    // Run 2
-    
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMMCPHitsContainer_v1 );
+    // CMMEtSums
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMMEtSumsContainer_v1 );
+    // CMMJetHits
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMMJetHitsContainer_v1 );
+    // JetElement
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JetElementContainer_v1 );
+    // RODHeader
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, RODHeaderContainer_v1 );
     // TriggerTower
-    xAOD::TriggerTowerContainer_v2 TriggerTower_v2_c1;
-     /*
-    DataLink< xAOD::TriggerTowerContainer_v2 > TriggerTower_v2_l1;
-    ElementLink< xAOD::TriggerTowerContainer_v2 > TriggerTower_v2_l2;
-    ElementLinkVector< xAOD::TriggerTowerContainer_v2 > TriggerTower_v2_l3;
-    std::vector< DataLink< xAOD::TriggerTowerContainer_v2 > > TriggerTower_v2_l4;
-    std::vector< ElementLink< xAOD::TriggerTowerContainer_v2 > > TriggerTower_v2_l5;
-    std::vector< ElementLinkVector< xAOD::TriggerTowerContainer_v2 > > TriggerTower_v2_l6;
-     */
-
-    // RODHeader  
-    xAOD::RODHeaderContainer_v2 RODHeader_v2_c1;
-     /*
-    DataLink< xAOD::RODHeaderContainer_v2 > RODHeader_v2_l1;
-    ElementLink< xAOD::RODHeaderContainer_v2 > RODHeader_v2_l2;
-    ElementLinkVector< xAOD::RODHeaderContainer_v2 > RODHeader_v2_l3;
-    std::vector< DataLink< xAOD::RODHeaderContainer_v2 > > RODHeader_v2_l4;
-    std::vector< ElementLink< xAOD::RODHeaderContainer_v2 > > RODHeader_v2_l5;
-    std::vector< ElementLinkVector< xAOD::RODHeaderContainer_v2 > > RODHeader_v2_l6;
-     */
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TriggerTowerContainer_v1 );
+    // CMMRoI
+    XAOD_INSTANTIATE_NS_OBJECT_TYPES( xAOD, CMMRoI_v1 );
 
+    // Run 2
+
+    // TriggerTower
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TriggerTowerContainer_v2 );
+    // RODHeader
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, RODHeaderContainer_v2 );
     // CMXCPHits
-    xAOD::CMXCPHitsContainer_v1 CMXCPHits_v1_c1;
-     /*
-    DataLink< xAOD::CMXCPHitsContainer_v1 > CMXCPHits_v1_l1;
-    ElementLink< xAOD::CMXCPHitsContainer_v1 > CMXCPHits_v1_l2;
-    ElementLinkVector< xAOD::CMXCPHitsContainer_v1 > CMXCPHits_v1_l3;
-    std::vector< DataLink< xAOD::CMXCPHitsContainer_v1 > > CMXCPHits_v1_l4;
-    std::vector< ElementLink< xAOD::CMXCPHitsContainer_v1 > > CMXCPHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXCPHitsContainer_v1 > > CMXCPHits_v1_l6;    
-     */
-    
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXCPHitsContainer_v1 );
     // CMXCPTob
-    xAOD::CMXCPTobContainer_v1 CMXCPTob_v1_c1;
-     /*
-    DataLink< xAOD::CMXCPTobContainer_v1 > CMXCPTob_v1_l1;
-    ElementLink< xAOD::CMXCPTobContainer_v1 > CMXCPTob_v1_l2;
-    ElementLinkVector< xAOD::CMXCPTobContainer_v1 > CMXCPTob_v1_l3;
-    std::vector< DataLink< xAOD::CMXCPTobContainer_v1 > > CMXCPTob_v1_l4;
-    std::vector< ElementLink< xAOD::CMXCPTobContainer_v1 > > CMXCPTob_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXCPTobContainer_v1 > > CMXCPTob_v1_l6;     
-     */
-         
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXCPTobContainer_v1 );
     // CMXJetHits
-    xAOD::CMXJetHitsContainer_v1 CMXJetHits_v1_c1;
-     /*
-    DataLink< xAOD::CMXJetHitsContainer_v1 > CMXJetHits_v1_l1;
-    ElementLink< xAOD::CMXJetHitsContainer_v1 > CMXJetHits_v1_l2;
-    ElementLinkVector< xAOD::CMXJetHitsContainer_v1 > CMXJetHits_v1_l3;
-    std::vector< DataLink< xAOD::CMXJetHitsContainer_v1 > > CMXJetHits_v1_l4;
-    std::vector< ElementLink< xAOD::CMXJetHitsContainer_v1 > > CMXJetHits_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXJetHitsContainer_v1 > > CMXJetHits_v1_l6;      
-     */
-
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXJetHitsContainer_v1 );
     // CMXJetTob
-    xAOD::CMXJetTobContainer_v1 CMXJetTob_v1_c1;
-     /*
-    DataLink< xAOD::CMXJetTobContainer_v1 > CMXJetTob_v1_l1;
-    ElementLink< xAOD::CMXJetTobContainer_v1 > CMXJetTob_v1_l2;
-    ElementLinkVector< xAOD::CMXJetTobContainer_v1 > CMXJetTob_v1_l3;
-    std::vector< DataLink< xAOD::CMXJetTobContainer_v1 > > CMXJetTob_v1_l4;
-    std::vector< ElementLink< xAOD::CMXJetTobContainer_v1 > > CMXJetTob_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXJetTobContainer_v1 > > CMXJetTob_v1_l6;    
-     */
-
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXJetTobContainer_v1 );
     // CMXEtSums
-    xAOD::CMXEtSumsContainer_v1 CMXEtSums_v1_c1;
-     /*
-    DataLink< xAOD::CMXEtSumsContainer_v1 > CMXEtSums_v1_l1;
-    ElementLink< xAOD::CMXEtSumsContainer_v1 > CMXEtSums_v1_l2;
-    ElementLinkVector< xAOD::CMXEtSumsContainer_v1 > CMXEtSums_v1_l3;
-    std::vector< DataLink< xAOD::CMXEtSumsContainer_v1 > > CMXEtSums_v1_l4;
-    std::vector< ElementLink< xAOD::CMXEtSumsContainer_v1 > > CMXEtSums_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXEtSumsContainer_v1 > > CMXEtSums_v1_l6;  
-     */
-    
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXEtSumsContainer_v1 );
     // CMXRoI
-    xAOD::CMXRoIContainer_v1 CMXRoI_v1_c1;
-     /*
-    DataLink< xAOD::CMXRoIContainer_v1 > CMXRoI_v1_l1;
-    ElementLink< xAOD::CMXRoIContainer_v1 > CMXRoI_v1_l2;
-    ElementLinkVector< xAOD::CMXRoIContainer_v1 > CMXRoI_v1_l3;
-    std::vector< DataLink< xAOD::CMXRoIContainer_v1 > > CMXRoI_v1_l4;
-    std::vector< ElementLink< xAOD::CMXRoIContainer_v1 > > CMXRoI_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CMXRoIContainer_v1 > > CMXRoI_v1_l6;     
-     */
-   
-    // CPMTower  
-    xAOD::CPMTowerContainer_v2 CPMTower_v2_c1;
-     /*
-    DataLink< xAOD::CPMTowerContainer_v2 > CPMTower_v2_l1;
-    ElementLink< xAOD::CPMTowerContainer_v2 > CPMTower_v2_l2;
-    ElementLinkVector< xAOD::CPMTowerContainer_v2 > CPMTower_v2_l3;
-    std::vector< DataLink< xAOD::CPMTowerContainer_v2 > > CPMTower_v2_l4;
-    std::vector< ElementLink< xAOD::CPMTowerContainer_v2 > > CPMTower_v2_l5;
-    std::vector< ElementLinkVector< xAOD::CPMTowerContainer_v2 > > CPMTower_v2_l6;     
-     */
-   
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CMXRoIContainer_v1 );
+    // CPMTower
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CPMTowerContainer_v2 );
     // CPMTobRoI
-    xAOD::CPMTobRoIContainer_v1 CPMTobRoI_v1_c1;
-     /*
-    DataLink< xAOD::CPMTobRoIContainer_v1 > CPMTobRoI_v1_l1;
-    ElementLink< xAOD::CPMTobRoIContainer_v1 > CPMTobRoI_v1_l2;
-    ElementLinkVector< xAOD::CPMTobRoIContainer_v1 > CPMTobRoI_v1_l3;
-    std::vector< DataLink< xAOD::CPMTobRoIContainer_v1 > > CPMTobRoI_v1_l4;
-    std::vector< ElementLink< xAOD::CPMTobRoIContainer_v1 > > CPMTobRoI_v1_l5;
-    std::vector< ElementLinkVector< xAOD::CPMTobRoIContainer_v1 > > CPMTobRoI_v1_l6;     
-     */
-
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, CPMTobRoIContainer_v1 );
     // JEMEtSums
-    xAOD::JEMEtSumsContainer_v2 JEMEtSums_v2_c1;
-     /*
-    DataLink< xAOD::JEMEtSumsContainer_v2 > JEMEtSums_v2_l1;
-    ElementLink< xAOD::JEMEtSumsContainer_v2 > JEMEtSums_v2_l2;
-    ElementLinkVector< xAOD::JEMEtSumsContainer_v2 > JEMEtSums_v2_l3;
-    std::vector< DataLink< xAOD::JEMEtSumsContainer_v2 > > JEMEtSums_v2_l4;
-    std::vector< ElementLink< xAOD::JEMEtSumsContainer_v2 > > JEMEtSums_v2_l5;
-    std::vector< ElementLinkVector< xAOD::JEMEtSumsContainer_v2 > > JEMEtSums_v2_l6;     
-     */
-
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JEMEtSumsContainer_v2 );
     // JEMTobRoI
-    xAOD::JEMTobRoIContainer_v1 JEMTobRoI_v1_c1;
-     /*
-    DataLink< xAOD::JEMTobRoIContainer_v1 > JEMTobRoI_v1_l1;
-    ElementLink< xAOD::JEMTobRoIContainer_v1 > JEMTobRoI_v1_l2;
-    ElementLinkVector< xAOD::JEMTobRoIContainer_v1 > JEMTobRoI_v1_l3;
-    std::vector< DataLink< xAOD::JEMTobRoIContainer_v1 > > JEMTobRoI_v1_l4;
-    std::vector< ElementLink< xAOD::JEMTobRoIContainer_v1 > > JEMTobRoI_v1_l5;
-    std::vector< ElementLinkVector< xAOD::JEMTobRoIContainer_v1 > > JEMTobRoI_v1_l6;        
-     */
-     
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JEMTobRoIContainer_v1 );
     // JetElement
-    xAOD::JetElementContainer_v2 JetElement_v2_c1;
-     /*
-    DataLink< xAOD::JetElementContainer_v2 > JetElement_v2_l1;
-    ElementLink< xAOD::JetElementContainer_v2 > JetElement_v2_l2;
-    ElementLinkVector< xAOD::JetElementContainer_v2 > JetElement_v2_l3;
-    std::vector< DataLink< xAOD::JetElementContainer_v2 > > JetElement_v2_l4;
-    std::vector< ElementLink< xAOD::JetElementContainer_v2 > > JetElement_v2_l5;
-    std::vector< ElementLinkVector< xAOD::JetElementContainer_v2 > > JetElement_v2_l6;
-     */
-    
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, JetElementContainer_v2 );
     // L1TopoRawData
-    xAOD::L1TopoRawDataContainer_v1 L1TopoRawData_v1_c1;
-     /*
-    DataLink< xAOD::L1TopoRawDataContainer_v1 > L1TopoRawData_v1_l1;
-    ElementLink< xAOD::L1TopoRawDataContainer_v1 > L1TopoRawData_v1_l2;
-    ElementLinkVector< xAOD::L1TopoRawDataContainer_v1 > L1TopoRawData_v1_l3;
-    std::vector< DataLink< xAOD::L1TopoRawDataContainer_v1 > > L1TopoRawData_v1_l4;
-    std::vector< ElementLink< xAOD::L1TopoRawDataContainer_v1 > > L1TopoRawData_v1_l5;
-    std::vector< ElementLinkVector< xAOD::L1TopoRawDataContainer_v1 > > L1TopoRawData_v1_l6;    
-     */
-    
+    XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, L1TopoRawDataContainer_v1 );
   };
 }
 
-template class DataVector<xAOD::TriggerTower_v2>;
-
 #endif // XAODTRIGL1CALO_XAODTRIGL1CALOCALOEVENTDICT_H
diff --git a/Event/xAOD/xAODTrigMinBias/CMakeLists.txt b/Event/xAOD/xAODTrigMinBias/CMakeLists.txt
index b914b5fd7b206a37abf1d847dbdb9b79d865d620..5f96dd03ae3abe9dcb337170cb4bc3f926f8736c 100644
--- a/Event/xAOD/xAODTrigMinBias/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigMinBias/CMakeLists.txt
@@ -1,30 +1,31 @@
-# $Id: CMakeLists.txt 751124 2016-05-31 12:55:34Z krasznaa $
-################################################################################
-# Package: xAODTrigMinBias
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigMinBias )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Event/xAOD/xAODCore
-   PRIVATE
-   Control/AthLinks )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigMinBias
    xAODTrigMinBias/*.h xAODTrigMinBias/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODTrigMinBias
    LINK_LIBRARIES AthContainers xAODCore )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigMinBias/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigSpacePointCountsContainer_v1"
+              "xAOD::TrigT2MbtsBitsContainer_v1" "xAOD::TrigHisto2DContainer_v1"
+              "xAOD::TrigTrackCountsContainer_v1"
+              "xAOD::TrigVertexCountsContainer_v1"
+              "xAOD::TrigT2ZdcSignalsContainer_v1" )
+
 atlas_add_dictionary( xAODTrigMinBiasDict
    xAODTrigMinBias/xAODTrigMinBiasDict.h
-   xAODTrigMinBias/selection.xml
-   LINK_LIBRARIES AthLinks xAODTrigMinBias
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTrigMinBias
    EXTRA_FILES Root/dict/*.cxx )
 
-# Generate CLIDs from the library:
+# Generate CLIDs from the library.
 atlas_generate_cliddb( xAODTrigMinBias )
diff --git a/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/selection.xml b/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/selection.xml
index 48ded7f23f3d83dffa52e59d9f67f431430aa506..ca6aab76eeac5e1b0aaf9057f2ffd4bb37a728e2 100644
--- a/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/selection.xml
+++ b/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/selection.xml
@@ -1,27 +1,76 @@
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
-  <class name="xAOD::TrigSpacePointCounts_v1" />
-  <class name="xAOD::TrigSpacePointCountsContainer_v1" id="519EBE61-C135-46C7-AD7D-C661DC6FC4B5" />
-  <class name="xAOD::TrigSpacePointCountsAuxContainer_v1" id="C682FD32-73CC-4773-ACBF-30B2657C5991" />
-  <class name="xAOD::TrigT2MbtsBits_v1" />
-  <class name="xAOD::TrigT2MbtsBitsContainer_v1" id="FF96BF06-1206-11E4-9605-02163E00A892" />
-  <class name="xAOD::TrigT2MbtsBitsAuxContainer_v1" id="0055818E-1207-11E4-9C7B-02163E00A892" />
-  <class name="xAOD::TrigHisto2D_v1" />
-  <class name="xAOD::TrigHisto2DContainer_v1" id="0116E8A6-1207-11E4-8724-02163E00A892" />
-  <class name="xAOD::TrigHisto2DAuxContainer_v1" id="05B28A1E-1207-11E4-84E2-02163E00A892" />
-  <class name="xAOD::TrigTrackCounts_v1" />
-  <class name="xAOD::TrigTrackCountsContainer_v1" id="0650DED0-1207-11E4-9CD1-02163E00A892" />
-  <class name="xAOD::TrigTrackCountsAuxContainer_v1" id="0701BEB0-1207-11E4-9D08-02163E00A892" />
-  <class name="xAOD::TrigVertexCounts_v1" />
-  <class name="xAOD::TrigVertexCountsContainer_v1" id="07EE6B72-1207-11E4-8B69-02163E00A892" />
-  <class name="xAOD::TrigVertexCountsAuxContainer_v1" id="70E7BDFE-1207-11E4-ACEF-02163E00A892" />
-  <class name="xAOD::TrigT2ZdcSignals_v1" />
-  <class name="xAOD::TrigT2ZdcSignalsContainer_v1" id="8313279A-5E27-11E4-A635-02163E00A82C" />
-  <class name="xAOD::TrigT2ZdcSignalsAuxContainer_v1" id="83B9F174-5E27-11E4-98C2-02163E00A82" />
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-  </exclusion>
+
+   <!-- xAOD::TrigSpacePointCounts interface type(s). -->
+   <class name="xAOD::TrigSpacePointCounts_v1" />
+   <class name="xAOD::TrigSpacePointCountsContainer_v1"
+          id="519EBE61-C135-46C7-AD7D-C661DC6FC4B5" />
+   <typedef name="xAOD::TrigSpacePointCounts" />
+   <typedef name="xAOD::TrigSpacePointCountsContainer" />
+
+   <!-- xAOD::TrigSpacePointCounts auxiliary type(s). -->
+   <class name="xAOD::TrigSpacePointCountsAuxContainer_v1"
+          id="C682FD32-73CC-4773-ACBF-30B2657C5991" />
+   <typedef name="xAOD::TrigSpacePointCountsAuxContainer" />
+
+   <!-- xAOD::TrigT2MbtsBits interface type(s). -->
+   <class name="xAOD::TrigT2MbtsBits_v1" />
+   <class name="xAOD::TrigT2MbtsBitsContainer_v1"
+          id="FF96BF06-1206-11E4-9605-02163E00A892" />
+   <typedef name="xAOD::TrigT2MbtsBits" />
+   <typedef name="xAOD::TrigT2MbtsBitsContainer" />
+
+   <!-- xAOD::TrigT1MbtsBits auxiliary type(s). -->
+   <class name="xAOD::TrigT2MbtsBitsAuxContainer_v1"
+          id="0055818E-1207-11E4-9C7B-02163E00A892" />
+   <typedef name="xAOD::TrigT2MbtsBitsAuxContainer" />
+
+   <!-- xAOD::TrigHisto2D interface type(s). -->
+   <class name="xAOD::TrigHisto2D_v1" />
+   <class name="xAOD::TrigHisto2DContainer_v1"
+          id="0116E8A6-1207-11E4-8724-02163E00A892" />
+   <typedef name="xAOD::TrigHisto2D" />
+   <typedef name="xAOD::TrigHisto2DContainer" />
+
+   <!-- xAOD::TrigHisto2D auxiliary type(s). -->
+   <class name="xAOD::TrigHisto2DAuxContainer_v1"
+          id="05B28A1E-1207-11E4-84E2-02163E00A892" />
+   <typedef name="xAOD::TrigHisto2DAuxContainer" />
+
+   <!-- xAOD::TrigTrackCounts interface type(s). -->
+   <class name="xAOD::TrigTrackCounts_v1" />
+   <class name="xAOD::TrigTrackCountsContainer_v1"
+          id="0650DED0-1207-11E4-9CD1-02163E00A892" />
+   <typedef name="xAOD::TrigTrackCounts" />
+   <typedef name="xAOD::TrigTrackCountsContainer" />
+
+   <!-- xAOD::TrigTrackCounts auxiliary type(s). -->
+   <class name="xAOD::TrigTrackCountsAuxContainer_v1"
+          id="0701BEB0-1207-11E4-9D08-02163E00A892" />
+   <typedef name="xAOD::TrigTrackCountsAuxContainer" />
+
+   <!-- xAOD::TrigVertexCounts interface type(s). -->
+   <class name="xAOD::TrigVertexCounts_v1" />
+   <class name="xAOD::TrigVertexCountsContainer_v1"
+          id="07EE6B72-1207-11E4-8B69-02163E00A892" />
+   <typedef name="xAOD::TrigVertexCounts" />
+   <typedef name="xAOD::TrigVertexCountsContainer" />
+
+   <!-- xAOD::TrigVertexCounts auxiliary type(s). -->
+   <class name="xAOD::TrigVertexCountsAuxContainer_v1"
+          id="70E7BDFE-1207-11E4-ACEF-02163E00A892" />
+   <typedef name="xAOD::TrigVertexCountsAuxContainer" />
+
+   <!-- xAOD::TrigT2ZdcSignals interface type(s). -->
+   <class name="xAOD::TrigT2ZdcSignals_v1" />
+   <class name="xAOD::TrigT2ZdcSignalsContainer_v1"
+          id="8313279A-5E27-11E4-A635-02163E00A82C" />
+   <typedef name="xAOD::TrigT2ZdcSignals" />
+   <typedef name="xAOD::TrigT2ZdcSignalsContainer" />
+
+   <!-- xAOD::TrigT2ZdcSignals auxiliary type(s). -->
+   <class name="xAOD::TrigT2ZdcSignalsAuxContainer_v1"
+          id="83B9F174-5E27-11E4-98C2-02163E00A82" />
+   <typedef name="xAOD::TrigT2ZdcSignalsAuxContainer" />
+
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/xAODTrigMinBiasDict.h b/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/xAODTrigMinBiasDict.h
index 9dfc23333d39aa30560d78a5e223b35859640c11..bab6e929e52f6f7c1230665181753f381803cd33 100644
--- a/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/xAODTrigMinBiasDict.h
+++ b/Event/xAOD/xAODTrigMinBias/xAODTrigMinBias/xAODTrigMinBiasDict.h
@@ -1,80 +1,68 @@
+// Dear emacs, this is -*- c++ -*-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef xAODTrigMinBias_xAODTrigMinBias_DICT_H
 #define xAODTrigMinBias_xAODTrigMinBias_DICT_H
 
-// Include all headers here that need to have dictionaries
-// generated for them.
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
+// Local include(s).
+#include "xAODTrigMinBias/TrigSpacePointCounts.h"
+#include "xAODTrigMinBias/TrigSpacePointCountsContainer.h"
+#include "xAODTrigMinBias/TrigSpacePointCountsAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigSpacePointCounts_v1.h"
 #include "xAODTrigMinBias/versions/TrigSpacePointCountsContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigSpacePointCountsAuxContainer_v1.h"
 
+#include "xAODTrigMinBias/TrigT2MbtsBits.h"
+#include "xAODTrigMinBias/TrigT2MbtsBitsContainer.h"
+#include "xAODTrigMinBias/TrigT2MbtsBitsAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigT2MbtsBits_v1.h"
 #include "xAODTrigMinBias/versions/TrigT2MbtsBitsContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigT2MbtsBitsAuxContainer_v1.h"
 
+#include "xAODTrigMinBias/TrigHisto2D.h"
+#include "xAODTrigMinBias/TrigHisto2DContainer.h"
+#include "xAODTrigMinBias/TrigHisto2DAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigHisto2D_v1.h"
 #include "xAODTrigMinBias/versions/TrigHisto2DContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigHisto2DAuxContainer_v1.h"
 
+#include "xAODTrigMinBias/TrigVertexCounts.h"
+#include "xAODTrigMinBias/TrigVertexCountsContainer.h"
+#include "xAODTrigMinBias/TrigVertexCountsAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigVertexCounts_v1.h"
 #include "xAODTrigMinBias/versions/TrigVertexCountsContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigVertexCountsAuxContainer_v1.h"
 
+#include "xAODTrigMinBias/TrigTrackCounts.h"
+#include "xAODTrigMinBias/TrigTrackCountsContainer.h"
+#include "xAODTrigMinBias/TrigTrackCountsAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigTrackCounts_v1.h"
 #include "xAODTrigMinBias/versions/TrigTrackCountsContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigTrackCountsAuxContainer_v1.h"
 
+#include "xAODTrigMinBias/TrigT2ZdcSignals.h"
+#include "xAODTrigMinBias/TrigT2ZdcSignalsContainer.h"
+#include "xAODTrigMinBias/TrigT2ZdcSignalsAuxContainer.h"
 #include "xAODTrigMinBias/versions/TrigT2ZdcSignals_v1.h"
 #include "xAODTrigMinBias/versions/TrigT2ZdcSignalsContainer_v1.h"
 #include "xAODTrigMinBias/versions/TrigT2ZdcSignalsAuxContainer_v1.h"
 
-//i don't know what for
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGMINBIAS {
-      xAOD::TrigSpacePointCountsContainer_v1 c1;
-      DataLink< xAOD::TrigSpacePointCountsContainer_v1 > dl1;
-      std::vector< DataLink< xAOD::TrigSpacePointCountsContainer_v1 > > dl2;
-      ElementLink< xAOD::TrigSpacePointCountsContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::TrigSpacePointCountsContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::TrigSpacePointCountsContainer_v1 > > > el3;
-      
-      xAOD::TrigT2MbtsBitsContainer_v1 ct1;
-      DataLink< xAOD::TrigT2MbtsBitsContainer_v1 > dlt1;
-      std::vector< DataLink< xAOD::TrigT2MbtsBitsContainer_v1 > > dlt2;
-      ElementLink< xAOD::TrigT2MbtsBitsContainer_v1 > elt1;
-      std::vector< ElementLink< xAOD::TrigT2MbtsBitsContainer_v1 > > elt2;
-      std::vector< std::vector< ElementLink< xAOD::TrigT2MbtsBitsContainer_v1 > > > elt3;
-      
-      xAOD::TrigVertexCountsContainer_v1 cv1;
-      DataLink< xAOD::TrigVertexCountsContainer_v1 > dlv1;
-      std::vector< DataLink< xAOD::TrigVertexCountsContainer_v1 > > dlv2;
-      ElementLink< xAOD::TrigVertexCountsContainer_v1 > elv1;
-      std::vector< ElementLink< xAOD::TrigVertexCountsContainer_v1 > > elv2;
-      std::vector< std::vector< ElementLink< xAOD::TrigVertexCountsContainer_v1 > > > elv3;
-      
-      xAOD::TrigTrackCountsContainer_v1 ctt1;
-      DataLink< xAOD::TrigTrackCountsContainer_v1 > dltt1;
-      std::vector< DataLink< xAOD::TrigTrackCountsContainer_v1 > > dltt2;
-      ElementLink< xAOD::TrigTrackCountsContainer_v1 > eltt1;
-      std::vector< ElementLink< xAOD::TrigTrackCountsContainer_v1 > > eltt2;
-      std::vector< std::vector< ElementLink< xAOD::TrigTrackCountsContainer_v1 > > > eltt3;
-
-      xAOD::TrigT2ZdcSignalsContainer_v1 czdct1;
-      DataLink< xAOD::TrigT2ZdcSignalsContainer_v1 > dlzdct1;
-      std::vector< DataLink< xAOD::TrigT2ZdcSignalsContainer_v1 > > dlzdct2;
-      ElementLink< xAOD::TrigT2ZdcSignalsContainer_v1 > elzdct1;
-      std::vector< ElementLink< xAOD::TrigT2ZdcSignalsContainer_v1 > > elzdct2;
-      std::vector< std::vector< ElementLink< xAOD::TrigT2ZdcSignalsContainer_v1 > > > elzdct3;
-
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD,
+                                           TrigSpacePointCountsContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigT2MbtsBitsContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigHisto2DContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigVertexCountsContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigTrackCountsContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigT2ZdcSignalsContainer_v1 );
    };
-} // private namespace
+}
 
-#endif
+#endif // xAODTrigMinBias_xAODTrigMinBias_DICT_H
diff --git a/Event/xAOD/xAODTrigMissingET/CMakeLists.txt b/Event/xAOD/xAODTrigMissingET/CMakeLists.txt
index 7bc799388cbce8bf071d2bb13c6e5b88f9ddec7a..09d60f2e2f2046cb678d89a6106023dcbf0923f3 100644
--- a/Event/xAOD/xAODTrigMissingET/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigMissingET/CMakeLists.txt
@@ -1,33 +1,24 @@
-################################################################################
-# Package: xAODTrigMissingET
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigMissingET )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Event/xAOD/xAODCore
-                          PRIVATE
-                          Control/AthLinks )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigMissingET
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigMissingET
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers xAODCore
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks )
-
-atlas_add_dictionary( xAODTrigMissingETDict
-                      xAODTrigMissingET/xAODTrigMissingETDict.h
-                      xAODTrigMissingET/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers xAODCore AthLinks xAODTrigMissingET
-                      EXTRA_FILES Root/dict/*.cxx )
+   xAODTrigMissingET/versions/*.h xAODTrigMissingET/*.h Root/*.cxx
+   PUBLIC_HEADERS xAODTrigMissingET
+   LINK_LIBRARIES AthContainers xAODCore )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigMissingET/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigMissingETContainer_v1" )
 
+atlas_add_dictionary( xAODTrigMissingETDict
+   xAODTrigMissingET/xAODTrigMissingETDict.h
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTrigMissingET
+   EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/selection.xml b/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/selection.xml
index 4a323ae44fd7539c0752bc6b3b4d0a4b3188fa72..9d497d7beb5086737d00acf100d20c0a7200823b 100644
--- a/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/selection.xml
+++ b/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/selection.xml
@@ -1,20 +1,16 @@
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
-  <class name="xAOD::TrigMissingET_v1" />
-  <class name="xAOD::TrigMissingETContainer_v1"             id="3EA0678D-5DCA-4BA8-BB29-775CB9A246AC" />
-  <class name="xAOD::TrigMissingETAuxContainer_v1"          id="E8C1613E-5E47-4B7F-8ED7-B30A8FE21DB4" />
 
-  <class name="DataLink<xAOD::TrigMissingETContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TrigMissingETContainer_v1> >" />
+   <!-- xAOD::TrigMissingET interface type(s). -->
+   <class name="xAOD::TrigMissingET_v1" />
+   <class name="xAOD::TrigMissingETContainer_v1"
+          id="3EA0678D-5DCA-4BA8-BB29-775CB9A246AC" />
+   <typedef name="xAOD::TrigMissingET" />
+   <typedef name="xAOD::TrigMissingETContainer" />
 
-  <class name="ElementLink<xAOD::TrigMissingETContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigMissingETContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigMissingETContainer_v1> > >" />
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-  </exclusion>
+   <!-- xAOD::TrigMissingET auxiliary type(s). -->
+   <class name="xAOD::TrigMissingETAuxContainer_v1"
+          id="E8C1613E-5E47-4B7F-8ED7-B30A8FE21DB4" />
+   <typedef name="xAOD::TrigMissingETAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/xAODTrigMissingETDict.h b/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/xAODTrigMissingETDict.h
index 05c79b8142592b5f3ab33b631fdb17493014efe9..e8c34047f358e473e7f4aacbfb00c666e9e67127 100644
--- a/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/xAODTrigMissingETDict.h
+++ b/Event/xAOD/xAODTrigMissingET/xAODTrigMissingET/xAODTrigMissingETDict.h
@@ -1,36 +1,27 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTrigMissingETDict.h 630930 2014-11-25 14:57:49Z gwatts $
 #ifndef xAODTrigMissingET_xAODTrigMissingET_DICT_H
 #define xAODTrigMissingET_xAODTrigMissingET_DICT_H
 
-// Include all headers here that need to have dictionaries
-// generated for them.
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
 // Local include(s):
 #include "xAODTrigMissingET/TrigMissingET.h"
 #include "xAODTrigMissingET/TrigMissingETContainer.h"
+#include "xAODTrigMissingET/TrigMissingETAuxContainer.h"
 #include "xAODTrigMissingET/versions/TrigMissingET_v1.h"
 #include "xAODTrigMissingET/versions/TrigMissingETContainer_v1.h"
 #include "xAODTrigMissingET/versions/TrigMissingETAuxContainer_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGMISSINGET {
-      xAOD::TrigMissingETContainer_v1 c1;
-      DataLink< xAOD::TrigMissingETContainer_v1 > dl1;
-      std::vector< DataLink< xAOD::TrigMissingETContainer_v1 > > dl2;
-      ElementLink< xAOD::TrigMissingETContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::TrigMissingETContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::TrigMissingETContainer_v1 > > > el3;
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigMissingETContainer_v1 );
    };
-} // private namespace
+}
 
-#endif
+#endif // xAODTrigMissingET_xAODTrigMissingET_DICT_H
diff --git a/Event/xAOD/xAODTrigMuon/CMakeLists.txt b/Event/xAOD/xAODTrigMuon/CMakeLists.txt
index 1e60def6b2e5398082faccf92ebf20bb2c4ce6af..7cd013f180e94bd6ae2448519d7a24d0201253a3 100644
--- a/Event/xAOD/xAODTrigMuon/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigMuon/CMakeLists.txt
@@ -1,41 +1,29 @@
-################################################################################
-# Package: xAODTrigMuon
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigMuon )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Event/xAOD/xAODBase
-                          Event/xAOD/xAODCore
-                          Event/xAOD/xAODTracking
-                          PRIVATE
-                          Control/AthLinks )
+# External dependencies.
+find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Physics Core Tree MathCore Hist RIO pthread GenVector )
-
-# Extra dependencies, based on what environment we are in:
-if (BUILDVP1LIGHT)
-    if( BUILDVP1LIGHT_DIST STREQUAL "ubuntu")
-        set( extra_libs GenVector )
-    endif()
-endif()
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigMuon
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigMuon
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers xAODBase xAODCore xAODTracking ${extra_libs}
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} AthLinks )
+    xAODTrigMuon/*.h xAODTrigMuon/versions/*.h Root/*.cxx
+    PUBLIC_HEADERS xAODTrigMuon
+    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+    LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCore
+    xAODTracking )
 
-atlas_add_dictionary( xAODTrigMuonDict
-                      xAODTrigMuon/xAODTrigMuonDict.h
-                      xAODTrigMuon/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers xAODBase xAODCore xAODTracking AthLinks xAODTrigMuon
-                      EXTRA_FILES Root/dict/*.cxx )
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigMuon/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::L2StandAloneMuonContainer_v1"
+              "xAOD::L2StandAloneMuonContainer_v2" "xAOD::L2IsoMuonContainer_v1"
+              "xAOD::L2CombinedMuonContainer_v1" )
 
+atlas_add_dictionary( xAODTrigMuonDict
+    xAODTrigMuon/xAODTrigMuonDict.h
+    ${_selectionFile}
+    LINK_LIBRARIES xAODCore xAODTrigMuon
+    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigMuon/xAODTrigMuon/selection.xml b/Event/xAOD/xAODTrigMuon/xAODTrigMuon/selection.xml
index 0b8c9e2317debb53bf1ac6864bce3df4630caa2e..f1d072badb62a8e5f5d54c2e377bc7f61443299c 100644
--- a/Event/xAOD/xAODTrigMuon/xAODTrigMuon/selection.xml
+++ b/Event/xAOD/xAODTrigMuon/xAODTrigMuon/selection.xml
@@ -1,90 +1,72 @@
-<!-- $Id: selection.xml 706292 2015-11-06 05:33:24Z ssnyder $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- dictionaries: -->
-
-  <!-- L2StandAloneMuon_v1 -->
-  <class name="xAOD::L2StandAloneMuon_v1" />
-
-  <class name="xAOD::L2StandAloneMuonContainer_v1"
-         id="645BDBC3-44EE-486B-8783-96F93FA2550B" />
-  <class name="xAOD::L2StandAloneMuonAuxContainer_v1"
-         id="69F56941-D2B5-4C70-BFBD-605CB64A3DB8" />
-
-  <class name="DataLink<xAOD::L2StandAloneMuonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::L2StandAloneMuonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::L2StandAloneMuonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v1> > >" />
-
-  <!-- L2StandAloneMuon_v2 -->
-  <class name="xAOD::L2StandAloneMuon_v2" />
-
-  <class name="xAOD::L2StandAloneMuonContainer_v2"
-         id="6B02C486-CB3B-4762-89CA-60B210FC5AAF" />
-  <class name="xAOD::L2StandAloneMuonAuxContainer_v2"
-         id="39CA616A-16BF-4CCE-8885-3D68CE7BC3B0" />
-
-  <class name="DataLink<xAOD::L2StandAloneMuonContainer_v2>" />
-  <class name="std::vector<DataLink<xAOD::L2StandAloneMuonContainer_v2> >" />
-
-  <class name="ElementLink<xAOD::L2StandAloneMuonContainer_v2>" />
-  <class name="std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v2> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v2> > >" />
-
-  <!-- L2IsoMuon -->
-  <class name="xAOD::L2IsoMuon_v1" />
-
-  <class name="xAOD::L2IsoMuonContainer_v1"
-         id="D3AD2358-29B9-48D1-B181-89D4DA39B5CC" />
-  <class name="xAOD::L2IsoMuonAuxContainer_v1"
-         id="09310901-41D9-49FB-A131-5AC73A9EA455" />
-
-  <class name="DataLink<xAOD::L2IsoMuonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::L2IsoMuonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::L2IsoMuonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::L2IsoMuonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::L2IsoMuonContainer_v1> > >" />
-
-  <!-- L2CombinedMuon -->
-  <class name="xAOD::L2CombinedMuon_v1" />
-
-  <class name="xAOD::L2CombinedMuonContainer_v1"
-         id="91ECD1FA-3B9F-4F80-BBD1-698DCC7C9477" />
-  <class name="xAOD::L2CombinedMuonAuxContainer_v1"
-         id="0A7A1CB4-A5D3-4447-BE1A-F4DA14D5891B" />
-
-  <class name="DataLink<xAOD::L2CombinedMuonContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::L2CombinedMuonContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::L2CombinedMuonContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::L2CombinedMuonContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::L2CombinedMuonContainer_v1> > >" />
-
-  <read sourceClass="xAOD::L2CombinedMuonAuxContainer_v1"
-        targetClass="xAOD::L2CombinedMuonAuxContainer_v1"
-        checksum="[1033889070]"
-        source="std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v1> > muSATrackLink"
-        target="muSATrackLink" >
-    <![CDATA[
-       muSATrackLink.clear();
-       muSATrackLink.reserve (onfile.muSATrackLink.size());
-       for (const ElementLink<xAOD::L2StandAloneMuonContainer_v1>& el : 
-            onfile.muSATrackLink)
-       {
-         muSATrackLink.emplace_back (el.key(), el.index(), el.source());
-       }
-    ]]>
-  </read>
-
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="DataVector<xAOD::IParticle>" />
-  </exclusion>
+   <!-- xAOD::L2StandAloneMuon interface type(s). -->
+   <class name="xAOD::L2StandAloneMuon_v1" />
+   <class name="xAOD::L2StandAloneMuonContainer_v1"
+          id="645BDBC3-44EE-486B-8783-96F93FA2550B" />
+   <class name="xAOD::L2StandAloneMuon_v2" />
+   <class name="xAOD::L2StandAloneMuonContainer_v2"
+          id="6B02C486-CB3B-4762-89CA-60B210FC5AAF" />
+   <typedef name="xAOD::L2StandAloneMuon" />
+   <typedef name="xAOD::L2StandAloneMuonContainer" />
+
+   <!-- Tell ROOT that it should automatically convert between smart pointer -->
+   <!-- types. -->
+   <read sourceClass="DataLink<xAOD::L2StandAloneMuonContainer_v1>"
+         version="[1-]"
+         targetClass="DataLink<xAOD::L2StandAloneMuonContainer_v2>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::L2StandAloneMuonContainer_v1>"
+         version="[1-]"
+         targetClass="ElementLink<xAOD::L2StandAloneMuonContainer_v2>"
+         source="" target="" />
+
+   <!-- xAOD::L2StandAloneMuon auxiliary type(s). -->
+   <class name="xAOD::L2StandAloneMuonAuxContainer_v1"
+          id="69F56941-D2B5-4C70-BFBD-605CB64A3DB8" />
+   <class name="xAOD::L2StandAloneMuonAuxContainer_v2"
+          id="39CA616A-16BF-4CCE-8885-3D68CE7BC3B0" />
+   <typedef name="xAOD::L2StandAloneMuonAuxContainer" />
+
+   <!-- xAOD::L2IsoMuon interface type(s). -->
+   <class name="xAOD::L2IsoMuon_v1" />
+   <class name="xAOD::L2IsoMuonContainer_v1"
+          id="D3AD2358-29B9-48D1-B181-89D4DA39B5CC" />
+   <typedef name="xAOD::L2IsoMuon" />
+   <typedef name="xAOD::L2IsoMuonContainer" />
+
+   <!-- xAOD::L2IsoMuon auxiliary type(s). -->
+   <class name="xAOD::L2IsoMuonAuxContainer_v1"
+          id="09310901-41D9-49FB-A131-5AC73A9EA455" />
+   <typedef name="xAOD::L2IsoMuonAuxContainer" />
+
+   <!-- xAOD::L2CombinedMuon interface type(s). -->
+   <class name="xAOD::L2CombinedMuon_v1" />
+   <class name="xAOD::L2CombinedMuonContainer_v1"
+          id="91ECD1FA-3B9F-4F80-BBD1-698DCC7C9477" />
+   <typedef name="xAOD::L2CombinedMuon" />
+   <typedef name="xAOD::L2CombinedMuonContainer" />
+
+   <!-- xAOD::L2CombinedMuon auxiliary type(s). -->
+   <class name="xAOD::L2CombinedMuonAuxContainer_v1"
+          id="0A7A1CB4-A5D3-4447-BE1A-F4DA14D5891B" />
+   <typedef name="xAOD::L2CombinedMuonAuxContainer" />
+
+   <read sourceClass="xAOD::L2CombinedMuonAuxContainer_v1"
+         targetClass="xAOD::L2CombinedMuonAuxContainer_v1"
+         checksum="[1033889070]"
+         source="std::vector<ElementLink<xAOD::L2StandAloneMuonContainer_v1> > muSATrackLink"
+         target="muSATrackLink" >
+     <![CDATA[
+        muSATrackLink.clear();
+        muSATrackLink.reserve (onfile.muSATrackLink.size());
+        for (const ElementLink<xAOD::L2StandAloneMuonContainer_v1>& el :
+             onfile.muSATrackLink)
+        {
+          muSATrackLink.emplace_back (el.key(), el.index(), el.source());
+        }
+     ]]>
+   </read>
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigMuon/xAODTrigMuon/xAODTrigMuonDict.h b/Event/xAOD/xAODTrigMuon/xAODTrigMuon/xAODTrigMuonDict.h
index 49625d7b74ad92525356a51c31b2ed5a6f4afadd..6b7ae4fea1a8b60f83799ab35fc327b3e3a81542 100644
--- a/Event/xAOD/xAODTrigMuon/xAODTrigMuon/xAODTrigMuonDict.h
+++ b/Event/xAOD/xAODTrigMuon/xAODTrigMuon/xAODTrigMuonDict.h
@@ -1,73 +1,48 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTrigMuonDict.h 698126 2015-10-02 12:59:53Z mishitsu $
 #ifndef XAODTRIGMUON_XAODTRIGMUONDICT_H
 #define XAODTRIGMUON_XAODTRIGMUONDICT_H
 
-// Needed to successfully generate the dictionary in standalone mode:
-#if defined(__GCCXML__) and not defined(EIGEN_DONT_VECTORIZE)
-#   define EIGEN_DONT_VECTORIZE
-#endif // __GCCXML__
-
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODTrigMuon/L2StandAloneMuon.h"
 #include "xAODTrigMuon/L2StandAloneMuonContainer.h"
-#include "xAODTrigMuon/L2IsoMuonContainer.h"
-#include "xAODTrigMuon/L2CombinedMuonContainer.h"
+#include "xAODTrigMuon/L2StandAloneMuonAuxContainer.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuon_v1.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuonContainer_v1.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuonAuxContainer_v1.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuon_v2.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuonContainer_v2.h"
 #include "xAODTrigMuon/versions/L2StandAloneMuonAuxContainer_v2.h"
+
+#include "xAODTrigMuon/L2IsoMuon.h"
+#include "xAODTrigMuon/L2IsoMuonContainer.h"
+#include "xAODTrigMuon/L2IsoMuonAuxContainer.h"
 #include "xAODTrigMuon/versions/L2IsoMuon_v1.h"
 #include "xAODTrigMuon/versions/L2IsoMuonContainer_v1.h"
 #include "xAODTrigMuon/versions/L2IsoMuonAuxContainer_v1.h"
+
+#include "xAODTrigMuon/L2CombinedMuon.h"
+#include "xAODTrigMuon/L2CombinedMuonContainer.h"
+#include "xAODTrigMuon/L2CombinedMuonAuxContainer.h"
 #include "xAODTrigMuon/versions/L2CombinedMuon_v1.h"
 #include "xAODTrigMuon/versions/L2CombinedMuonContainer_v1.h"
 #include "xAODTrigMuon/versions/L2CombinedMuonAuxContainer_v1.h"
 
-namespace{
-   struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGMUON {
-
-      xAOD::L2StandAloneMuonContainer_v1 muonsa_c1;
-      DataLink< xAOD::L2StandAloneMuonContainer_v1 > muonsa_dl1;
-      std::vector< DataLink< xAOD::L2StandAloneMuonContainer_v1 > > muonsa_dl2;
-      ElementLink< xAOD::L2StandAloneMuonContainer_v1 > muonsa_el1;
-      std::vector< ElementLink< xAOD::L2StandAloneMuonContainer_v1 > > muonsa_el2;
-      std::vector< std::vector< ElementLink< xAOD::L2StandAloneMuonContainer_v1 > > > muonsa_el3;
-
-      xAOD::L2StandAloneMuonContainer_v2 muonsa_c2;
-      DataLink< xAOD::L2StandAloneMuonContainer_v2 > muonsa_dl4;
-      std::vector< DataLink< xAOD::L2StandAloneMuonContainer_v2 > > muonsa_dl5;
-      ElementLink< xAOD::L2StandAloneMuonContainer_v2 > muonsa_el4;
-      std::vector< ElementLink< xAOD::L2StandAloneMuonContainer_v2 > > muonsa_el5;
-      std::vector< std::vector< ElementLink< xAOD::L2StandAloneMuonContainer_v2 > > > muonsa_el6;
-
-      xAOD::L2IsoMuonContainer_v1 muoniso_c1;
-      DataLink< xAOD::L2IsoMuonContainer_v1 > muoniso_dl1;
-      std::vector< DataLink< xAOD::L2IsoMuonContainer_v1 > > muoniso_dl2;
-      ElementLink< xAOD::L2IsoMuonContainer_v1 > muoniso_el1;
-      std::vector< ElementLink< xAOD::L2IsoMuonContainer_v1 > > muoniso_el2;
-      std::vector< std::vector< ElementLink< xAOD::L2IsoMuonContainer_v1 > > > muoniso_el3;
-
-      xAOD::L2CombinedMuonContainer_v1 muoncb_c1;
-      DataLink< xAOD::L2CombinedMuonContainer_v1 > muoncb_dl1;
-      std::vector< DataLink< xAOD::L2CombinedMuonContainer_v1 > > muoncb_dl2;
-      ElementLink< xAOD::L2CombinedMuonContainer_v1 > muoncb_el1;
-      std::vector< ElementLink< xAOD::L2CombinedMuonContainer_v1 > > muoncb_el2;
-      std::vector< std::vector< ElementLink< xAOD::L2CombinedMuonContainer_v1 > > > muoncb_el3;
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODTRIGMUON {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, L2StandAloneMuonContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, L2StandAloneMuonContainer_v2 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, L2IsoMuonContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, L2CombinedMuonContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
    };
 }
 
diff --git a/Event/xAOD/xAODTrigRinger/CMakeLists.txt b/Event/xAOD/xAODTrigRinger/CMakeLists.txt
index 7fa143bf63409fcd18f5c582defe9f252bbdf639..37a1fb37cdde2217163c64410736d1245c0efc33 100644
--- a/Event/xAOD/xAODTrigRinger/CMakeLists.txt
+++ b/Event/xAOD/xAODTrigRinger/CMakeLists.txt
@@ -1,33 +1,27 @@
-################################################################################
-# Package: xAODTrigRinger
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTrigRinger )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs( PUBLIC
-                          Control/AthContainers
-                          Control/AthLinks
-                          Event/xAOD/xAODCore
-                          Event/xAOD/xAODTrigCalo )
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
-# External dependencies:
-find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
-
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTrigRinger
-                   Root/*.cxx
-                   PUBLIC_HEADERS xAODTrigRinger
-                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthContainers AthLinks xAODCore xAODTrigCalo
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} )
-
-atlas_add_dictionary( xAODTrigRingerDict
-                      xAODTrigRinger/xAODTrigRingerDict.h
-                      xAODTrigRinger/selection.xml
-                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODCore xAODTrigCalo xAODTrigRinger
-                      EXTRA_FILES Root/dict/*.cxx )
+   xAODTrigRinger/*.h xAODTrigRinger/versions/*.h Root/*.cxx
+   PUBLIC_HEADERS xAODTrigRinger
+   LINK_LIBRARIES AthContainers AthLinks xAODCore xAODTrigCalo )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTrigRinger/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TrigRingerRingsContainer_v1"
+              "xAOD::TrigRingerRingsContainer_v2"
+              "xAOD::TrigRNNOutputContainer_v1"
+              "xAOD::TrigRNNOutputContainer_v2" )
 
+atlas_add_dictionary( xAODTrigRingerDict
+   xAODTrigRinger/xAODTrigRingerDict.h
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTrigRinger
+   EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODTrigRinger/xAODTrigRinger/selection.xml b/Event/xAOD/xAODTrigRinger/xAODTrigRinger/selection.xml
index 7bfd0b3c5c528a9fd32f92344e4bee016385b085..5721f57dab0b7d96cb42f9e1f8a5206577dc7d1d 100644
--- a/Event/xAOD/xAODTrigRinger/xAODTrigRinger/selection.xml
+++ b/Event/xAOD/xAODTrigRinger/xAODTrigRinger/selection.xml
@@ -1,64 +1,59 @@
-<!-- $Id: selection.xml $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- TrigRingerRings_v1 dictionaries: -->
-  <class name="xAOD::TrigRingerRings_v1" />
-  <class name="xAOD::TrigRingerRingsContainer_v1"
-           id="AEF63C18-1B19-4861-A909-FCAF11CFBFCE" />
-  <class name="xAOD::TrigRingerRingsAuxContainer_v1"
-           id="4016ADBB-830C-4523-97E2-D5FED349D98D" />
-
-         <!--       
-  <class name="ElementLink<xAOD::TrigRingerRingsContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigRingerRingsContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigRingerRingsContainer_v1> > >" />
-         -->
-
-  <!-- TrigRingerRings_v2 dictionaries: --> 
-  <class name="xAOD::TrigRingerRings_v2" />
-  <class name="xAOD::TrigRingerRingsContainer_v2"
-           id="96FADA09-FADA-4437-AC96-B02CAA5DE776" />
-  <class name="xAOD::TrigRingerRingsAuxContainer_v2"
-           id="5C14CCCA-B46E-4E2A-97F4-A15EAACB124C"/>
-  
-       
-  <class name="ElementLink<xAOD::TrigRingerRingsContainer_v2>" />
-  <class name="std::vector<ElementLink<xAOD::TrigRingerRingsContainer_v2> >"/>
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigRingerRingsContainer_v2> > >"/>
-  
-
-  <!-- TrigRNNOutput_v1 dictionaries: -->
-  <class name="xAOD::TrigRNNOutput_v1" />
-  <class name="xAOD::TrigRNNOutputContainer_v1"
-           id="E96CE49C-6A88-47A0-8DA0-F1D42E0813C8" />
-  <class name="xAOD::TrigRNNOutputAuxContainer_v1"
-           id="5090A739-C400-4322-9F91-C49441C9141F" />
-
-         <!--
-  <class name="ElementLink<xAOD::TrigRNNOutputContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TrigRNNOutputContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigRNNOutputContainer_v1> > >" />
-         -->
-
-  <!-- TrigRNNOutput_v2 dictionaries: -->
-  <class name="xAOD::TrigRNNOutput_v2" />
-  <class name="xAOD::TrigRNNOutputContainer_v2"
-           id="6410C90B-57BE-48A9-9A96-A203E4EF90F1" />
-  <class name="xAOD::TrigRNNOutputAuxContainer_v2"
-           id="725ADE43-9D9D-4856-90C6-8DE105BE62A4" />
-
-   
-  <class name="ElementLink<xAOD::TrigRNNOutputContainer_v2>" />
-  <class name="std::vector<ElementLink<xAOD::TrigRNNOutputContainer_v2> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TrigRNNOutputContainer_v2> > >" />
-
-        
-  <!-- Suppress the unwanted classes found by ROOT 6. -->
-  <!-- Hopefully we can remove these extra lines at one point... -->
-  <exclusion>
-    <class name="SG::IConstAuxStore" />
-    <class name="DataLink<SG::IConstAuxStore>" />
-    <class name="ElementLink<DataVector<xAOD::TrigEMCluster > >" />
-  </exclusion>
+   <!-- xAOD::TrigRingerRings interface type(s). -->
+   <class name="xAOD::TrigRingerRings_v1" />
+   <class name="xAOD::TrigRingerRingsContainer_v1"
+          id="AEF63C18-1B19-4861-A909-FCAF11CFBFCE" />
+   <class name="xAOD::TrigRingerRings_v2" />
+   <class name="xAOD::TrigRingerRingsContainer_v2"
+          id="96FADA09-FADA-4437-AC96-B02CAA5DE776" />
+   <typedef name="xAOD::TrigRingerRings" />
+   <typedef name="xAOD::TrigRingerRingsContainer" />
+
+   <!-- Tell ROOT that it should automatically convert between smart pointer -->
+   <!-- types. -->
+   <read sourceClass="DataLink<xAOD::TrigRingerRingsContainer_v1>"
+         version="[1-]"
+         targetClass="DataLink<xAOD::TrigRingerRingsContainer_v2>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::TrigRingerRingsContainer_v1>"
+         version="[1-]"
+         targetClass="ElementLink<xAOD::TrigRingerRingsContainer_v2>"
+         source="" target="" />
+
+   <!-- xAOD::TrigRingerRings auxiliary type(s). -->
+   <class name="xAOD::TrigRingerRingsAuxContainer_v1"
+          id="4016ADBB-830C-4523-97E2-D5FED349D98D" />
+   <class name="xAOD::TrigRingerRingsAuxContainer_v2"
+          id="5C14CCCA-B46E-4E2A-97F4-A15EAACB124C"/>
+   <typedef name="xAOD::TrigRingerRingsAuxContainer" />
+
+   <!-- xAOD::TrigRNNOutput interface type(s). -->
+   <class name="xAOD::TrigRNNOutput_v1" />
+   <class name="xAOD::TrigRNNOutputContainer_v1"
+          id="E96CE49C-6A88-47A0-8DA0-F1D42E0813C8" />
+   <class name="xAOD::TrigRNNOutput_v2" />
+   <class name="xAOD::TrigRNNOutputContainer_v2"
+          id="6410C90B-57BE-48A9-9A96-A203E4EF90F1" />
+   <typedef name="xAOD::TrigRNNOutput" />
+   <typedef name="xAOD::TrigRNNOutputContainer" />
+
+   <!-- Tell ROOT that it should automatically convert between smart pointer -->
+   <!-- types. -->
+   <read sourceClass="DataLink<xAOD::TrigRNNOutputContainer_v1>" version="[1-]"
+         targetClass="DataLink<xAOD::TrigRNNOutputContainer_v2>"
+         source="" target="" />
+   <read sourceClass="ElementLink<xAOD::TrigRNNOutputContainer_v1>"
+         version="[1-]"
+         targetClass="ElementLink<xAOD::TrigRNNOutputContainer_v2>"
+         source="" target="" />
+
+   <!-- xAOD::TrigRNNOutput auxiliary type(s). -->
+   <class name="xAOD::TrigRNNOutputAuxContainer_v1"
+          id="5090A739-C400-4322-9F91-C49441C9141F" />
+   <class name="xAOD::TrigRNNOutputAuxContainer_v2"
+         id="725ADE43-9D9D-4856-90C6-8DE105BE62A4" />
+   <typedef name="xAOD::TrigRNNOutputAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTrigRinger/xAODTrigRinger/xAODTrigRingerDict.h b/Event/xAOD/xAODTrigRinger/xAODTrigRinger/xAODTrigRingerDict.h
index 1ff2a2d9f7cf51d74297620588f5609c36e8400f..c570b23993656b1ef810102a56818551f3269170 100644
--- a/Event/xAOD/xAODTrigRinger/xAODTrigRinger/xAODTrigRingerDict.h
+++ b/Event/xAOD/xAODTrigRinger/xAODTrigRinger/xAODTrigRingerDict.h
@@ -1,81 +1,45 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef XAODTRIGRINGER_XAODTRIGRINGERDICT_H
 #define XAODTRIGRINGER_XAODTRIGRINGERDICT_H
 
-// STL include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRingerRingsContainer.h"
-#include "xAODTrigRinger/TrigRNNOutputContainer.h"
-
-// version 1
+#include "xAODTrigRinger/TrigRingerRingsAuxContainer.h"
 #include "xAODTrigRinger/versions/TrigRingerRings_v1.h"
 #include "xAODTrigRinger/versions/TrigRingerRingsContainer_v1.h"
 #include "xAODTrigRinger/versions/TrigRingerRingsAuxContainer_v1.h"
-#include "xAODTrigRinger/versions/TrigRNNOutput_v1.h"
-#include "xAODTrigRinger/versions/TrigRNNOutputContainer_v1.h"
-#include "xAODTrigRinger/versions/TrigRNNOutputAuxContainer_v1.h"
-
-// version 2
 #include "xAODTrigRinger/versions/TrigRingerRings_v2.h"
 #include "xAODTrigRinger/versions/TrigRingerRingsContainer_v2.h"
 #include "xAODTrigRinger/versions/TrigRingerRingsAuxContainer_v2.h"
+
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
+#include "xAODTrigRinger/TrigRNNOutputAuxContainer.h"
+#include "xAODTrigRinger/versions/TrigRNNOutput_v1.h"
+#include "xAODTrigRinger/versions/TrigRNNOutputContainer_v1.h"
+#include "xAODTrigRinger/versions/TrigRNNOutputAuxContainer_v1.h"
 #include "xAODTrigRinger/versions/TrigRNNOutput_v2.h"
 #include "xAODTrigRinger/versions/TrigRNNOutputContainer_v2.h"
 #include "xAODTrigRinger/versions/TrigRNNOutputAuxContainer_v2.h"
 
-#include "xAODTrigCalo/TrigEMClusterContainer.h"
-
-// ElementLink<xAOD::*Container_v1> compiling in the dictionary. The CLID
-/// is not needed in the "real" code, since users are never exposed to the _v1
-/// classes in Athena anymore.
-//#include "xAODCore/CLASS_DEF.h"
-//CLASS_DEF( xAOD::TrigRingerRingsContainer_v1 , 1337532868 , 10 )
-//CLASS_DEF( xAOD::TrigRNNOutputContainer_v1   , 1103699247 , 10 )
-
-
-namespace{
-
-  struct GCCXML_DUMMY_INSTANTIATION_XAODRINGERRINGS {
-
-    // version 1 
-    xAOD::TrigRingerRingsContainer_v1 c3;
-    ElementLink< xAOD::TrigRingerRingsContainer_v1 > a1;
-    std::vector< ElementLink< xAOD::TrigRingerRingsContainer_v1 > > a3;
-    std::vector< std::vector< ElementLink< xAOD::TrigRingerRingsContainer_v1 > > > a4;
-      
-    xAOD::TrigRNNOutputContainer_v1 c4;
-    ElementLink< xAOD::TrigRNNOutputContainer_v1 > b1;
-    std::vector< ElementLink< xAOD::TrigRNNOutputContainer_v1 > > b3;
-    std::vector< std::vector< ElementLink< xAOD::TrigRNNOutputContainer_v1 > > > b4;
-  
-    // version 2
-    xAOD::TrigRingerRingsContainer_v2 v2_c3;
-    ElementLink< xAOD::TrigRingerRingsContainer_v2 > v2_a1;
-    std::vector< ElementLink< xAOD::TrigRingerRingsContainer_v2 > > v2_a3;
-    std::vector< std::vector< ElementLink< xAOD::TrigRingerRingsContainer_v2 > > > v2_a4;
-     
-    xAOD::TrigRNNOutputContainer_v2 v2_c4;
-    ElementLink< xAOD::TrigRNNOutputContainer_v2 > v2_b1;
-    std::vector< ElementLink< xAOD::TrigRNNOutputContainer_v2 > > v2_b3;
-    std::vector< std::vector< ElementLink< xAOD::TrigRNNOutputContainer_v2 > > > v2_b4;
-
-    // Declarations needed in order to generate the dictionaries of the
-    // auxiliary containers correctly:
-    ElementLink< xAOD::TrigEMClusterContainer > dummy1;
-    std::vector< ElementLink< xAOD::TrigEMClusterContainer > > dummy2;
-
-  };
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODRINGERRINGS {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigRingerRingsContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigRingerRingsContainer_v2 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigRNNOutputContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigRNNOutputContainer_v2 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrigEMClusterContainer );
+   };
 }
 
-#endif // 
+#endif // XAODTRIGRINGER_XAODTRIGRINGERDICT_H
diff --git a/Event/xAOD/xAODTruth/CMakeLists.txt b/Event/xAOD/xAODTruth/CMakeLists.txt
index f7804228e3abbcaa96e09f76c36b70b78bd2dc1d..04c964d808232dc71569687cd1a62fcc07e74538 100644
--- a/Event/xAOD/xAODTruth/CMakeLists.txt
+++ b/Event/xAOD/xAODTruth/CMakeLists.txt
@@ -1,42 +1,37 @@
-# $Id: CMakeLists.txt 761796 2016-07-14 08:06:02Z krasznaa $
-################################################################################
-# Package: xAODTruth
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODTruth )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCore
-   PRIVATE
-   Generators/TruthUtils )
-
-# External dependencies:
+# External dependencies.
 find_package( ROOT COMPONENTS Core GenVector )
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODTruth
    xAODTruth/*.h xAODTruth/versions/*.h Root/*.h Root/*.cxx
    PUBLIC_HEADERS xAODTruth
-   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore
+   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+   LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AthLinks xAODBase xAODCore
    PRIVATE_LINK_LIBRARIES TruthUtils )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODTruth/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::TruthParticleContainer_v1" "xAOD::TruthVertexContainer_v1"
+              "xAOD::TruthEventBaseContainer_v1" "xAOD::TruthEventContainer_v1"
+              "xAOD::TruthPileupEventContainer_v1"
+              "xAOD::TruthMetaDataContainer_v1" )
+
 atlas_add_dictionary( xAODTruthDict
    xAODTruth/xAODTruthDict.h
-   xAODTruth/selection.xml
-   LINK_LIBRARIES xAODTruth
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODTruth
    EXTRA_FILES Root/dict/*.cxx )
 
-
-
 atlas_generate_cliddb( xAODTruth )
 
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( ut_xaodtruth_particle_test
    SOURCES test/ut_xaodtruth_particle_test.cxx
    LINK_LIBRARIES xAODTruth )
diff --git a/Event/xAOD/xAODTruth/xAODTruth/selection.xml b/Event/xAOD/xAODTruth/xAODTruth/selection.xml
index e051ef8fb0f866f65462af97a4e1f519411a35bf..1daa1f2c4d8cf341bb9d7d5ca0f527d14fcbae10 100644
--- a/Event/xAOD/xAODTruth/xAODTruth/selection.xml
+++ b/Event/xAOD/xAODTruth/xAODTruth/selection.xml
@@ -1,75 +1,72 @@
-<!-- $Id: selection.xml 670153 2015-05-27 11:42:29Z tbisanz $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <typedef name="xAOD::TruthParticle" />
-  <typedef name="xAOD::TruthVertex" />
-  <typedef name="xAOD::TruthEvent" />
+   <!-- xAOD::TruthParticle interface type(s). -->
+   <class name="xAOD::TruthParticle_v1" />
+   <class name="xAOD::TruthParticle_v1::Polarization" />
+   <class name="xAOD::TruthParticleContainer_v1"
+          id="58F98A16-E465-4CA5-A099-73033206D8E3" />
+   <typedef name="xAOD::TruthParticle" />
+   <typedef name="xAOD::TruthParticleContainer" />
 
-  <typedef name="xAOD::TruthParticleContainer" />
-  <typedef name="xAOD::TruthVertexContainer" />
-  <typedef name="xAOD::TruthEventContainer" />
+   <!-- xAOD::TruthParticle auxiliary type(s). -->
+   <class name="xAOD::TruthParticleAuxContainer_v1"
+          id="BA8FA08F-8DD6-420D-97D5-8B54EABECD65" />
+   <typedef name="xAOD::TruthParticleAuxContainer" />
 
-  <typedef name="xAOD::TruthParticleAuxContainer" />
-  <typedef name="xAOD::TruthVertexAuxContainer" />
-  <typedef name="xAOD::TruthEventAuxContainer" />
+   <!-- xAOD::TruthVertex interface type(s). -->
+   <class name="xAOD::TruthVertex_v1" />
+   <class name="xAOD::TruthVertexContainer_v1"
+          id="5FBAE0AB-09F7-4B6C-B066-0A003FC38ECF" />
+   <typedef name="xAOD::TruthVertex" />
+   <typedef name="xAOD::TruthVertexContainer" />
 
-  <typedef name="xAOD::TruthMetaData" />
-  <typedef name="xAOD::TruthMetaDataContainer" />
+   <!-- xAOD::TruthVertex auxiliary type(s). -->
+   <class name="xAOD::TruthVertexAuxContainer_v1"
+          id="B6BD3B02-C411-4EB9-903F-5B099D3B1A3E" />
+   <typedef name="xAOD::TruthVertexAuxContainer" />
 
+   <!-- xAOD::TruthEvent interface type(s). -->
+   <class name="xAOD::TruthEventBase_v1" />
+   <class name="xAOD::TruthEventBaseContainer_v1" />
+   <typedef name="xAOD::TruthEventBase" />
+   <typedef name="xAOD::TruthEventBaseContainer" />
 
-  <!-- The TruthParticle_v1 class(es): -->
-  <class name="xAOD::TruthParticle_v1" />
-  <class name="xAOD::TruthParticle_v1::Polarization" />
+   <class name="xAOD::TruthEvent_v1" />
+   <class name="xAOD::TruthEvent_v1::PdfInfo" />
+   <class name="xAOD::TruthEventContainer_v1"
+          id="6290F297-F529-40EE-9FE5-1C577678306D" />
+   <typedef name="xAOD::TruthEvent" />
+   <typedef name="xAOD::TruthEventContainer" />
 
-  <!-- The TruthVertex_v1 class: -->
-  <class name="xAOD::TruthVertex_v1" />
+   <class name="xAOD::TruthPileupEvent_v1" />
+   <class name="xAOD::TruthPileupEventContainer_v1"
+          id="05ECB16C-A36F-4853-8BB7-C9E7A84B4677" />
+   <typedef name="xAOD::TruthPileupEvent" />
+   <typedef name="xAOD::TruthPileupEventContainer" />
 
-  <!-- The TruthEvent_v1 class(es): -->
-  <class name="xAOD::TruthEventBase_v1" />
-  <class name="xAOD::TruthEventBaseContainer_v1" />
-  <class name="xAOD::TruthEvent_v1" />
-  <class name="xAOD::TruthPileupEvent_v1" />
-  <class name="xAOD::TruthEvent_v1::PdfInfo" />
-  <class name="xAOD::TruthMetaData_v1" />
+   <!-- xAOD::TruthEvent auxiliary type(s). -->
+   <class name="xAOD::TruthEventAuxContainer_v1"
+          id="1B945EFD-4F7D-4BDD-9FB1-6FB975315961" />
+   <typedef name="xAOD::TruthEventAuxContainer" />
 
-  <!-- The persistent classes: -->
-  <class name="xAOD::TruthParticleContainer_v1"
-         id="58F98A16-E465-4CA5-A099-73033206D8E3" />
-  <class name="xAOD::TruthVertexContainer_v1"
-         id="5FBAE0AB-09F7-4B6C-B066-0A003FC38ECF" />
-  <class name="xAOD::TruthEventContainer_v1"
-         id="6290F297-F529-40EE-9FE5-1C577678306D" />
-  <class name="xAOD::TruthPileupEventContainer_v1"
-         id="05ECB16C-A36F-4853-8BB7-C9E7A84B4677" />
-  <class name="xAOD::TruthMetaDataContainer_v1"
-         id="754BDA89-C0D9-43BF-B468-32E10C1690FE" />
+   <class name="xAOD::TruthPileupEventAuxContainer_v1"
+          id="9E9DD653-247C-4D5E-B14C-538EADEA6CD2" />
+   <typedef name="xAOD::TruthPileupEventAuxContainer" />
 
-  <class name="xAOD::TruthParticleAuxContainer_v1"
-         id="BA8FA08F-8DD6-420D-97D5-8B54EABECD65" />
-  <class name="xAOD::TruthVertexAuxContainer_v1"
-         id="B6BD3B02-C411-4EB9-903F-5B099D3B1A3E" />
-  <class name="xAOD::TruthEventAuxContainer_v1"
-         id="1B945EFD-4F7D-4BDD-9FB1-6FB975315961" />
-  <class name="xAOD::TruthPileupEventAuxContainer_v1"
-         id="9E9DD653-247C-4D5E-B14C-538EADEA6CD2" />
-  <class name="xAOD::TruthMetaDataAuxContainer_v1"
-         id="E2EF5F89-DFFA-4225-823E-29E40130A7B2" />
+   <!-- xAOD::TruthMetaData interface type(s). -->
+   <class name="xAOD::TruthMetaData_v1" />
+   <class name="xAOD::TruthMetaDataContainer_v1"
+          id="754BDA89-C0D9-43BF-B468-32E10C1690FE" />
+   <typedef name="xAOD::TruthMetaData" />
+   <typedef name="xAOD::TruthMetaDataContainer" />
 
-  <!-- Smart pointers for TruthParticle_v1: -->
-  <class name="DataLink<xAOD::TruthParticleContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TruthParticleContainer_v1> >" />
-  <class name="ElementLink<xAOD::TruthParticleContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TruthParticleContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TruthParticleContainer_v1> > >" />
+   <!-- xAOD::TruthMetaData auxiliary type(s). -->
+   <class name="xAOD::TruthMetaDataAuxContainer_v1"
+          id="E2EF5F89-DFFA-4225-823E-29E40130A7B2" />
+   <typedef name="xAOD::TruthMetaDataAuxContainer" />
 
-  <!-- Smart pointers for TruthVertex_v1: -->
-  <class name="DataLink<xAOD::TruthVertexContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::TruthVertexContainer_v1> >" />
-  <class name="ElementLink<xAOD::TruthVertexContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::TruthVertexContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::TruthVertexContainer_v1> > >" />
-
-  <!-- The helper functions: -->
-  <function pattern="xAOD::TruthHelpers::*" />
+   <!-- Helper function(s). -->
+   <function pattern="xAOD::TruthHelpers::*" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODTruth/xAODTruth/xAODTruthDict.h b/Event/xAOD/xAODTruth/xAODTruth/xAODTruthDict.h
index 43d481519f4aec026ed1e6f57df97231ae104f07..4043d664ca4d2bb8b5a47da3df4f8cc894a83cf4 100644
--- a/Event/xAOD/xAODTruth/xAODTruth/xAODTruthDict.h
+++ b/Event/xAOD/xAODTruth/xAODTruth/xAODTruthDict.h
@@ -1,67 +1,64 @@
 // Dear emacs, this is -*- c++ -*-
-
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id: xAODTruthDict.h 670153 2015-05-27 11:42:29Z tbisanz $
 #ifndef XAODTRUTH_XAODTRUTHDICT_H
 #define XAODTRUTH_XAODTRUTHDICT_H
 
-// System include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODTruth/TruthParticle.h"
+#include "xAODTruth/TruthParticleContainer.h"
+#include "xAODTruth/TruthParticleAuxContainer.h"
+#include "xAODTruth/versions/TruthParticle_v1.h"
 #include "xAODTruth/versions/TruthParticleContainer_v1.h"
 #include "xAODTruth/versions/TruthParticleAuxContainer_v1.h"
-#include "xAODTruth/versions/TruthVertexContainer_v1.h"
-#include "xAODTruth/versions/TruthVertexAuxContainer_v1.h"
-#include "xAODTruth/versions/TruthEventBaseContainer_v1.h"
-#include "xAODTruth/versions/TruthEventContainer_v1.h"
-#include "xAODTruth/versions/TruthEventAuxContainer_v1.h"
-#include "xAODTruth/versions/TruthPileupEventContainer_v1.h"
-#include "xAODTruth/versions/TruthPileupEventAuxContainer_v1.h"
-#include "xAODTruth/versions/TruthMetaDataContainer_v1.h"
-#include "xAODTruth/versions/TruthMetaDataAuxContainer_v1.h"
 
-#include "xAODTruth/TruthParticleContainer.h"
-#include "xAODTruth/TruthParticleAuxContainer.h"
+#include "xAODTruth/TruthVertex.h"
 #include "xAODTruth/TruthVertexContainer.h"
 #include "xAODTruth/TruthVertexAuxContainer.h"
+#include "xAODTruth/versions/TruthVertex_v1.h"
+#include "xAODTruth/versions/TruthVertexContainer_v1.h"
+#include "xAODTruth/versions/TruthVertexAuxContainer_v1.h"
+
+#include "xAODTruth/TruthEventBase.h"
 #include "xAODTruth/TruthEventBaseContainer.h"
+#include "xAODTruth/TruthEvent.h"
 #include "xAODTruth/TruthEventContainer.h"
 #include "xAODTruth/TruthEventAuxContainer.h"
+#include "xAODTruth/TruthPileupEvent.h"
 #include "xAODTruth/TruthPileupEventContainer.h"
 #include "xAODTruth/TruthPileupEventAuxContainer.h"
+#include "xAODTruth/versions/TruthEventBase_v1.h"
+#include "xAODTruth/versions/TruthEventBaseContainer_v1.h"
+#include "xAODTruth/versions/TruthEvent_v1.h"
+#include "xAODTruth/versions/TruthEventContainer_v1.h"
+#include "xAODTruth/versions/TruthEventAuxContainer_v1.h"
+#include "xAODTruth/versions/TruthPileupEvent_v1.h"
+#include "xAODTruth/versions/TruthPileupEventContainer_v1.h"
+#include "xAODTruth/versions/TruthPileupEventAuxContainer_v1.h"
+
+#include "xAODTruth/TruthMetaData.h"
 #include "xAODTruth/TruthMetaDataContainer.h"
 #include "xAODTruth/TruthMetaDataAuxContainer.h"
+#include "xAODTruth/versions/TruthMetaData_v1.h"
+#include "xAODTruth/versions/TruthMetaDataContainer_v1.h"
+#include "xAODTruth/versions/TruthMetaDataAuxContainer_v1.h"
+
 #include "xAODTruth/xAODTruthHelpers.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODTRUTH {
-      // The DataVector types:
-      xAOD::TruthParticleContainer_v1    c1;
-      xAOD::TruthVertexContainer_v1      c2;
-      xAOD::TruthEventBaseContainer_v1   c3;
-      xAOD::TruthEventContainer_v1       c4;
-      xAOD::TruthPileupEventContainer_v1 c5;
-      xAOD::TruthMetaDataContainer_v1    c6;
-
-      // The smart pointer types:
-      DataLink< xAOD::TruthParticleContainer_v1 > dl1;
-      std::vector< DataLink< xAOD::TruthParticleContainer_v1 > > dl2;
-      DataLink< xAOD::TruthVertexContainer_v1 > dl3;
-      std::vector< DataLink< xAOD::TruthVertexContainer_v1 > > dl4;
-      ElementLink< xAOD::TruthParticleContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::TruthParticleContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::TruthParticleContainer_v1 > > > el3;
-      ElementLink< xAOD::TruthVertexContainer_v1 > el4;
-      std::vector< ElementLink< xAOD::TruthVertexContainer_v1 > > el5;
-      std::vector< std::vector< ElementLink< xAOD::TruthVertexContainer_v1 > > > el6;
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthParticleContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthVertexContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthEventBaseContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthEventContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthPileupEventContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TruthMetaDataContainer_v1 );
    };
 }