diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
index ad9f03b2f11b76f905887a0a230d41013d3db6b3..9b983ac600737eab76202e62dbbf3427247b1e77 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
@@ -87,7 +87,7 @@ PixelConditionsSummaryTool::IDCCacheEntry* PixelConditionsSummaryTool::getCacheE
 uint64_t PixelConditionsSummaryTool::getBSErrorWord(const IdentifierHash& moduleHash, const EventContext& ctx) const {
   if (!m_useByteStream) { return 0; }
 
-  std::lock_guard<std::mutex> lock{m_cacheMutex};
+  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
   auto idcCachePtr = getCacheEntry(ctx)->IDCCache;
   if (idcCachePtr==nullptr) {
     ATH_MSG_ERROR("PixelConditionsSummaryTool No cache! " );
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
index cd02679876eb8e2830c4e2180dcd02b3635bd5fb..d69ca0c34aa44143776bd52f7557c6f115225dd9 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
@@ -102,7 +102,7 @@ class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool
 
     const uint64_t m_missingErrorInfo{std::numeric_limits<uint64_t>::max()-3000000000};
 
-    mutable std::mutex m_cacheMutex{};
+    mutable SG::SlotSpecificObj<std::mutex> m_cacheMutex ATLAS_THREAD_SAFE;
 
     struct IDCCacheEntry {
       EventContext::ContextEvt_t eventId = EventContext::INVALID_CONTEXT_EVT; // invalid event ID for the start
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.cxx b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.cxx
index 8bdca590b7b8a9c8612b7aef1e87c5955217d284..d505c4fae7246d15da58fe170948dab629aa1ab0 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.cxx
@@ -102,7 +102,7 @@ SCT_ByteStreamErrorsTool::IDCCacheEntry* SCT_ByteStreamErrorsTool::getCacheEntry
 bool
 SCT_ByteStreamErrorsTool::isGood(const IdentifierHash& elementIdHash, const EventContext& ctx) const {
   {
-    std::lock_guard<std::mutex> lock{m_cacheMutex};
+    std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
     ATH_MSG_VERBOSE("SCT_ByteStreamErrorsTool isGood called for " << elementIdHash);
     auto idcCachePtr{getCacheEntry(ctx)->IDCCache};
     if (idcCachePtr == nullptr) {
@@ -351,7 +351,7 @@ SCT_ByteStreamErrorsTool::fillData(const EventContext& ctx) const {
 
 unsigned int SCT_ByteStreamErrorsTool::tempMaskedChips(const Identifier& moduleId, const EventContext& ctx) const {
   ATH_MSG_VERBOSE("SCT_ByteStreamErrorsTool tempMaskedChips");
-  std::lock_guard<std::mutex> lock{m_cacheMutex};
+  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
   auto cacheEntry{getCacheEntry(ctx)};
   if (cacheEntry->IDCCache == nullptr) return 0;
 
@@ -370,7 +370,7 @@ unsigned int SCT_ByteStreamErrorsTool::tempMaskedChips(const Identifier& moduleI
 
 unsigned int SCT_ByteStreamErrorsTool::abcdErrorChips(const Identifier& moduleId, const EventContext& ctx) const {
   ATH_MSG_VERBOSE("SCT_ByteStreamErrorsTool abcdErrorChips");
-  std::lock_guard<std::mutex> lock{m_cacheMutex};
+  std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
   auto cacheEntry{getCacheEntry(ctx)};
   if (cacheEntry->IDCCache == nullptr) return 0;
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.h b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.h
index e5c3d21e235bec1bc9eb8f521ba76ae2b50133e2..029d346dd93dc860c80a37557504cb41908f2919 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ByteStreamErrorsTool.h
@@ -37,7 +37,6 @@
 #include <atomic>
 #include <functional>
 #include <unordered_map>
-#include <mutex>
 #include <vector>
 
 /** forward declarations */
@@ -101,7 +100,7 @@ private:
   const SCT_ID* m_sct_id{nullptr};
   IdContext m_cntx_sct;
 
-  mutable std::mutex m_cacheMutex{};
+  mutable SG::SlotSpecificObj<std::mutex> m_cacheMutex ATLAS_THREAD_SAFE;
   struct IDCCacheEntry {
     EventContext::ContextEvt_t eventId{EventContext::INVALID_CONTEXT_EVT}; // invalid event ID for the start
     const IDCInDetBSErrContainer_Cache* IDCCache{nullptr};
@@ -125,7 +124,7 @@ private:
     }
     
   };
-  mutable SG::SlotSpecificObj<IDCCacheEntry> m_eventCache ATLAS_THREAD_SAFE; // Guarded by m_cacheMutex
+  mutable SG::SlotSpecificObj<IDCCacheEntry> m_eventCache ATLAS_THREAD_SAFE;
 
   /**
    * Obtains container form the SG, if it is missing it will complain (hard-coded 3 times per job) and return nullptr