diff --git a/Event/xAOD/xAODBTagging/CMakeLists.txt b/Event/xAOD/xAODBTagging/CMakeLists.txt
index 9cf5cafbfac512d40ee18d4ff9f4dbdb25d50808..75a556824ac185ae4a77f517bf490a935befdfa8 100644
--- a/Event/xAOD/xAODBTagging/CMakeLists.txt
+++ b/Event/xAOD/xAODBTagging/CMakeLists.txt
@@ -10,7 +10,7 @@ find_package( xAODUtilities )
 atlas_add_library( xAODBTagging
    xAODBTagging/*.h xAODBTagging/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODBTagging
-   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking
+   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking xAODJet
    CxxUtils )
 
 atlas_add_xaod_smart_pointer_dicts(
diff --git a/Event/xAOD/xAODBTagging/Root/BTaggingUtilities.cxx b/Event/xAOD/xAODBTagging/Root/BTaggingUtilities.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..24fa834946b459b7d5f2b9a85cb6bd5614493f8f
--- /dev/null
+++ b/Event/xAOD/xAODBTagging/Root/BTaggingUtilities.cxx
@@ -0,0 +1,27 @@
+
+#include "xAODBTagging/BTaggingUtilities.h"
+
+using namespace xAOD;
+
+const xAOD::BTagging* BTaggingUtilities::getBTagging( const SG::AuxElement& auxElement,
+						      const std::string& linkName ) {
+  const SG::AuxElement::Accessor< ElementLink< xAOD::BTaggingContainer > > btagAcc( linkName );
+  
+  if ( btagAcc.isAvailable( auxElement ) && btagAcc( auxElement ).isValid() )
+    return *( btagAcc( auxElement ) );
+  
+  return nullptr;
+}
+
+const ElementLink< xAOD::BTaggingContainer >& BTaggingUtilities::getBTaggingLink( const SG::AuxElement& auxElement,
+										  const std::string& linkName ) {
+  const SG::AuxElement::Accessor< ElementLink< xAOD::BTaggingContainer > > btagAcc( linkName );
+  return btagAcc( auxElement );
+}
+
+void BTaggingUtilities::setBTaggingLink( const SG::AuxElement& auxElement,
+					 const ElementLink< xAOD::BTaggingContainer >& el,
+					 const std::string& linkName ) {
+  const SG::AuxElement::Decorator< ElementLink< xAOD::BTaggingContainer > > btagDec( linkName );
+  btagDec( auxElement ) = el;
+}
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/BTaggingUtilities.h b/Event/xAOD/xAODBTagging/xAODBTagging/BTaggingUtilities.h
new file mode 100644
index 0000000000000000000000000000000000000000..5dbe2d0defe491b035ff36cf57244f3d94c24c7e
--- /dev/null
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/BTaggingUtilities.h
@@ -0,0 +1,17 @@
+#ifndef XAODBTAGGING_UTILITIES_H
+#define XAODBTAGGING_UTILITIES_H
+
+#include "AthContainers/AuxElement.h"
+#include "xAODBTagging/BTaggingContainer.h"
+
+namespace xAOD::BTaggingUtilities {
+    const xAOD::BTagging* getBTagging( const SG::AuxElement&,
+				       const std::string& linkName="btaggingLink" );
+    const ElementLink< xAOD::BTaggingContainer >& getBTaggingLink( const SG::AuxElement&,
+								   const std::string& linkName="btaggingLink" );
+    void setBTaggingLink( const SG::AuxElement&,
+			  const ElementLink< xAOD::BTaggingContainer >&,
+			  const std::string& linkName="btaggingLink" );
+} // namespace xAOD::BTaggingUtilities
+
+#endif
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTaggingContainer_v1.h b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTaggingContainer_v1.h
index 9d61b40e4b321648e15ea0e0dd18646769c6ac7c..e8c4742e7fbe10363c22a2f515d90281180420b5 100644
--- a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTaggingContainer_v1.h
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTaggingContainer_v1.h
@@ -1,7 +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: BTaggingContainer_v1.h 631475 2014-11-27 11:53:05Z filthaut $
@@ -15,7 +15,7 @@
 #include "xAODBTagging/versions/BTagging_v1.h"
 
 namespace xAOD {
-   /// The container is a simple typedef for now
+   // The container is a simple typedef for now
    typedef DataVector< xAOD::BTagging_v1 > BTaggingContainer_v1;
 }
 
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
index 08d6fc251246711f1c783f6e4d97625b7e9da20d..342ffe4c378178f7b7eed4d9e8b80cb6cca57cff 100644
--- a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
@@ -16,6 +16,7 @@
 #include "xAODBTagging/BTaggingEnums.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/VertexContainer.h"
+#include "xAODJet/JetContainer.h"
 #include "xAODBTagging/BTagVertexContainer.h"
 
 // STL include(s):
diff --git a/Event/xAOD/xAODJet/CMakeLists.txt b/Event/xAOD/xAODJet/CMakeLists.txt
index 1e14f3ca880e9b78dad0aaa69137366716958e3a..2584ca215cb29b9ba01140d066c9e5dce6aadee0 100644
--- a/Event/xAOD/xAODJet/CMakeLists.txt
+++ b/Event/xAOD/xAODJet/CMakeLists.txt
@@ -17,7 +17,7 @@ endif()
 set( extra_srcs )
 if( NOT SIMULATIONBASE AND NOT GENERATIONBASE )
    set( extra_srcs Root/JetTrigAuxContainer*.cxx )
-   set( extra_libs xAODBTagging xAODPFlow xAODTrigger )
+   set( extra_libs xAODPFlow xAODTrigger )
 endif()
 
 # External dependencies:
diff --git a/Event/xAOD/xAODJet/Root/Jet_v1.cxx b/Event/xAOD/xAODJet/Root/Jet_v1.cxx
index a571e2bc1c5d795d37969894b3239fa3cda6efe2..091050fe7e35ccc03a04bf5e2e23f9818c52520a 100644
--- a/Event/xAOD/xAODJet/Root/Jet_v1.cxx
+++ b/Event/xAOD/xAODJet/Root/Jet_v1.cxx
@@ -259,40 +259,6 @@ namespace xAOD {
   void Jet_v1::setInputType(JetInput::Type t)  {inputAcc(*this)=t;}
 
 
-#if !defined(SIMULATIONBASE) and !defined(GENERATIONBASE)
-  static const SG::AuxElement::Accessor< ElementLink< BTaggingContainer > >
-     btagAcc1( "btagging" );
-  static const SG::AuxElement::Accessor< ElementLink< BTaggingContainer > >
-     btagAcc2( "btaggingLink" );
-
-  /// Access to btagging objects
-  const BTagging* Jet_v1::btagging() const {
-
-     if( btagAcc1.isAvailable( *this ) && btagAcc1( *this ).isValid() ) {
-        return *( btagAcc1( *this ) );
-     } else if( btagAcc2.isAvailable( *this ) && btagAcc2( *this ).isValid() ) {
-        return *( btagAcc2( *this ) );
-     }
-     return nullptr;
-  }
-
-  const ElementLink< BTaggingContainer >& Jet_v1::btaggingLink() const {
-
-     if( btagAcc1.isAvailable( *this ) ) {
-        return btagAcc1( *this );
-     }
-     return btagAcc2( *this );
-  }
-
-  /// Access to btagging objects
-  void Jet_v1::setBTaggingLink( const ElementLink< BTaggingContainer >& el ) {
-
-     // When we create a new object, we always set the link with the new name:
-     btagAcc2( *this ) = el;
-     return;
-  }
-#endif // not SIMULATIONBASE or GENERATIONBASE
-
 //   void Jet_v1::toPersistent() {
 //   No longer needed, as this is done by the POOL converter for the aux container
 
diff --git a/Event/xAOD/xAODJet/xAODJet/versions/Jet_v1.h b/Event/xAOD/xAODJet/xAODJet/versions/Jet_v1.h
index 612098c0f8924bd1eefedcf9b693173a18ff2279..750807591fbcbeff30e8e17e26b35660df02f0ff 100644
--- a/Event/xAOD/xAODJet/xAODJet/versions/Jet_v1.h
+++ b/Event/xAOD/xAODJet/xAODJet/versions/Jet_v1.h
@@ -16,9 +16,6 @@
 // xAOD include(s):
 #include "xAODBase/IParticle.h"
 #include "xAODBase/IParticleContainer.h"
-#if !defined(SIMULATIONBASE) and !defined(GENERATIONBASE)
-#include "xAODBTagging/BTaggingContainer.h"
-#endif // not SIMULATIONBASE or GENERATIONBASE
 
 // Local include(s):
 //#include "xAODJet/JetConstituentIterator.h"
@@ -236,14 +233,6 @@ namespace xAOD {
     /// Set  number by enum
     template<class T>
     void setAttribute( AttributeID type, const T& value );
-#if !defined(SIMULATIONBASE) and !defined(GENERATIONBASE)
-    /// Access to the associated btagging object
-    const BTagging* btagging() const;
-    /// Access to the associated btagging object
-    const ElementLink< BTaggingContainer >& btaggingLink() const;
-    /// Access to btagging objects
-    void setBTaggingLink( const ElementLink< BTaggingContainer>& el );
-#endif // not SIMULATIONBASE or GENERATIONBASE
 
     /// @}
     ////////////////////////////////////////////////////////    
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.h
index 998c7bdddda74c7e1695e1f3b1ebfdae89dacde5..e231cfff6dca572112ed55f9dfaf6bdcf732cba9 100755
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.h
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.h
@@ -35,6 +35,7 @@
 #include "PixelGeoModel/IBLParameterSvc.h"
 #include "xAODJet/JetContainer.h"
 #include "xAODTracking/VertexContainer.h"
+#include "xAODTracking/TrackParticleContainer.h"
 
 //Detector Managers
 #include "AtlasDetDescr/AtlasDetectorID.h"
diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/AltMuJetOverlapTool.h b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/AltMuJetOverlapTool.h
index b5e5a0e3fa0e2c3b4a91f2866d01193a0033ec05..dd675f15971bb266b346e76572a5d2bd29146f5b 100644
--- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/AltMuJetOverlapTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/AssociationUtils/AltMuJetOverlapTool.h
@@ -8,6 +8,7 @@
 // EDM includes
 #include "xAODMuon/MuonContainer.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODTracking/VertexContainer.h"
 
 // Local includes
 #include "AssociationUtils/IOverlapTool.h"
diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/CMakeLists.txt b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/CMakeLists.txt
index dc11e1707c193ef4d9d8b405e47ae3cc5111ebec..87d7ca34c8b2074f0aaf99d60210fc2193f8a34e 100644
--- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/CMakeLists.txt
+++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/CMakeLists.txt
@@ -19,6 +19,7 @@ atlas_depends_on_subdirs(
    Event/xAOD/xAODBase
    Event/xAOD/xAODEgamma
    Event/xAOD/xAODJet
+   Event/xAOD/xAODBTagging
    Event/xAOD/xAODMuon
    Event/xAOD/xAODTau
    Event/xAOD/xAODTracking
@@ -40,7 +41,7 @@ atlas_add_library( AssociationUtilsLib
    AssociationUtils/*.h Root/*.cxx
    PUBLIC_HEADERS AssociationUtils
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-   LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools xAODBase xAODEgamma xAODJet
+   LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools xAODBase xAODEgamma xAODJet xAODBTagging
    xAODMuon xAODTau xAODTracking AthContainers AthLinks AnaAlgorithmLib
    PRIVATE_LINK_LIBRARIES CxxUtils FourMomUtils )
 
@@ -61,7 +62,7 @@ if( XAOD_STANDALONE )
       util/OverlapRemovalTester.cxx
       INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
       LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} xAODRootAccess
-      xAODEventInfo xAODEgamma xAODMuon xAODJet xAODTau xAODEgamma
+      xAODEventInfo xAODEgamma xAODMuon xAODJet xAODBTagging xAODTau xAODEgamma
       AssociationUtilsLib )
 endif()
 
diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/ORToolBoxTestAlg.cxx b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/ORToolBoxTestAlg.cxx
index d809185dc1c4140c494a5e23df22697982ce88fc..878a8b4d050d322d37da78c03d14da8c1da68ec3 100644
--- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/ORToolBoxTestAlg.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/ORToolBoxTestAlg.cxx
@@ -5,6 +5,8 @@
 #include "ORToolBoxTestAlg.h"
 #include "AssociationUtils/OverlapRemovalDefs.h"
 #include "AssociationUtils/OverlapRemovalInit.h"
+#include "xAODBTagging/BTaggingContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 namespace
 {
@@ -105,7 +107,8 @@ bool ORToolBoxTestAlg::selectObject<xAOD::Jet>(const xAOD::Jet& jet)
   static ort::inputDecorator_t bJetDec(m_flags.bJetLabel);
   bJetDec(jet) = false;
   double mv2c10 = 0.;
-  if(jet.btagging()->MVx_discriminant("MV2c10", mv2c10)){
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
+  if(btag->MVx_discriminant("MV2c10", mv2c10)){
     if(mv2c10 > -0.1416) bJetDec(jet) = true;
   }
   else ATH_MSG_WARNING("BTag info unavailable!");
diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/OverlapRemovalTestAlg.cxx b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/OverlapRemovalTestAlg.cxx
index 10c7203dc19c255483fba5cd13d4c96bcbd45e7b..4b0a5abcdd5e7c80bb37a69683f82d1d232fced0 100644
--- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/OverlapRemovalTestAlg.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/src/OverlapRemovalTestAlg.cxx
@@ -6,6 +6,7 @@
 
 // Local includes
 #include "AssociationUtils/OverlapRemovalDefs.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "OverlapRemovalTestAlg.h"
 
 namespace
@@ -112,7 +113,7 @@ bool OverlapRemovalTestAlg::selectObject<xAOD::Jet>(const xAOD::Jet& jet)
   static ort::inputDecorator_t bJetDec(m_bJetLabel);
   bJetDec(jet) = false;
   double mv2c10 = 0.;
-  auto btag = jet.btagging();
+  auto btag = xAOD::BTaggingUtilities::getBTagging( jet );
   if(btag && btag->MVx_discriminant("MV2c10", mv2c10)){
     if(mv2c10 > -0.1416) bJetDec(jet) = true;
   }
diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/util/OverlapRemovalTester.cxx b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/util/OverlapRemovalTester.cxx
index ee0db33e22db8d051df6352de0f6f1547e61f960..6834b04e9f52b5a323460c8d6bc98e03549aba79 100644
--- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/util/OverlapRemovalTester.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/util/OverlapRemovalTester.cxx
@@ -37,6 +37,8 @@
 #include "xAODJet/JetContainer.h"
 #include "xAODTau/TauJetContainer.h"
 #include "xAODEgamma/PhotonContainer.h"
+#include "xAODBTagging/BTagging.h" 
+#include "xAODBTagging/BTaggingUtilities.h"
 
 // Local includes
 #include "AssociationUtils/OverlapRemovalInit.h"
@@ -93,7 +95,8 @@ template<> void selectObjects<xAOD::JetContainer>
     selectDec(*jet) = pass;
     // Label bjets
     double mv2c10 = 0.;
-    if(!jet->btagging()->MVx_discriminant("MV2c10", mv2c10))
+    const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
+    if(!btag->MVx_discriminant("MV2c10", mv2c10))
       throw std::runtime_error("MV2c10 unavailable");
     // This is the 85% efficiency working point
     bJetDec(*jet) = (mv2c10 > -0.1416);
diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/CMakeLists.txt b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/CMakeLists.txt
index 95407b2491ae76020321dc597904b29aa0e13cf4..c4817c3c307ed54fc28b7d2c159510597e7b6d64 100644
--- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/CMakeLists.txt
+++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/CMakeLists.txt
@@ -14,6 +14,7 @@ if( XAOD_STANDALONE )
       Control/AthToolSupport/AsgTools
       Event/EventPrimitives
       Event/xAOD/xAODJet
+      Event/xAOD/xAODTracking
       Event/xAOD/xAODTruth
       PhysicsAnalysis/MCTruthClassifier
       Reconstruction/Jet/JetInterface
@@ -28,6 +29,7 @@ else()
       Control/AthToolSupport/AsgTools
       Event/EventPrimitives
       Event/xAOD/xAODJet
+      Event/xAOD/xAODTracking
       Event/xAOD/xAODTruth
       GaudiKernel
       PhysicsAnalysis/MCTruthClassifier
@@ -44,14 +46,14 @@ if( XAOD_STANDALONE )
    atlas_add_library( ParticleJetToolsLib
       ParticleJetTools/*.h Root/*.cxx src/*.cxx
       PUBLIC_HEADERS ParticleJetTools
-      LINK_LIBRARIES AsgTools EventPrimitives xAODJet xAODTruth
+      LINK_LIBRARIES AsgTools EventPrimitives xAODJet xAODTracking xAODTruth
       JetInterface MCTruthClassifierLib JetRecLib AsgDataHandlesLib
       PRIVATE_LINK_LIBRARIES AthContainers TruthUtils )
 else()
    atlas_add_library( ParticleJetToolsLib
       ParticleJetTools/*.h Root/*.cxx src/*.cxx
       PUBLIC_HEADERS ParticleJetTools
-      LINK_LIBRARIES AsgTools EventPrimitives xAODJet xAODTruth GaudiKernel
+      LINK_LIBRARIES AsgTools EventPrimitives xAODJet xAODTracking xAODTruth GaudiKernel
       JetInterface MCTruthClassifierLib JetRecLib AsgDataHandlesLib
       PRIVATE_LINK_LIBRARIES AthAnalysisBaseCompsLib AthContainers TruthUtils )
 endif()
diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetParticleAssociation.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetParticleAssociation.cxx
index 6cf71c83ad9df201e371c0b8fe4b502f1acb8b89..49f28af9b1b85a397e602f6acd0bb4f41f2378c0 100644
--- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetParticleAssociation.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetParticleAssociation.cxx
@@ -5,6 +5,7 @@
 // author: cpollard@cern.ch
 
 #include "ParticleJetTools/JetParticleAssociation.h"
+#include "xAODTracking/TrackParticleContainer.h"
 
 using namespace std;
 using namespace xAOD;
diff --git a/PhysicsAnalysis/AnalysisEventDisplay/xAODJiveXML/src/xAODJetRetriever.cxx b/PhysicsAnalysis/AnalysisEventDisplay/xAODJiveXML/src/xAODJetRetriever.cxx
index d01966b3f9b2ce698e6272180c83ae6830e15858..956dea6642515da219392f438f12e385b6c199db 100755
--- a/PhysicsAnalysis/AnalysisEventDisplay/xAODJiveXML/src/xAODJetRetriever.cxx
+++ b/PhysicsAnalysis/AnalysisEventDisplay/xAODJiveXML/src/xAODJetRetriever.cxx
@@ -8,6 +8,7 @@
 #include "xAODCaloEvent/CaloCluster.h"
 #include "xAODTracking/TrackParticle.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "xAODJet/JetAttributes.h"
 
 #include "TrkTrack/Track.h"
@@ -278,7 +279,7 @@ namespace JiveXML {
       pz.push_back(DataType((*jetItr)->pz()/GeV));
 
       // bjet tagger values
-      const xAOD::BTagging *bTagJet = (*jetItr)->btagging();
+      const xAOD::BTagging *bTagJet = xAOD::BTaggingUtilities::getBTagging( **jetItr );
 
 
       bTagName.push_back( DataType( "default" ));
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt
index 99162375f2b8b8d08180ee2ab9c3e0a9733e2ecf..3ce221e99d5e1ae37901f929145a3d81c0365a8a 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/CMakeLists.txt
@@ -10,7 +10,7 @@ find_package( ROOT COMPONENTS Core RIO )
 atlas_add_component( DerivationFrameworkFlavourTag
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps FlavorTagDiscriminants GaudiKernel xAODJet xAODTracking )
+                     LINK_LIBRARIES AthenaBaseComps FlavorTagDiscriminants GaudiKernel xAODJet xAODTracking xAODBTagging )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
@@ -20,9 +20,9 @@ atlas_install_joboptions( share/*.py )
 atlas_add_executable( test_btagging
                       util/test-btagging.cxx
                       INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} xAODJet xAODRootAccess )
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} xAODJet xAODTracking xAODBTagging xAODRootAccess )
 
 atlas_add_executable( test_jet_links
                       util/test-jet-links.cxx
                       INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} xAODJet xAODRootAccess )
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} xAODJet xAODTracking xAODBTagging xAODRootAccess )
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/util/test-btagging.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/util/test-btagging.cxx
index 680ce2b91ae69fe907f87845bd468e43e0e43501..aeda1774b7d4fbb4d70e48f2d644d57daa43f876 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/util/test-btagging.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/util/test-btagging.cxx
@@ -2,6 +2,8 @@
 #include "xAODRootAccess/tools/ReturnCheck.h"
 #include "xAODRootAccess/TEvent.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODBTagging/BTaggingContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "TFile.h"
 #include "TTree.h"
@@ -49,7 +51,7 @@ int main (int argc, char *argv[]) {
     const xAOD::JetContainer *jets = nullptr;
     RETURN_CHECK( APP_NAME, event.retrieve(jets, jets_name) );
     for (const xAOD::Jet *const jet : *jets) {
-      const xAOD::BTagging* btag = jet->btagging();
+      const xAOD::BTagging *btag = xAOD::BTaggingUtilities::getBTagging( *jet );
       if (!btag) {
         nbad++;
       } else {
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/JetMSVAugmentation.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/JetMSVAugmentation.cxx
index cdcf54bcbdcaf0b479d27cb5ca0b5864c7e18a62..7832270c621747a2cd16394d33310be858b0a509 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/JetMSVAugmentation.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/JetMSVAugmentation.cxx
@@ -10,6 +10,7 @@
 #include "xAODBTagging/SecVtxHelper.h"
 #include "xAODTracking/Vertex.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 
 namespace DerivationFramework {
@@ -76,7 +77,7 @@ StatusCode JetMSVAugmentation::addBranches() const{
 
 
   for(auto jet : *jets){
-    const xAOD::BTagging* bjet = jet->btagging();
+    const xAOD::BTagging* bjet = xAOD::BTaggingUtilities::getBTagging( *jet );
 
     if(!bjet){
       ATH_MSG_WARNING("btagging information not available" );
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/SV1TrackThinning.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/SV1TrackThinning.cxx
index 0fd97a64a608b21e77126cfda6a7c5ae14f5d534..6e7ea245b93c12ee55b536cb31e95256aa2d75f1 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/SV1TrackThinning.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkTop/src/SV1TrackThinning.cxx
@@ -14,6 +14,7 @@
 #include "xAODJet/JetContainer.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "StoreGate/ThinningHandle.h"
 #include "GaudiKernel/ThreadLocalContext.h"
 #include <vector>
@@ -113,7 +114,7 @@ StatusCode DerivationFramework::SV1TrackThinning::doThinning() const
     // ... jets
     if (m_selectionString=="") { // check all jets as user didn't provide a selection string
         for (xAOD::JetContainer::const_iterator jetIt=importedJets->begin(); jetIt!=importedJets->end(); ++jetIt) {
-            const xAOD::BTagging* btag = (*jetIt)->btagging();
+            const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( **jetIt );
             const std::vector< ElementLink<xAOD::TrackParticleContainer> >& SV1_trackParticleLinks =
                 btag->SV1_TrackParticleLinks();
 
@@ -125,7 +126,7 @@ StatusCode DerivationFramework::SV1TrackThinning::doThinning() const
         }
     } else { // check only jets passing user selection string
         for (std::vector<const xAOD::Jet*>::iterator jetIt = jetToCheck.begin(); jetIt!=jetToCheck.end(); ++jetIt) {
-            const xAOD::BTagging* btag = (*jetIt)->btagging();
+            const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( **jetIt );
             const std::vector< ElementLink<xAOD::TrackParticleContainer> >& SV1_trackParticleLinks =
                 btag->SV1_TrackParticleLinks();
 
diff --git a/PhysicsAnalysis/JetMissingEtID/JetMissingEtTagTools/src/JetMissingEtTagTool.cxx b/PhysicsAnalysis/JetMissingEtID/JetMissingEtTagTools/src/JetMissingEtTagTool.cxx
index 0f5bcd812db056264d80cda2d81d57eb27c48bd0..42b609192924f0c8e76df7788d74db1970b102f7 100755
--- a/PhysicsAnalysis/JetMissingEtID/JetMissingEtTagTools/src/JetMissingEtTagTool.cxx
+++ b/PhysicsAnalysis/JetMissingEtID/JetMissingEtTagTools/src/JetMissingEtTagTool.cxx
@@ -22,6 +22,8 @@ Purpose : create a collection of JetMissingEtJetTag
 #include "xAODEgamma/PhotonContainer.h"
 #include "xAODMuon/MuonContainer.h"
 #include "xAODTau/TauJetContainer.h"
+#include "xAODBTagging/BTaggingContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h" 
 
 #include "xAODMissingET/MissingET.h"
 #include "xAODMissingET/MissingETContainer.h"
@@ -471,8 +473,8 @@ StatusCode JetMetTagTool::execute(TagFragmentCollection& jetMissingEtTagColl, co
       /** B-tagging using selection tools*/
 
       /** B-tagging */
-      const xAOD::BTagging* btag = selectedJet->btagging();
-      if (bool(btag)) {
+      const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *selectedJet );
+      if ( btag ) {
 	if ( m_FixedCutBEff_60->accept( selectedJet ) ) pid |= 1 << 12; 	 // MV2c20 @ 60%
 	if ( m_FixedCutBEff_70->accept( selectedJet ) ) pid |= 1 << 13; 	 // MV2c20 @ 70%
 	if ( m_FixedCutBEff_85->accept( selectedJet ) ) pid |= 1 << 14; 	 // MV2c20 @ 85%
@@ -507,7 +509,7 @@ StatusCode JetMetTagTool::execute(TagFragmentCollection& jetMissingEtTagColl, co
       if (jetP4.pt() > 100.0 * CLHEP::GeV)
 	ij100++;
 
-      const xAOD::BTagging* btag = selectedJet->btagging();
+      const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *selectedJet );
       if (bool(btag)) {
 	double mvx;
 	btag->MVx_discriminant("MV2c20", mvx);
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/CMakeLists.txt b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/CMakeLists.txt
index 0cf8ec9ebb0c0a1e492da90a5017563007568938..680b210e9d5272147b3c0d5f22cf9f02463e4721 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/CMakeLists.txt
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/CMakeLists.txt
@@ -24,7 +24,9 @@ atlas_depends_on_subdirs(
   Event/xAOD/xAODBase
   Event/xAOD/xAODMuon
   Event/xAOD/xAODJet
+  Event/xAOD/xAODBTagging
   Event/xAOD/xAODEventInfo
+  Event/xAOD/xAODTracking
   PRIVATE
   Tools/PathResolver
   )
@@ -51,7 +53,7 @@ atlas_add_library( FlavorTagDiscriminants
   Root/VRJetOverlapDecorator.cxx
   INCLUDE_DIRS ${LWTNN_INCLUDE_DIRS}
   PUBLIC_HEADERS FlavorTagDiscriminants
-  LINK_LIBRARIES AsgTools xAODBase xAODJet xAODMuon xAODEventInfo PathResolver
+  LINK_LIBRARIES AsgTools xAODBase xAODJet xAODBTagging xAODTracking xAODMuon xAODEventInfo PathResolver
   JetInterface
   ${LWTNN_LIBRARIES})
 
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h
index e289a503dea913848d08b9d7339c32e07176436c..f38011af602b7492db5e478d45f8cc2e490262c6 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h
@@ -9,6 +9,7 @@
 #include "FlavorTagDiscriminants/ftagfloat_t.h"
 
 // ATLAS things
+#include "xAODBTagging/BTagging.h"
 #include "xAODJet/Jet.h"
 #include "xAODEventInfo/EventInfo.h"
 
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h
index e150d0c4edd7046f4343435bdc2151513d2c5ab0..d5c2e02e809405a2aea4bc89dc91d64f4dac9814 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2.h
@@ -13,6 +13,8 @@
 
 // EDM includes
 #include "xAODJet/Jet.h"
+#include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 // external libraries
 #include "lwtnn/lightweight_network_config.hh"
@@ -121,7 +123,7 @@ namespace FlavorTagDiscriminants {
         {
         }
       NamedVar operator()(const xAOD::Jet& jet) const {
-        const xAOD::BTagging* btag = jet.btagging();
+        const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
         if (!btag) throw std::runtime_error("can't find btagging object");
         T ret_value = m_getter(*btag);
         bool is_default = m_default_flag(*btag);
@@ -151,7 +153,7 @@ namespace FlavorTagDiscriminants {
         {
         }
       NamedVar operator()(const xAOD::Jet& jet) const {
-        const xAOD::BTagging* btag = jet.btagging();
+        const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
         if (!btag) throw std::runtime_error("can't find btagging object");
         T ret_value = m_getter(*btag);
         if constexpr (std::is_floating_point<T>::value) {
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/customGetter.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/customGetter.h
index 16d4d7b77f522f246f73d02b8755746babdd9c7d..0dbadded29143668dd16cfb6d3335d8f754c6310 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/customGetter.h
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/customGetter.h
@@ -10,6 +10,7 @@
 
 // EDM includes
 #include "xAODJet/Jet.h"
+#include "xAODTracking/TrackParticle.h"
 
 #include <functional>
 #include <string>
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx
index 8fc4249730fb7dbf44b0e781768a64f4b404cdd6..cc9ce31eb716f0e20b2b7bfbb1cfc5a0206b538d 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx
@@ -8,6 +8,7 @@
 #include <cstddef>
 
 #include "xAODJet/Jet.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "TVector3.h"
 
@@ -206,7 +207,7 @@ void BTagJetAugmenter::augmentIpRatios(const xAOD::BTagging& btag) {
 void BTagJetAugmenter::augmentBtagJes(const xAOD::Jet &target,
                                       const xAOD::Jet &uncalib) {
 
-  const xAOD::BTagging* btag_ptr = target.btagging();
+  const xAOD::BTagging* btag_ptr = xAOD::BTaggingUtilities::getBTagging( target );
   if (!btag_ptr) throw std::runtime_error("No b-tagging object found!");
   const xAOD::BTagging& btag = *btag_ptr;
 
@@ -217,7 +218,7 @@ void BTagJetAugmenter::augmentBtagJes(const xAOD::Jet &target,
 }
 
 void BTagJetAugmenter::augment(const xAOD::Jet &jet) {
-  const xAOD::BTagging* btag_ptr = jet.btagging();
+  const xAOD::BTagging *btag_ptr = xAOD::BTaggingUtilities::getBTagging( jet );
   if (!btag_ptr) throw std::runtime_error("No b-tagging object found!");
   const xAOD::BTagging& btag = *btag_ptr;
 
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx
index cb56e99eedfb2b8a983bc1f0381b22fd8a857004..81a2fb6996361d57495203827d4dd0ff3e688e9c 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx
@@ -6,6 +6,7 @@
 #include "xAODMuon/MuonContainer.h"
 #include "FlavorTagDiscriminants/BTagMuonAugmenter.h"
 #include "FlavorTagDiscriminants/BTagTrackIpAccessor.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 namespace FlavorTagDiscriminants {
 
@@ -67,7 +68,7 @@ namespace FlavorTagDiscriminants {
     ElementLink<xAOD::MuonContainer> muon_link;
 
 
-    const xAOD::BTagging &btag = *jet.btagging();
+    const xAOD::BTagging &btag = *xAOD::BTaggingUtilities::getBTagging( jet );
 
     // Find associated combined muon closest to jet axis (like legacy SMT)
     std::vector<ElementLink<xAOD::MuonContainer> > assocMuons;
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagTrackIpAccessor.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagTrackIpAccessor.cxx
index 95a76bc481c1171df47641435f888b717af2af87..0436c99c6ad4ff2f7e3050a2c2a736c63cd9f8f7 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagTrackIpAccessor.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagTrackIpAccessor.cxx
@@ -3,6 +3,7 @@
 */
 
 #include "FlavorTagDiscriminants/BTagTrackIpAccessor.h"
+#include "xAODBTagging/BTaggingUtilities.h" 
 
 #include <cmath>
 #include <cstddef>
@@ -101,7 +102,7 @@ void BTagTrackIpAccessor::augment_with_ip(const xAOD::TrackParticle &track, cons
 }
 void BTagTrackIpAccessor::augment_with_grades(const xAOD::TrackParticle &track, const xAOD::Jet &jet) {
   int ip3d_grade = -1;
-  const xAOD::BTagging &btagging = *jet.btagging();
+  const xAOD::BTagging &btagging = *xAOD::BTaggingUtilities::getBTagging( jet );
   const std::vector<ElementLink<xAOD::TrackParticleContainer> > ip3d_tracks = m_ip3d_trackParticleLinks(btagging);
   for (std::size_t ip3d_track_index = 0; ip3d_track_index < ip3d_tracks.size(); ++ip3d_track_index) {
     if (&track == *(ip3d_tracks.at(ip3d_track_index))) {
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx
index c1ea9db0120bc4cc1f32270148cf319965b287bc..0ca1b9650a4eedb34e76a2cbc0a6d6153eee2166 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2.cxx
@@ -7,6 +7,8 @@
 #include "lwtnn/LightweightGraph.hh"
 #include "lwtnn/NanReplacer.hh"
 
+#include "xAODBTagging/BTaggingUtilities.h"
+
 namespace {
     // This is a workaround because a lot of our builds still don't
     // support C++17. It's meant to look just as ugly as it is.
@@ -162,7 +164,8 @@ namespace FlavorTagDiscriminants {
       // the second argument to compute(...) is for sequences
       auto out_vals = m_graph->compute(nodes, seqs, dec.first);
       for (const auto& node: dec.second) {
-        node.second(*jet.btagging(), out_vals.at(node.first));
+        const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
+        node.second(*btag, out_vals.at(node.first));
       }
     }
   }
@@ -193,7 +196,7 @@ namespace FlavorTagDiscriminants {
     {
     }
     Tracks TracksFromJet::operator()(const xAOD::Jet& jet) const {
-      const xAOD::BTagging *btagging = jet.btagging();
+      const xAOD::BTagging *btagging = xAOD::BTaggingUtilities::getBTagging( jet );
       if (!btagging) throw std::runtime_error("can't find btagging object");
       std::vector<std::pair<double, const xAOD::TrackParticle*>> tracks;
       for (const auto &link : m_trackAssociator(*btagging)) {
diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/HbbTag.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/HbbTag.cxx
index f2acff73d034e0887f130754c878c5782fe717ec..e4662caa63445f822b0d1360c8fb2727b59d5045 100644
--- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/HbbTag.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/HbbTag.cxx
@@ -7,7 +7,8 @@
 
 // EDM includes
 #include "xAODJet/Jet.h"
-
+#include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 // atlas utilities
 #include "PathResolver/PathResolver.h"
 
@@ -142,7 +143,7 @@ namespace {
   template <typename T>
   std::pair<std::string, double>
   BTagPairGetter<T>::operator()(const xAOD::Jet& jet) {
-    const xAOD::BTagging* btag = jet.btagging();
+    const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
     if (!btag) throw std::runtime_error("can't find btagging object");
     return {m_key, m_getter(*btag)};
   }
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/BTagHighLevelAugmenterAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/BTagHighLevelAugmenterAlg.h
index 1b1d75a873ade6f7df4cf7f7cec2ad22b46bea49..e8603f23f14756b9c0023a338a587333f0b75c83 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/BTagHighLevelAugmenterAlg.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/BTagHighLevelAugmenterAlg.h
@@ -8,6 +8,7 @@
 // ATLAS things
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODBTagging/BTaggingContainer.h"
 #include "xAODBTagging/BTagging.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "StoreGate/ReadDecorHandle.h"
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
index 293b5ccd12ed2e0706e74663510ce4b91084a248..022702470bad1842d79ef714ff791753ed5d14cd 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
@@ -13,6 +13,7 @@
 #include "AsgTools/AsgTool.h"
 #include "JetInterface/IJetModifier.h"
 #include "BTagging/IJetBTaggerTool.h"
+#include "xAODBTagging/BTaggingContainer.h"
 
 #include "GaudiKernel/ToolHandle.h"
 #include "StoreGate/ReadHandleKey.h"
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetSecVtxFindingAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetSecVtxFindingAlg.h
index 4ea468b731134faf852ae63b3d004eaba3df69c5..3bb059ee21f6c97e7240568080fdf090265fac70 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetSecVtxFindingAlg.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetSecVtxFindingAlg.h
@@ -16,6 +16,8 @@
 #include "StoreGate/ReadHandleKey.h"
 #include "StoreGate/WriteHandleKey.h"
 
+#include "xAODTracking/VertexContainer.h"
+
 namespace InDet {
   class ISecVertexInJetFinder;
 }
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/BTagTrackAssociation.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/BTagTrackAssociation.cxx
index 3c3b82922f03c3e4784ec650ade371991584af6f..b6c6d8a28f3d267b738b77c7b4b292be138b3223 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/BTagTrackAssociation.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/BTagTrackAssociation.cxx
@@ -9,6 +9,7 @@
 #include "xAODBTagging/BTagging.h"
 #include "xAODBTagging/BTaggingContainer.h"
 #include "xAODBTagging/BTaggingAuxContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "xAODJet/Jet.h"
 
@@ -110,7 +111,7 @@ namespace Analysis {
       if ( m_TracksToTagList.size() ) {
           for (const std::string& trackColName : m_TracksToTagList) {
               for (const xAOD::Jet* jet : *theJets) {
-                  xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>(jet->btagging());
+                  xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>(xAOD::BTaggingUtilities::getBTagging( *jet ));
 
                   if (!tagInfo) {
                       ATH_MSG_FATAL("The pointer from Jet to BTagging object is invalid");
@@ -168,7 +169,7 @@ namespace Analysis {
               // non-const pointer to the BTagging object like that. That would keep
               // const-correctness intact, as StoreGate could tell us whether it's allowed
               // to modify the BTagging object or not.
-              xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>((*jetIter)->btagging());
+               xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>(xAOD::BTaggingUtilities::getBTagging( **jetIter ));
               if (!tagInfo) {
                   ATH_MSG_FATAL("The pointer from Jet to BTagging object is invalid");
                   return StatusCode::FAILURE;
@@ -213,7 +214,7 @@ namespace Analysis {
           // then store them in the BTagging objects. Note that for this to work, the ElementLink from Jet to BTagging object must exist 
           unsigned int i = 0;
           for (jetcollection_t::iterator jetIter = theJets->begin(); jetIter != theJets->end(); ++jetIter) {
-              xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>((*jetIter)->btagging());
+               xAOD::BTagging* tagInfo = const_cast<xAOD::BTagging*>(xAOD::BTaggingUtilities::getBTagging( **jetIter ));
               std::vector< ElementLink< xAOD::MuonContainer > > associationLinks;
               for (std::vector<const xAOD::Muon*>::const_iterator muonIter = assocs[i]->begin(); muonIter != assocs[i]->end(); ++muonIter) {
                   ElementLink<xAOD::MuonContainer> EL;
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetSecVtxFindingAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetSecVtxFindingAlg.cxx
index 7f1ac927e0ec7978ff905cc9e3f36558fc827251..8ed783c4947f0fd8e6c9e4d9a041508ac5d94211 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetSecVtxFindingAlg.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetSecVtxFindingAlg.cxx
@@ -2,13 +2,14 @@
   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "BTagging/JetSecVtxFindingAlg.h"
-
 //general interface for secondary vertex finders
 #include "InDetRecToolInterfaces/ISecVertexInJetFinder.h"
 #include "VxSecVertex/VxSecVKalVertexInfo.h"
 #include "VxSecVertex/VxJetFitterVertexInfo.h"
- 
+#include "xAODTracking/TrackParticleContainer.h" 
+
+#include "BTagging/JetSecVtxFindingAlg.h"
+
 #include "StoreGate/ReadDecorHandle.h"
 #include "StoreGate/ReadHandle.h"
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
index b32bbbae40a013808ecb261a0059be9fa3494cc1..b37aebe00911a6ead6960d30c6f9b4d60d22a70b 100755
--- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx
@@ -8,6 +8,7 @@
 #include "xAODJet/JetContainer.h"   
 #include "xAODJet/JetAttributes.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "xAODEgamma/ElectronContainer.h"
 #include "xAODMuon/MuonContainer.h"
@@ -836,7 +837,7 @@ double JetTagMonitorAlgorithm::getMVweight(const xAOD::Jet *jet) const {
 
   ATH_MSG_DEBUG("retrieving MV2c10/DL1* weight");
   
-  const xAOD::BTagging* btag = jet->btagging();
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
 
   if (!btag) return 0;
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
index feaef044feb3b78cdc61a26c47e1d02afbda46aa..ac42a610521481e505d3396439ebc8181743087d 100755
--- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitoring.cxx
@@ -4,6 +4,7 @@
 
 #include "xAODJet/JetAttributes.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "JetTagMonitoring.h"
 
@@ -1248,7 +1249,7 @@ void JetTagMonitoring::fillTrackInJetHistograms(const xAOD::Jet *jet) {
 
 void JetTagMonitoring::fillBtagHistograms(const xAOD::Jet *jet, bool fill_top_histos) { // added by SARA (just moved already existing code into this function for better readibility)
   
-  const xAOD::BTagging* btag = jet->btagging();
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
   
   if (!btag) return; 
   
@@ -1290,7 +1291,7 @@ void JetTagMonitoring::fillDetailedHistograms(const xAOD::Jet *jet, Jet_t taggab
   ATH_MSG_DEBUG("in fillDetailedHistograms()");
 
   //* get detailed information *//
-  const xAOD::BTagging* btag = jet->btagging(); 
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
 
   if (not btag){
     ATH_MSG_WARNING("btag pointer is null in JetTagMonitoring::fillDetailedHistograms; filling these histograms will be skipped");
@@ -1435,7 +1436,7 @@ void JetTagMonitoring::fillBadTrackBits(const std::bitset<17> failedCuts, double
 
 void JetTagMonitoring::fillGoodJetHistos(const xAOD::Jet *jet) {
 
-  const xAOD::BTagging* btag = jet->btagging();
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
   if (not btag){
     ATH_MSG_WARNING("btag pointer is null in JetTagMonitoring::fillGoodJetHistos; filling these histograms will be skipped");
     return;
@@ -1552,7 +1553,7 @@ void JetTagMonitoring::fillSuspectJetHistos(const xAOD::Jet *jet) {
 
   m_track_selector_suspect->Fill(jet->eta(), jet->phi(), 1.);
   
-  const xAOD::BTagging* btag = jet->btagging();
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
   if (not btag){
     ATH_MSG_WARNING("btag pointer is null in JetTagMonitoring::fillSuspectJetHistos; filling these histograms will be skipped");
     return;
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
index 09e35d185560173d128a72c85b799d3490b6b3c1..7082d2dd9803c302c004c12d2f65fe2188034bf2 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx
@@ -4,6 +4,7 @@
 
 #include "xAODBTaggingEfficiency/BTaggingEfficiencyTool.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "CalibrationDataInterface/CalibrationDataInterfaceROOT.h"
 #include "CalibrationDataInterface/CalibrationDataVariables.h"
 #include "CalibrationDataInterface/CalibrationDataContainer.h"
@@ -985,7 +986,7 @@ BTaggingEfficiencyTool::fillVariables( const xAOD::Jet & jet, CalibrationDataVar
   x.jetAuthor = m_jetAuthor;
   //bool weightOK = true;
   if (m_isContinuous) {
-    const xAOD::BTagging* tagInfo = jet.btagging();
+    const xAOD::BTagging* tagInfo = xAOD::BTaggingUtilities::getBTagging( jet );
     if (!tagInfo) return false;
     // x.jetTagWeight = (tagInfo->*m_getTagWeight)();
     // For now, we defer the tag weight computation to the selection tool only in the case of DL1* (this is likely to be revisited)
diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingSelectionTool.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingSelectionTool.cxx
index ef4fdd408f9f4125ef24a1b2c57561c375778e05..6d4310cbb62a0696a2812c75e663f9df4f7855d2 100644
--- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingSelectionTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingSelectionTool.cxx
@@ -4,6 +4,7 @@
 
 #include "xAODBTaggingEfficiency/BTaggingSelectionTool.h"
 #include "xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 #include "CalibrationDataInterface/CalibrationDataInterfaceROOT.h"
 #include "CalibrationDataInterface/CalibrationDataVariables.h"
 #include "CalibrationDataInterface/CalibrationDataContainer.h"
@@ -222,7 +223,7 @@ CorrectionCode BTaggingSelectionTool::getTaggerWeight( const xAOD::Jet& jet, dou
  else if ( taggerName.find("MV2") != string::npos ){
 
 
-    const xAOD::BTagging* btag = jet.btagging();
+    const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
 
     if ((!btag) || (!btag->MVx_discriminant(taggerName, tagweight))){
       if(m_ErrorOnTagWeightFailure){
@@ -243,7 +244,7 @@ CorrectionCode BTaggingSelectionTool::getTaggerWeight( const xAOD::Jet& jet, dou
   double dl1_pc(-10.);
   double dl1_pu(-10.);
 
-  const xAOD::BTagging* btag = jet.btagging();
+  const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
 
   if ((!btag)){
    ATH_MSG_ERROR("Failed to retrieve the BTagging information");
@@ -372,7 +373,8 @@ asg::AcceptData BTaggingSelectionTool::accept( const xAOD::Jet& jet ) const {
 
     double weight_mv2c100(-10.);
     double weight_mv2cl100(-10.);
-    const xAOD::BTagging* btag = jet.btagging();
+    const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( jet );
+
 
     if ((!btag)){
       ATH_MSG_ERROR("Failed to retrieve the BTagging information");
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/ExKtbbTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/ExKtbbTag.cxx
index dffd4e4b68362faa6e5b96b9f917c35d8ce7635f..e6d2f803b6d19390f93215f951eeaaf7336d33da 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/ExKtbbTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/ExKtbbTag.cxx
@@ -250,8 +250,9 @@ bool ExKtbbTag::CalculateInputVariables(xAOD::Jet& jetToTag, xAOD::BTagging* BTa
 
   // validity check
   if(ExKtSubJets.size() == 2){
-    const xAOD::BTagging* bjet_LeadExKtSubJet = ExKtSubJets[0]->btagging();
-    const xAOD::BTagging* bjet_SubLeadExKtSubJet = ExKtSubJets[1]->btagging();
+    const xAOD::BTagging* bjet_LeadExKtSubJet = xAOD::BTaggingUtilities::getBTagging( *ExKtSubJets[0] );
+    const xAOD::BTagging* bjet_SubLeadExKtSubJet = xAOD::BTaggingUtilities::getBTagging( *ExKtSubJets[1] );
+
 
     if( (!bjet_LeadExKtSubJet) || (!bjet_SubLeadExKtSubJet) ){
       ATH_MSG_ERROR("Exclusive kt subjet is not well b-tagged!");
diff --git a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/BTaggingValidationPlots.cxx b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/BTaggingValidationPlots.cxx
index 6aa99006acad5336140a2307fa53f92d490f083e..4c38270bde1c21cb7551a239badad5d8104918cf 100644
--- a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/BTaggingValidationPlots.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/BTaggingValidationPlots.cxx
@@ -3,7 +3,8 @@
 */
 
 #include "BTaggingValidationPlots.h"
-#include "ParticleJetTools/JetFlavourInfo.h" 
+#include "ParticleJetTools/JetFlavourInfo.h"
+#include "xAODBTagging/BTaggingUtilities.h" 
 using CLHEP::GeV;
 
 namespace JetTagDQA{
@@ -138,7 +139,7 @@ namespace JetTagDQA{
 		else jet->getAttribute("TruthLabelID",label);	
 
  		//ANDREA --- Store tracking quantities
-		const xAOD::BTagging* bjet = jet->btagging();
+ 		const xAOD::BTagging* bjet = xAOD::BTaggingUtilities::getBTagging( *jet );
  		std::vector< ElementLink< xAOD::TrackParticleContainer > > assocTracks = bjet->auxdata<std::vector<ElementLink<xAOD::TrackParticleContainer> > >("BTagTrackToJetAssociator");
 		for (unsigned int iT=0; iT<assocTracks.size(); iT++) {
       		  if (!assocTracks.at(iT).isValid()) continue;
diff --git a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/PhysValBTag.cxx b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/PhysValBTag.cxx
index a1f53d839c293c833a319f944bdeae002f720dfe..a2f7d7f3e5e2f1fc39e0acf90d0c994bcfce2a23 100644
--- a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/PhysValBTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/src/PhysValBTag.cxx
@@ -20,7 +20,7 @@
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/Vertex.h"
 #include "xAODBTagging/BTagging.h"
-//#include "../../Event/xAOD/xAODBTagging/xAODBTagging/BTagging.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "AthenaBaseComps/AthCheckMacros.h"
 #include "ParticleJetTools/JetFlavourInfo.h"
@@ -166,7 +166,7 @@ namespace JetTagDQA {
         //std::cout << "number of processed jet: " << njets << std::endl;
 
         //btagging
-        const xAOD::BTagging* btag =  jet->btagging();
+        const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
 
         int label(1000);
         //double dR(1000);
diff --git a/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/src/PhysValExample.cxx b/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/src/PhysValExample.cxx
index c19296cbcdb547eed100077d4574facc3be890d1..0e5f79a9eca40468eb84cc22c7452c634365dd90 100644
--- a/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/src/PhysValExample.cxx
+++ b/PhysicsAnalysis/PhysicsValidation/PhysValMonitoring/src/PhysValExample.cxx
@@ -28,6 +28,7 @@
 #include "xAODTracking/Vertex.h" 
 #include "xAODEventInfo/EventInfo.h" 
 #include "xAODBTagging/BTagging.h" 
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "RecEvent/RecoTimingObj.h"
 
@@ -133,7 +134,7 @@ namespace PhysVal {
     ATH_CHECK(evtStore()->retrieve(jets, m_jetName));
     for (auto jet : *jets) {
       m_jetPlots.fill(jet);
-      const xAOD::BTagging* btag = jet->btagging();
+      const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *jet );
       if (btag && btag->IP3D_loglikelihoodratio() > 1.2) ++nbtag;
     }
     m_jetPlots.fill();
diff --git a/PhysicsAnalysis/TrackingID/InDetTrackSystematicsTools/Root/JetTrackFilterTool.cxx b/PhysicsAnalysis/TrackingID/InDetTrackSystematicsTools/Root/JetTrackFilterTool.cxx
index e4d1aaa85a8ddfe92b60c35ee1178a7636389e0e..1bb818c1cfb5698148dcd0a6f11cf17701887f0b 100644
--- a/PhysicsAnalysis/TrackingID/InDetTrackSystematicsTools/Root/JetTrackFilterTool.cxx
+++ b/PhysicsAnalysis/TrackingID/InDetTrackSystematicsTools/Root/JetTrackFilterTool.cxx
@@ -3,6 +3,7 @@
 */
 
 #include "InDetTrackSystematicsTools/JetTrackFilterTool.h"
+#include "xAODTracking/TrackParticleContainer.h"
 
 #include "FourMomUtils/xAODP4Helpers.h"
 
diff --git a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtTool.h b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtTool.h
index 28c36046b0f889823e85df119e5b3b3118b24568..479f898a88418c4f3cd1493977f4aec8f1cf3076 100644
--- a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtTool.h
+++ b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtTool.h
@@ -24,6 +24,7 @@
 
 // EDM includes
 #include "xAODJet/JetContainer.h"
+#include "xAODTracking/VertexContainer.h"
 #include "xAODMissingET/MissingETContainer.h"
 #include "xAODCaloEvent/CaloCluster.h"
 #include "JetInterface/IJetDecorator.h"
diff --git a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtToolBDT.h b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtToolBDT.h
index b955e7fa86bf9553022261b7c5390d30bb7eb5a9..300f7db52b4f5ec0d197cd94b7ca622a9be858da 100644
--- a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtToolBDT.h
+++ b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetForwardJvtToolBDT.h
@@ -28,6 +28,7 @@
 // EDM includes
 #include "xAODEventInfo/EventInfo.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODTracking/VertexContainer.h"
 #include "xAODMissingET/MissingETContainer.h"
 #include "xAODCaloEvent/CaloCluster.h"
 #include "xAODCaloEvent/CaloClusterContainer.h"
diff --git a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetOriginCorrectionTool.h b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetOriginCorrectionTool.h
index cd288e4c6feb0f802e04d3bb2443397550dd3b95..b4c2149de52a1d03924abbbdc112e1c3122a6d1d 100644
--- a/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetOriginCorrectionTool.h
+++ b/Reconstruction/Jet/JetMomentTools/JetMomentTools/JetOriginCorrectionTool.h
@@ -30,6 +30,7 @@
 #include "AsgDataHandles/WriteDecorHandleKey.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODTracking/VertexContainer.h"
 
 class JetOriginCorrectionTool : public asg::AsgTool,
                                 virtual public IJetDecorator {
diff --git a/Reconstruction/Jet/JetReclustering/README.md b/Reconstruction/Jet/JetReclustering/README.md
index eef94443ab6de4a92d0642c3655d014851cf728f..e43444f948bd0f4d211f0d1fd55be6be7a49e2cb 100644
--- a/Reconstruction/Jet/JetReclustering/README.md
+++ b/Reconstruction/Jet/JetReclustering/README.md
@@ -291,7 +291,7 @@ for(auto jet: *in_jets){
       continue;
     }
     subjet = static_cast<const xAOD::Jet*>(constit->rawConstituent());
-    btag = subjet->btagging();
+    btag = xAOD::BTaggingUtilities::getBTagging( *subjet );
     if(btag)
       Info("execute()", "btagging: %0.2f", btag->MV1_discriminant());
 
diff --git a/Reconstruction/Jet/JetSubStructureUtils/CMakeLists.txt b/Reconstruction/Jet/JetSubStructureUtils/CMakeLists.txt
index 420a1da5a99cd2f67b7574672e9a232c99ae2b00..26a2764f95cdfa9df7c0b45f7047f55f41df9e21 100644
--- a/Reconstruction/Jet/JetSubStructureUtils/CMakeLists.txt
+++ b/Reconstruction/Jet/JetSubStructureUtils/CMakeLists.txt
@@ -15,7 +15,7 @@ atlas_add_library( JetSubStructureUtils
    INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} ${FASTJETCONTRIB_INCLUDE_DIRS}
    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
    LINK_LIBRARIES ${FASTJET_LIBRARIES} ${FASTJETCONTRIB_LIBRARIES}
-   xAODJet xAODMuon MuonSelectorToolsLib
+   xAODJet xAODTracking xAODBTagging xAODMuon MuonSelectorToolsLib
    PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} PathResolver )
 
 # Install files from the package:
diff --git a/Reconstruction/Jet/JetSubStructureUtils/Root/BoostedXbbTag.cxx b/Reconstruction/Jet/JetSubStructureUtils/Root/BoostedXbbTag.cxx
index 5c9f92e4b4547799b424786292101b5c7112db62..b33b5e487c03c33104c71241dc69c8536c210008 100644
--- a/Reconstruction/Jet/JetSubStructureUtils/Root/BoostedXbbTag.cxx
+++ b/Reconstruction/Jet/JetSubStructureUtils/Root/BoostedXbbTag.cxx
@@ -8,6 +8,8 @@
 #include "PathResolver/PathResolver.h"
 #endif
 
+#include "xAODBTagging/BTaggingUtilities.h"
+
 // root includes
 #include <TSystem.h>
 #include <TFile.h>
@@ -452,7 +454,8 @@ int BoostedXbbTag::result(const xAOD::Jet& jet, std::string algorithm_name, cons
 
     // MV2c10
     double mv2c10(FLT_MIN);
-    if(!trackJet->btagging()->MVx_discriminant("MV2c10", mv2c10)){
+    const xAOD::BTagging* btag = xAOD::BTaggingUtilities::getBTagging( *trackJet );
+    if(!btag->MVx_discriminant("MV2c10", mv2c10)){
       if(m_verbose) printf("<%s>: Could not retrieve the MV2c10 discriminant.\r\n", APP_NAME);
       return -9;
     }
diff --git a/Reconstruction/Jet/JetSubStructureUtils/Root/Charge.cxx b/Reconstruction/Jet/JetSubStructureUtils/Root/Charge.cxx
index 0a5fc00270dccb3859cb0bc71c476599951a3633..844aacd64c2942ea7c63f849f82e119957a62856 100644
--- a/Reconstruction/Jet/JetSubStructureUtils/Root/Charge.cxx
+++ b/Reconstruction/Jet/JetSubStructureUtils/Root/Charge.cxx
@@ -3,6 +3,7 @@
 */
 
 #include "JetSubStructureUtils/Charge.h"
+#include "xAODTracking/TrackParticle.h"
 
 using namespace std;
 using namespace JetSubStructureUtils;
diff --git a/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h b/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h
index 3cd07106f014c39d433285c24ef50c34377a6238..6f46c200b59f7ee20d24132d7239ba7d4ce0aa5f 100644
--- a/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h
+++ b/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h
@@ -23,6 +23,8 @@ class TH1D;
 
 #include "TRandom3.h"
 
+#include "xAODTracking/VertexContainer.h"
+
 #include "xAODMissingET/MissingETContainer.h"
 #include "xAODMissingET/MissingETAssociationMap.h"
 #include "xAODMissingET/MissingETAssociationHelper.h"
diff --git a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
index 970fa1863c59c0fcee90b81e1507b9d699e8b8e8..2928274daaef5f4e2a33f4df8e9bfd3a21da6b8d 100644
--- a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
+++ b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecValidation/src/CalibrationNtupleMakerTool.cxx
@@ -15,6 +15,8 @@
 #include "xAODParticleEvent/IParticleLink.h"
 #include "xAODParticleEvent/IParticleLinkContainer.h"
 
+#include "xAODTracking/VertexContainer.h"
+
 // Gaudi
 #include "GaudiKernel/ITHistSvc.h"
 #include "GaudiKernel/SystemOfUnits.h"
diff --git a/Trigger/TrigAlgorithms/TrigEFMissingET/TrigEFMissingET/EFMissingETBaseTool.h b/Trigger/TrigAlgorithms/TrigEFMissingET/TrigEFMissingET/EFMissingETBaseTool.h
index 86624e0ef87199fc745a20ee91c1833e3b1e833b..ea1dcd599af241b1dbaae5cba99bd9c8081aa984 100644
--- a/Trigger/TrigAlgorithms/TrigEFMissingET/TrigEFMissingET/EFMissingETBaseTool.h
+++ b/Trigger/TrigAlgorithms/TrigEFMissingET/TrigEFMissingET/EFMissingETBaseTool.h
@@ -26,6 +26,7 @@ tools must implement the execute(...) method.
 #include "xAODCaloEvent/CaloClusterContainer.h"
 #include "xAODTrigMissingET/TrigMissingET.h"
 #include "xAODJet/JetContainer.h"
+#include "xAODTracking/VertexContainer.h"
 #include "xAODMuon/MuonContainer.h"
 #include <vector>
 
diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBtagFex.cxx b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBtagFex.cxx
index 33df86aa1da84eb0323623ec4c22700d982daf18..1ab92da1add8e4ee679895755c094a9134d9b8f1 100755
--- a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBtagFex.cxx
+++ b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBtagFex.cxx
@@ -30,6 +30,7 @@
 #include "xAODBTagging/BTagging.h"
 #include "xAODBTagging/BTaggingContainer.h"
 #include "xAODBTagging/BTaggingAuxContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 #include "xAODBTagging/BTagVertex.h"
 #include "xAODBTagging/BTagVertexContainer.h"
@@ -270,7 +271,7 @@ HLT::ErrorCode TrigBtagFex::hltExecute(const HLT::TriggerElement* inputTE, HLT::
       // Link the BTagging object to the jet for track association
       ElementLink< xAOD::BTaggingContainer> linkBTagger;
       linkBTagger.toContainedElement(*trigBTaggingContainer, trigBTagging);
-      jet->setBTaggingLink(linkBTagger);
+      xAOD::BTaggingUtilities::setBTaggingLink( *jet,linkBTagger );
 
       std::vector<xAOD::Jet*> jetsList;
       jetsList.push_back(jet);
diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/CMakeLists.txt b/graphics/VP1/VP1Systems/VP1AODSystems/CMakeLists.txt
index 2492091c766e34b720a2d4279856ffc306e0963f..e716a981c3bee8716d830534d49fac86f3c47c73 100644
--- a/graphics/VP1/VP1Systems/VP1AODSystems/CMakeLists.txt
+++ b/graphics/VP1/VP1Systems/VP1AODSystems/CMakeLists.txt
@@ -20,7 +20,7 @@ if(NOT BUILDVP1LIGHT)
        VP1AODSystems/*.h src/*.h src/*.cxx
        PUBLIC_HEADERS VP1AODSystems
        PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}
-       LINK_LIBRARIES xAODMuon xAODEgamma xAODTracking GaudiKernel VP1Base StoreGateLib
+       LINK_LIBRARIES xAODMuon xAODEgamma xAODTracking xAODBTagging GaudiKernel VP1Base StoreGateLib
        Qt5::Core Qt5::Gui
        PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoPrimitives EventPrimitives
        xAODBase xAODCaloEvent xAODJet xAODMissingET PathResolver TrkExInterfaces
@@ -31,7 +31,7 @@ else()
        src/*.h VP1AODSystems/*.h src/*cxx
        PUBLIC_HEADERS VP1AODSystems
        PRIVATE_INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}
-       LINK_LIBRARIES xAODMuon xAODEgamma xAODTracking VP1Base
+       LINK_LIBRARIES xAODMuon xAODEgamma xAODTracking xAODBTagging VP1Base
        Qt5::Core Qt5::Gui
        PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoPrimitives EventPrimitives
        xAODBase xAODCaloEvent xAODJet xAODMissingET PathResolver TrkExInterfaces xAODEventInfo
diff --git a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Jet.cxx b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Jet.cxx
index 55fb437bea832ac128a8930659330eecca7e606a..99576a4ef3611e66009aee2bc07be146010a179a 100644
--- a/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Jet.cxx
+++ b/graphics/VP1/VP1Systems/VP1AODSystems/src/IParticleHandle_Jet.cxx
@@ -43,6 +43,9 @@
   #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm'
 #endif
 
+#include "xAODTracking/VertexContainer.h"
+#include "xAODBTagging/BTaggingContainer.h"
+#include "xAODBTagging/BTaggingUtilities.h"
 
 //____________________________________________________________________
 class IParticleHandle_Jet::Imp {
@@ -718,8 +721,8 @@ double IParticleHandle_Jet::getBTaggingWeight(std::string tagger)
 {
     double weight = 0.0;
 
-	const xAOD::BTagging * myBTag = nullptr;
-    myBTag = m_d->m_jet->btagging();
+    const xAOD::BTagging * myBTag = nullptr;
+    myBTag = xAOD::BTaggingUtilities::getBTagging( *m_d->m_jet );
 
    if (myBTag == nullptr) {
     VP1Msg::messageWarningRed("It was not possible to access the pointer to b-tagging info, for the selected collection! Returning 'weight': 0.0"); //("It was not possible to access the tagger '"+ tagger +"' for the selected collection: " + m_d->m_jet->getInputType() + m_d->m_jet->getAlgorithmType() );