From ab83e32e784424b08de47370228ad6a75b7b39ff Mon Sep 17 00:00:00 2001
From: schaffer <R.D.Schaffer@cern.ch>
Date: Sun, 24 May 2020 11:00:57 +0200
Subject: [PATCH] removing most of the remaining use of AtlasFieldSvc, mostly
 concerns the test for solenoidOn or toroidOn

---
 .../TRT_Digitization/CMakeLists.txt           |   3 +-
 .../src/TRTDigitizationTool.cxx               |  11 +-
 .../src/TRTDigitizationTool.h                 |   6 +-
 .../src/TRTProcessingOfStraw.cxx              |  12 +-
 .../src/TRTProcessingOfStraw.h                |   5 -
 .../share/jobOption_ConditionsOverrider.py    |   6 -
 .../InDetLowBetaFinder/CMakeLists.txt         |   8 +-
 .../InDetLowBetaFinder/LowBetaAlg.h           |   7 +-
 .../InDetLowBetaFinder/src/LowBetaAlg.cxx     |  18 ++-
 .../InDetTrackScoringTools/CMakeLists.txt     |   8 +-
 .../InDetAmbiScoringTool.h                    |  11 +-
 .../InDetTrtTrackScoringTool.h                |  10 +-
 .../src/InDetAmbiScoringTool.cxx              |  28 ++--
 .../src/InDetTrtTrackScoringTool.cxx          |  30 ++--
 .../InDetTrackSelectorTool/CMakeLists.txt     |   3 +-
 .../InDetCosmicTrackSelectorTool.h            |  11 +-
 .../InDetDetailedTrackSelectorTool.h          |  10 +-
 .../src/InDetCosmicTrackSelectorTool.cxx      |  24 +--
 .../src/InDetDetailedTrackSelectorTool.cxx    |  39 +++--
 .../TRT_SegmentToTrackTool/CMakeLists.txt     |   3 +-
 .../TRT_SegmentToTrackTool.h                  |  11 +-
 .../src/TRT_SegmentToTrackTool.cxx            |  19 +--
 .../MagFieldConditions/CMakeLists.txt         |   1 -
 MagneticField/MagFieldElements/CMakeLists.txt |   1 -
 .../MuonTrackFinderTools/CMakeLists.txt       |   8 +-
 .../src/MuonTrackCleaner.cxx                  |  23 ++-
 .../src/MuonTrackCleaner.h                    |   7 +-
 .../src/MuonTrackExtrapolationTool.cxx        |  21 ++-
 .../src/MuonTrackExtrapolationTool.h          |   7 +-
 .../MuonTrackSteeringTools/CMakeLists.txt     |   8 +-
 .../src/MooCandidateMatchingTool.cxx          |  16 +-
 .../src/MooCandidateMatchingTool.h            |   8 +-
 .../src/MooTrackBuilder.cxx                   |  48 +++++-
 .../src/MooTrackBuilder.h                     |   7 +-
 .../python/SoftBtagCommon.py                  |   3 +-
 .../EventTag/EventTagRawAlgs/CMakeLists.txt   |   8 +-
 .../src/RawInfoSummaryForTagWriter.cxx        |  19 ++-
 .../src/RawInfoSummaryForTagWriter.h          |   6 +-
 .../BTagging/BTagging/JetBTaggerAlg.h         |   6 +-
 .../BTagging/BTagging/JetBTaggerTool.h        |   6 +-
 .../BTagging/BTagging/JetBTaggingAlg.h        |   6 +-
 .../JetTagAlgs/BTagging/CMakeLists.txt        |  12 +-
 .../BTagging/python/BTagRun3Config.py         |  13 +-
 .../JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx |  25 +--
 .../BTagging/src/JetBTaggerTool.cxx           |  39 +++--
 .../BTagging/src/JetBTaggingAlg.cxx           |  25 +--
 .../MuidCaloScatteringTools/CMakeLists.txt    |   8 +-
 .../MuidCaloTrackStateOnSurface.h             |   7 +-
 .../src/MuidCaloTrackStateOnSurface.cxx       |  28 ++--
 .../MuidTrackBuilder/CMakeLists.txt           |   8 +-
 .../CombinedMuonTrackBuilder.h                |   6 +-
 .../src/CombinedMuonTrackBuilder.cxx          | 145 +++++++++++++++---
 .../MuonCombinedBaseTools/CMakeLists.txt      |   8 +-
 .../src/MuonCombinedFitTagTool.cxx            |  19 ++-
 .../src/MuonCombinedFitTagTool.h              |   9 +-
 .../TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h    |   4 +-
 .../TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h    |   3 +-
 .../TrkExAlgs/src/ExtrapolatorTest.cxx        |   7 -
 .../TrkExAlgs/src/RiddersAlgorithm.cxx        |   9 --
 .../TrkExSTEP_Propagator/CMakeLists.txt       |   2 +-
 .../TrkMaterialProvider/CMakeLists.txt        |   8 +-
 .../TrkMaterialProviderTool.h                 |  10 +-
 .../src/TrkMaterialProviderTool.cxx           |  27 +++-
 63 files changed, 581 insertions(+), 333 deletions(-)

diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt b/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt
index 4c6340a2822..5fe6725f6bc 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/CMakeLists.txt
@@ -29,7 +29,6 @@ atlas_depends_on_subdirs( PUBLIC
                           InnerDetector/InDetRawEvent/InDetSimData
                           InnerDetector/InDetSimEvent
                           InnerDetector/InDetSimUtils/TRT_PAI_Process
-                          MagneticField/MagFieldInterfaces
                           Simulation/HitManagement
                           MagneticField/MagFieldElements
                           MagneticField/MagFieldConditions )
@@ -45,7 +44,7 @@ atlas_add_component( TRT_Digitization
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${HEPPDT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${HEPPDT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} GaudiKernel AthenaBaseComps AthenaKernel PileUpToolsLib AthenaPoolUtilities GeoModelUtilities GeoPrimitives Identifier EventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry InDetRawData InDetSimData InDetSimEvent MagFieldInterfaces HitManagement MagFieldElements MagFieldConditions)
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${HEPPDT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} GaudiKernel AthenaBaseComps AthenaKernel PileUpToolsLib AthenaPoolUtilities GeoModelUtilities GeoPrimitives Identifier EventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry TRT_ReadoutGeometry InDetRawData InDetSimData InDetSimEvent HitManagement MagFieldElements MagFieldConditions)
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx
index 5063ecfaf8e..3f8f6c5d3ab 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.cxx
@@ -155,9 +155,6 @@ StatusCode TRTDigitizationTool::initialize()
   //Retrieve TRT_CalDbTool
   ATH_CHECK(m_calDbTool.retrieve());
 
-  // Get the magnetic field service
-  ATH_CHECK(m_magneticfieldsvc.retrieve());
-
   m_minpileuptruthEkin = m_settings->pileUpSDOsMinEkin();
 
   // Set SDO readout range
@@ -186,7 +183,7 @@ StatusCode TRTDigitizationTool::initialize()
   }
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
-  ATH_CHECK( m_fieldCondObjInputKey.initialize() );
+  ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
   return StatusCode::SUCCESS;
@@ -321,14 +318,12 @@ StatusCode TRTDigitizationTool::lateInitialize(const EventContext& ctx) {
 
   ITRT_SimDriftTimeTool *pTRTsimdrifttimetool = &(*m_TRTsimdrifttimetool);
 
-  MagField::IMagFieldSvc *pMagfieldsvc = &(*m_magneticfieldsvc);
   const ITRT_CalDbTool* calDbTool=m_calDbTool.get();
   m_pProcessingOfStraw =
     new TRTProcessingOfStraw( m_settings,
                               m_manager,
                               TRTpaiToolXe,
                               pTRTsimdrifttimetool,
-                              pMagfieldsvc,
                               m_pElectronicsProcessing,
                               m_pNoise,
                               m_pDigConditions,
@@ -361,11 +356,11 @@ StatusCode TRTDigitizationTool::processStraws(const EventContext& ctx,
   if (m_settings->useMagneticFieldMap()) {
       
     // Get field cache object
-    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
     const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
 
     if (fieldCondObj == nullptr) {
-        ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
+        ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
         return StatusCode::FAILURE;
     }
     fieldCondObj->getInitializedCache (fieldCache);
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h
index d4f4f520a58..9ad824c3832 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigitizationTool.h
@@ -27,7 +27,6 @@
 #include "TRTDigit.h"
 
 // For magneticfield
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 #include "StoreGate/ReadHandleKey.h"
@@ -133,10 +132,9 @@ private:
   ServiceHandle<PileUpMergeSvc> m_mergeSvc{this, "MergeSvc", "PileUpMergeSvc", "Merge service"};
   ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", ""};  //!< Random number service
   ServiceHandle<ITRT_StrawNeighbourSvc> m_TRTStrawNeighbourSvc{this, "TRT_StrawNeighbourSvc", "TRT_StrawNeighbourSvc", ""};
-  ServiceHandle < MagField::IMagFieldSvc > m_magneticfieldsvc{this, "MagFieldSvc", "AtlasFieldSvc", "MagFieldSvc used by TRTProcessingOfStraw"};
   // Read handle for conditions object to get the field cache
-  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
-                                                                        "Name of the Magnetic Field conditions object key"};
+  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                             "Name of the Magnetic Field conditions object key"};
   Gaudi::Property<bool> m_onlyUseContainerName{this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."};
   SG::ReadHandleKey<TRTUncompressedHitCollection> m_hitsContainerKey{this, "DataObjectName", "TRTUncompressedHits", "Data Object Name"};
   std::string m_dataObjectName{""};
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx
index 0747a150eef..2a5154bc67f 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.cxx
@@ -41,9 +41,6 @@
 #include <cmath>
 #include <cstdlib> //Always include this when including cmath!
 
-// For magneticfield
-#include "MagFieldInterfaces/IMagFieldSvc.h"
-
 // Logging
 #include "AthenaBaseComps/AthMsgStreamMacros.h"
 
@@ -52,7 +49,6 @@ TRTProcessingOfStraw::TRTProcessingOfStraw(const TRTDigSettings* digset,
                                            const InDetDD::TRT_DetectorManager* detmgr,
                                            ITRT_PAITool* paitoolXe,
                                            ITRT_SimDriftTimeTool* simdrifttool,
-                                           MagField::IMagFieldSvc * magfieldsvc,
                                            TRTElectronicsProcessing * ep,
                                            TRTNoise * noise,
                                            TRTDigCondBase* digcond,
@@ -76,7 +72,6 @@ TRTProcessingOfStraw::TRTProcessingOfStraw(const TRTDigSettings* digset,
   m_pDigConditions(digcond),
   m_pParticleTable(pdt),
   m_alreadywarnedagainstpdg0(false),
-  m_magneticfieldsvc(magfieldsvc),
   m_msg("TRTProcessingOfStraw"),
   m_id_helper(trt_id)
 
@@ -609,11 +604,8 @@ void TRTProcessingOfStraw::ClustersToDeposits (MagField::AtlasFieldCache& fieldC
       globalPosition[1]=TRThitGlobalPos[1]*CLHEP::mm;
       globalPosition[2]=TRThitGlobalPos[2]*CLHEP::mm;
 
-    // MT Field cache is stored in cache
-
-    // MT version uses cache, temporarily keep old version
-      if (fieldCache.useNewBfieldCache()) fieldCache.getField         (globalPosition.data(), mField.data());
-      else                                m_magneticfieldsvc->getField(&globalPosition, &mField);
+      // MT Field cache is stored in cache
+      fieldCache.getField         (globalPosition.data(), mField.data());
 
       map_x2 = mField.x()*mField.x(); // would be zero for a uniform field
       map_y2 = mField.y()*mField.y(); // would be zero for a uniform field
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h
index 9f860212f34..fd4702e8895 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTProcessingOfStraw.h
@@ -39,8 +39,6 @@ class TRTUncompressedHit;
 class ITRT_PAITool;
 class ITRT_SimDriftTimeTool;
 
-namespace MagField { class IMagFieldSvc; }
-
 namespace InDetDD { class TRT_DetectorManager; }
 
 class TRTDigSettings;
@@ -57,7 +55,6 @@ public:
                         const InDetDD::TRT_DetectorManager*,
                         ITRT_PAITool*,
                         ITRT_SimDriftTimeTool*,
-                        MagField::IMagFieldSvc * magfieldsvc,
                         TRTElectronicsProcessing * ep,
                         TRTNoise * noise,
                         TRTDigCondBase* digcond,
@@ -237,8 +234,6 @@ private:
 
   Amg::Vector3D getGlobalPosition( int hitID, const TimedHitPtr<TRTUncompressedHit> *theHit );
 
-  //Magnetic field stuff
-  MagField::IMagFieldSvc* m_magneticfieldsvc;
   mutable Athena::MsgStreamMember m_msg;
 
 protected:
diff --git a/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py b/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py
index 83272832e54..46d17ae2b75 100644
--- a/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py
+++ b/InnerDetector/InDetExample/InDetAlignExample/share/jobOption_ConditionsOverrider.py
@@ -166,12 +166,6 @@ if loadInDetRec_Options["TRTCalibT0TagCos"]:
 if loadInDetRec_Options["TRTCalibRtTagCos"]:
   conddb.addOverride('/TRT/Calib/RT',loadInDetRec_Options["TRTCalibRtTagCos"])
 
-#Trying to fix the Database problem
-if loadInDetRec_Options["globalTag"] == "OFLCOND-RUN12-SDR-14":    
-  conddb.addOverride('/PIXEL/PixdEdx','PixdEdx_January2011_mc-000-00')
-  from AthenaCommon.CfgGetter import getService
-  getService("AtlasFieldSvc").UseDCS = False
-
 doJiveXML=False  
 if doJiveXML:
   ToolSvc.TrackRetriever.OtherTrackCollections =["CombinedInDetTracks", "CombinedInDetTracks_CTB"]
diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt
index b86f1adf2ed..51a7228809b 100644
--- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt
+++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           GaudiKernel
                           InnerDetector/InDetConditions/TRT_ConditionsServices
-                          MagneticField/MagFieldInterfaces
                           PRIVATE
                           Control/StoreGate
                           InnerDetector/InDetConditions/TRT_ConditionsData
@@ -21,7 +20,10 @@ atlas_depends_on_subdirs( PUBLIC
                           Tracking/TrkEvent/TrkParameters
                           Event/xAOD/xAODTracking
                           Tracking/TrkEvent/TrkRIO_OnTrack
-                          Tracking/TrkEvent/TrkTrack )
+                          Tracking/TrkEvent/TrkTrack
+			  MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( ROOT COMPONENTS Minuit RIO Core Tree MathCore Hist pthread MathMore Minuit2 Matrix Physics HistPainter Rint )
@@ -31,7 +33,7 @@ atlas_add_component( InDetLowBetaFinder
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel TRT_ConditionsServicesLib MagFieldInterfaces StoreGateLib SGtests TRT_ConditionsData InDetIdentifier InDetLowBetaInfo InDetRIO_OnTrack TrkParameters xAODTracking TrkRIO_OnTrack TrkTrack )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel TRT_ConditionsServicesLib StoreGateLib SGtests TRT_ConditionsData InDetIdentifier InDetLowBetaInfo InDetRIO_OnTrack TrkParameters xAODTracking TrkRIO_OnTrack TrkTrack MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_headers( InDetLowBetaFinder )
diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h
index 646454acfc8..15a424e1651 100644
--- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h
+++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/InDetLowBetaFinder/LowBetaAlg.h
@@ -24,7 +24,9 @@ author Christopher.Marino <Christopher.Marino@cern.ch>
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "TRT_ConditionsServices/ITRT_CalDbTool.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// MagField cache
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "MagFieldElements/AtlasFieldCache.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "InDetLowBetaInfo/InDetLowBetaContainer.h"
 #include "TrkTrack/TrackCollection.h"
@@ -84,7 +86,8 @@ namespace InDet
     /** trying to get ahold of the TRT calib DB: */
     ToolHandle<ITRT_CalDbTool> m_trtconddbTool;
 
-    ServiceHandle<MagField::IMagFieldSvc>  m_fieldServiceHandle;
+      // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
   private: // Functions/variables for using TrtToolsBetaLiklihood, see TrtToolsWrapper.cxx
     
diff --git a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx
index 14a43596e32..bf4f0d3c9a2 100644
--- a/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx
+++ b/InnerDetector/InDetRecAlgs/InDetLowBetaFinder/src/LowBetaAlg.cxx
@@ -43,7 +43,6 @@ namespace InDet
     m_trackParticleCollection("InDetTrackParticles"),
     m_InDetLowBetaOutputName("InDetLowBetaCandidates"),
     m_trtconddbTool("TRT_CalDbTool",this),
-    m_fieldServiceHandle("AtlasFieldSvc",name),
     m_TrtTool(0),
     m_TRTdEdxTool(),
     m_TrtToolsSuccess{},
@@ -58,7 +57,6 @@ namespace InDet
     declareProperty("CSMP_TimingOffset",      m_TimingOffset);
     declareProperty("InDetLowBetaOutputName", m_InDetLowBetaOutputName);
     declareProperty("MC_flag", m_mcswitch);
-    declareProperty("AtlasFieldSvc", m_fieldServiceHandle, "Magnet Field used by this algorithm");
     declareProperty("TRTCalDbTool", m_trtconddbTool);
     declareProperty("TRT_ToT_dEdx_Tool", m_TRTdEdxTool);
     
@@ -66,7 +64,6 @@ namespace InDet
   // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
   StatusCode LowBetaAlg::initialize(){
 
-    ATH_CHECK( m_fieldServiceHandle.retrieve() );
     ATH_CHECK(detStore()->retrieve(m_trtId, "TRT_ID"));
     m_TrtToolInitSuccess = !(initializeTrtToolBetaLiklihood().isFailure());
 
@@ -75,6 +72,9 @@ namespace InDet
     ATH_CHECK( m_trackParticleCollection.initialize() );
     ATH_CHECK( m_UnslimmedTracksContainerName.initialize() );
     ATH_CHECK( m_InDetLowBetaOutputName.initialize() );
+    // Read handle for AtlasFieldCacheCondObj
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
+    
     return StatusCode::SUCCESS;
   }
   // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -87,7 +87,17 @@ namespace InDet
       return StatusCode::FAILURE;
     }
 
-    if (m_fieldServiceHandle->solenoidOn()){//B field
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return StatusCode::FAILURE;
+    }
+    MagField::AtlasFieldCache fieldCache;
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (fieldCache.solenoidOn()){//B field
 
       if (!m_trackParticleCollection.key().empty()){
 
diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt
index 1152422aa3a..e67789668db 100644
--- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt
+++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/CMakeLists.txt
@@ -19,13 +19,15 @@ atlas_depends_on_subdirs( PUBLIC
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetRecEvent/InDetRIO_OnTrack
                           InnerDetector/InDetRecTools/InDetRecToolInterfaces
-                          MagneticField/MagFieldInterfaces
                           Tracking/TrkEvent/TrkParameters
                           Tracking/TrkEvent/TrkPseudoMeasurementOnTrack
                           Tracking/TrkEvent/TrkTrack
                           Tracking/TrkEvent/TrkTrackSummary
                           Tracking/TrkExtrapolation/TrkExInterfaces
-                          Tracking/TrkEvent/TrkCaloClusterROI )
+                          Tracking/TrkEvent/TrkCaloClusterROI
+			  MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 
 
@@ -41,7 +43,7 @@ atlas_add_component( InDetTrackScoringTools
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces MagFieldInterfaces TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI)
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkEventPrimitives TrkToolInterfaces GeoPrimitives InDetIdentifier InDetRIO_OnTrack InDetRecToolInterfaces TrkParameters TrkPseudoMeasurementOnTrack TrkTrack TrkTrackSummary TrkExInterfaces TrkCaloClusterROI MagFieldElements MagFieldConditions)
 
 # Install files from the package:
 atlas_install_headers( InDetTrackScoringTools )
diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h
index a6bbacd6374..3534b80f36f 100755
--- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetAmbiScoringTool.h
@@ -20,6 +20,9 @@
 #include "TrkParameters/TrackParameters.h"
 #include "AthenaKernel/CLASS_DEF.h"
 #include "AthenaKernel/IOVSvcDefs.h"
+// MagField cache
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "MagFieldElements/AtlasFieldCache.h"
 #include <vector>
 #include <string>
 #include "BeamSpotConditionsData/BeamSpotData.h"
@@ -32,10 +35,6 @@ namespace Trk {
 
 }
 
-namespace MagField {
-  class IMagFieldSvc;
-}
-
 namespace InDet {
 class ITrtDriftCircleCutTool;
 
@@ -85,7 +84,9 @@ class InDetAmbiScoringTool : virtual public Trk::ITrackScoringTool,
   SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
   
   ToolHandle<Trk::IExtrapolator>         m_extrapolator;
-  ServiceHandle<MagField::IMagFieldSvc>  m_magFieldSvc;
+
+  // Read handle for conditions object to get the field cache
+  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
   
   /** use the scoring tuned to Ambiguity processing or not */
diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h
index 40a0c6b8624..3656ca2f99a 100755
--- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/InDetTrackScoringTools/InDetTrtTrackScoringTool.h
@@ -12,6 +12,9 @@
 #include "TrkEventPrimitives/TrackScore.h"
 #include "TrkToolInterfaces/ITrackScoringTool.h"
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
+// MagField cache
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "MagFieldElements/AtlasFieldCache.h"
 #include <vector>
 #include <string>
 
@@ -20,9 +23,6 @@ namespace Trk {
   class TrackSummary;
 }
 
-namespace MagField {
-  class IMagFieldSvc;
-}
 
 class TRT_ID   ;
 
@@ -77,9 +77,9 @@ private:
   ToolHandle<Trk::ITrackSummaryTool> m_trkSummaryTool;
   /** Returns minimum number of expected TRT drift circles depending on eta. */
   ToolHandle<ITrtDriftCircleCutTool> m_selectortool;
-  /** to query magnetic field configuration */
-  ServiceHandle<MagField::IMagFieldSvc>  m_magFieldSvc;
 
+  // Read handle for conditions object to get the field cache
+  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
   
   /** cuts for selecting good tracks*/
   int    m_minTRTonTrk;      //!< minimum number of TRT hits
diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx
index 2c605858527..2ae8ce75a52 100755
--- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetAmbiScoringTool.cxx
@@ -16,7 +16,6 @@
 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
 #include "TMath.h"
 #include <vector>
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "TrkCaloClusterROI/CaloClusterROI.h"
 #include "TrkCaloClusterROI/CaloClusterROI_Collection.h"
@@ -46,8 +45,7 @@ InDet::InDetAmbiScoringTool::InDetAmbiScoringTool(const std::string& t,
   m_trkSummaryTool("Trk::TrackSummaryTool", this),
   m_selectortool("InDet::InDetTrtDriftCircleCutTool", this),
   m_summaryTypeScore(Trk::numberOfTrackSummaryTypes),
-  m_extrapolator("Trk::Extrapolator", this),
-  m_magFieldSvc("AtlasFieldSvc",n)
+  m_extrapolator("Trk::Extrapolator", this)
 {
   declareInterface<Trk::ITrackScoringTool>(this);
   
@@ -82,7 +80,6 @@ InDet::InDetAmbiScoringTool::InDetAmbiScoringTool(const std::string& t,
   declareProperty("Extrapolator",      m_extrapolator);
   declareProperty("SummaryTool" ,      m_trkSummaryTool);
   declareProperty("DriftCircleCutTool",m_selectortool );
-  declareProperty("MagFieldSvc",       m_magFieldSvc);
 
   declareProperty("maxRPhiImpEM",      m_maxRPhiImpEM  = 50.  );
   declareProperty("doEmCaloSeed",      m_useEmClusSeed = true );
@@ -154,20 +151,13 @@ StatusCode InDet::InDetAmbiScoringTool::initialize()
 
   ATH_CHECK(m_beamSpotKey.initialize());
 
-  sc =  m_magFieldSvc.retrieve();
-  if (sc.isFailure()){
-    msg(MSG::FATAL) << "Failed to retrieve " << m_magFieldSvc << endmsg;
-    return StatusCode::FAILURE;
-  } 
-  else {
-    msg(MSG::DEBUG) << "Retrieved " << m_magFieldSvc << endmsg;
-  }
-
   if (m_useAmbigFcn && m_useTRT_AmbigFcn) {
     msg(MSG::FATAL) << "Both on, normal ambi funciton and the one for back tracking, configuration problem, not recoverable" << endmsg;
     return StatusCode::FAILURE;
   }
   
+  // Read handle for AtlasFieldCacheCondObj
+  ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
   
   if (m_useAmbigFcn || m_useTRT_AmbigFcn) setupScoreModifiers();
 
@@ -310,7 +300,17 @@ Trk::TrackScore InDet::InDetAmbiScoringTool::simpleScore( const Trk::Track& trac
   const Trk::TrackParameters* input = track.trackParameters()->front();
 
   // cuts on parameters
-  if (m_magFieldSvc->solenoidOn()) {
+  EventContext ctx = Gaudi::Hive::currentContext();
+  SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return Trk::TrackScore(0);
+  }
+  MagField::AtlasFieldCache fieldCache;
+  fieldCondObj->getInitializedCache (fieldCache);
+
+  if (fieldCache.solenoidOn()){ 
     if (fabs(input->pT()) < m_minPt) {
       ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it");
       return Trk::TrackScore(0);
diff --git a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx
index 32efae3af46..7418d8c3df4 100755
--- a/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackScoringTools/src/InDetTrtTrackScoringTool.cxx
@@ -14,7 +14,6 @@
 #include "InDetIdentifier/TRT_ID.h"
 #include "TMath.h"
 #include <vector>
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 
 //---------------------------------------------------------------------------------------------------------------------
 
@@ -31,8 +30,7 @@ InDet::InDetTrtTrackScoringTool::InDetTrtTrackScoringTool(const std::string& t,
   m_maxTrtFittedRatio(-1),
   m_summaryTypeScore(Trk::numberOfTrackSummaryTypes),
   m_trkSummaryTool("Trk::TrackSummaryTool"),
-  m_selectortool("InDet::InDetTrtDriftCircleCutTool"),
-  m_magFieldSvc("AtlasFieldSvc",n)
+  m_selectortool("InDet::InDetTrtDriftCircleCutTool")
 {
   declareInterface<Trk::ITrackScoringTool>(this);
   
@@ -50,7 +48,6 @@ InDet::InDetTrtTrackScoringTool::InDetTrtTrackScoringTool(const std::string& t,
   declareProperty("UseParameterization",     m_parameterization = true);
   declareProperty("OldTransitionLogic" ,     m_oldLogic         = false);
   declareProperty("minTRTPrecisionFraction", m_minTRTprecision  = 0.5);
-  declareProperty("MagFieldSvc",             m_magFieldSvc);
   m_summaryTypeScore[Trk::numberOfTRTHits]	        =   1;  // 10 straws ~ 1 SCT
   m_summaryTypeScore[Trk::numberOfTRTHighThresholdHits] =   0;  // addition for being TR
     
@@ -87,15 +84,6 @@ StatusCode InDet::InDetTrtTrackScoringTool::initialize()
     msg(MSG::DEBUG) << "Retrieved tool " << m_selectortool << endmsg;
   }
 
-  sc =  m_magFieldSvc.retrieve();
-  if (sc.isFailure()){
-    msg(MSG::FATAL) << "Failed to retrieve " << m_magFieldSvc << endmsg;
-    return StatusCode::FAILURE;
-  } 
-  else {
-    msg(MSG::DEBUG) << "Retrieved " << m_magFieldSvc << endmsg;
-  }
-
   sc = detStore()->retrieve(m_trtId, "TRT_ID");
   if (sc.isFailure()){
     msg(MSG::FATAL) << "Could not get TRT_ID helper !" << endmsg;
@@ -104,6 +92,9 @@ StatusCode InDet::InDetTrtTrackScoringTool::initialize()
 
   if(m_useAmbigFcn) setupTRT_ScoreModifiers();
 
+  // Read handle for AtlasFieldCacheCondObj
+  ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
+
   return StatusCode::SUCCESS;
 }
 
@@ -163,7 +154,18 @@ Trk::TrackScore InDet::InDetTrtTrackScoringTool::simpleScore( const Trk::Track&
   const Trk::TrackParameters* input = track.trackParameters()->front();
 
   ///Reject track below the pT cut
-  if (m_magFieldSvc->solenoidOn()) {
+
+  EventContext ctx = Gaudi::Hive::currentContext();
+  SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("simpleScore: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return Trk::TrackScore(0);
+  }
+  MagField::AtlasFieldCache fieldCache;
+  fieldCondObj->getInitializedCache (fieldCache);
+
+  if (fieldCache.solenoidOn()){//B field
     if(input->pT() < m_ptmin) {
       ATH_MSG_DEBUG( "Reject track below Pt cut !");
       return Trk::TrackScore(0);
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt
index 1545b9f81fd..52935ffe521 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/CMakeLists.txt
@@ -21,7 +21,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Event/EventPrimitives
                           InnerDetector/InDetConditions/TRT_ConditionsServices
                           InnerDetector/InDetRecEvent/InDetRIO_OnTrack
-                          MagneticField/MagFieldInterfaces
                           Tracking/TrkDetDescr/TrkSurfaces
                           Tracking/TrkEvent/TrkParticleBase
                           Tracking/TrkEvent/TrkRIO_OnTrack
@@ -40,7 +39,7 @@ atlas_add_component( InDetTrackSelectorTool
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives TRT_ConditionsServicesLib InDetRIO_OnTrack MagFieldInterfaces TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkToolInterfaces AthContainers GeoPrimitives EventPrimitives TRT_ConditionsServicesLib InDetRIO_OnTrack TrkSurfaces TrkParticleBase TrkRIO_OnTrack TrkTrack TrkTrackSummary VxVertex TrkExInterfaces )
 
 # Install files from the package:
 atlas_install_headers( InDetTrackSelectorTool )
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h
index 33b7281ebe3..cca93adf1f1 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetCosmicTrackSelectorTool.h
@@ -11,19 +11,18 @@
 #include "TrkToolInterfaces/ITrackSelectorTool.h"
 #include "TrkEventPrimitives/ParticleHypothesis.h"
 #include "TrkParameters/TrackParameters.h"
+// MagField cache
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "MagFieldElements/AtlasFieldCache.h"
 
 namespace Trk
 {
-  class IMagneticFieldTool;
   class ITrackSummaryTool;
   class Vertex;
   class TrackParticleBase;
   class Track;
 }
 
-namespace MagField {
-  class IMagFieldSvc;
-}
 
 namespace InDet
 {
@@ -67,8 +66,8 @@ namespace InDet
     ToolHandle<Trk::ITrackSummaryTool> m_trackSumTool;
     bool m_trackSumToolAvailable;
 
-    ServiceHandle<MagField::IMagFieldSvc>  m_magFieldSvc;
-
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
     
 
   }; //end of class definitions
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h
index f2843391c79..1d6522b977a 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/InDetTrackSelectorTool/InDetDetailedTrackSelectorTool.h
@@ -13,6 +13,9 @@
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/VertexFwd.h"
 #include "BeamSpotConditionsData/BeamSpotData.h"
+// MagField cache
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
+#include "MagFieldElements/AtlasFieldCache.h"
 
 /**
  * @file InDetDetailedTrackSelectorTool.h
@@ -30,13 +33,9 @@
  */
 
 
-namespace MagField {
-  class IMagFieldSvc;
-}
 
 namespace Trk
 {
-  class IMagneticFieldTool;
   class ITrackSummaryTool;
   class IExtrapolator;
   class Vertex;
@@ -153,10 +152,11 @@ namespace InDet
       ToolHandle<Trk::ITrackSummaryTool> m_trackSumTool; //!< Track summary tool
       ToolHandle<Trk::IExtrapolator> m_extrapolator; //!< Extrapolator tool
       SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
-      ServiceHandle<MagField::IMagFieldSvc>  m_magFieldSvc;
       ToolHandle<ITrtDriftCircleCutTool> m_trtDCTool; //!< Tool to get eta dependent cut on number of TRT hits
 
       ToolHandle< InDet::IInDetTestBLayerTool > m_inDetTestBLayerTool; //Tool to test if the track crosses a dead module on the b-layer
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
       bool m_trackSumToolAvailable;
             
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx
index 49c81b0b256..4bc59141999 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetCosmicTrackSelectorTool.cxx
@@ -6,7 +6,6 @@
 
 // forward declares
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "VxVertex/Vertex.h"
 #include "TrkTrack/Track.h"
 #include "TrkParticleBase/TrackParticleBase.h"
@@ -24,8 +23,7 @@ namespace InDet
   //----------------------------------------------------------------------------
   InDetCosmicTrackSelectorTool::InDetCosmicTrackSelectorTool(const std::string& t, const std::string& n, const IInterface* p)
     : AthAlgTool(t,n,p), 
-    m_trackSumToolAvailable(false),
-    m_magFieldSvc("AtlasFieldSvc",n)
+    m_trackSumToolAvailable(false)
   {
     declareInterface<ITrackSelectorTool>(this);
     declareProperty("maxZ0",                     m_maxZ0 = 150.);
@@ -38,7 +36,6 @@ namespace InDet
     declareProperty("numberOfSiliconHitsTop",    m_numberOfSiHitsTop = -1);
     declareProperty("numberOfSiliconHitsBottom", m_numberOfSiHitsBottom = -1);
     declareProperty("TrackSummaryTool",          m_trackSumTool);
-    declareProperty("MagFieldSvc", m_magFieldSvc);
   }
 
   //----------------------------------------------------------------------------
@@ -64,11 +61,8 @@ namespace InDet
        m_trackSumToolAvailable = true;
      }
 
-     if (m_magFieldSvc.retrieve().isFailure()) {
-       msg(MSG::FATAL) << "Failed to retrieve tool " << m_magFieldSvc << endmsg;
-       return StatusCode::FAILURE;
-     }
-     ATH_MSG_INFO("Retrieved tool "<<m_magFieldSvc);
+     // Read handle for AtlasFieldCacheCondObj
+     ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
      return StatusCode::SUCCESS;
   }
@@ -236,7 +230,17 @@ namespace InDet
     }
 
     // only check pt if mag. field is on
-    if (m_magFieldSvc->solenoidOn()) {
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return false;
+    }
+    MagField::AtlasFieldCache fieldCache;
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (fieldCache.solenoidOn()){//B field
       if (trackParameters[Trk::qOverP] == 0.) {
         ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
         return false;
diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
index 20e1028bac3..aa9374e1e9d 100644
--- a/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSelectorTool/src/InDetDetailedTrackSelectorTool.cxx
@@ -12,7 +12,6 @@
 #include "TrkTrack/Track.h"
 #include "TrkTrackSummary/TrackSummary.h"
 #include "TrkParticleBase/TrackParticleBase.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
 #include "InDetRecToolInterfaces/IInDetTestBLayerTool.h"
 
@@ -39,7 +38,6 @@ namespace InDet
     : AthAlgTool(t,n,p)
     , m_trackSumTool("Trk::TrackSummaryTool", this)
     , m_extrapolator("Trk::Extrapolator", this)
-    , m_magFieldSvc("AtlasFieldSvc",n)
     , m_trtDCTool("InDet::InDetTrtDriftCircleCutTool", this)
     , m_inDetTestBLayerTool("", this)
     , m_trackSumToolAvailable(true)
@@ -107,7 +105,6 @@ namespace InDet
     
     declareProperty("TrackSummaryTool"   , m_trackSumTool);
     declareProperty("Extrapolator"       , m_extrapolator);
-    declareProperty("MagFieldSvc", m_magFieldSvc);
     declareProperty("TrtDCCutTool"       , m_trtDCTool);
     declareProperty("InDetTestBLayerTool", m_inDetTestBLayerTool);
     
@@ -153,12 +150,10 @@ namespace InDet
     }else{
       m_trtDCTool.disable();
     }
-    ATH_CHECK(m_magFieldSvc.retrieve());
-    if(m_inDetTestBLayerTool.empty()){
-	    ATH_MSG_INFO(" The BLayerTool not specified, turning off cut. ");
-    } else {
-      ATH_CHECK( m_inDetTestBLayerTool.retrieve());
-    }
+
+    // Read handle for AtlasFieldCacheCondObj
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
+
     ATH_MSG_INFO("Using cuts on the number of Silicon hits");
     if(m_usePtDependentCuts) {
 	    //checking whether sizes of cuts and pt interval expressed in vectors match
@@ -688,7 +683,18 @@ namespace InDet
 
     const AmgVector(5)& perigeeParms = track->parameters();
     
-    if (m_magFieldSvc->solenoidOn()) {
+    // only check pt if mag. field is on
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return false;
+    }
+    MagField::AtlasFieldCache fieldCache;
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (fieldCache.solenoidOn()){//B field
       if (perigeeParms[Trk::qOverP] == 0.) {
 	ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
 	return false;
@@ -1072,7 +1078,18 @@ namespace InDet
   {
     const AmgVector(5)& perigeeParms = myPerigee.parameters();
     
-    if (m_magFieldSvc->solenoidOn()) {
+    // only check pt if mag. field is on
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return false;
+    }
+    MagField::AtlasFieldCache fieldCache;
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (fieldCache.solenoidOn()){//B field
       if (perigeeParms[Trk::qOverP] == 0.) {
 	ATH_MSG_DEBUG("Track rejected because of perigee qOverP == 0.");
 	return false;
diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt
index 0a359dbd9b2..996ce28a2b3 100644
--- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt
+++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/CMakeLists.txt
@@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetRecEvent/InDetRIO_OnTrack
-                          MagneticField/MagFieldInterfaces
                           Tracking/TrkEvent/TrkPseudoMeasurementOnTrack
                           Tracking/TrkExtrapolation/TrkExInterfaces
                           Tracking/TrkFitter/TrkFitterInterfaces
@@ -28,7 +27,7 @@ atlas_depends_on_subdirs( PUBLIC
 atlas_add_component( TRT_SegmentToTrackTool
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack MagFieldInterfaces TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions)
+                     LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetRecToolInterfaces TrkEventPrimitives InDetIdentifier InDetRIO_OnTrack TrkPseudoMeasurementOnTrack TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces MagFieldElements MagFieldConditions)
 
 # Install files from the package:
 atlas_install_headers( TRT_SegmentToTrackTool )
diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h
index 37374984bd1..3604bbafe59 100644
--- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h
+++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool/TRT_SegmentToTrackTool.h
@@ -53,12 +53,6 @@ namespace Trk {
 
 }
 
-namespace MagField {
-
-  class IMagFieldSvc;
-
-}
-
 namespace InDet {
 
   //class TrackSegment;
@@ -111,12 +105,11 @@ namespace InDet {
         {this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
 
       ToolHandle<Trk::ITrackScoringTool>     m_scoringTool   ;  //!< Track scoring tool
-      ServiceHandle<MagField::IMagFieldSvc>  m_magFieldSvc  ;  //!< Magnetic field service
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       // Read handle for conditions object to get the field cache
-      SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
-                                                                           "Name of the Magnetic Field conditions object key"};
+      SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                                 "Name of the Magnetic Field conditions object key"};
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
diff --git a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx
index 77d6dadc382..653fef22953 100644
--- a/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx
+++ b/InnerDetector/InDetRecTools/TRT_SegmentToTrackTool/src/TRT_SegmentToTrackTool.cxx
@@ -14,8 +14,6 @@
 #include "TrkExInterfaces/IExtrapolator.h"
 //Scoring tool
 #include "TrkToolInterfaces/ITrackScoringTool.h"
-//Magnetic field tool
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 
 using Amg::Vector3D;
 using CLHEP::mm;
@@ -31,7 +29,6 @@ namespace InDet {
     m_fitterTool("Trk::KalmanFitter/InDetTrackFitter"),
     m_extrapolator ("Trk::Extrapolator/InDetExtrapolator"),
     m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"),
-    m_magFieldSvc("AtlasFieldSvc", name),
     m_trtId(nullptr)
   {
     declareInterface<InDet::ITRT_SegmentToTrackTool>( this );
@@ -49,9 +46,6 @@ namespace InDet {
     declareProperty("RefitterTool"               ,m_fitterTool        ); //Track refit tool
     declareProperty("Extrapolator"               ,m_extrapolator      ); //Extrapolator tool
     declareProperty("ScoringTool"                ,m_scoringTool       ); //Track scoring tool
-
-    declareProperty( "MagFieldSvc"              ,m_magFieldSvc      ); //Magnetic field tool
-
   }
 
   TRT_SegmentToTrackTool::~TRT_SegmentToTrackTool()
@@ -82,11 +76,9 @@ namespace InDet {
     //
     ATH_CHECK( m_scoringTool.retrieve() );
 
-    ATH_CHECK( m_magFieldSvc.retrieve() );
-
     ATH_CHECK( detStore()->retrieve(m_trtId, "TRT_ID") );
     ////////////////////////////////////////////////////////////////////////////////
-    ATH_CHECK( m_fieldCondObjInputKey.initialize());
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize());
     ////////////////////////////////////////////////////////////////////////////////
 
     // Get output print level
@@ -462,17 +454,16 @@ namespace InDet {
         MagField::AtlasFieldCache    fieldCache;
 
         // Get field cache object
-        SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
+        SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
         const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
         if (fieldCondObj == nullptr) {
-            ATH_MSG_ERROR("segToTrack: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
+            ATH_MSG_ERROR("segToTrack: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
             return 0;
         }
         fieldCondObj->getInitializedCache (fieldCache);
 
-        //   MT version uses cache, temporarily keep old version
-        if (fieldCache.useNewBfieldCache()) fieldCache.getField    (Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data());
-        else                                m_magFieldSvc->getField(Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data());
+        //   MT version uses cache
+        fieldCache.getField    (Amg::Vector3D(.5*(pos1+pos2)).data(),field1.data());
 
 	field1 *= m_fieldUnitConversion; // field in Tesla
 
diff --git a/MagneticField/MagFieldConditions/CMakeLists.txt b/MagneticField/MagFieldConditions/CMakeLists.txt
index 1a0c270a9d2..70586fd0b15 100644
--- a/MagneticField/MagFieldConditions/CMakeLists.txt
+++ b/MagneticField/MagFieldConditions/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( MagFieldConditions )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
-                          MagneticField/MagFieldInterfaces
 			  GaudiKernel
                           PRIVATE
                           MagneticField/MagFieldElements
diff --git a/MagneticField/MagFieldElements/CMakeLists.txt b/MagneticField/MagFieldElements/CMakeLists.txt
index 13dde183f9d..f556de2b9ab 100644
--- a/MagneticField/MagFieldElements/CMakeLists.txt
+++ b/MagneticField/MagFieldElements/CMakeLists.txt
@@ -8,7 +8,6 @@ atlas_subdir( MagFieldElements )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
-                          MagneticField/MagFieldInterfaces
 			  Control/CxxUtils
 			  Event/EventPrimitives
                           PRIVATE
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt
index 01a5c1ab2dd..4bf97963619 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/CMakeLists.txt
@@ -16,7 +16,6 @@ atlas_depends_on_subdirs( PRIVATE
                           DetectorDescription/RoiDescriptor
                           Event/EventPrimitives
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           MuonSpectrometer/MuonAlignment/MuonAlignError/MuonAlignErrorBase
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonIdHelpers
@@ -50,7 +49,10 @@ atlas_depends_on_subdirs( PRIVATE
                           Tracking/TrkFitter/TrkFitterInterfaces
                           Tracking/TrkTools/TrkToolInterfaces
                           Tracking/TrkUtilityPackages/TrkDriftCircleMath 
-			  MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData )
+			  MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( Eigen )
@@ -61,5 +63,5 @@ atlas_add_component( MuonTrackFinderTools
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GeoPrimitives IRegionSelector Identifier RoiDescriptor EventPrimitives GaudiKernel MagFieldInterfaces MuonAlignErrorBase MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonStationIntersectSvcLib MuonSegmentMakerUtils TrkDetDescrInterfaces TrkDetElementBase TrkGeometry TrkSurfaces TrkVolumes TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkRoad TrkTrack TrkSegment TrkTrackSummary TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MuonCondData )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests GeoPrimitives IRegionSelector Identifier RoiDescriptor EventPrimitives GaudiKernel MuonAlignErrorBase MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonStationIntersectSvcLib MuonSegmentMakerUtils TrkDetDescrInterfaces TrkDetElementBase TrkGeometry TrkSurfaces TrkVolumes TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkRIO_OnTrack TrkRoad TrkTrack TrkSegment TrkTrackSummary TrkExInterfaces TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MuonCondData MagFieldElements MagFieldConditions )
 
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx
index 6d435c4271b..a7bd1a1de08 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.cxx
@@ -56,7 +56,7 @@ namespace Muon {
     ATH_CHECK( m_mdtRotCreator.retrieve() );
     ATH_CHECK( m_compRotCreator.retrieve() );
     ATH_CHECK( m_measurementUpdator.retrieve() );
-    ATH_CHECK( m_magFieldSvc.retrieve() );
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     return StatusCode::SUCCESS;
   }
@@ -883,7 +883,20 @@ namespace Muon {
     state.nIdHits = 0;
     state.nPseudoMeasurements = 0;
     state.nPhiConstraints = 0;
-    state.slFit =  !m_magFieldSvc->toroidOn() || m_edmHelperSvc->isSLTrack( track );
+
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    
+    state.slFit =  !fieldCache.toroidOn() || m_edmHelperSvc->isSLTrack( track );
 
     // loop over track and calculate residuals
     const DataVector<const Trk::TrackStateOnSurface>* states = track.trackStateOnSurfaces();
@@ -1319,7 +1332,7 @@ namespace Muon {
     }
 
     // update sl fit configuration if track has ID hits or vertex constraint
-    if( state.slFit && (state.hasVertexConstraint || state.nIdHits > 0 ) && m_magFieldSvc->solenoidOn() ) {
+    if( state.slFit && (state.hasVertexConstraint || state.nIdHits > 0 ) && fieldCache.solenoidOn() ) {
       state.slFit = false;
     }
 
@@ -1327,9 +1340,9 @@ namespace Muon {
     if(state.hasVertexConstraint || state.nIdHits ) {
       if( state.hasVertexConstraint ) ATH_MSG_DEBUG(" Track has vertex contraint:");
       if( state.nIdHits > 0 )         ATH_MSG_DEBUG(" Track has  ID Hits: " << state.nIdHits);
-      if( m_magFieldSvc->solenoidOn() ) ATH_MSG_DEBUG(" Solenoid On");
+      if( fieldCache.solenoidOn() ) ATH_MSG_DEBUG(" Solenoid On");
       else               ATH_MSG_DEBUG(" Solenoid Off");
-      if( m_magFieldSvc->toroidOn() )   ATH_MSG_DEBUG(" Toroid On");
+      if( fieldCache.toroidOn() )   ATH_MSG_DEBUG(" Toroid On");
       else               ATH_MSG_DEBUG(" Toroid Off");
       if( state.slFit )  ATH_MSG_DEBUG(" Use SL fit");
       else               ATH_MSG_DEBUG(" Use curved fit");
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h
index 86a81d42839..f06d4927d2c 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackCleaner.h
@@ -23,7 +23,8 @@
 #include "TrkToolInterfaces/IResidualPullCalculator.h"
 #include "TrkToolInterfaces/IUpdator.h"
 
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "TrkParameters/TrackParameters.h"
 
 #include <string>
@@ -289,8 +290,10 @@ namespace Muon {
       "Handle to the service providing the IMuonEDMHelperSvc interface" };
     ToolHandle<Muon::MuonEDMPrinterTool>             m_printer           {this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
     ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
-    ServiceHandle<MagField::IMagFieldSvc>            m_magFieldSvc       {this, "MagFieldSvc", "AtlasFieldSvc"}; 
     ToolHandle<Trk::IExtrapolator>                   m_extrapolator      {this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator"};
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                               "Name of the Magnetic Field conditions object key"};
 
     Gaudi::Property<bool> m_useMdtResiCut             {this, "UseMdtResiCut", false};
     Gaudi::Property<double> m_chi2Cut                 {this, "Chi2Cut", 100.};
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx
index fca2de882fd..501920bf2cd 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.cxx
@@ -32,12 +32,10 @@ namespace Muon {
       m_atlasExtrapolator("Trk::Extrapolator/AtlasExtrapolator"),
       m_muonExtrapolator("Trk::Extrapolator/MuonExtrapolator"),
       m_muonExtrapolator2("Trk::Extrapolator/MuonExtrapolator"),
-      m_magFieldSvc("AtlasFieldSvc",na),
       m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc",na),
       m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool")
   {
     declareInterface<IMuonTrackExtrapolationTool>(this);
-    declareProperty( "MagFieldSvc",         m_magFieldSvc );
     declareProperty( "TrackingGeometrySvc", m_trackingGeometrySvc);
     declareProperty( "MuonExtrapolator",    m_muonExtrapolator);
     declareProperty( "MuonExtrapolator2",   m_muonExtrapolator2);
@@ -57,7 +55,7 @@ namespace Muon {
     if( !m_muonExtrapolator.empty() ) ATH_CHECK( m_muonExtrapolator.retrieve() );
     if( !m_muonExtrapolator2.empty() ) ATH_CHECK( m_muonExtrapolator2.retrieve() );
     ATH_CHECK( m_trackingGeometrySvc.retrieve() );
-    ATH_CHECK( m_magFieldSvc.retrieve() );
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     if( m_cosmics ) ATH_MSG_DEBUG("Running in cosmics mode" );
     
@@ -322,8 +320,21 @@ namespace Muon {
     if( m_muonExtrapolator.empty() ) return 0;
     // if straightline track and the field is on return 0
     bool isSL = m_edmHelperSvc->isSLTrack(track);
-    if( m_magFieldSvc->toroidOn() && isSL ) {
-      return 0;
+    if( isSL ) { // check isSL first to limit access overhead
+      MagField::AtlasFieldCache    fieldCache;
+      // Get field cache object
+      EventContext ctx = Gaudi::Hive::currentContext();
+      SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+      const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+    
+      if (fieldCondObj == nullptr) {
+        ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+        return 0;
+      }
+      fieldCondObj->getInitializedCache (fieldCache);
+      if( fieldCache.toroidOn() ) {
+        return 0;
+      }
     }
 
     const Trk::Perigee* pp = track.perigeeParameters();
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h
index 70001a69b01..2c67bd9fddc 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackFinderTools/src/MuonTrackExtrapolationTool.h
@@ -17,7 +17,8 @@
 #include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h"
 #include "TrkExInterfaces/IExtrapolator.h"
 
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 #include "TrkParameters/TrackParameters.h"
 
@@ -78,7 +79,9 @@ namespace Muon {
     ToolHandle<Trk::IExtrapolator>      m_muonExtrapolator;
     ToolHandle<Trk::IExtrapolator>      m_muonExtrapolator2; // Moved from MuonEDMHelperSvc, not sure if it should be private/separate from m_muonExtrapolator
 
-    ServiceHandle<MagField::IMagFieldSvc>    m_magFieldSvc; 
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                               "Name of the Magnetic Field conditions object key"};
     ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc;
 
     ServiceHandle<Muon::IMuonEDMHelperSvc>           m_edmHelperSvc {this, "edmHelper", 
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt
index b6027c22fc0..6c850c2f9b1 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/CMakeLists.txt
@@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PRIVATE
                           DetectorDescription/Identifier
                           Event/EventPrimitives
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonIdHelpers
                           MuonSpectrometer/MuonStationIndex
@@ -41,7 +40,10 @@ atlas_depends_on_subdirs( PRIVATE
                           Tracking/TrkExtrapolation/TrkExUtils
                           Tracking/TrkFitter/TrkFitterInterfaces
                           Tracking/TrkTools/TrkToolInterfaces
-                          Tracking/TrkUtilityPackages/TrkDriftCircleMath )
+                          Tracking/TrkUtilityPackages/TrkDriftCircleMath
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( Eigen )
@@ -51,7 +53,7 @@ atlas_add_component( MuonTrackSteeringTools
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel CxxUtils GeoPrimitives Identifier EventPrimitives GaudiKernel MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonStationIndexLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils TrkDetDescrUtils TrkGeometry TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath )
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel CxxUtils GeoPrimitives Identifier EventPrimitives GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonStationIndexLib MuonCompetingRIOsOnTrack MuonPrepRawData MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils TrkDetDescrUtils TrkGeometry TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkParameters TrkPseudoMeasurementOnTrack TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkToolInterfaces TrkDriftCircleMath MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx
index 5b48ab2a9d7..869f98fd664 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.cxx
@@ -107,7 +107,7 @@ namespace Muon {
     ATH_CHECK( m_idHelperSvc.retrieve() );
     ATH_CHECK( m_edmHelperSvc.retrieve() );
     ATH_CHECK( m_printer.retrieve() );
-    ATH_CHECK( m_magFieldSvc.retrieve() );
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
     ATH_CHECK( m_segmentMatchingTool.retrieve() );
     ATH_CHECK( m_segmentMatchingToolTight.retrieve() );
     ATH_CHECK( m_candidateTool.retrieve() );
@@ -723,6 +723,18 @@ namespace Muon {
     Identifier closestId;
     double closestIdDist = 1E9;
     bool trackHasPhi = true;
+
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
     
     // loop over TSOS
     const DataVector<const Trk::TrackStateOnSurface>* tsoses = entry1.track().trackStateOnSurfaces();
@@ -816,7 +828,7 @@ namespace Muon {
       msg(MSG::DEBUG) << endmsg;
     }
     
-    bool straightLineMatch = !m_magFieldSvc->toroidOn();
+    bool straightLineMatch = !fieldCache.toroidOn();
     if ( hasStereoAngle && !trackHasPhi && (straightLineMatch || entry1.hasMomentum() ) ) {
       // can not do any extrapolation (not reliable)
       info.reason = TrackSegmentMatchResult::StereoAngleWithoutPhi;
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h
index b232d2bca00..8a0dc1ec89f 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooCandidateMatchingTool.h
@@ -15,7 +15,8 @@
 #include "CxxUtils/checker_macros.h"
 #include "EventPrimitives/EventPrimitives.h"
 #include "GeoPrimitives/GeoPrimitives.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "MuonRecToolInterfaces/IMuonTrackSegmentMatchingTool.h"
 #include "MuonIdHelpers/IMuonIdHelperSvc.h"
 #include "MuonRecHelperTools/IMuonEDMHelperSvc.h"
@@ -186,8 +187,9 @@ namespace Muon {
       {this, "SegmentMatchingTool", "Muon::MuonSegmentMatchingTool/MuonSegmentMatchingTool"};
     ToolHandle<IMuonSegmentMatchingTool>  m_segmentMatchingToolTight
       {this, "SegmentMatchingToolTight", "Muon::MuonSegmentMatchingTool/MuonSegmentMatchingToolTight"};
-    ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc 
-      {this, "MagFieldSvc", "AtlasFieldSvc"}; 
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                               "Name of the Magnetic Field conditions object key"};
     ToolHandle<MuPatCandidateTool>        m_candidateTool    
       {this, "MuPatCandidateTool", "Muon::MuPatCandidateTool/MuPatCandidateTool"};
     
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx
index 5dbec3416b8..ea83d424456 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.cxx
@@ -42,7 +42,7 @@ namespace Muon {
 
     ATH_CHECK( m_fitter.retrieve() );
     ATH_CHECK( m_slFitter.retrieve() );
-    ATH_CHECK(m_magFieldSvc.retrieve() );
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
     if( !m_errorOptimisationTool.empty() ) ATH_CHECK( m_errorOptimisationTool.retrieve() );
     ATH_CHECK( m_candidateHandler.retrieve() );
     ATH_CHECK( m_candidateMatchingTool.retrieve() );
@@ -74,7 +74,21 @@ namespace Muon {
 
   Trk::Track* MooTrackBuilder::refit( const Trk::Track& track ) const {
 
-    if( m_edmHelperSvc->isSLTrack(track) || !m_magFieldSvc->toroidOn() ) return m_slFitter->refit(track);
+  if( m_edmHelperSvc->isSLTrack(track)) { // check isSL first to limit access overhead
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    if( !fieldCache.toroidOn() ) return m_slFitter->refit(track);
+  }
+  
 
     // if not refit tool specified do a pure refit
     if( m_errorOptimisationTool.empty() ) return m_fitter->refit(track);
@@ -341,8 +355,20 @@ namespace Muon {
       //ATH_MSG_INFO(" Performing fit"  );
     }
 
-    if( slFit || !m_magFieldSvc->toroidOn() ) return m_slFitter->fit(firstCandidate,secondCandidate,externalPhiHits);
-    else                                      return m_fitter->fit(firstCandidate,secondCandidate,externalPhiHits);
+    EventContext ctx = Gaudi::Hive::currentContext();
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if( slFit || !fieldCache.toroidOn() ) return m_slFitter->fit(firstCandidate,secondCandidate,externalPhiHits);
+    else                                  return m_fitter->fit(firstCandidate,secondCandidate,externalPhiHits);
   }
 
 
@@ -1013,7 +1039,19 @@ namespace Muon {
   }
 
   std::pair<Trk::Track*,Trk::Track*> MooTrackBuilder::splitTrack( const Trk::Track& track ) const {
-    return m_edmHelperSvc->isSLTrack(track) || !m_magFieldSvc->toroidOn() ?  m_slFitter->splitTrack(track) : m_fitter->splitTrack(track);
+    EventContext ctx = Gaudi::Hive::currentContext();
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      std::pair<Trk::Track*,Trk::Track*> emptyPair;
+      return emptyPair;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    return m_edmHelperSvc->isSLTrack(track) || !fieldCache.toroidOn() ?  m_slFitter->splitTrack(track) : m_fitter->splitTrack(track);
   }
 
   std::vector<MuPatTrack*>* MooTrackBuilder::find( MuPatCandidateBase& candidate, const std::vector<MuPatSegment*>& segVec ) const {
diff --git a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h
index 072557066c7..fe5165bd708 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonTrackMakers/MuonTrackMakerTools/MuonTrackSteeringTools/src/MooTrackBuilder.h
@@ -25,7 +25,8 @@
 #include "MuonRecToolInterfaces/IMdtDriftCircleOnTrackCreator.h"
 #include "TrkExInterfaces/IPropagator.h"
 #include "TrkToolInterfaces/IResidualPullCalculator.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "TrkToolInterfaces/IExtendedTrackSummaryTool.h"
 #include "TrkTrackSummary/MuonTrackSummary.h"
 
@@ -280,7 +281,9 @@ namespace Muon {
 
     ToolHandle<IMuonErrorOptimisationTool>            m_errorOptimisationTool {this, "ErrorOptimisationTool", ""};
     ToolHandle<Trk::IExtendedTrackSummaryTool>        m_trackSummaryTool    {this, "TrackSummaryTool", "MuonTrackSummaryTool"};
-    ServiceHandle<MagField::IMagFieldSvc>             m_magFieldSvc         {this, "MagFieldSvc", "AtlasFieldSvc"};
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                               "Name of the Magnetic Field conditions object key"};
     Trk::MagneticFieldProperties                      m_magFieldProperties  {Trk::FullField}; //!< magnetic field properties
 
     Gaudi::Property<bool>                             m_doTimeOutChecks     {this,"UseTimeOutGuard" , true };    //!< on/off time out check
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py
index 91f7b6f471c..851ac74ec10 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkFlavourTag/python/SoftBtagCommon.py
@@ -53,8 +53,7 @@ def applySoftBtagging(algname,sequence):
     from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
     InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name                = "InclusiveVxFitter",
                                                   Extrapolator        = ToolSvc.AtlasExtrapolator,
-                                                  IterationNumber     = 30,
-                                                  AtlasMagFieldSvc    = "AtlasFieldSvc"
+                                                  IterationNumber     = 30
                                                   )
     ToolSvc +=  InclusiveVxFitterTool;
 
diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt b/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt
index 04dfbddcbd7..f16ce190126 100644
--- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt
+++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/CMakeLists.txt
@@ -10,7 +10,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           Tracking/TrkEvent/TrkSegment
                           PRIVATE
                           Calorimeter/CaloEvent
@@ -25,7 +24,10 @@ atlas_depends_on_subdirs( PUBLIC
                           TileCalorimeter/TileIdentifier
                           Tracking/TrkEvent/TrkSpacePoint
                           Tracking/TrkEvent/TrkTrack
-                          Tracking/TrkEvent/TrkTrackSummary )
+                          Tracking/TrkEvent/TrkTrackSummary
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( CLHEP )
@@ -35,7 +37,7 @@ atlas_add_component( EventTagRawAlgs
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel MagFieldInterfaces TrkSegment CaloEvent CommissionEvent StoreGateLib SGtests xAODCaloEvent InDetBCM_RawData InDetPrepRawData LArRecEvent TagEvent TileEvent TileIdentifier TrkSpacePoint TrkTrack TrkTrackSummary )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel TrkSegment CaloEvent CommissionEvent StoreGateLib SGtests xAODCaloEvent InDetBCM_RawData InDetPrepRawData LArRecEvent TagEvent TileEvent TileIdentifier TrkSpacePoint TrkTrack TrkTrackSummary MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
index ed61707fad9..d7e2d09bcab 100644
--- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
+++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
@@ -22,8 +22,7 @@
 
 RawInfoSummaryForTagWriter::RawInfoSummaryForTagWriter(const std::string& name,
                                  ISvcLocator* pSvcLocator) :
-  AthAlgorithm(name,pSvcLocator),
-  m_fieldServiceHandle("AtlasFieldSvc",name)
+  AthAlgorithm(name,pSvcLocator)
 {
   declareProperty("IDTrackKey",m_sgKeyIDtrack);
   declareProperty("CaloCellContKey", m_cellContKey="AllCalo");
@@ -38,7 +37,6 @@ RawInfoSummaryForTagWriter::RawInfoSummaryForTagWriter(const std::string& name,
   declareProperty("MBTSName",m_mbtsName="MBTSContainer");
   declareProperty("MBTSCollTimeKey",m_MBTSCollTimeKey="MBTSCollisionTime");
   declareProperty("MBTS_Threshold",  m_mbts_threshold = 40.0/222.0 );  // Value in pC
-  declareProperty("MagFieldSvc"        , m_fieldServiceHandle);
   declareProperty("OutputKey", m_RISFTKey="RawInfoSummaryForTag");
 }
 
@@ -63,7 +61,6 @@ StatusCode RawInfoSummaryForTagWriter::initialize()
     return StatusCode::FAILURE;
   }
   
-  ATH_CHECK(m_fieldServiceHandle.retrieve());
   ATH_CHECK(m_sgKeyIDtrack.initialize());
   ATH_CHECK(m_cellContKey.initialize());
   if(m_doClusterSums)  {
@@ -82,6 +79,7 @@ StatusCode RawInfoSummaryForTagWriter::initialize()
     ATH_CHECK(m_trtPhaseName.initialize());
   }
   ATH_CHECK(m_RISFTKey.initialize());
+  ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
   return StatusCode::SUCCESS;  
 }
 
@@ -115,6 +113,17 @@ StatusCode RawInfoSummaryForTagWriter::execute()
    // input Track Collection
    int totNPixHits(0),totNSCTHits(0),totNTRTHits(0);
    
+   MagField::AtlasFieldCache    fieldCache;
+   // Get field cache object
+   EventContext ctx = Gaudi::Hive::currentContext();
+   SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+   const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+  
+   if (fieldCondObj == nullptr) {
+     ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+     return StatusCode::FAILURE;
+   }
+   fieldCondObj->getInitializedCache (fieldCache);
 
    SG::ReadHandle<TrackCollection> tracks{m_sgKeyIDtrack};
    for (const Trk::Track* track : *tracks) {
@@ -128,7 +137,7 @@ StatusCode RawInfoSummaryForTagWriter::execute()
      if (nSCTHits>0) totNSCTHits++;
      if (nTRTHits>0) totNTRTHits++;
 
-     if(m_fieldServiceHandle->solenoidOn()){
+     if(fieldCache.solenoidOn()){
        const Trk::Perigee* perigee = track->perigeeParameters(); 
        if(!perigee) continue;
        if(perigee->parameters()[Trk::qOverP]!=0){
diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h
index 41f6d4cc74e..0b8ff99c636 100644
--- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h
+++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.h
@@ -17,7 +17,8 @@ Jamie Boyd 21 Jan 2008 (Jamie.Boyd@cern.ch)
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaKernel/IOVSvcDefs.h"
 #include "GaudiKernel/ServiceHandle.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 #include <string>
 #include <vector>
@@ -85,7 +86,8 @@ class RawInfoSummaryForTagWriter : public AthAlgorithm
        
   //coral::AttributeListSpecification* m_attribListSpec;
 
-  ServiceHandle<MagField::IMagFieldSvc>  m_fieldServiceHandle;
+  // Read handle for conditions object to get the field cache
+  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 };
 
 #endif
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h
index b74d9fd3dac..61ee38e2292 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerAlg.h
@@ -20,7 +20,8 @@
 #include "BTagging/IBTagTrackAssociation.h"
 #include "BTagging/IBTagSecVertexing.h"
 
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 namespace Analysis{
 
@@ -53,7 +54,8 @@ class  JetBTaggerAlg:
     ToolHandle< IBTagTool > m_bTagTool;
     ToolHandle< IBTagTrackAssociation > m_BTagTrackAssocTool;
     ToolHandle< IBTagSecVertexing > m_bTagSecVtxTool;
-    ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc;
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
 };
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
index d7784fdfac7..293b5ccd12e 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggerTool.h
@@ -19,7 +19,8 @@
 #include "StoreGate/WriteHandleKey.h"
 #include "StoreGate/WriteDecorHandleKey.h"
 
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 namespace Analysis{
 
@@ -45,6 +46,8 @@ class  JetBTaggerTool:
  private:
 
   SG::ReadHandleKey<xAOD::JetContainer > m_JetCollectionName { this, "JetCollectionName", "", "Input jet container"};
+  // Read handle for conditions object to get the field cache
+  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
   Gaudi::Property<SG::WriteDecorHandleKey<xAOD::JetContainer> >m_jetBTaggingLinkName{this,"JetContainerName","","Element link form jet to BTagging container"};
   SG::WriteHandleKey<xAOD::BTaggingContainer> m_BTaggingCollectionName { this, "BTaggingCollectionName", "", "Output BTagging container"} ;
 
@@ -54,7 +57,6 @@ class  JetBTaggerTool:
   ToolHandle< IBTagTrackAssociation > m_BTagTrackAssocTool;
   ToolHandle< IBTagSecVertexing > m_bTagSecVtxTool;
   bool m_augment;
-  ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc;
 
 };
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h
index 64969d14122..061b1fd3fc5 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/JetBTaggingAlg.h
@@ -22,7 +22,8 @@
 #include "BTagging/IBTagTool.h"
 #include "BTagging/IBTagLightSecVertexing.h"
 
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 namespace Analysis{
 class IJetFitterVariablesFactory;
@@ -47,6 +48,8 @@ class  JetBTaggingAlg:
     //SG::ReadHandleKey<xAOD::VertexContainer> m_VertexCollectionName {this, "vxPrimaryCollectionName", "", "Input primary vertex container"};
     SG::ReadHandleKey<xAOD::VertexContainer> m_BTagSVCollectionName {this, "BTagSVCollectionName", "", "Input BTagging secondary vertex container"};
     SG::ReadHandleKey<xAOD::BTagVertexContainer> m_BTagJFVtxCollectionName {this, "BTagJFVtxCollectionName", "", "Input BTagging Jet Fitter container"};
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
     SG::WriteDecorHandleKey<xAOD::JetContainer> m_jetBTaggingLinkName {this, "BTaggingLinkName", "", "Element link from jet to BTagging container"};
     SG::WriteHandleKey<xAOD::BTaggingContainer> m_BTaggingCollectionName {this, "BTaggingCollectionName", "", "Output BTagging container"};
     SG::WriteDecorHandleKey<xAOD::BTaggingContainer> m_bTagJetDecorLinkName {this, "JetLinkName", "", "Element Link from BTagging to Jet container"};
@@ -55,7 +58,6 @@ class  JetBTaggingAlg:
 
     ToolHandle< IBTagTool > m_bTagTool;
     ToolHandle< IBTagLightSecVertexing > m_bTagSecVtxTool;
-    ServiceHandle<MagField::IMagFieldSvc> m_magFieldSvc;
 
 };
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt
index e295aa97718..7b4db02be98 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/CMakeLists.txt
@@ -12,7 +12,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Event/xAOD/xAODBTagging
                           Event/xAOD/xAODJet
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           Reconstruction/Jet/JetInterface
                           Tracking/TrkEvent/VxVertex
                           PRIVATE
@@ -31,7 +30,10 @@ atlas_depends_on_subdirs( PUBLIC
                           Reconstruction/Particle
                           Tracking/TrkEvent/TrkLinks
                           Tracking/TrkEvent/VxJetVertex
-                          Tracking/TrkEvent/VxSecVertex )
+                          Tracking/TrkEvent/VxSecVertex
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( Eigen )
@@ -55,13 +57,13 @@ atlas_add_library( BTaggingLib
                    src/HighLevelBTagAlg.cxx
                    PUBLIC_HEADERS BTagging
                    PRIVATE_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                   LINK_LIBRARIES AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel MagFieldInterfaces JetInterface VxVertex ParticleJetToolsLib JetTagToolsLib FlavorTagDiscriminants
-                   PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces JetTagEvent JetTagInfo Particle TrkLinks VxJetVertex VxSecVertex )
+                   LINK_LIBRARIES AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel JetInterface VxVertex ParticleJetToolsLib JetTagToolsLib FlavorTagDiscriminants
+                   PRIVATE_LINK_LIBRARIES ${EIGEN_LIBRARIES} GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces JetTagEvent JetTagInfo Particle TrkLinks VxJetVertex VxSecVertex MagFieldElements MagFieldConditions )
 
 atlas_add_component( BTagging
                      src/components/*.cxx
                      INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel MagFieldInterfaces JetInterface VxVertex GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces ParticleJetToolsLib JetTagEvent JetTagInfo JetTagToolsLib FlavorTagDiscriminants Particle TrkLinks VxJetVertex VxSecVertex BTaggingLib )
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AsgTools AthenaBaseComps xAODBTagging xAODJet GaudiKernel JetInterface VxVertex GeoPrimitives xAODBase xAODCore xAODMuon xAODTracking InDetRecToolInterfaces ParticleJetToolsLib JetTagEvent JetTagInfo JetTagToolsLib FlavorTagDiscriminants Particle TrkLinks VxJetVertex VxSecVertex BTaggingLib )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py
index d68d164b1b7..0b044834715 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagRun3Config.py
@@ -171,17 +171,12 @@ def BTagCfg(inputFlags,**kwargs):
     from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
     result.merge(PixelGeometryCfg( inputFlags ))
 
+    # get standard config for magnetic field - map and cache
+    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
+    result.merge(MagneticFieldSvcCfg( inputFlags ))
+
     from IOVDbSvc.IOVDbSvcConfig import addFolders, addFoldersSplitOnline
-    result.merge(addFolders(inputFlags,['/GLOBAL/BField/Maps <noover/>'],'GLOBAL_OFL'))
-    #result.merge(addFolders(inputFlags,['/GLOBAL/BField/Maps <noover/>'],'GLOBAL_ONL'))
-    #result.merge(addFolders(inputFlags,['/GLOBAL/TrackingGeo/LayerMaterialV2'],'GLOBAL_ONL'))
-    result.merge(addFolders(inputFlags,['/EXT/DCS/MAGNETS/SENSORDATA'],'DCS_OFL'))
     
-    MagField__AtlasFieldSvc=CompFactory.MagField.AtlasFieldSvc
-    kwargs.setdefault( "UseDCS", True )
-    result.addService(MagField__AtlasFieldSvc("AtlasFieldSvc",**kwargs))
-    del kwargs['UseDCS']
-
     #load folders needed for Run2 ID alignment
     result.merge(addFoldersSplitOnline(inputFlags,"INDET","/Indet/Onl/Align","/Indet/Align",className="AlignableTransformContainer"))
     result.merge(addFolders(inputFlags,['/TRT/Align'],'TRT_OFL'))
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx
index 717f65cf2db..8aa94602b09 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerAlg.cxx
@@ -28,15 +28,13 @@ namespace Analysis {
     m_BTagLink(".btaggingLink"),
     m_bTagTool("Analysis::BTagTool",this),
     m_BTagTrackAssocTool("Analysis::BTagTrackAssociation",this),
-    m_bTagSecVtxTool("Analysis::BTagSecVertexing",this),
-    m_magFieldSvc("AtlasFieldSvc",n)
+    m_bTagSecVtxTool("Analysis::BTagSecVertexing",this)
   {
     declareProperty("JetCalibrationName", m_JetName);
     declareProperty("BTaggingLink", m_BTagLink);
     declareProperty("BTagTool", m_bTagTool);
     declareProperty("BTagTrackAssocTool", m_BTagTrackAssocTool);
     declareProperty("BTagSecVertexing", m_bTagSecVtxTool);
-    declareProperty("MagFieldSvc",    m_magFieldSvc );
   }
 
   JetBTaggerAlg::~JetBTaggerAlg()
@@ -83,11 +81,8 @@ namespace Analysis {
       ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool);
     }
 
-    /// retrieve the magnetic field service
-    if (m_magFieldSvc.retrieve().isFailure()){
-      ATH_MSG_ERROR("Could not get " << m_magFieldSvc);
-      return StatusCode::FAILURE;
-    }
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     return StatusCode::SUCCESS;
   }
@@ -120,7 +115,19 @@ namespace Analysis {
     ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(),
                     std::make_unique<xAOD::BTaggingAuxContainer>()) );
 
-    if (!m_magFieldSvc->solenoidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return StatusCode::FAILURE;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (!fieldCache.solenoidOn()) {
       for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) {
         const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex);
         ElementLink< xAOD::BTaggingContainer> linkBTagger;
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx
index 7e56b9a45c9..fceedffcb57 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggerTool.cxx
@@ -34,15 +34,13 @@ namespace Analysis {
     m_bTagTool("Analysis::BTagTool",this),
     m_BTagTrackAssocTool("Analysis::BTagTrackAssociation", this),
     m_bTagSecVtxTool("Analysis::BTagSecVertexing", this),
-    m_augment(false),
-    m_magFieldSvc("AtlasFieldSvc",n)
+    m_augment(false)
   {
     declareProperty( "JetCalibrationName", m_JetName);
     declareProperty( "BTagTool", m_bTagTool);
     declareProperty( "BTagTrackAssocTool", m_BTagTrackAssocTool);
     declareProperty( "BTagSecVertexing", m_bTagSecVtxTool);
     declareProperty( "BTagAugmentation", m_augment, "switch to decide whether to merely extend the BTagging information as opposed to re-tagging from scratch");
-    declareProperty("MagFieldSvc",    m_magFieldSvc );
   }
 
   JetBTaggerTool::~JetBTaggerTool()
@@ -88,11 +86,8 @@ namespace Analysis {
       ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool);
     }
 
-    /// retrieve the magnetic field service
-    if (m_magFieldSvc.retrieve().isFailure()){
-      ATH_MSG_ERROR("Could not get " << m_magFieldSvc);
-      return StatusCode::FAILURE;
-    }
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     return StatusCode::SUCCESS;
   }
@@ -125,7 +120,19 @@ namespace Analysis {
     ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(),
                     std::make_unique<xAOD::BTaggingAuxContainer>()) );
 
-    if (!m_magFieldSvc->solenoidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return StatusCode::FAILURE;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (!fieldCache.solenoidOn()) {
       for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) {
         const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex);
         ElementLink< xAOD::BTaggingContainer> linkBTagger;
@@ -214,9 +221,21 @@ namespace Analysis {
 
     ATH_CHECK(sc);
 
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return StatusCode::FAILURE;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
     xAOD::JetContainer::const_iterator itB = jets.begin();
     xAOD::JetContainer::const_iterator itE = jets.end();
-    if (m_magFieldSvc->solenoidOn()) {
+    if (fieldCache.solenoidOn()) {
       for (xAOD::JetContainer::const_iterator it = itB ; it != itE; ++it) {
         xAOD::BTagging * newBTagMT  = new xAOD::BTagging();
         h_BTaggingCollectionName->push_back(newBTagMT);
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx
index b381bcd2383..1b93075c87f 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/JetBTaggingAlg.cxx
@@ -29,13 +29,11 @@ namespace Analysis {
     AthAlgorithm(n,p),
     m_JetName(""),
     m_bTagTool("Analysis::BTagTool",this),
-    m_bTagSecVtxTool("Analysis::BTagSecVertexing",this),
-    m_magFieldSvc("AtlasFieldSvc",n)
+    m_bTagSecVtxTool("Analysis::BTagSecVertexing",this)
   {
     declareProperty("JetCalibrationName", m_JetName);
     declareProperty("BTagTool", m_bTagTool);
     declareProperty("BTagSecVertexing", m_bTagSecVtxTool);
-    declareProperty("MagFieldSvc",    m_magFieldSvc );
   }
 
   JetBTaggingAlg::~JetBTaggingAlg()
@@ -79,11 +77,8 @@ namespace Analysis {
       ATH_MSG_DEBUG("#BTAGVTX# Retrieved tool " << m_bTagSecVtxTool);
     }
 
-    /// retrieve the magnetic field service
-    if (m_magFieldSvc.retrieve().isFailure()){
-      ATH_MSG_ERROR("Could not get " << m_magFieldSvc);
-      return StatusCode::FAILURE;
-    }
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     if (m_jetParticleLinkNameList.size() == 0) {
       ATH_MSG_FATAL( "#BTAG# Please provide track to jet association list");
@@ -139,7 +134,19 @@ namespace Analysis {
     ATH_CHECK( h_BTaggingCollectionName.record(std::make_unique<xAOD::BTaggingContainer>(),
                     std::make_unique<xAOD::BTaggingAuxContainer>()) );
 
-    if (!m_magFieldSvc->solenoidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return StatusCode::FAILURE;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (!fieldCache.solenoidOn()) {
       for (size_t jetIndex=0; jetIndex < h_JetCollectionName->size() ; ++jetIndex) {
         const xAOD::Jet * jet = h_JetCollectionName->at(jetIndex);
         ElementLink< xAOD::BTaggingContainer> linkBTagger;
diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt
index dee1b7f86d3..5600adf499b 100644
--- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt
+++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/CMakeLists.txt
@@ -9,7 +9,6 @@ atlas_subdir( MuidCaloScatteringTools )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           Reconstruction/MuonIdentification/MuidInterfaces
                           Tracking/TrkDetDescr/TrkDetDescrInterfaces
                           Tracking/TrkDetDescr/TrkSurfaces
@@ -22,7 +21,10 @@ atlas_depends_on_subdirs( PUBLIC
                           Tracking/TrkDetDescr/TrkGeometry
                           Tracking/TrkEvent/TrkMaterialOnTrack
                           Tracking/TrkEvent/TrkTrack
-                          Tracking/TrkExtrapolation/TrkExUtils )
+                          Tracking/TrkExtrapolation/TrkExUtils
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( Eigen )
@@ -34,7 +36,7 @@ atlas_add_component( MuidCaloScatteringTools
                      src/MuidMaterialEffectsOnTrackProvider.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel MagFieldInterfaces MuidInterfaces TrkDetDescrInterfaces TrkSurfaces TrkParameters TrkExInterfaces GeoPrimitives MuidEvent muonEvent TrkGeometry TrkMaterialOnTrack TrkTrack TrkExUtils )
+                     LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkSurfaces TrkParameters TrkExInterfaces GeoPrimitives MuidEvent muonEvent TrkGeometry TrkMaterialOnTrack TrkTrack TrkExUtils MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_headers( MuidCaloScatteringTools )
diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h
index 65ad0b3e3d0..e5ba69501f5 100755
--- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h
+++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h
@@ -23,7 +23,8 @@
 //<<<<<< INCLUDES                                                       >>>>>>
 
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h"
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -90,9 +91,9 @@ private:
     ToolHandle<Rec::IMuidCaloEnergy>		m_caloEnergyParam;
     ToolHandle<Rec::IMuidCaloMaterialParam>	m_caloMaterialParam;
     Trk::MagneticFieldProperties*		m_magFieldProperties;
-    ServiceHandle<MagField::IMagFieldSvc>       m_magFieldSvcHandle;
-    MagField::IMagFieldSvc*                     m_magFieldSvc;
     ToolHandle<Trk::IPropagator>		m_propagator;
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
     // configurable cut-off values
     double					m_minCaloRadius;
diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx
index c566ad669c0..1598e58278c 100755
--- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx
+++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx
@@ -47,8 +47,6 @@ MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface (const std::string&	typ
 	m_caloEnergyParam	("Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", this),
 	m_caloMaterialParam	("Rec::MuidCaloMaterialParam/MuidCaloMaterialParam", this),
 	m_magFieldProperties    (0),
-	m_magFieldSvcHandle	("MagField::AtlasFieldSvc/AtlasFieldSvc", name),
-	m_magFieldSvc           (0),
 	m_propagator            ("Trk::IntersectorWrapper/IntersectorWrapper", this),
 	m_minCaloRadius		(0.4*Gaudi::Units::meter),
 	m_minRemainingEnergy	(0.5*Gaudi::Units::GeV),
@@ -108,16 +106,8 @@ MuidCaloTrackStateOnSurface::initialize()
     {
 	ATH_MSG_DEBUG( "Retrieved tool " << m_caloMaterialParam );
     }
-    if (m_magFieldSvcHandle.retrieve().isFailure())
-    {
-	ATH_MSG_FATAL( "Failed to retrieve service " << m_magFieldSvcHandle );
-	return StatusCode::FAILURE;
-    }
-    else
-    {
-	ATH_MSG_DEBUG( "Retrieved service " << m_magFieldSvcHandle );
-	m_magFieldSvc = &*m_magFieldSvcHandle;
-    }
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
     if (m_propagator.retrieve().isFailure())
     {
 	ATH_MSG_FATAL( "Failed to retrieve tool " << m_propagator );
@@ -162,6 +152,18 @@ MuidCaloTrackStateOnSurface::caloTSOS(const Trk::TrackParameters& parameters) co
     const Trk::TrackParameters* middleParams	= 0;
     const Trk::TrackParameters* outerParams	= 0;
 
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    
     // track to calo surfaces - first decide in or outwards
     bool trackOutwards	= true;
     if (dynamic_cast<const Trk::PerigeeSurface*>(&parameters.associatedSurface()))
@@ -218,7 +220,7 @@ MuidCaloTrackStateOnSurface::caloTSOS(const Trk::TrackParameters& parameters) co
 		    double correctedEnergy		= innerParams->momentum().mag() - energyDeposit;
 
 		    // fail potential loopers
-		    if (m_magFieldSvc->toroidOn()
+		    if (fieldCache.toroidOn()
 		    	&& correctedEnergy < m_minRemainingEnergy)
 		    {
 		    	delete middleTS;
diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt b/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt
index 1b4cb2cabdc..9278bf88b0f 100644
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/CMakeLists.txt
@@ -19,7 +19,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
 			  Event/EventPrimitives
                           InnerDetector/InDetRecEvent/InDetRIO_OnTrack
-                          MagneticField/MagFieldInterfaces
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonIdHelpers
                           MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonCompetingRIOsOnTrack
@@ -41,7 +40,10 @@ atlas_depends_on_subdirs( PUBLIC
                           Tracking/TrkExtrapolation/TrkExUtils
                           Tracking/TrkFitter/TrkFitterInterfaces
                           Tracking/TrkFitter/TrkiPatFitterUtils
-                          Tracking/TrkTools/TrkToolInterfaces )
+                          Tracking/TrkTools/TrkToolInterfaces
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( CLHEP )
@@ -55,7 +57,7 @@ atlas_add_component( MuidTrackBuilder
                      src/OutwardsCombinedMuonTrackBuilder.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AtlasDetDescr GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkGeometry TrkParameters TrkTrack InDetRIO_OnTrack MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonRecHelperToolsLib MuonRecToolInterfaces MuonCombinedToolInterfaces muonEvent TrkSurfaces TrkCompetingRIOsOnTrack TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkiPatFitterUtils TrkToolInterfaces )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps AtlasDetDescr GaudiKernel MuidInterfaces TrkDetDescrInterfaces TrkGeometry TrkParameters TrkTrack InDetRIO_OnTrack MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonRecHelperToolsLib MuonRecToolInterfaces MuonCombinedToolInterfaces muonEvent TrkSurfaces TrkCompetingRIOsOnTrack TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkMeasurementBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex TrkExInterfaces TrkExUtils TrkFitterInterfaces TrkiPatFitterUtils TrkToolInterfaces MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_headers( MuidTrackBuilder )
diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
index 851385e9283..0b26f6412cb 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
@@ -21,7 +21,8 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "MuidInterfaces/ICombinedMuonTrackBuilder.h"
 #include "MuidInterfaces/IMuidCaloEnergy.h"
 #include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h"
@@ -217,7 +218,8 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon
     ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc",
                                                         "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
 
-    ServiceHandle<MagField::IMagFieldSvc>    m_magFieldSvc;
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
     ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc;  // init with callback
     ServiceHandle<Trk::ITrackingVolumesSvc>  m_trackingVolumesSvc;
 
diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
index 4d5d4ef9cef..ae40978920f 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
@@ -75,7 +75,6 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons
       m_trackQuery("Rec::MuonTrackQuery/MuonTrackQuery", this),
       m_trackSummary("Trk::TrackSummaryTool/MuidTrackSummaryTool", this),
       m_materialUpdator("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool", this),
-      m_magFieldSvc("AtlasFieldSvc", name),
       m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc", name),
       m_trackingVolumesSvc("TrackingVolumesSvc/TrackingVolumesSvc", name),
       m_magFieldProperties(Trk::FullField),
@@ -171,8 +170,6 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons
     declareProperty("IDMS_xySigma", m_IDMS_xySigma);
     declareProperty("IDMS_rzSigma", m_IDMS_rzSigma);
 
-    declareProperty("MagFieldSvc", m_magFieldSvc);
-
     // deprecated
     declareProperty("IndetSlimming", m_indetSlimming);
     declareProperty("InputSlimming", m_inputSlimming);
@@ -294,8 +291,9 @@ CombinedMuonTrackBuilder::initialize()
     ATH_MSG_DEBUG("Retrieved tool " << m_idHelperSvc);
     ATH_CHECK(m_intersector.retrieve());
     ATH_MSG_DEBUG("Retrieved tool " << m_intersector);
-    ATH_CHECK(m_magFieldSvc.retrieve());
-    ATH_MSG_DEBUG("Retrieved service " << m_magFieldSvc);
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
+    ATH_MSG_DEBUG("Setup handle for key " << m_fieldCacheCondObjInputKey);
 
     if (!m_materialAllocator.empty()) {
         ATH_CHECK(m_materialAllocator.retrieve());
@@ -440,7 +438,19 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T
 
     // match extrapolated indet track to inner calorimeter scattering surface
     // provided momentum defined (solenoid on)
-    if (surface && m_magFieldSvc->solenoidOn() && !m_updateWithCaloTG) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    
+    if (surface && fieldCache.solenoidOn() && !m_updateWithCaloTG) {
         const Trk::TrackStateOnSurface* innerTSOS = 0;
 
         if (m_useCaloTG) {
@@ -486,7 +496,7 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T
 
     Trk::Track* muonTrack = 0;
 
-    if (!m_magFieldSvc->toroidOn()) {
+    if (!fieldCache.toroidOn()) {
         ATH_MSG_VERBOSE(" SL MS track: Calling createMuonTrack from " << __func__ << " at line " << __LINE__);
         muonTrack = createMuonTrack(
             indetTrack, indetTrack.perigeeParameters(), 0, extrapolatedTrack.trackStateOnSurfaces()->begin(),
@@ -788,10 +798,22 @@ CombinedMuonTrackBuilder::indetExtension(const Trk::Track&           indetTrack,
     // fail when solenoid off and toroid on (as extrapolation from ID is not the correct strategy)
     ToolHandle<Trk::IPropagator> propagator = m_propagatorSL;
 
-    if (m_magFieldSvc->toroidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    
+    if (fieldCache.toroidOn()) {
         // fail when solenoid off and toroid on - as extrapolation from ID is not the correct strategy
         //   for material effects, fit starting value etc
-        if (!m_magFieldSvc->solenoidOn()) {
+        if (!fieldCache.solenoidOn()) {
             ATH_MSG_VERBOSE("indetExtension: method switched off when solenoid 'off' / toroid 'on'");
             return 0;
         }
@@ -941,8 +963,20 @@ Trk::Track*
 CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack, const Trk::Vertex* inputVertex,
                                         float bs_x, float bs_y, float bs_z) const
 {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
     // no SA fit with vertex constraint for Toroid off data
-    if (m_trackQuery->isLineFit(inputSpectrometerTrack) && !m_magFieldSvc->toroidOn()) {
+    if (m_trackQuery->isLineFit(inputSpectrometerTrack) && !fieldCache.toroidOn()) {
         return 0;
     }
 
@@ -1108,7 +1142,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack
 
     if (vertex) {
         // vertex association only makes sense for magnet-on tracks with measured curvature
-        if (!m_magFieldSvc->toroidOn() || m_trackQuery->isLineFit(spectrometerTrack) || errorP > m_largeMomentumError) {
+        if (!fieldCache.toroidOn() || m_trackQuery->isLineFit(spectrometerTrack) || errorP > m_largeMomentumError) {
 
             ATH_MSG_VERBOSE("standaloneFit: vertex fit not attempted as curvature badly measured");
             ATH_MSG_VERBOSE(" SA::failed (6)");
@@ -1200,7 +1234,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack
         // FIXME: missing prefit case for excessive spectrometer eloss WARNING
         //       spot from line starting approx from vertex??
         if (inCSCregion || m_trackQuery->numberPseudoMeasurements(spectrometerTrack)
-            || (m_magFieldSvc->toroidOn()
+            || (fieldCache.toroidOn()
                 && (badlyDeterminedCurvature || errorPhi > m_largePhiError
                     || measuredPerigee->momentum().mag() < m_lowMomentum)))
         {
@@ -1381,7 +1415,7 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack
     particleHypothesis      = Trk::muon;
     bool returnAfterCleaner = false;
 
-    if (!m_magFieldSvc->toroidOn()) returnAfterCleaner = true;
+    if (!fieldCache.toroidOn()) returnAfterCleaner = true;
 
     ATH_MSG_VERBOSE("Calling createExtrapolatedTrack from " << __func__ << " at line " << __LINE__);
     Trk::Track* extrapolated =
@@ -1670,7 +1704,19 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float
 
     countAEOTs(&combinedTrack, " in standalone Refit input combinedTrack ");
 
-    if (!m_magFieldSvc->toroidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    
+    if (!fieldCache.toroidOn()) {
         // no standalone refit for Toroid off
         return 0;
     }
@@ -2216,7 +2262,19 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& track, const Trk::RunOutlierRemo
     bool isCombined = m_trackQuery->isCombined(track);
     // select straightLine fitter when magnets downstream of leading measurement are off
     ToolHandle<Trk::ITrackFitter> fitter = m_fitter;
-    if (!m_magFieldSvc->toroidOn() && !(isCombined && m_magFieldSvc->solenoidOn())) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (!fieldCache.toroidOn() && !(isCombined && fieldCache.solenoidOn())) {
 
         fitter = m_fitterSL;
         ATH_MSG_VERBOSE(" fit (track refit method): select SL fitter ");
@@ -2399,8 +2457,20 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T
     }
 
     // select straightLine fitter when magnets downstream of leading measurement are off
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
     ToolHandle<Trk::ITrackFitter> fitter = m_fitter;
-    if (!m_magFieldSvc->toroidOn() || std::abs(perigeeStartValue.position().z()) > m_zECToroid) {
+    if (!fieldCache.toroidOn() || std::abs(perigeeStartValue.position().z()) > m_zECToroid) {
 
         fitter = m_fitterSL;
         ATH_MSG_VERBOSE(" fit (track refit method): select SL fitter ");
@@ -2521,7 +2591,19 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, const Trk::Track& ex
 
     // select straightLine fitter when solenoid and toroid are off
     ToolHandle<Trk::ITrackFitter> fitter = m_fitter;
-    if (!m_magFieldSvc->toroidOn() && !m_magFieldSvc->solenoidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+
+    if (!fieldCache.toroidOn() && !fieldCache.solenoidOn()) {
 
         fitter = m_fitterSL;
         ATH_MSG_VERBOSE(" fit (combined muon fit method): select SL fitter ");
@@ -3161,7 +3243,19 @@ CombinedMuonTrackBuilder::createExtrapolatedTrack(const Trk::Track&           sp
 
         // if association OK, create perigee surface and back-track to it
         if (caloAssociated) {
-            if (m_magFieldSvc->toroidOn()) {
+            MagField::AtlasFieldCache    fieldCache;
+            // Get field cache object
+            EventContext ctx = Gaudi::Hive::currentContext();
+            SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+            const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+            if (fieldCondObj == nullptr) {
+                ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+                return 0;
+            }
+            fieldCondObj->getInitializedCache (fieldCache);
+
+            if (fieldCache.toroidOn()) {
                 const Trk::TrackParameters* oldParameters = caloTSOS->front()->trackParameters();
 
                 if (oldParameters && !oldParameters->covariance()) {
@@ -3906,7 +4000,18 @@ CombinedMuonTrackBuilder::extrapolatedParameters(bool& badlyDeterminedCurvature,
     bool curvatureOK = false;
 
     ToolHandle<Trk::IPropagator> propagator = m_propagator;
-    if (!m_magFieldSvc->toroidOn()) {
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+        ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+        return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    if (!fieldCache.toroidOn()) {
         curvatureOK = true;
         propagator  = m_propagatorSL;
     } else if (std::abs(parameters->position().z()) < m_zECToroid
@@ -3993,7 +4098,7 @@ CombinedMuonTrackBuilder::extrapolatedParameters(bool& badlyDeterminedCurvature,
         }
 
         // large impact: set phi to be projective (note iteration)
-        if (std::abs(perigee->parameters()[Trk::d0]) < m_largeImpact || !m_magFieldSvc->toroidOn()) {
+        if (std::abs(perigee->parameters()[Trk::d0]) < m_largeImpact || !fieldCache.toroidOn()) {
             if (correctedParameters == parameters) {
                 ATH_MSG_WARNING(
                     "deleting parameters pointer that could be used further down in execution, setting it to zero!");
diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt
index b71f6720cf8..3a3cae1250c 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt
+++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/CMakeLists.txt
@@ -23,7 +23,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Event/xAOD/xAODTracking
                           Event/xAOD/xAODTruth
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonIdHelpers
                           MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonCompetingRIOsOnTrack
@@ -56,7 +55,10 @@ atlas_depends_on_subdirs( PUBLIC
                           Tracking/TrkEvent/TrkTrackSummary
                           Tracking/TrkExtrapolation/TrkExInterfaces
                           Tracking/TrkTools/TrkToolInterfaces 
-                          Generators/AtlasHepMC )
+                          Generators/AtlasHepMC
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( CLHEP )
@@ -67,5 +69,5 @@ atlas_add_component( MuonCombinedBaseTools
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} 
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MagFieldInterfaces MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkToolInterfaces BeamSpotConditionsData )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib CaloEvent AthLinks AthenaBaseComps Identifier EventPrimitives FourMomUtils xAODCaloEvent xAODEventInfo xAODMuon xAODTracking xAODTruth GaudiKernel MuonReadoutGeometry MuonIdHelpersLib MuonCompetingRIOsOnTrack MuonRIO_OnTrack MuonSegment MuonRecHelperToolsLib MuonRecToolInterfaces MuonSegmentMakerUtils MuonSelectorToolsLib ICaloTrkMuIdTools MuidInterfaces MuonCombinedEvent MuonCombinedToolInterfaces muonEvent MuidEvent ParticleTruth RecoToolInterfaces TrackToCaloLib TrkGeometry TrkSurfaces TrkCaloExtension TrkEventPrimitives TrkEventUtils TrkMaterialOnTrack TrkParameters TrkParametersIdentificationHelpers TrkSegment TrkTrack TrkTrackSummary TrkExInterfaces TrkToolInterfaces BeamSpotConditionsData MagFieldElements MagFieldConditions )
 
diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx
index 5480cc257ec..164476a1b0f 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx
+++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.cxx
@@ -39,7 +39,6 @@
 #include "Identifier/Identifier.h"
 #include "TrkEventUtils/IdentifierExtractor.h"
 #include "TrkMaterialOnTrack/ScatteringAngles.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "xAODTracking/Vertex.h"
 
 namespace MuonCombined {
@@ -57,7 +56,6 @@ namespace MuonCombined {
   m_muonRecovery(""),
   m_matchQuality("Rec::MuonMatchQuality/MuonMatchQuality", this),
   m_trackScoringTool("Muon::MuonTrackScoringTool/MuonTrackScoringTool"),
-  m_magFieldSvc("AtlasFieldSvc",name),
   m_DetID(0)
   {
     declareInterface<IMuonCombinedTagTool>(this);
@@ -74,7 +72,6 @@ namespace MuonCombined {
     declareProperty("MomentumBalanceCut",	m_momentumBalanceCut = 6.0);
     declareProperty("IndetPullCut", 		m_indetPullCut = 6.0);
     declareProperty("MatchChiSquaredCut",	m_matchChiSquaredCut = 30.0);
-    declareProperty("MagFieldSvc",		m_magFieldSvc);
   }
 
   MuonCombinedFitTagTool::~MuonCombinedFitTagTool()
@@ -94,7 +91,8 @@ namespace MuonCombined {
     if(! m_muonRecovery.empty() ) ATH_CHECK(m_muonRecovery.retrieve());
     ATH_CHECK(m_matchQuality.retrieve());
     ATH_CHECK(m_trackScoringTool.retrieve());
-    ATH_CHECK(m_magFieldSvc.retrieve());
+    /// handle to the magnetic field cache
+    ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
     if (detStore()->retrieve(m_DetID, "AtlasID").isFailure()) {
       ATH_MSG_ERROR ("Could not get AtlasDetectorID helper" );
@@ -385,7 +383,18 @@ namespace MuonCombined {
     bool dorefit = true;
     
     // no SA refit for Toroid off 
-    if (!m_magFieldSvc->toroidOn()) dorefit = false;
+    MagField::AtlasFieldCache    fieldCache;
+    // Get field cache object
+    EventContext ctx = Gaudi::Hive::currentContext();
+    SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+    const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+   
+    if (fieldCondObj == nullptr) {
+      ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+      return 0;
+    }
+    fieldCondObj->getInitializedCache (fieldCache);
+    if (!fieldCache.toroidOn()) dorefit = false;
 
     float bs_x = 0.;
     float bs_y = 0.;
diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h
index b0c05ec4e0e..d299d68f194 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h
+++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCombinedFitTagTool.h
@@ -15,6 +15,8 @@
 #include "TrkParameters/TrackParameters.h"
 #include "TrkSegment/SegmentCollection.h"
 #include "xAODTracking/VertexContainer.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include <vector>
 
 //<<<<<< CLASS DECLARATIONS                                             >>>>>>
@@ -36,10 +38,6 @@ namespace Muon
   class MuonEDMPrinterTool;
 }
 
-namespace MagField {
-  class IMagFieldSvc;
-}
-
 namespace MuonCombined {
   class InDetCandidate;
   class MuonCandidate;
@@ -94,7 +92,8 @@ namespace MuonCombined {
     ToolHandle<Rec::IMuidMuonRecovery>		      m_muonRecovery; 
     ToolHandle<Rec::IMuonMatchQuality>		      m_matchQuality;
     ToolHandle<Trk::ITrackScoringTool>                m_trackScoringTool;
-    ServiceHandle<MagField::IMagFieldSvc>	      m_magFieldSvc;
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj>    m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
     const AtlasDetectorID *m_DetID;
 
     SG::ReadHandleKey<xAOD::VertexContainer> m_vertexKey { this, "VertexContainer", "PrimaryVertices", "primary vertex container" };
diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h
index 1c5346eada7..3d2683309a4 100755
--- a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h
+++ b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/ExtrapolatorTest.h
@@ -17,7 +17,6 @@
 #include "GaudiKernel/ToolHandle.h"
 #include <string>
 #include <vector>
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "TrkParameters/TrackParameters.h"
 
 namespace Trk 
@@ -67,8 +66,7 @@ namespace Trk
       /** The Extrapolator to be retrieved */
       ToolHandle<IExtrapolator>         m_extrapolator;
       ToolHandle<IPropagator>           m_propagator;
-      ServiceHandle<MagField::IMagFieldSvc>              m_magFieldSvc;       //!< helper tool to get the magnetic field
-      MagneticFieldProperties*                    m_magFieldProperties; //!< magnetic field properties
+      MagneticFieldProperties*          m_magFieldProperties; //!< magnetic field properties
 
       /** Random Number setup */
       Rndm::Numbers*                    m_gaussDist;
diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h
index 6098c4353d5..0f374f1deeb 100755
--- a/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h
+++ b/Tracking/TrkExtrapolation/TrkExAlgs/TrkExAlgs/RiddersAlgorithm.h
@@ -14,7 +14,7 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "GaudiKernel/IRndmGenSvc.h"
 #include "GaudiKernel/RndmGenerators.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
+#include "GeoPrimitives/GeoPrimitives.h"
 #include <string>
 
 class AtlasDetectorID;
@@ -65,7 +65,6 @@ namespace Trk
 
       /** member variables for algorithm properties: */
       ToolHandle<IPropagator>           m_propagator;       
-      ServiceHandle<MagField::IMagFieldSvc>    m_magFieldSvc;       
       bool                              m_useCustomField;
       bool                              m_useAlignedSurfaces;
       double                            m_fieldValue;
diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx b/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx
index 4af2d977a61..3fead037c07 100755
--- a/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx
+++ b/Tracking/TrkExtrapolation/TrkExAlgs/src/ExtrapolatorTest.cxx
@@ -14,7 +14,6 @@
 #include "TrkSurfaces/DiscSurface.h"
 #include "TrkEventPrimitives/ParticleHypothesis.h"
 #include "EventPrimitives/EventPrimitives.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "TrkGeometry/MagneticFieldProperties.h"
 #include "GaudiKernel/SystemOfUnits.h"
 // std
@@ -27,7 +26,6 @@ Trk::ExtrapolatorTest::ExtrapolatorTest(const std::string& name, ISvcLocator* pS
   AthAlgorithm(name,pSvcLocator),
   m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
   m_propagator("Trk::RungeKuttaPropagator/RungeKuttaPropagator"),
-  m_magFieldSvc("AtlasFieldSvc",name),
   m_magFieldProperties(0),
   m_gaussDist(0),
   m_flatDist(0),
@@ -48,7 +46,6 @@ Trk::ExtrapolatorTest::ExtrapolatorTest(const std::string& name, ISvcLocator* pS
   // used algorithms and alg tools
   declareProperty("Extrapolator",                m_extrapolator);
   declareProperty("Propagator",                  m_propagator);
-  declareProperty("MagFieldSvc",   m_magFieldSvc );
 
   // algorithm steering
   declareProperty("StartPerigeeSigmaD0"       , m_sigmaD0);
@@ -109,10 +106,6 @@ StatusCode Trk::ExtrapolatorTest::initialize()
         return StatusCode::FAILURE;
   }
 
-  if (m_magFieldSvc.retrieve().isFailure()) {
-        msg(MSG::FATAL) << "Could not retrieve Tool " << m_magFieldSvc << ". Exiting."<<endmsg;
-        return StatusCode::FAILURE;
-  }
   m_magFieldProperties = new Trk::MagneticFieldProperties();
 
   if (m_referenceSurfaceRadius.size() == m_referenceSurfaceHalflength.size()) {
diff --git a/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx b/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx
index be538cca3bd..d72940c3b7d 100755
--- a/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx
+++ b/Tracking/TrkExtrapolation/TrkExAlgs/src/RiddersAlgorithm.cxx
@@ -10,7 +10,6 @@
 // Trk stuff
 #include "TrkExInterfaces/IPropagator.h"
 #include "TrkExUtils/TransportJacobian.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 #include "TrkGeometry/MagneticFieldProperties.h"
 #include "TrkSurfaces/PlaneSurface.h"
 #include "TrkSurfaces/CylinderSurface.h"
@@ -27,7 +26,6 @@ Trk::RiddersAlgorithm::RiddersAlgorithm(const std::string& name, ISvcLocator* pS
   :
   AthAlgorithm(name,pSvcLocator),
   m_propagator("Trk::RungeKuttaPropagator/RungeKuttaPropagator"),       
-  m_magFieldSvc("AtlasFieldSvc",name),
   m_useCustomField(true),
   m_useAlignedSurfaces(true),
   m_fieldValue(2.*Gaudi::Units::tesla),
@@ -91,7 +89,6 @@ Trk::RiddersAlgorithm::RiddersAlgorithm(const std::string& name, ISvcLocator* pS
   
 
   declareProperty("Propagator"                , m_propagator);
-  declareProperty("MagFieldSvc"         , m_magFieldSvc);
   declareProperty("CustomFieldValue"          , m_fieldValue);
   declareProperty("UseCustomMagneticField"    , m_useCustomField);
   declareProperty("UseAlignedSurfaces"        , m_useAlignedSurfaces);
@@ -143,12 +140,6 @@ StatusCode Trk::RiddersAlgorithm::initialize()
         return StatusCode::FAILURE;
   }
 
-  // Get the Magnetic Field Tool if needed
-  if (!m_useCustomField && m_magFieldSvc.retrieve().isFailure()) {
-        ATH_MSG_FATAL( "Could not retrieve Tool " << m_magFieldSvc << ". Exiting." );
-        return StatusCode::FAILURE;
-  }
-
   // Prepare the magnetic field properties 
   if (!m_useCustomField)
       m_magFieldProperties = new Trk::MagneticFieldProperties();
diff --git a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt
index ec07ecae876..8f582373da5 100644
--- a/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt
+++ b/Tracking/TrkExtrapolation/TrkExSTEP_Propagator/CMakeLists.txt
@@ -35,7 +35,7 @@ atlas_add_component( TrkExSTEP_Propagator
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives EventPrimitives MagFieldInterfaces TrkGeometry TrkEventPrimitives TrkMaterialOnTrack TrkParameters TrkExInterfaces TrkExUtils GaudiKernel TrkDetDescrUtils TrkSurfaces TrkTrack MagFieldElements MagFieldConditions )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps AthenaKernel GeoPrimitives EventPrimitives TrkGeometry TrkEventPrimitives TrkMaterialOnTrack TrkParameters TrkExInterfaces TrkExUtils GaudiKernel TrkDetDescrUtils TrkSurfaces TrkTrack MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_headers( TrkExSTEP_Propagator )
diff --git a/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt b/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt
index e322885cd6b..922d47f5cf9 100644
--- a/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt
+++ b/Tracking/TrkTools/TrkMaterialProvider/CMakeLists.txt
@@ -20,13 +20,15 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/Identifier
                           Event/EventPrimitives
                           GaudiKernel
-                          MagneticField/MagFieldInterfaces
                           Reconstruction/MuonIdentification/MuidEvent
                           Reconstruction/MuonIdentification/MuidInterfaces
                           Reconstruction/MuonIdentification/muonEvent
                           Reconstruction/RecoTools/RecoToolInterfaces
                           Tracking/TrkEvent/TrkEventUtils
-                          Tracking/TrkEvent/TrkMaterialOnTrack )
+                          Tracking/TrkEvent/TrkMaterialOnTrack
+                          MagneticField/MagFieldElements
+                          MagneticField/MagFieldConditions
+			  )
 
 # External dependencies:
 find_package( CLHEP )
@@ -36,7 +38,7 @@ atlas_add_component( TrkMaterialProvider
                      src/TrkMaterialProviderTool.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps TrkDetDescrInterfaces TrkGeometry TrkSurfaces TrkParameters TrkTrack TrkExInterfaces TrkToolInterfaces AtlasDetDescr Identifier EventPrimitives GaudiKernel MagFieldInterfaces MuidEvent MuidInterfaces muonEvent RecoToolInterfaces TrkEventUtils TrkMaterialOnTrack )
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps TrkDetDescrInterfaces TrkGeometry TrkSurfaces TrkParameters TrkTrack TrkExInterfaces TrkToolInterfaces AtlasDetDescr Identifier EventPrimitives GaudiKernel MuidEvent MuidInterfaces muonEvent RecoToolInterfaces TrkEventUtils TrkMaterialOnTrack MagFieldElements MagFieldConditions )
 
 # Install files from the package:
 atlas_install_headers( TrkMaterialProvider )
diff --git a/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h b/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h
index 3d504d695ac..636a4cc0938 100644
--- a/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h
+++ b/Tracking/TrkTools/TrkMaterialProvider/TrkMaterialProvider/TrkMaterialProviderTool.h
@@ -29,13 +29,11 @@
 #include "TrkExInterfaces/IMultipleScatteringUpdator.h"
 #include "TrkGeometry/TrackingVolume.h"
 #include "TrkGeometry/MagneticFieldProperties.h"
+// For magneticfield
+#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 
 #include "RecoToolInterfaces/IMuonCaloEnergyTool.h"
 
-namespace MagField {
-  class IMagFieldSvc;
-}
-
 namespace Trk {
   class Surface;
 }
@@ -194,7 +192,9 @@ namespace Trk{
     const Trk::Volume* m_calorimeterVolume;
     const Trk::Volume* m_indetVolume;
 
-    ServiceHandle<MagField::IMagFieldSvc>           m_magFieldSvc;
+    // Read handle for conditions object to get the field cache
+    SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj",
+                                                                               "Name of the Magnetic Field conditions object key"};
 
     bool m_applyTGScaling;
     bool m_repositionTSOS;
diff --git a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx
index b66cb97b6bd..0c04dd1d630 100644
--- a/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx
+++ b/Tracking/TrkTools/TrkMaterialProvider/src/TrkMaterialProviderTool.cxx
@@ -15,7 +15,6 @@
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/Identifier.h"
 #include "TrkEventUtils/IdentifierExtractor.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
 
 #include "muonEvent/CaloEnergy.h"
 
@@ -50,7 +49,6 @@ Trk::TrkMaterialProviderTool::TrkMaterialProviderTool(const std::string& t, cons
 	m_DetID(nullptr),
 	m_calorimeterVolume(nullptr),
 	m_indetVolume(nullptr),
-        m_magFieldSvc           ("AtlasFieldSvc",n),
 	m_maxNTracksIso(2),
 	m_paramPtCut(15.0*Gaudi::Units::GeV),
 	m_useCaloEnergyMeasurement(true),
@@ -68,7 +66,6 @@ Trk::TrkMaterialProviderTool::TrkMaterialProviderTool(const std::string& t, cons
   declareProperty("CaloMeasTool",		m_caloMeasTool);
   declareProperty("CaloParamTool",		m_caloParamTool);
   declareProperty("TrackIsolationTool",	m_trackIsolationTool);
-  declareProperty("MagFieldSvc",                      m_magFieldSvc);
   declareProperty("MaxNTracksIso", m_maxNTracksIso);
   declareProperty("ParamPtCut", m_paramPtCut);
   declareProperty("UseCaloEnergyMeasurement", m_useCaloEnergyMeasurement);
@@ -110,7 +107,8 @@ Trk::TrkMaterialProviderTool::initialize()
     m_trackIsolationTool.disable();
   }
 
-  ATH_CHECK(m_magFieldSvc.retrieve());
+  /// handle to the magnetic field cache
+  ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() );
 
   // need an Atlas id-helper to identify sub-detectors, take the one from detStore
   if (detStore()->retrieve(m_DetID, "AtlasID").isFailure()) {
@@ -475,13 +473,26 @@ void Trk::TrkMaterialProviderTool::getCaloMEOT(const Trk::Track& idTrack, const
     ATH_MSG_WARNING("Unable to find first MS TSOS with Track Parameters!");  
 #endif
 
+  MagField::AtlasFieldCache    fieldCache;
+  // Get field cache object
+  EventContext ctx = Gaudi::Hive::currentContext();
+  SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
+  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
+ 
+  if (fieldCondObj == nullptr) {
+    ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
+    return;
+  }
+  fieldCondObj->getInitializedCache (fieldCache);
+
+  
   double Eloss = 0.; 
   double X0ScaleMS = 0.;
   double ElossScaleMS = 0.;
   // get calorimeter TSOS from TG
   DataVector<const Trk::TrackStateOnSurface>* caloTSOS = this->getCaloTSOS (*(*lastIDwP)->trackParameters(),
 									    // idTrack,
-									    m_magFieldSvc->toroidOn() ? msTrack : idTrack,
+									    fieldCache.toroidOn() ? msTrack : idTrack,
 									    (*firstMSnotPerigee)->surface(),
 									    Trk::alongMomentum, 
 									    Trk::muon,
@@ -491,10 +502,10 @@ void Trk::TrkMaterialProviderTool::getCaloMEOT(const Trk::Track& idTrack, const
 									    true); 
   
   if(!caloTSOS || caloTSOS->size()!=3) {
-    if((!m_magFieldSvc->toroidOn()&&fabs(idTrack.perigeeParameters()->parameters()[Trk::qOverP])*4000.<1)|| (m_magFieldSvc->toroidOn()&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=1/100000.&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=0)) {
+    if((!fieldCache.toroidOn()&&fabs(idTrack.perigeeParameters()->parameters()[Trk::qOverP])*4000.<1)|| (fieldCache.toroidOn()&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=1/100000.&&msTrack.perigeeParameters()->parameters()[Trk::qOverP]!=0)) {
 // Warnings only for high momentum ID tracks and MS tracks that have measured curvature (Straight track has pq= 100000)
-      if(!m_magFieldSvc->toroidOn()) ATH_MSG_WARNING(" Toroid off q*momentum of ID track " << 1./idTrack.perigeeParameters()->parameters()[Trk::qOverP]);
-      if(m_magFieldSvc->toroidOn()) ATH_MSG_WARNING(" Toroid on q*momentum of MS track " << 1./msTrack.perigeeParameters()->parameters()[Trk::qOverP]);
+      if(!fieldCache.toroidOn()) ATH_MSG_WARNING(" Toroid off q*momentum of ID track " << 1./idTrack.perigeeParameters()->parameters()[Trk::qOverP]);
+      if(fieldCache.toroidOn()) ATH_MSG_WARNING(" Toroid on q*momentum of MS track " << 1./msTrack.perigeeParameters()->parameters()[Trk::qOverP]);
       ATH_MSG_WARNING("Unable to retrieve Calorimeter TSOS from extrapolateM+aggregation (null or !=3)");
       if(!caloTSOS) {
          ATH_MSG_WARNING(" Zero Calorimeter TSOS from extrapolateM+aggregation");
-- 
GitLab