diff --git a/Event/xAOD/xAODEventInfo/CMakeLists.txt b/Event/xAOD/xAODEventInfo/CMakeLists.txt
index 8d096f0b68e16c1314c01041f37209b63f8e7980..dbeda530389898b05db47e1f627ca821dca55675 100644
--- a/Event/xAOD/xAODEventInfo/CMakeLists.txt
+++ b/Event/xAOD/xAODEventInfo/CMakeLists.txt
@@ -1,35 +1,31 @@
-################################################################################
-# Package: xAODEventInfo
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODEventInfo )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PRIVATE
-   AtlasTest/TestTools
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODCore )
-
-# External dependencies:
+# External dependencies.
 find_package( ROOT COMPONENTS Core Tree RIO )
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODEventInfo
-   xAODEventInfo/*.h Root/*.cxx
+   xAODEventInfo/versions/*.h xAODEventInfo/*.h Root/*.cxx
    PUBLIC_HEADERS xAODEventInfo
    LINK_LIBRARIES AthContainers AthLinks xAODCore )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODEventInfo/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::EventInfoContainer_v1"
+   OBJECTS "xAOD::EventInfo_v1" )
+
 atlas_add_dictionary( xAODEventInfoDict
    xAODEventInfo/xAODEventInfoDict.h
-   xAODEventInfo/selection.xml
-   LINK_LIBRARIES xAODEventInfo
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODEventInfo
    EXTRA_FILES Root/dict/*.cxx )
 
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( ut_xaodeventinfo_evtstore_test
    SOURCES test/ut_xaodeventinfo_evtstore_test.cxx
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
@@ -47,12 +43,12 @@ atlas_add_test( ut_xaodeventinfo_subevent_test
 
 atlas_add_test( ut_xaodeventinfo_eventauxinfo_test
    SOURCES test/ut_xaodeventinfo_eventauxinfo_test.cxx
-   LINK_LIBRARIES AthLinks xAODCore xAODEventInfo TestTools )
+   LINK_LIBRARIES AthContainers TestTools xAODEventInfo )
 
 atlas_add_test( ut_xaodeventinfo_eventinfoauxcontainer_v1_test
    SOURCES test/ut_xaodeventinfo_eventinfoauxcontainer_v1_test.cxx
-   LINK_LIBRARIES AthLinks xAODCore xAODEventInfo TestTools )
+   LINK_LIBRARIES AthContainers TestTools xAODEventInfo )
 
 atlas_add_test( ut_xaodeventinfo_eventinfo_v1_test
    SOURCES test/ut_xaodeventinfo_eventinfo_v1_test.cxx
-   LINK_LIBRARIES AthLinks xAODCore xAODEventInfo )
+   LINK_LIBRARIES xAODEventInfo )
diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/selection.xml b/Event/xAOD/xAODEventInfo/xAODEventInfo/selection.xml
index df7f3851026484c9bf03e296f25ddf268b3ac80c..d8b5c399a9b2cf2e958d6e30940efdee0a74c53c 100644
--- a/Event/xAOD/xAODEventInfo/xAODEventInfo/selection.xml
+++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/selection.xml
@@ -1,6 +1,7 @@
 <!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
+  <!-- xAOD::EventInfo interface type(s). -->
   <class name="xAOD::EventInfo_v1"
          id="AE8BED6D-1D41-4CAF-994B-42613FC91A0A" >
     <field name="m_streamTags" transient="true" />
@@ -15,7 +16,12 @@
        newObj->toTransient();
      ]]>
   </read>
+  <class name="xAOD::EventInfoContainer_v1"
+         id="8F061263-D744-4D72-9377-1573FE21CDCE" />
+  <typedef name="xAOD::EventInfo" />
+  <typedef name="xAOD::EventInfoContainer" />
 
+  <!-- xAOD::EventInfo auxiliary type(s). -->
   <class name="xAOD::EventAuxInfo_v1"
          id="2CFD72A2-D3AA-4C18-9B40-E5ACBA20D785">
     <field name="m_decorFlags" transient="true" />
@@ -38,9 +44,6 @@
      ]]>
   </read>
 
-  <class name="xAOD::EventInfoContainer_v1"
-         id="8F061263-D744-4D72-9377-1573FE21CDCE" />
-
   <class name="xAOD::EventInfoAuxContainer_v1"
          id="742479C0-2699-4949-A9D0-01DBC421BE5B">
     <field name="m_decorFlags" transient="true" />
@@ -52,27 +55,7 @@
      ]]>
   </read>
 
-  <!-- Smart pointer dictionaries: -->
-  <class name="DataLink<xAOD::EventInfo_v1>" />
-  <class name="std::vector<DataLink<xAOD::EventInfo_v1> >" />
-
-  <class name="ElementLink<xAOD::EventInfoContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::EventInfoContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::EventInfoContainer_v1> > >" />
-
-  <!-- Additional dictionaries for the payload: -->
-  <!-- MN: removing class name="std::pair<std::string,std::string>" as it is already in RELAX -->
-  <class name="std::vector<std::pair<std::string,std::string> >" />
-  <class name="std::vector<std::vector<std::pair<std::string,std::string> > >" />
-  <class name="std::set<uint32_t>" />
-  <class name="std::vector<std::set<uint32_t> >" />
-  <class name="std::vector<std::vector<std::set<unsigned> > >" />
-
-  <!-- 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>
+  <typedef name="xAOD::EventAuxInfo" />
+  <typedef name="xAOD::EventInfoAuxContainer" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/selectionAthSuppress.xml b/Event/xAOD/xAODEventInfo/xAODEventInfo/selectionAthSuppress.xml
deleted file mode 100644
index 49435cfbbe55d9d31a2da1cfbe6fd4b126b280dc..0000000000000000000000000000000000000000
--- a/Event/xAOD/xAODEventInfo/xAODEventInfo/selectionAthSuppress.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<exclusion>
-  <class name="std::set<uint32_t>" />
-  <class name="std::vector<std::pair<std::string,std::string> >" />
-</exclusion>
diff --git a/Event/xAOD/xAODEventInfo/xAODEventInfo/xAODEventInfoDict.h b/Event/xAOD/xAODEventInfo/xAODEventInfo/xAODEventInfoDict.h
index 95aa563f9e7bdadd3bfc81524461e7506a27f193..273f8bf432ef350a4c58765190aeb769ce4b8a26 100644
--- a/Event/xAOD/xAODEventInfo/xAODEventInfo/xAODEventInfoDict.h
+++ b/Event/xAOD/xAODEventInfo/xAODEventInfo/xAODEventInfoDict.h
@@ -1,23 +1,13 @@
 // 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: xAODEventInfoDict.h 630576 2014-11-24 12:36:44Z krasznaa $
 #ifndef XAODEVENTINFO_XAODEVENTINFODICT_H
 #define XAODEVENTINFO_XAODEVENTINFODICT_H
 
-// System include(s):
-#include <vector>
-#include <set>
-
-// EDM include(s):
-#include "AthLinks/ElementLink.h"
-#include "AthLinks/DataLink.h"
-
-// Local include(s):
+// Local include(s).
 #include "xAODEventInfo/EventInfo.h"
+#include "xAODEventInfo/EventAuxInfo.h"
 #include "xAODEventInfo/EventInfoContainer.h"
 #include "xAODEventInfo/versions/EventInfo_v1.h"
 #include "xAODEventInfo/versions/EventAuxInfo_v1.h"
@@ -25,21 +15,15 @@
 #include "xAODEventInfo/versions/EventInfoContainer_v1.h"
 #include "xAODEventInfo/versions/EventInfoAuxContainer_v1.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODEVENTINFO {
-
-      xAOD::EventInfoContainer_v1 c1;
-
-      DataLink< xAOD::EventInfo_v1 > dl1;
-      std::vector< DataLink< xAOD::EventInfo_v1 > > dl2;
-
-      ElementLink< xAOD::EventInfoContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::EventInfoContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::EventInfoContainer_v1 > > > el3;
-
-      std::set< uint32_t > set1;
-      std::vector< std::set< uint32_t > > set2;
-
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, EventInfoContainer_v1 );
+      XAOD_INSTANTIATE_NS_OBJECT_TYPES( xAOD, EventInfo_v1 );
    };
 } // private namespace