diff --git a/Event/xAOD/xAODMissingET/CMakeLists.txt b/Event/xAOD/xAODMissingET/CMakeLists.txt
index 4c067e509de4a5c325102663acac2fac840e49eb..ad1cfc64818636688e24151fc2870ae4a196392c 100644
--- a/Event/xAOD/xAODMissingET/CMakeLists.txt
+++ b/Event/xAOD/xAODMissingET/CMakeLists.txt
@@ -1,28 +1,13 @@
-# $Id: CMakeLists.txt 766460 2016-08-04 14:17:04Z khoo $
-################################################################################
-# Package: xAODMissingET
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODMissingET )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Control/AthLinks
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODJet
-   PRIVATE
-   Event/xAOD/xAODCaloEvent
-   Event/xAOD/xAODTracking
-   Event/xAOD/xAODTruth )
-
-# External dependencies:
+# External dependencies.
 find_package( Boost COMPONENTS unit_test_framework )
+find_package( xAODUtilities )
 
-# Component(s) in the package:
+# Component(s) in the package.
 atlas_add_library( xAODMissingET
    xAODMissingET/*.h xAODMissingET/versions/*.h xAODMissingET/versions/*.icc
    Root/*.cxx
@@ -31,17 +16,23 @@ atlas_add_library( xAODMissingET
    LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODJet
    PRIVATE_LINK_LIBRARIES xAODCaloEvent xAODTracking xAODTruth )
 
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODMissingET/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::MissingETContainer_v1" "xAOD::MissingETComponentMap_v1"
+              "xAOD::MissingETAssociationMap_v1" )
+
 atlas_add_dictionary( xAODMissingETDict
    xAODMissingET/xAODMissingETDict.h
-   xAODMissingET/selection.xml
-   LINK_LIBRARIES xAODMissingET
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODMissingET
    EXTRA_FILES Root/dict/*.cxx )
 
 atlas_add_executable( xAODMissingET_testMETHash
    util/testMETHash.cxx
    LINK_LIBRARIES xAODMissingET )
 
-# Test(s) in the package:
+# Test(s) in the package.
 atlas_add_test( edm_test
    SOURCES test/edm_test.cxx
    LINK_LIBRARIES xAODMissingET )
@@ -50,4 +41,3 @@ atlas_add_test( ut_edmTest
    SOURCES test/ut_edmTest.cxx
    INCLUDE_DIRS ${Boost_INCLUDE_DIRS}
    LINK_LIBRARIES ${Boost_LIBRARIES} xAODMissingET CxxUtils)
-
diff --git a/Event/xAOD/xAODMissingET/xAODMissingET/selection.xml b/Event/xAOD/xAODMissingET/xAODMissingET/selection.xml
index 344c91e0dffc75dbf6af20c44ead7a33ed2c4dd1..781949aae28e37c11a61a29a9cc654cbd8de74e9 100644
--- a/Event/xAOD/xAODMissingET/xAODMissingET/selection.xml
+++ b/Event/xAOD/xAODMissingET/xAODMissingET/selection.xml
@@ -1,82 +1,68 @@
-<!-- $Id: selection.xml 742675 2016-04-25 14:50:23Z rsmith $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- MissingET_v1 dictionaries: -->
-  <class name="xAOD::MissingET_v1">
-    <field name="m_nameHash" transient="true" />
-  </class>
-  <class name="DataVector<xAOD::MissingET_v1>" />
-  <class name="xAOD::MissingETContainer_v1" id="F49162FE-6BC0-49BC-A7DA-A792136BD939" />
-  <class name="xAOD::MissingETAuxContainer_v1" id="2F92EC94-8CD1-49F3-BCA4-3D78599D4D60" />
+   <!-- xAOD::MissingET interface type(s). -->
+   <class name="xAOD::MissingET_v1" >
+      <field name="m_nameHash" transient="true" />
+   </class>
+   <class name="DataVector<xAOD::MissingET_v1>" />
+   <class name="xAOD::MissingETContainer_v1"
+          id="F49162FE-6BC0-49BC-A7DA-A792136BD939" />
+   <typedef name="xAOD::MissingET" />
+   <typedef name="xAOD::MissingETContainer" />
 
-  <!-- MissingETComponent_v1/MissingETComponentMap_v1 dictionaries: -->
-  <class name="xAOD::MissingETComponent_v1" />
-  <class name="xAOD::MissingETComponent_v1::Weight">
-    <field name="m_wpx" transient="true" />
-    <field name="m_wpy" transient="true" />
-    <field name="m_wet" transient="true" />
-  </class>
-  <class name="DataVector<xAOD::MissingETComponent_v1>" />
-  <class name="xAOD::MissingETComponentMap_v1" id="994D9D32-820F-47B1-A54B-37C15CD0FD1E" >
-    <field name="m_clusterLinks" transient="true" />
-    <field name="m_trackLinks" transient="true" />
-    <field name="m_particleLinks" transient="true" />
-  </class>
-  <class name="xAOD::MissingETAuxComponentMap_v1" id="96287268-4165-4288-8FC1-6227FD4AB95D" />
+   <!-- xAOD::MissingET auxiliary type(s). -->
+   <class name="xAOD::MissingETAuxContainer_v1"
+          id="2F92EC94-8CD1-49F3-BCA4-3D78599D4D60" />
+   <typedef name="xAOD::MissingETAuxContainer" />
 
-  <!-- MissingETAssociation_v1/MissingETAssociationMap_v1 dictionaries: -->
-  <class name="xAOD::MissingETAssociation_v1">
-    <field name="m_objConstLinks" transient="true" />
-    <field name="m_override" transient="true" />
-  </class>
-  <class name="xAOD::MissingETAssociation_v1::ConstVec">
-    <field name="m_cpx" transient="true" />
-    <field name="m_cpy" transient="true" />
-    <field name="m_cpz" transient="true" />
-    <field name="m_ce"  transient="true" />
-    <field name="m_sumpt"  transient="true" />
-  </class>
-  <class name="DataVector<xAOD::MissingETAssociation_v1>" />
-  <class name="xAOD::MissingETAssociationMap_v1" id="E2EAA116-F03E-430E-B4EF-216AAF7DEEE8">
-    <field name="m_jetConstLinks" transient="true" /> 
-  </class>
-  <!-- Schema evolve aux container -->
-  <class name="xAOD::MissingETAuxAssociationMap_v1" id="48EEF1CD-F937-445C-A09C-B978D152868E" />
-  <class name="xAOD::MissingETAuxAssociationMap_v2" id="05184C74-A3CE-4C89-959E-D7E9F0A98D13" />
+   <!-- xAOD::MissingETComponent interface type(s). -->
+   <class name="xAOD::MissingETComponent_v1" />
+   <class name="xAOD::MissingETComponent_v1::Weight" >
+      <field name="m_wpx" transient="true" />
+      <field name="m_wpy" transient="true" />
+      <field name="m_wet" transient="true" />
+   </class>
+   <class name="DataVector<xAOD::MissingETComponent_v1>" />
+   <class name="xAOD::MissingETComponentMap_v1"
+          id="994D9D32-820F-47B1-A54B-37C15CD0FD1E" >
+      <field name="m_clusterLinks" transient="true" />
+      <field name="m_trackLinks" transient="true" />
+      <field name="m_particleLinks" transient="true" />
+   </class>
+   <typedef name="xAOD::MissingETComponent" />
+   <typedef name="xAOD::MissingETComponentMap" />
 
-  <!-- Smart pointer dictionaries: -->
-  <class name="DataLink<xAOD::MissingETContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::MissingETContainer_v1> >" />
+   <!-- xAOD::MissingETComponent auxiliary type(s). -->
+   <class name="xAOD::MissingETAuxComponentMap_v1"
+          id="96287268-4165-4288-8FC1-6227FD4AB95D" />
+   <typedef name="xAOD::MissingETAuxComponentMap" />
 
-  <class name="DataLink<xAOD::MissingETComponentMap_v1>" />
-  <class name="std::vector<DataLink<xAOD::MissingETComponentMap_v1> >" />
+   <!-- xAOD::MissingETAssociation interface type(s). -->
+   <class name="xAOD::MissingETAssociation_v1" >
+      <field name="m_objConstLinks" transient="true" />
+      <field name="m_override" transient="true" />
+   </class>
+   <class name="xAOD::MissingETAssociation_v1::ConstVec" >
+      <field name="m_cpx" transient="true" />
+      <field name="m_cpy" transient="true" />
+      <field name="m_cpz" transient="true" />
+      <field name="m_ce"  transient="true" />
+      <field name="m_sumpt"  transient="true" />
+   </class>
+   <class name="DataVector<xAOD::MissingETAssociation_v1>" />
+   <class name="xAOD::MissingETAssociationMap_v1"
+          id="E2EAA116-F03E-430E-B4EF-216AAF7DEEE8" >
+      <field name="m_jetConstLinks" transient="true" />
+   </class>
+   <typedef name="xAOD::MissingETAssociation" />
+   <typedef name="xAOD::MissingETAssociationMap" />
 
-  <class name="ElementLink<xAOD::MissingETContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::MissingETContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::MissingETContainer_v1> > >" />
-
-  <class name="ElementLink<xAOD::MissingETComponentMap_v1>" />
-  <class name="std::vector<ElementLink<xAOD::MissingETComponentMap_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::MissingETComponentMap_v1> > >" />
-
-  <class name="ElementLink<xAOD::MissingETAssociationMap_v1>" />
-  <class name="std::vector<ElementLink<xAOD::MissingETAssociationMap_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::MissingETAssociationMap_v1> > >" />
-
-  <class name="std::vector<std::vector<unsigned long long> >" />
-  <class name="std::vector<std::vector<std::vector<size_t> > >" />
-  <class name="std::vector<std::vector<std::vector<unsigned long> > >" />
-  <class name="std::vector<std::vector<std::vector<unsigned char> > >" />
-  <class name="std::vector<std::vector<std::vector<unsigned long long> > >" />
-
-  <!-- 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::Jet_v1> >" />
-  </exclusion>
+   <!-- xAOD::MissingETAssociation auxiliary type(s). -->
+   <class name="xAOD::MissingETAuxAssociationMap_v1"
+          id="48EEF1CD-F937-445C-A09C-B978D152868E" />
+   <class name="xAOD::MissingETAuxAssociationMap_v2"
+          id="05184C74-A3CE-4C89-959E-D7E9F0A98D13" />
+   <typedef name="xAOD::MissingETAuxAssociationMap" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODMissingET/xAODMissingET/xAODMissingETDict.h b/Event/xAOD/xAODMissingET/xAODMissingET/xAODMissingETDict.h
index 1e67356d93299e71f665bf00463df8220679251d..3ec3bcefa663ecb7d71c9f7ceafe19c7a93f52f5 100644
--- a/Event/xAOD/xAODMissingET/xAODMissingET/xAODMissingETDict.h
+++ b/Event/xAOD/xAODMissingET/xAODMissingET/xAODMissingETDict.h
@@ -1,76 +1,47 @@
 // 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: xAODMissingETDict.h 693950 2015-09-09 15:29:18Z khoo $
 #ifndef XAODMISSINGET_XAODMISSINGETDICT_H
 #define XAODMISSINGET_XAODMISSINGETDICT_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__
-
-// System include(s):
-#include <vector>
-
-// EDM include(s):
-#include "AthLinks/DataLink.h"
-#include "AthLinks/ElementLink.h"
-
-// Local include(s):
+// Local include(s).
+#include "xAODMissingET/MissingET.h"
 #include "xAODMissingET/MissingETContainer.h"
 #include "xAODMissingET/MissingETAuxContainer.h"
+#include "xAODMissingET/versions/MissingET_v1.h"
+#include "xAODMissingET/versions/MissingETContainer_v1.h"
+#include "xAODMissingET/versions/MissingETAuxContainer_v1.h"
+
+#include "xAODMissingET/MissingETComponent.h"
 #include "xAODMissingET/MissingETComponentMap.h"
 #include "xAODMissingET/MissingETAuxComponentMap.h"
+#include "xAODMissingET/versions/MissingETComponent_v1.h"
+#include "xAODMissingET/versions/MissingETComponentMap_v1.h"
+#include "xAODMissingET/versions/MissingETAuxComponentMap_v1.h"
+
+#include "xAODMissingET/MissingETAssociation.h"
 #include "xAODMissingET/MissingETAssociationMap.h"
 #include "xAODMissingET/MissingETAuxAssociationMap.h"
+#include "xAODMissingET/versions/MissingETAssociation_v1.h"
+#include "xAODMissingET/versions/MissingETAssociationMap_v1.h"
 #include "xAODMissingET/versions/MissingETAuxAssociationMap_v1.h"
+#include "xAODMissingET/versions/MissingETAuxAssociationMap_v2.h"
+
 #include "xAODMissingET/versions/MissingETBase.h"
 
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
+
+// Instantiate all necessary types for the dictionary.
 namespace {
    struct GCCXML_DUMMY_INSTANTIATION_XAODMISSINGET {
-      // Container(s):
-      DataVector< xAOD::MissingET_v1 > c1;
-      xAOD::MissingETContainer_v1 c2;
-      DataVector< xAOD::MissingETComponent_v1 > c3;
-      xAOD::MissingETComponentMap_v1 c4;
-      DataVector< xAOD::MissingETAssociation_v1 > c5;
-      xAOD::MissingETAssociationMap_v1 c6;
-      // Smart pointer(s):
-      DataLink< xAOD::MissingETContainer_v1 > dl1;
-      std::vector< DataLink< xAOD::MissingETContainer_v1 > > dl2;
-      ElementLink< xAOD::MissingETContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::MissingETContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::MissingETContainer_v1 > > > el3;
-      DataLink< xAOD::MissingETComponentMap_v1 > dl3;
-      std::vector< DataLink< xAOD::MissingETComponentMap_v1 > > dl4;
-      ElementLink< xAOD::MissingETComponentMap_v1 > el4;
-      std::vector< ElementLink< xAOD::MissingETComponentMap_v1 > > el5;
-      std::vector< std::vector< ElementLink< xAOD::MissingETComponentMap_v1 > > > el6;
-      DataLink< xAOD::MissingETAssociationMap_v1 > dl5;
-      std::vector< DataLink< xAOD::MissingETAssociationMap_v1 > > dl6;
-      ElementLink< xAOD::MissingETAssociationMap_v1 > el7;
-      std::vector< ElementLink< xAOD::MissingETAssociationMap_v1 > > el8;
-      std::vector< std::vector< ElementLink< xAOD::MissingETAssociationMap_v1 > > > el9;
-
-      // Smart pointers needed for the correct generation of the auxiliary
-      // class dictionaries:
-      ElementLink< xAOD::IParticleContainer > el10;
-      std::vector< ElementLink< xAOD::IParticleContainer > > el11;
-      std::vector< std::vector< ElementLink< xAOD::IParticleContainer > > > el12;
-
-      std::vector< MissingETBase::Types::bitmask_t > vec1;
-      std::vector< unsigned long long > vec2;
-      std::vector< std::vector< size_t > > vec3;
-      std::vector< std::vector< unsigned char > > vec4;
-      std::vector< std::vector< unsigned long long > > vec5;
-      std::vector< std::vector< std::vector< size_t > > > vec6;
-      std::vector< std::vector< std::vector< unsigned long > > > vec7;
-      std::vector< std::vector< std::vector< unsigned char > > > vec8;
-      std::vector< std::vector<std::vector<unsigned long long> > > vec9;
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MissingETContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MissingETComponentMap_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, MissingETAssociationMap_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, IParticleContainer );
    };
 }