diff --git a/Event/xAOD/xAODBTagging/CMakeLists.txt b/Event/xAOD/xAODBTagging/CMakeLists.txt
index 4e166259db4799962bf4d5ba73784c51462a906f..9cf5cafbfac512d40ee18d4ff9f4dbdb25d50808 100644
--- a/Event/xAOD/xAODBTagging/CMakeLists.txt
+++ b/Event/xAOD/xAODBTagging/CMakeLists.txt
@@ -1,29 +1,25 @@
-# $Id: CMakeLists.txt 744481 2016-05-03 13:36:43Z krasznaa $
-################################################################################
-# Package: xAODBTagging
-################################################################################
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-# Declare the package name:
+# Declare the package name.
 atlas_subdir( xAODBTagging )
 
-# Declare the package's dependencies:
-atlas_depends_on_subdirs(
-   PUBLIC
-   Control/AthContainers
-   Event/xAOD/xAODBase
-   Event/xAOD/xAODCore
-   Event/xAOD/xAODTracking
-   Control/AthLinks 
-   Control/CxxUtils)
+# Pull in the helper CMake code.
+find_package( xAODUtilities )
 
 # Component(s) in the package:
 atlas_add_library( xAODBTagging
    xAODBTagging/*.h xAODBTagging/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODBTagging
-   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking CxxUtils)
+   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking
+   CxxUtils )
+
+atlas_add_xaod_smart_pointer_dicts(
+   INPUT xAODBTagging/selection.xml
+   OUTPUT _selectionFile
+   CONTAINERS "xAOD::BTaggingContainer_v1" "xAOD::BTagVertexContainer_v1" )
 
 atlas_add_dictionary( xAODBTaggingDict
    xAODBTagging/xAODBTaggingDict.h
-   xAODBTagging/selection.xml
-   LINK_LIBRARIES xAODBTagging
+   ${_selectionFile}
+   LINK_LIBRARIES xAODCore xAODBTagging
    EXTRA_FILES Root/dict/*.cxx )
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/selection.xml b/Event/xAOD/xAODBTagging/xAODBTagging/selection.xml
index 613f87c7c51b222bb365b5182642220485056040..5130d025d0ebda309bd62929b609bbabd0392268 100644
--- a/Event/xAOD/xAODBTagging/xAODBTagging/selection.xml
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/selection.xml
@@ -1,54 +1,34 @@
-<!-- $Id: selection.xml 688348 2015-08-10 09:03:52Z kleney $ -->
+<!-- Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -->
 <lcgdict>
 
-  <!-- BTagging_v1 dictionaries: -->
-  <class name="xAOD::BTagging_v1" />
-  <class name="xAOD::BTaggingContainer_v1"
-         id="5D19F171-E07E-4F65-BC1F-FC4F4099E9F1" />
-  <class name="xAOD::BTaggingAuxContainer_v1"
-         id="5E1973D2-D860-4BB1-B8EF-C9AD8E6C66A2" />
-  <class name="xAOD::BTaggingTrigAuxContainer_v1"
-         id="1B738105-2F3E-4DCB-9DAE-DA3A4964486E" />
-
-  <!-- Smart pointers to BTagging_v1 objects: -->
-  <class name="DataLink<xAOD::BTaggingContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::BTaggingContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::BTaggingContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::BTaggingContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::BTaggingContainer_v1> > >" />
-
-  <!-- BTagVertex_v1 dictionaries: -->
-  <class name="xAOD::BTagVertex_v1" />
-  <class name="xAOD::BTagVertexContainer_v1" 
-         id="E225A9EC-9782-43F7-B7BF-1B215187C11C" />
-  <class name="xAOD::BTagVertexAuxContainer_v1"
-         id="09CD44BA-0F40-4FDB-BB30-2F4226FF3E18" />
-
-  <!-- Smart pointers to BTagVertex_v1 objects: -->
-  <class name="DataLink<xAOD::BTagVertexContainer_v1>" />
-  <class name="std::vector<DataLink<xAOD::BTagVertexContainer_v1> >" />
-
-  <class name="ElementLink<xAOD::BTagVertexContainer_v1>" />
-  <class name="std::vector<ElementLink<xAOD::BTagVertexContainer_v1> >" />
-  <class name="std::vector<std::vector<ElementLink<xAOD::BTagVertexContainer_v1> > >" />
-
-
-  <class name="std::vector< std::vector< bool > >" />
-  <class name="std::vector< std::vector< int > >" />
-
-  <!--Add Helper Functions -->
-  <function pattern="xAOD::SecVtxHelper::*" /> 
-
-  <!-- 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 pattern="xAOD::TrackParticle*" />
-    <class pattern="DataVector<xAOD::TrackParticle*" />
-    <class pattern="ElementLink<DataVector<xAOD::TrackParticle*" />
-    <class name="DataVector<xAOD::IParticle>" />
-  </exclusion>
+   <!-- xAOD::BTagging interface type(s). -->
+   <class name="xAOD::BTagging_v1" />
+   <class name="xAOD::BTaggingContainer_v1"
+          id="5D19F171-E07E-4F65-BC1F-FC4F4099E9F1" />
+   <typedef name="xAOD::BTagging" />
+   <typedef name="xAOD::BTaggingContainer" />
+
+   <!-- xAOD::BTagging auxiliary type(s). -->
+   <class name="xAOD::BTaggingAuxContainer_v1"
+          id="5E1973D2-D860-4BB1-B8EF-C9AD8E6C66A2" />
+   <class name="xAOD::BTaggingTrigAuxContainer_v1"
+          id="1B738105-2F3E-4DCB-9DAE-DA3A4964486E" />
+   <typedef name="xAOD::BTaggingAuxContainer" />
+   <typedef name="xAOD::BTaggingTrigAuxContainer" />
+
+   <!-- xAOD::BTagVertex interface type(s). -->
+   <class name="xAOD::BTagVertex_v1" />
+   <class name="xAOD::BTagVertexContainer_v1"
+          id="E225A9EC-9782-43F7-B7BF-1B215187C11C" />
+   <typedef name="xAOD::BTagVertex" />
+   <typedef name="xAOD::BTagVertexContainer" />
+
+   <!-- xAOD::BTagVertex auxiliary type(s). -->
+   <class name="xAOD::BTagVertexAuxContainer_v1"
+          id="09CD44BA-0F40-4FDB-BB30-2F4226FF3E18" />
+   <typedef name="xAOD::BTagVertexAuxContainer" />
+
+   <!-- Additional helper functions. -->
+   <function pattern="xAOD::SecVtxHelper::*" />
 
 </lcgdict>
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/xAODBTaggingDict.h b/Event/xAOD/xAODBTagging/xAODBTagging/xAODBTaggingDict.h
index c165c4d1c6bb618c8a3a6b940dadd15ab0b9eab1..4a36d87343514712ca8256a17783bc71c3033845 100644
--- a/Event/xAOD/xAODBTagging/xAODBTagging/xAODBTaggingDict.h
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/xAODBTaggingDict.h
@@ -1,60 +1,40 @@
 // 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: xAODBTaggingDict.h 688348 2015-08-10 09:03:52Z kleney $
 #ifndef XAODBTAGGING_XAODBTAGGINGDICT_H
 #define XAODBTAGGING_XAODBTAGGINGDICT_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 "xAODBTagging/BTagging.h"
 #include "xAODBTagging/BTaggingContainer.h"
 #include "xAODBTagging/BTaggingAuxContainer.h"
 #include "xAODBTagging/BTaggingTrigAuxContainer.h"
-#include "xAODBTagging/BTagVertexContainer.h" 
-#include "xAODBTagging/BTagVertexAuxContainer.h"
-// #include "xAODBTagging/versions/BTaggingContainer_v1.h"
-// #include "xAODBTagging/versions/BTaggingAuxContainer_v1.h"
-// #include "xAODBTagging/versions/BTaggingTrigAuxContainer_v1.h"
-// #include "xAODBTagging/versions/BTagVertexContainer_v1.h" 
-// #include "xAODBTagging/versions/BTagVertexAuxContainer_v1.h"
-
-namespace {
-   struct GCCXML_DUMMY_INSTANTIATION_XAODBTAGGING {
-      xAOD::BTaggingContainer_v1 c1;
-      DataLink< xAOD::BTaggingContainer_v1 > dl1;
-      std::vector< DataLink< xAOD::BTaggingContainer_v1 > > dl2;
-      ElementLink< xAOD::BTaggingContainer_v1 > el1;
-      std::vector< ElementLink< xAOD::BTaggingContainer_v1 > > el2;
-      std::vector< std::vector< ElementLink< xAOD::BTaggingContainer_v1 > > > el3;
+#include "xAODBTagging/versions/BTagging_v1.h"
+#include "xAODBTagging/versions/BTaggingContainer_v1.h"
+#include "xAODBTagging/versions/BTaggingAuxContainer_v1.h"
+#include "xAODBTagging/versions/BTaggingTrigAuxContainer_v1.h"
 
+#include "xAODBTagging/BTagVertex.h"
+#include "xAODBTagging/BTagVertexContainer.h"
+#include "xAODBTagging/BTagVertexAuxContainer.h"
+#include "xAODBTagging/versions/BTagVertex_v1.h"
+#include "xAODBTagging/versions/BTagVertexContainer_v1.h"
+#include "xAODBTagging/versions/BTagVertexAuxContainer_v1.h"
 
-      std::vector< std::vector< bool > > atmp;
-      std::vector< std::vector< int > > anothertmp;
+#include "xAODBTagging/SecVtxHelper.h"
 
-      
-      xAOD::BTagVertexContainer_v1 cx1;
-      DataLink< xAOD::BTagVertexContainer_v1 > dlx1;
-      std::vector< DataLink< xAOD::BTagVertexContainer_v1 > > dlx2;
-      ElementLink< xAOD::BTagVertexContainer_v1 > elx1;
-      std::vector< ElementLink< xAOD::BTagVertexContainer_v1 > > elx2;
-      std::vector< std::vector< ElementLink< xAOD::BTagVertexContainer_v1 > > > elx3;
+// EDM include(s).
+#include "xAODCore/tools/DictHelpers.h"
 
-     ElementLink< xAOD::TrackParticleContainer > auxlink1;
-     std::vector<ElementLink< xAOD::TrackParticleContainer > > auxlink2;
+// Instantiate all necessary types for the dictionary.
+namespace {
+   struct GCCXML_DUMMY_INSTANTIATION_XAODBTAGGING {
+      // Local type(s).
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, BTaggingContainer_v1 );
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, BTagVertexContainer_v1 );
+      // Type(s) needed for the dictionary generation to succeed.
+      XAOD_INSTANTIATE_NS_CONTAINER_TYPES( xAOD, TrackParticleContainer );
    };
 }