diff --git a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
index 50f2436bf5ab2b4af25fcf9b98e6c0057c4cefae..5ff518fb39e72a34955933438a83578b67f63461 100644
--- a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx
@@ -16,13 +16,13 @@ MuonCacheCreator::MuonCacheCreator(const std::string &name,ISvcLocator *pSvcLoca
   m_MdtCsmCacheKey(""),
   m_CscCacheKey(""),
   m_RpcCacheKey(""),
-  m_TgcCacheKey("")
+  m_TgcCacheKey(""),
+  m_disableWarningCheck(false)
 {
   declareProperty("MdtCsmCacheKey", m_MdtCsmCacheKey);
   declareProperty("CscCacheKey",    m_CscCacheKey);
   declareProperty("RpcCacheKey",    m_RpcCacheKey);
   declareProperty("TgcCacheKey",    m_TgcCacheKey);
-  declareProperty("DisableViewWarning", m_disableWarning);
 }
 
 MuonCacheCreator::~MuonCacheCreator() {
@@ -47,12 +47,12 @@ bool MuonCacheCreator::isInsideView(const EventContext& context) const
 
 StatusCode MuonCacheCreator::execute (const EventContext& ctx) const {
 
-  if(!m_disableWarning){
+  if(!m_disableWarningCheck and !m_disableWarning.value()){
      if(isInsideView(ctx)){
         ATH_MSG_ERROR("CacheCreator is running inside a view, this is probably a misconfiguration");
         return StatusCode::FAILURE;
      }
-     m_disableWarning = true; //only check once
+     m_disableWarningCheck = true; //only check once
   }
   // Create the MDT cache container
   auto maxHashMDTs = m_muonIdHelperTool->mdtIdHelper().stationNameIndex("BME") != -1 ? m_muonIdHelperTool->mdtIdHelper().detectorElement_hash_max() : m_muonIdHelperTool->mdtIdHelper().module_hash_max();
diff --git a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h
index 9f653f7e61e332926231c51634b71b919e696953..99be4d3e2131631f6bab62e00858d4c7ea36890f 100644
--- a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h
+++ b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h
@@ -13,6 +13,7 @@
 
 #include "MuonIdHelpers/MuonIdHelperTool.h"
 
+#include <atomic>
 
 class MuonCacheCreator : public AthReentrantAlgorithm {
  public:
@@ -40,8 +41,9 @@ protected:
   SG::WriteHandleKey<TgcRdo_Cache> m_TgcCacheKey;
   /// ID helpers
   ToolHandle<Muon::MuonIdHelperTool> m_muonIdHelperTool{this, "idHelper", 
-    "Muon::MuonIdHelperTool/MuonIdHelperTool", "Handle to the MuonIdHelperTool"};  
-  mutable bool m_disableWarning = false;
+    "Muon::MuonIdHelperTool/MuonIdHelperTool", "Handle to the MuonIdHelperTool"};
+  BooleanProperty m_disableWarning{this,"DisableViewWarning",false};
+  mutable std::atomic_bool m_disableWarningCheck;
   bool isInsideView(const EventContext&) const;
 
 };//class MuonCacheCreator
diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx
index b0ec52627aa3aced72bd84ae3f0a03b7ea4b5b3b..06d5acf038ee8943acc6e268e6c83214ea9fcc2b 100644
--- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx
@@ -58,6 +58,7 @@ void Muon::CscRDO_Decoder::getDigit(const CscRawData * rawData,
                                     Identifier& moduleId, Identifier& channelId, 
                                     double& adc, double& time) const {
 
+  std::lock_guard<std::mutex> lockGuard(m_mutex);
   // get the raw data
   uint32_t address = rawData->address();
 
@@ -75,8 +76,9 @@ void Muon::CscRDO_Decoder::getDigit(const CscRawData * rawData,
 
 
 
-Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) const
+Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) const 
 {
+  std::lock_guard<std::mutex> lockGuard(m_mutex);
   /** get the raw data */
   uint32_t address = rawData->address();
 
@@ -88,8 +90,9 @@ Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) c
   return m_rodReadOut.decodeAddress();
 }
 
-Identifier Muon::CscRDO_Decoder::channelIdentifier(const CscRawData * rawData, int j) const
+Identifier Muon::CscRDO_Decoder::channelIdentifier(const CscRawData * rawData, int j) const 
 {
+  std::lock_guard<std::mutex> lockGuard(m_mutex);
   /** get the raw data */
   uint32_t address = rawData->address();
 
diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h
index 73ccd988d094ba7b96b12afa165d3aa220e13085..e2ecf3ec9417ffd56a74c492f04ffabc05b96b61 100644
--- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h
+++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h
@@ -21,6 +21,8 @@
 #include <inttypes.h>
 #include <vector>
 #include <string>
+#include <mutex>
+
 #include "CscRODReadOut.h"
 
 class Identifier;
@@ -62,8 +64,8 @@ namespace Muon {
     double   m_samplingTime ;
     double   m_signalWidth  ;
     // the read out structure
-    mutable CscRODReadOut m_rodReadOut;
-
+    mutable CscRODReadOut m_rodReadOut ATLAS_THREAD_SAFE; // guarded by m_mutex
+    mutable std::mutex m_mutex;
   };
 }
 
diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h
index c3611f427a01d492687f7c9a7059453c4bd8c384..543ed0ef69f23a9e6577bfced38a8dfdd5b8eccd 100644
--- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h
+++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h
@@ -12,6 +12,7 @@
 #include <vector>
 #include <cmath>
 #include <string>
+#include <atomic>
 
 // TGC ROD encoder/decoder for CscRDO
 // Author Ketevi A. Assamagan
@@ -110,14 +111,14 @@ private:
   uint16_t  m_amp2;
   uint32_t  m_address;
   uint32_t  m_chamberBitValue;
-  double    m_norm;
-  
-  double   m_TIME_OFFSET; 
-  double   m_SIGNAL_WIDTH;  
-  double   m_SAMPLING_TIME; 
-  int      m_NUMBER_OF_INTEGRATION;
-  double   m_CHARGE_TO_ADC_COUNT;
-  double   m_Z0; 
+  double  m_norm;
+  	     
+  double m_TIME_OFFSET; 
+  double m_SIGNAL_WIDTH;  
+  double m_SAMPLING_TIME; 
+  int m_NUMBER_OF_INTEGRATION;
+  double m_CHARGE_TO_ADC_COUNT;
+  double m_Z0; 
 
   uint32_t m_TRIGGER_INFO[3];
 
diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx
index c7a6111777040798da62b1b96c30425d26b916ec..68838c6ab391e39523dcc3e43d6fe921b17b3327 100644
--- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx
@@ -280,7 +280,6 @@ StatusCode CscRdoToCscPrepDataTool::decode(const CscRawDataContainer* rdoContain
 
 //Hack for transition to athenaMT classes
 	CscStripPrepDataCollection * oldCollection = const_cast<CscStripPrepDataCollection*>( *it_coll );
-
 	collection = oldCollection;
 	cscHashId = collection->identifyHash();
       }
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h
index 37cfe33e5216ef787472a9e339aa88c5b384007c..28a5ba7e05f8894398058e172e36948eb4266203 100755
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h
@@ -27,7 +27,7 @@ class TgcCoinDataCnv_p2
 {
 public:
   //    TgcCoinDataCnv_p2() : m_coindataCnv(0) {}
-    TgcCoinDataCnv_p2() : m_localPosCnv(0), m_errorMxCnv(0) {}
+ TgcCoinDataCnv_p2() : m_localPosCnv(0), m_errorMxCnv(0), m_numErrsPrinted(0) {}
 
     void persToTrans( const Muon::TgcCoinData_p2 *persObj,
         Muon::TgcCoinData    *transObj,
@@ -39,7 +39,7 @@ public:
  protected:        
     LocalPositionCnv_p1   *m_localPosCnv;
     ErrorMatrixCnv_p1     *m_errorMxCnv;
-
+    unsigned int          m_numErrsPrinted;
 };
 
 #endif 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h
index fb0fe84f039a02fe2fb7fd3883c12913b2c1d6d3..e73f06ccca82d840fd4bf84bb20864f0d17165f6 100755
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h
@@ -26,7 +26,7 @@ class TgcCoinDataCnv_p3
 {
 public:
   //    TgcCoinDataCnv_p3() : m_coindataCnv(0) {}
-    TgcCoinDataCnv_p3() : m_localPosCnv(0), m_errorMxCnv(0) {}
+ TgcCoinDataCnv_p3() : m_localPosCnv(0), m_errorMxCnv(0), m_numErrsPrinted(0) {}
 
     void persToTrans( const Muon::TgcCoinData_p3 *persObj,
         Muon::TgcCoinData    *transObj,
@@ -38,7 +38,7 @@ public:
  protected:        
     LocalPositionCnv_p1   *m_localPosCnv;
     ErrorMatrixCnv_p1     *m_errorMxCnv;
-
+    unsigned int          m_numErrsPrinted;
 };
 
 #endif 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx
index 09c213de1cc35af2d9aa36465b551b2d5e98d2f3..b61c59755e34efa458bb4ac677796ecc45c46c24 100755
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx
@@ -124,9 +124,8 @@ transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p2 *persObj, M
   if (transObj->hasErrMat() )
   {
     if (! transObj->errMat().cols() || !transObj->errMat().rows()) {
-      static unsigned int numErrsPrinted=0;
-      if (numErrsPrinted<10) {
-        numErrsPrinted++;
+      if (m_numErrsPrinted<10) {
+        m_numErrsPrinted++;
         log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = ["
             <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg;
       }
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx
index d7b1e153a971019e8bfd6d7a8d971875465ad497..fcfc10a101a36f80766ee70fe949c9359316311c 100755
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx
@@ -123,9 +123,8 @@ transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p3 *persObj, M
   if (transObj->hasErrMat() )
   {
     if (! transObj->errMat().cols() || !transObj->errMat().rows()) {
-      static unsigned int numErrsPrinted=0;
-      if (numErrsPrinted<10) {
-        numErrsPrinted++;
+      if (m_numErrsPrinted<10) {
+        m_numErrsPrinted++;
         log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = ["
             <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg;
       }