diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/CMakeLists.txt b/InnerDetector/InDetConditions/SCT_ConditionsServices/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..51e227709c387265c3a2bb3a680c94656fbbee2d
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/CMakeLists.txt
@@ -0,0 +1,48 @@
+################################################################################
+# Package: SCT_ConditionsServices
+################################################################################
+
+# Declare the package name:
+atlas_subdir( SCT_ConditionsServices )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaKernel
+                          DetectorDescription/Identifier
+                          GaudiKernel
+                          InnerDetector/InDetConditions/InDetConditionsSummaryService
+                          InnerDetector/InDetConditions/SCT_ConditionsData
+                          PRIVATE
+                          Control/AthenaBaseComps
+                          Control/StoreGate
+                          Database/AthenaPOOL/AthenaPoolUtilities
+                          Database/AthenaPOOL/RDBAccessSvc
+                          Database/RegistrationServices
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          Event/EventInfo
+                          InnerDetector/InDetConditions/InDetByteStreamErrors
+                          InnerDetector/InDetConditions/SiPropertiesSvc
+                          InnerDetector/InDetDetDescr/InDetIdentifier
+                          InnerDetector/InDetDetDescr/InDetReadoutGeometry
+                          InnerDetector/InDetDetDescr/PixelGeoModel
+                          InnerDetector/InDetDetDescr/SCT_Cabling
+                          Tools/PathResolver )
+
+# External dependencies:
+find_package( Boost COMPONENTS filesystem thread system )
+find_package( CLHEP )
+find_package( COOL COMPONENTS CoolKernel )
+find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_component( SCT_ConditionsServices
+                     src/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${COOL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel Identifier GaudiKernel SCT_ConditionsData AthenaBaseComps StoreGateLib SGtests AthenaPoolUtilities GeoModelUtilities EventInfo SiPropertiesSvcLib InDetIdentifier InDetReadoutGeometry SCT_CablingLib PathResolver )
+
+# Install files from the package:
+atlas_install_headers( SCT_ConditionsServices )
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ByteStreamErrorsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ByteStreamErrorsSvc.h
index 2f7afbdfc54251a2d00fa2cbbb8ed76bf150ebc6..d2ac31daa8539eb314d999505b1f81c12e25c63c 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ByteStreamErrorsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ByteStreamErrorsSvc.h
@@ -88,6 +88,9 @@ public:
 
   virtual bool HVisOn() = 0;
 
+  virtual void setDecodedROD(const boost::uint32_t rodId) = 0;
+  virtual std::vector<boost::uint32_t> getRODOuts() const = 0;
+
 private:
 
 };
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ConfigurationConditionsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ConfigurationConditionsSvc.h
index 84df53e12a16b2d673007e33352cecaeaf9d50f5..8b937a9ad424f3ef3e195e47a35544882bb1ba60 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ConfigurationConditionsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_ConfigurationConditionsSvc.h
@@ -47,20 +47,20 @@ public:
   /** Map of link status for all modules with at least one bad link (true = good, false = bad)*/
   virtual std::map<Identifier, std::pair<bool, bool> >*  badLinks()                                                                                          = 0;
   /** Link status for a particluar module (true = good, false = bad)*/
-  virtual std::pair<bool, bool>                          badLinks(Identifier moduleId)                                                                       = 0;
+  virtual std::pair<bool, bool>                          badLinks(const Identifier & moduleId)                                                                       = 0;
 
   /** Map of chips status for all modules with at least one bad chip (packed as 1st 12 bits of unsigned int)*/
   virtual std::map<Identifier, unsigned int>*            badChips()                                                                                          = 0;  
   /** Chips status for a particular module (packed as 1st 12 bits of unsigned int)*/ 
-  virtual unsigned int                                   badChips(Identifier moduleId)                                                                       = 0;  
+  virtual unsigned int                                   badChips(const Identifier & moduleId)                                                                       = 0;  
 
   /** Set of bad strip Identifiers */ 
   virtual void                                           badStrips(std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false) = 0;  
   /** Set of bad strip Identifiers for a particular module*/
-  virtual void                                           badStrips(Identifier moduleId, std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false) = 0;
+  virtual void                                           badStrips(const Identifier & moduleId, std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false) = 0;
 
   /** Get the chip number containing a particular strip*/
-  virtual int                                            getChip(Identifier stripId) = 0;
+  virtual int                                            getChip(const Identifier & stripId) = 0;
 
 private:
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_MonitorConditionsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_MonitorConditionsSvc.h
index 40cfc62e0b7ddba6d1bea350b98049f7acadf778..e0d56c050a743ca89ba1b0abedf8cc0140b79515 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_MonitorConditionsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/SCT_ConditionsServices/ISCT_MonitorConditionsSvc.h
@@ -39,9 +39,9 @@ public:
   /// Return a list of bad stip Identifiers
   virtual void badStrips(std::set<Identifier>& strips)=0;
   /// Return a list of bad stip Identifiers for a given module
-  virtual void badStrips(Identifier moduleId, std::set<Identifier>& strips)=0;
+  virtual void badStrips(const Identifier & moduleId, std::set<Identifier>& strips)=0;
   /// Return a (space-separated) string of bad stip numbers (including hyphanated ranges) as they are written to the DB 
-  virtual std::string badStripsAsString(Identifier moduleId)=0;
+  virtual std::string badStripsAsString(const Identifier & moduleId)=0;
 
 private:
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/share/testConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsServices/share/testConfig.py
index a2ecf62931670486e874a595f078c1fe83bc0af3..be82e8973c477cf790384417dd46f4db7a2d9561 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/share/testConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/share/testConfig.py
@@ -58,30 +58,64 @@ IOVDbSvc = Service("IOVDbSvc")
 from IOVDbSvc.CondDB import conddb
 IOVDbSvc.GlobalTag="OFLCOND-FDR-01-02-00"
 IOVDbSvc.OutputLevel = 3
-test='run1'
+test='MC'
 #
 #NOTE: Testing with run2 requires presence of local sqlite file 'configTest.db'
 # available from http://sroe.web.cern.ch/sroe/configTest.db
 #
 if (test=='run1'):
-	#ToolSvc = ServiceMgr.ToolSvc
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/Chip")
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/Module")
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/MUR")
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/ROD")
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/Geog")
-	conddb.addFolder("","<db>COOLONL_SCT/COMP200</db> /SCT/DAQ/Configuration/RODMUR")
+  #ToolSvc = ServiceMgr.ToolSvc
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/ROD <tag>SctDaqConfigurationRod-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/MUR <tag>SctDaqConfigurationMur-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/RODMUR <tag>SctDaqConfigurationRodmur-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/Geog <tag>SctDaqConfigurationGeog-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/Chip <tag>SctDaqConfigurationChip-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=LOCAL</db> /SCT/DAQ/Configuration/Module <tag>SctDaqConfigurationModule-MC-06</tag><forceTimestamp>1333597198</forceTimestamp>")
+  '''
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/Chip <tag>SctDaqConfigurationChip-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/Module <tag>SctDaqConfigurationModule-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/MUR <tag>SctDaqConfigurationMur-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/ROD <tag>SctDaqConfigurationRod-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/Geog <tag>SctDaqConfigurationGeog-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Configuration/RODMUR <tag>SctDaqConfigurationRodmur-MC-06</tag> <forceTimestamp>1333597198</forceTimestamp>")
+  '''
 else:
+  '''
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/ROD <tag>SctDaqConfigRod-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/MUR <tag>SctDaqConfigMur-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/RODMUR <tag>SctDaqConfigRodmur-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/Geog <tag>SctDaqConfigGeog-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/Chip <tag>SctDaqConfigChip-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool.db;dbname=OFLP200</db> /SCT/DAQ/Config/Module <tag>SctDaqConfigModule-MC-06</tag><forceRunNumber>20</forceRunNumber>")
+  
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/ROD <tag>SctDaqConfigRod-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/MUR <tag>SctDaqConfigMur-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/RODMUR <tag>SctDaqConfigRodmur-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/Geog <tag>SctDaqConfigGeog-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/Chip <tag>SctDaqConfigChip-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>sqlite://none;schema=/tmp/sroe/mycool7.db;dbname=OFLP200</db> /SCT/DAQ/Config/Module <tag>SctDaqConfigModule-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  '''
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/Chip <tag>SctDaqConfigChip-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/Module <tag>SctDaqConfigModule-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/MUR <tag>SctDaqConfigMur-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/ROD <tag>SctDaqConfigRod-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/Geog <tag>SctDaqConfigGeog-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  conddb.addFolder("","<db>COOLOFL_SCT/OFLP200</db> /SCT/DAQ/Config/RODMUR <tag>SctDaqConfigRodmur-MC-06</tag><forceRunNumber>200805</forceRunNumber>")
+  
+  from SCT_Cabling.SCT_CablingConf import SCT_CablingSvc
+  ToolSvc = ServiceMgr.ToolSvc
+  ServiceMgr+=SCT_CablingSvc()
+  ServiceMgr.SCT_CablingSvc.DataSource='COOLVECTOR'
+
+'''
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/Chip")
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/Module")
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/ROD")
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/MUR")
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/RODMUR")
   conddb.addFolder("","<db>sqlite://none;schema=configTest.db;dbname=COOLTEST</db> /SCT/DAQ/Config/Geog")
-  from SCT_Cabling.SCT_CablingConf import SCT_CablingSvc
-  ToolSvc = ServiceMgr.ToolSvc
-  ServiceMgr+=SCT_CablingSvc()
-  ServiceMgr.SCT_CablingSvc.DataSource='COOLVECTOR'
+'''
+
 
 from SCT_ConditionsServices.SCT_ConditionsServicesConf import SCT_ConfigurationConditionsSvc
 MyConfigConditions = SCT_ConfigurationConditionsSvc("MyConfigConditions")
@@ -93,16 +127,18 @@ MyConfigTestAlg.ConfigConditions = MyConfigConditions
 job += MyConfigTestAlg
 
 import AthenaCommon.AtlasUnixGeneratorJob
-#runNumber=9682
-timeStamp=1228142560
-if (test!='run1'):
-  timeStamp=1688045568
+ServiceMgr.EventSelector.RunNumber =200805
+ServiceMgr.EventSelector.InitialTimeStamp=1333597198
+#runNumber=2000805
+#timeStamp=1228142560
+#if (test!='run1'):
+#  timeStamp=1333597198
 
 #ServiceMgr.EventSelector.RunNumber  = runNumber
 #import time, calendar
 #time in seconds , now
 #ServiceMgr.EventSelector.InitialTimeStamp  = calendar.timegm(time.gmtime())
-ServiceMgr.EventSelector.InitialTimeStamp  = timeStamp
+#ServiceMgr.EventSelector.InitialTimeStamp  = timeStamp
 theApp.EvtMax                              = 1
 
 ServiceMgr.MessageSvc.Format           = "% F%40W%S%7W%R%T %0W%M"
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.cxx
index 93a9203f37e3d0ef3c8b33b91c34e16de61a370b..ac5d772c1f240f338a81faf172d85bd7b66cff67 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.cxx
@@ -194,12 +194,16 @@ void
 SCT_ByteStreamErrorsSvc::handle(const Incident& inc) {
   if ((inc.type() == "BeginRun") && (m_useRXredundancy)) {
     m_rxRedundancy->clear();
+    m_rodDecodeStatuses.clear();
 
     std::vector<boost::uint32_t> listOfRODs;
     m_cabling->getAllRods(listOfRODs);
     std::vector<boost::uint32_t>::iterator rodIter = listOfRODs.begin();
     std::vector<boost::uint32_t>::iterator rodEnd = listOfRODs.end();
     for (; rodIter != rodEnd; ++rodIter) {
+      // Store ROD ID and set all RODs as not decoded
+      m_rodDecodeStatuses.insert(std::pair<boost::uint32_t, bool>(*rodIter, false));
+
       std::vector<IdentifierHash> listOfHashes;
       m_cabling->getHashesForRod(listOfHashes,*rodIter);
       std::vector<IdentifierHash>::iterator hashIt = listOfHashes.begin();
@@ -224,6 +228,10 @@ SCT_ByteStreamErrorsSvc::handle(const Incident& inc) {
     m_numRODsHVon=0;
     m_numRODsTotal=0;
     if (m_disableRODs) disableRODs();
+    // Set all RODs as not decoded
+    for(auto& rodDecodeStatus: m_rodDecodeStatuses) {
+      rodDecodeStatus.second = false;
+    }
   }
   return;
 }
@@ -740,4 +748,23 @@ SCT_ByteStreamErrorsSvc::getNumberOfErrors(int errorType) {
   return 0;
 }
 
+void
+SCT_ByteStreamErrorsSvc::setDecodedROD(const boost::uint32_t rodId) {
+  // If the rodId is found, set the ROD as decoded.
+  auto rodDecodeStatus = m_rodDecodeStatuses.find(rodId);
+  if(rodDecodeStatus!=m_rodDecodeStatuses.end()) {
+    rodDecodeStatus->second = true;
+  }
+}
 
+std::vector<boost::uint32_t>
+SCT_ByteStreamErrorsSvc::getRODOuts() const {
+  std::vector<boost::uint32_t> rodOuts;
+  // Create a vector of undecoded RODs as ROD outs
+  for(auto& rodDecodeStatus: m_rodDecodeStatuses) {
+    if(not rodDecodeStatus.second) {
+      rodOuts.push_back(rodDecodeStatus.first);
+    }
+  }
+  return rodOuts;
+}
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.h
index cfe970836adfc85863fc00a378bc11e717e6a6ff..491fb7b6ebd561cdde9040e927773138e3a589fd 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ByteStreamErrorsSvc.h
@@ -95,6 +95,9 @@ public:
 
   virtual void disableRODs();
 
+  virtual void setDecodedROD(const boost::uint32_t rodId);
+  virtual std::vector<boost::uint32_t> getRODOuts() const;
+
 private:
 
   const SCT_ID* m_sct_id;
@@ -152,6 +155,8 @@ private:
 
   bool m_disableRODs;
   double m_rodFailureFraction;
+
+  std::map<boost::uint32_t, bool> m_rodDecodeStatuses;
 };
 
 #endif
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.cxx
index 3a28b269f661b956c2ff7bcc2400c4060873a0a8..17b02d2c9c2b8237df652cc1c844a564a8e1bf00 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.cxx
@@ -7,10 +7,6 @@
 // STL includes
 #include <vector>
 #include <algorithm>
-#include <iostream>
-#include <sstream>
-#include "boost/lexical_cast.hpp"
-
 // Gaudi includes
 #include "GaudiKernel/StatusCode.h"
 
@@ -27,6 +23,7 @@
 // Local includes
 #include "SCT_ReadoutTool.h"
 #include "SCT_Chip.h"
+#include "SCT_Cabling/SCT_SerialNumber.h"
 
 // Static folder names 
 static const std::string coolChannelFolderName("/SCT/DAQ/Configuration/Chip");
@@ -66,30 +63,15 @@ SCT_ConfigurationConditionsSvc::SCT_ConfigurationConditionsSvc( const std::strin
 
 // Initialize
 StatusCode SCT_ConfigurationConditionsSvc::initialize(){
-  msg(MSG:: INFO)<< "Initializing configuration" << endreq;
-
-  // Retrieve cabling service
-  if (m_cablingSvc.retrieve().isFailure())                return msg(MSG:: ERROR)<< "Can't get the cabling service." << endreq, StatusCode::FAILURE;
-
-  // Retrieve detector store
-  if (m_detStore.retrieve().isFailure())                  return msg(MSG:: FATAL)<< "Detector service  not found !" << endreq, StatusCode::FAILURE;
-
-  // Retrieve SCT Detector Manager 
-  if (m_detStore->retrieve(m_pManager,"SCT").isFailure()) return msg(MSG:: ERROR)<< "SCT mgr failed to retrieve" << endreq, StatusCode::FAILURE;
-  
-  // Retrieve SCT ID helper
-  if (m_detStore->retrieve(m_pHelper, "SCT_ID").isFailure()) return msg(MSG::FATAL) << "Could not get SCT ID helper" << endreq, StatusCode::FAILURE;
-
-  // Retrieve readout tools
-  if (m_readoutTool.retrieve().isFailure())               return msg(MSG:: ERROR)<< "Could not retrieve SCT_ReadoutTool" << endreq, StatusCode::FAILURE;
-
-  // Retrieve IOV service
-  if (m_IOVSvc.retrieve().isFailure())                    return msg(MSG:: ERROR)<< "Failed to retrieve IOVSvc " << endreq, StatusCode::FAILURE;
-
-  // Retrieve IOVDb service
-  if (m_IOVDbSvc.retrieve().isFailure())                  return msg(MSG:: ERROR)<< "Failed to retrieve IOVDbSvc " << endreq, StatusCode::FAILURE;
-
-  // Assign memory for structres
+  ATH_MSG_INFO( "Initializing configuration" );
+  ATH_CHECK(m_cablingSvc.retrieve());
+  ATH_CHECK(m_detStore.retrieve());
+  ATH_CHECK(m_detStore->retrieve(m_pManager,"SCT"));
+  ATH_CHECK(m_detStore->retrieve(m_pHelper, "SCT_ID"));
+  ATH_CHECK(m_readoutTool.retrieve());
+  ATH_CHECK(m_IOVSvc.retrieve());
+  ATH_CHECK(m_IOVDbSvc.retrieve());
+    // Assign memory for structres
   m_badChannelIds =  new std::set<Identifier>;
   m_badModuleIds  =  new std::set<Identifier>;
   m_badWaferIds   =  new std::set<Identifier>;
@@ -110,7 +92,7 @@ StatusCode SCT_ConfigurationConditionsSvc::initialize(){
 
 // Finalize
 StatusCode SCT_ConfigurationConditionsSvc::finalize(){
-  msg(MSG:: INFO)<< "Configuration finalize" << endreq;
+  ATH_MSG_INFO( "Configuration finalize" );
 
   if (m_badChannelIds) delete m_badChannelIds; 
   if (m_badModuleIds)  delete m_badModuleIds; 
@@ -123,7 +105,6 @@ StatusCode SCT_ConfigurationConditionsSvc::finalize(){
 
 // Query interfaces.
 StatusCode SCT_ConfigurationConditionsSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) {
-
   if ( ISCT_ConfigurationConditionsSvc::interfaceID().versionMatch(riid) ) {
     *ppvInterface = this;
   } else if ( ISCT_ConditionsSvc::interfaceID().versionMatch(riid) ) {
@@ -182,7 +163,7 @@ StatusCode SCT_ConfigurationConditionsSvc::fillData(int& /*i*/ , std::list<std::
     if(fillChannelData().isFailure()) return StatusCode::FAILURE;
   }
   // The bad channel list contains all the information
-  m_filled = (m_badChannelIds->size() != 0);
+  m_filled = (not m_badChannelIds->empty());
   return StatusCode::SUCCESS;
 }
 
@@ -214,7 +195,6 @@ StatusCode SCT_ConfigurationConditionsSvc::fillChannelData(){
   const uint mask1Index=run1?uint(MASK1_1):uint(MASK1_2);
   const uint mask2Index=run1?uint(MASK2_1):uint(MASK2_2);
   const uint mask3Index=run1?uint(MASK3_1):uint(MASK3_2);
-  
   //
   // Clear previous information at callback
   m_badChannelIds->clear();
@@ -225,10 +205,10 @@ StatusCode SCT_ConfigurationConditionsSvc::fillChannelData(){
   if (retrieveFolder(m_dataChannel, channelFolderName).isFailure()) {
     return msg(MSG:: ERROR)<< "Could not fill channel configuration data" << endreq, StatusCode::FAILURE;
   } else {
-    msg(MSG:: INFO)<< "fillChannelData: IOV callback resulted in a Chip CondAttrListVec of size " << m_dataChannel->size() << endreq;
+    ATH_MSG_INFO( "fillChannelData: IOV callback resulted in a Chip CondAttrListVec of size " << m_dataChannel->size());
   }
   // Loop over modules (i.e groups of 12 chips) in DB folder 
-  const unsigned int nChips(12);
+  constexpr unsigned int nChips(12);
   CondAttrListVec::const_iterator modItr(m_dataChannel->begin());
   CondAttrListVec::const_iterator modEnd(m_dataChannel->end());
   for (;modItr != modEnd; modItr += nChips) {
@@ -237,8 +217,8 @@ StatusCode SCT_ConfigurationConditionsSvc::fillChannelData(){
     const unsigned int truncatedSerialNumber(run1?(modItr->first - 1):(modItr->first));
     const IdentifierHash& hash = m_cablingSvc->getHashFromSerialNumber(truncatedSerialNumber);
     if (not hash.is_valid()) continue;
-    Identifier  waferId(m_pHelper->wafer_id(hash));
-    Identifier  moduleId(m_pHelper->module_id(waferId));
+    const Identifier  waferId(m_pHelper->wafer_id(hash));
+    const Identifier  moduleId(m_pHelper->module_id(waferId));
     // Don't need to bother checking chips if the module is already bad
     // Commented out until fully tested
     //if (m_badModuleIds->find(moduleId) == m_badModuleIds->end()) continue;
@@ -252,52 +232,48 @@ StatusCode SCT_ConfigurationConditionsSvc::fillChannelData(){
     }
     // Loop over chips within module
     CondAttrListVec::const_iterator channelItr(modItr);
-    CondAttrListVec::const_iterator channelEnd(modItr + nChips);
+    const CondAttrListVec::const_iterator channelEnd(modItr + nChips);
     std::vector<SCT_Chip*> chipsInMod;
     chipsInMod.reserve(12);
     
     for(; channelItr != channelEnd; ++channelItr){
       // Get chip id, config and masks and store as SCT_Chip object
       // Can get AttributeList from second (see http://lcgapp.cern.ch/doxygen/CORAL/CORAL_1_9_3/doxygen/html/classcoral_1_1_attribute_list.html)
-      short id      = run1?(channelItr->second[chipIndex].data<short>()):(channelItr->second[chipIndex].data<unsigned char>());
-      short config  = run1?(channelItr->second[configIndex].data<short>()):(channelItr->second[configIndex].data<unsigned short>());
-      int mask0     = run1?(channelItr->second[mask0Index].data<int>()):(channelItr->second[mask0Index].data<uint>());
-      int mask1     = run1?(channelItr->second[mask1Index].data<int>()):(channelItr->second[mask1Index].data<uint>());
-      int mask2     = run1?(channelItr->second[mask2Index].data<int>()):(channelItr->second[mask2Index].data<uint>());  // (=noMask, declared as static int at top of this file)
-      int mask3     = run1?(channelItr->second[mask3Index].data<int>()):(channelItr->second[mask3Index].data<uint>());
+      const short id      = run1?(channelItr->second[chipIndex].data<short>()):(channelItr->second[chipIndex].data<unsigned char>());
+      const short config  = run1?(channelItr->second[configIndex].data<short>()):(channelItr->second[configIndex].data<unsigned short>());
+      const int mask0     = run1?(channelItr->second[mask0Index].data<int>()):(channelItr->second[mask0Index].data<uint>());
+      const int mask1     = run1?(channelItr->second[mask1Index].data<int>()):(channelItr->second[mask1Index].data<uint>());
+      const int mask2     = run1?(channelItr->second[mask2Index].data<int>()):(channelItr->second[mask2Index].data<uint>());  // (=noMask, declared as static int at top of this file)
+      const int mask3     = run1?(channelItr->second[mask3Index].data<int>()):(channelItr->second[mask3Index].data<uint>());
       chipsInMod.push_back(new SCT_Chip(id, config, mask0, mask1, mask2, mask3));
     }
     // Check the module readout to look for bypassed chips, disabled links etc
     if (m_readoutTool->determineReadout(moduleId, chipsInMod, link0ok, link1ok).isFailure()) return StatusCode::FAILURE; 
     // Loop over chips again now know whether they're in the readout
-    std::vector<SCT_Chip*>::const_iterator chipItr(chipsInMod.begin());
-    std::vector<SCT_Chip*>::const_iterator chipEnd(chipsInMod.end());
     std::vector<int> badStripsVec;
     unsigned int chipStatusWord(0);
-    for(; chipItr != chipEnd; ++chipItr){
+    for(const auto & thisChip:chipsInMod){
       // Bad strips (only need to do this if at least one bad channel)
-      if ((*chipItr)->numberOfMaskedChannels() != 0){
+      if (thisChip->numberOfMaskedChannels() != 0){
         // Add bad stips to vector
         badStripsVec.clear();
-        (*chipItr)->appendBadStripsToVector(badStripsVec);
-        // Loop over bad stips and insert strip ID into set
-        std::vector<int>::const_iterator stripItr(badStripsVec.begin());
-        std::vector<int>::const_iterator stripEnd(badStripsVec.end());
-        for(;stripItr != stripEnd; ++stripItr){
-          Identifier stripId(getStripId(truncatedSerialNumber, (*chipItr)->id(), *stripItr));
+        thisChip->appendBadStripsToVector(badStripsVec);
+        // Loop over bad strips and insert strip ID into set
+        for(const auto & thisBadStrip:badStripsVec){
+          Identifier stripId(getStripId(truncatedSerialNumber, thisChip->id(), thisBadStrip));
           // If in rough order, may be better to call with itr of previous insertion as a suggestion    
           if (stripId.is_valid()) m_badChannelIds->insert(stripId);
         }
       }
       // Bad chips (= all strips bad) bitpacked
       // Should only do this for modules with at least one chip bad?
-      if ((*chipItr)->numberOfMaskedChannels() == stripsPerChip) chipStatusWord |= (1<<(*chipItr)->id());
+      if (thisChip->numberOfMaskedChannels() == stripsPerChip) chipStatusWord |= (1<<thisChip->id());
     }
     // Store chip status if not all good (==0)
     if (chipStatusWord != 0) (*m_badChips)[moduleId] = chipStatusWord;
     // Clear up memory associated with chips    
-    for (chipItr = chipsInMod.begin(); chipItr != chipEnd; ++chipItr){
-      delete *chipItr;
+    for (const auto & thisChip:chipsInMod){
+      delete thisChip;
     }
   }
 
@@ -324,9 +300,8 @@ StatusCode SCT_ConfigurationConditionsSvc::fillModuleData(){
   if (retrieveFolder(m_dataModule, moduleFolderName).isFailure()) {
     return msg(MSG:: ERROR)<< "Could not fill module configuration data" << endreq, StatusCode::FAILURE;
   } else {
-    msg(MSG:: INFO)<< "fillModuleData: IOV callback resulted in a CondAttrListVec of size " << m_dataModule->size() << endreq;
+    ATH_MSG_INFO( "fillModuleData: IOV callback resulted in a CondAttrListVec of size " << m_dataModule->size() );
   }
-
   // Loop over modules in DB folder
   CondAttrListVec::const_iterator pModule(m_dataModule->begin());
   CondAttrListVec::const_iterator pLastModule(m_dataModule->end());
@@ -345,14 +320,11 @@ StatusCode SCT_ConfigurationConditionsSvc::fillModuleData(){
     ++totalNumberOfValidModules;
     IdentifierHash oppWaferHash;
     m_pHelper->get_other_side(m_cablingSvc->getHashFromSerialNumber(truncatedSerialNumber) , oppWaferHash);
-    Identifier     oppWaferId(m_pHelper->wafer_id(oppWaferHash));
-    Identifier     moduleId(m_pHelper->module_id(waferId));
-
+    const Identifier     oppWaferId(m_pHelper->wafer_id(oppWaferHash));
+    const Identifier     moduleId(m_pHelper->module_id(waferId));
     // Get AttributeList from second (see http://lcgapp.cern.ch/doxygen/CORAL/CORAL_1_9_3/doxygen/html/classcoral_1_1_attribute_list.html)
     // and get module info from this.  Bad module has a -ve group.
-    
-    short group=pModule->second[groupIndex].data<short>();
-
+    const short group=pModule->second[groupIndex].data<short>();
     if (group < 0) { 
       // Insert module/wafer ID into set of bad modules/wafers IDs
       m_badModuleIds->insert(moduleId);
@@ -360,14 +332,12 @@ StatusCode SCT_ConfigurationConditionsSvc::fillModuleData(){
       m_badWaferIds->insert(oppWaferId);
     }
   }  
-
   // No longer need the conditions folder as stored locally
   m_IOVDbSvc->dropObject(moduleFolderName,true); 
-
   const unsigned int totalBad(m_badModuleIds->size());
-  msg(MSG:: INFO)<< "Total number of module identifiers is " << totalNumberOfModules << endreq;
-  msg(MSG:: INFO)<< "Total number of modules also found in the cabling is " << totalNumberOfValidModules << endreq;
-  msg(MSG:: INFO)<< "Total number of bad module identifiers is " << totalBad << endreq;    
+  ATH_MSG_INFO( "Total number of module identifiers is " << totalNumberOfModules );
+  ATH_MSG_INFO( "Total number of modules also found in the cabling is " << totalNumberOfValidModules );
+  ATH_MSG_INFO( "Total number of bad module identifiers is " << totalBad );    
   return StatusCode::SUCCESS;  
 }
 
@@ -379,12 +349,9 @@ bool SCT_ConfigurationConditionsSvc::filled() const{
 // Get a DB folder
 StatusCode SCT_ConfigurationConditionsSvc::retrieveFolder(const DataHandle<CondAttrListVec> &pDataVec, const std::string & folderName){
   if (not m_detStore) return (msg(MSG:: FATAL) << "The detector store pointer is NULL" << endreq), StatusCode::FAILURE;
-
   if (m_detStore->retrieve(pDataVec, folderName).isFailure()) 
     return (msg(MSG:: FATAL) << "Could not retrieve AttrListVec for " << folderName << endreq), StatusCode::FAILURE;
-
-  if (0 == pDataVec->size()) return (msg(MSG:: FATAL) << "This folder's data set appears to be empty: " << folderName << endreq), StatusCode::FAILURE;
-
+  if (0==pDataVec->size()) return (msg(MSG:: FATAL) << "This folder's data set appears to be empty: " << folderName << endreq), StatusCode::FAILURE;
   return StatusCode::SUCCESS;
 }
 
@@ -434,7 +401,7 @@ StatusCode SCT_ConfigurationConditionsSvc::fillLinkStatus() {
   if (retrieveFolder(m_dataMur, murFolderName).isFailure()) {
     return msg(MSG:: ERROR)<< "Could not fill MUR configuration data" << endreq, StatusCode::FAILURE;
   } else {
-    msg(MSG:: INFO)<< "fillLinkStatus: IOV callback resulted in a MUR CondAttrListColl of size " << m_dataMur->size() << endreq;
+    ATH_MSG_INFO( "fillLinkStatus: IOV callback resulted in a MUR CondAttrListColl of size " << m_dataMur->size() );
   }
   enum RUN1_INDICES{PK, FOREIGN_KEY, MUR_1, MODULE_1, MODULEID_1, RMODULEID_1, RX0FIBRE_1, RX1FIBRE_1, TXFIBRE_1};
   enum RUN2_INDICES{MUR_2, MODULE_2, MODULEID_2, RMODULEID_2, RX0FIBRE_2, RX1FIBRE_2, TXFIBRE_2};
@@ -450,14 +417,14 @@ StatusCode SCT_ConfigurationConditionsSvc::fillLinkStatus() {
   for (; pMur != pLastMur; ++pMur) {
     // Check for null values
     if (pMur->second[snIndex].isNull()) continue;
-    long long serialNumber     = pMur->second[snIndex].data<long long>();
-    int truncatedSerialNumber  = truncateSerialNumber(serialNumber);    
-    const IdentifierHash& hash = m_cablingSvc->getHashFromSerialNumber(truncatedSerialNumber);
+    const long long ullSerialNumber     = pMur->second[snIndex].data<long long>();
+    const SCT_SerialNumber serialNumber(ullSerialNumber);  
+    if (not serialNumber.is_valid()) continue;  
+    const IdentifierHash& hash = m_cablingSvc->getHashFromSerialNumber(serialNumber.to_uint());
     if (not hash.is_valid()) continue;
 
     Identifier  waferId(m_pHelper->wafer_id(hash));
     Identifier  moduleId(m_pHelper->module_id(waferId));
-
     int link0 = run1?(pMur->second[link0Index].data<int>()):(pMur->second[link0Index].data<unsigned char>());
     int link1 = run1?(pMur->second[link1Index].data<int>()):(pMur->second[link1Index].data<unsigned char>());
 
@@ -465,23 +432,16 @@ StatusCode SCT_ConfigurationConditionsSvc::fillLinkStatus() {
     if (link0 == badLink or link1 == badLink) {
       (*m_badLinks)[moduleId] = std::make_pair((link0!=badLink), (link1!=badLink));
     }
-
   }
-
   // No longer need the conditions folder as stored locally
   m_IOVDbSvc->dropObject(murFolderName,true); 
   return StatusCode::SUCCESS;
 }
 
-// Truncate a serial number
-int SCT_ConfigurationConditionsSvc::truncateSerialNumber(long long serialNumber) {
-  std::string snString = boost::lexical_cast<std::string>(serialNumber);
-  return boost::lexical_cast<int>(snString.substr(5));
-}
 
 // Check if a strip is within a bad module
 bool SCT_ConfigurationConditionsSvc::isStripInBadModule(const Identifier& stripId){
-  Identifier moduleId(m_pHelper->module_id(m_pHelper->wafer_id(stripId)));
+  const Identifier moduleId(m_pHelper->module_id(m_pHelper->wafer_id(stripId)));
   return (m_badModuleIds->find(moduleId) != m_badModuleIds->end());
 }
 
@@ -492,14 +452,14 @@ bool SCT_ConfigurationConditionsSvc::isWaferInBadModule(const Identifier& waferI
 }
 
 // Find the chip number containing a particular strip Identifier
-int SCT_ConfigurationConditionsSvc::getChip(Identifier stripId) {
+int SCT_ConfigurationConditionsSvc::getChip(const Identifier & stripId) {
 
   // Find side and strip number
-  int side(m_pHelper->side(stripId));
+  const int side(m_pHelper->side(stripId));
   int strip(m_pHelper->strip(stripId));
 
   // Check for swapped readout direction
-  IdentifierHash waferHash = m_pHelper->wafer_hash(m_pHelper->wafer_id(stripId));
+  const IdentifierHash waferHash = m_pHelper->wafer_hash(m_pHelper->wafer_id(stripId));
   const InDetDD::SiDetectorElement* pElement = m_pManager->getDetectorElement(waferHash);
   if (! pElement){
      msg(MSG:: FATAL)<< "Element pointer is NULL in 'badStrips' method" << endreq;
@@ -511,9 +471,8 @@ int SCT_ConfigurationConditionsSvc::getChip(Identifier stripId) {
   return (side==0 ? strip/stripsPerChip : strip/stripsPerChip + 6);
 }
 
-void SCT_ConfigurationConditionsSvc::badStrips(Identifier moduleId,  std::set<Identifier>& strips, bool ignoreBadModules, bool ignoreBadChips) {
+void SCT_ConfigurationConditionsSvc::badStrips(const Identifier & moduleId,  std::set<Identifier>& strips, bool ignoreBadModules, bool ignoreBadChips) {
   // Bad strips for a given module
-
   if (ignoreBadModules) {
     // Ignore strips in bad modules
     if (m_badModuleIds->find(moduleId) != m_badModuleIds->end()) return;    
@@ -534,13 +493,13 @@ void SCT_ConfigurationConditionsSvc::badStrips(Identifier moduleId,  std::set<Id
   }
 }
        
-std::pair<bool, bool> SCT_ConfigurationConditionsSvc::badLinks(Identifier moduleId) {
+std::pair<bool, bool> SCT_ConfigurationConditionsSvc::badLinks(const Identifier & moduleId) {
   // Bad links for a given module
   std::map<Identifier, std::pair<bool, bool> >::const_iterator linkItr(m_badLinks->find(moduleId));
   return ((linkItr != m_badLinks->end()) ? (*linkItr).second : std::make_pair(true,true));
 }
 
-unsigned int SCT_ConfigurationConditionsSvc::badChips(Identifier moduleId) {
+unsigned int SCT_ConfigurationConditionsSvc::badChips(const Identifier & moduleId) {
   // Bad chips for a given module
   std::map<Identifier, unsigned int>::const_iterator chipItr(m_badChips->find(moduleId));  
   return ((chipItr != m_badChips->end()) ? (*chipItr).second : static_cast<unsigned int>(0));
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.h
index dcef0bc8b79f1aedb4275ed86fb6ac4f107f50e9..9b8347515092d3990ca1f3cd2460f7172c94e7c8 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ConfigurationConditionsSvc.h
@@ -13,10 +13,13 @@
 
 // STL includes
 #include <string>
-#include <set>
-#include <list>
-#include <map>
-#include <utility>
+
+// These are in the base class header
+//#include <set>
+//#include <list>
+//#include <map>
+//this is in map
+//#include <utility>
 
 // Gaudi includes
 #include "GaudiKernel/ServiceHandle.h"
@@ -94,17 +97,17 @@ public:
   /**List of bad strips*/
   virtual void                          badStrips(std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false); //  { return m_badChannelIds; }
   /**List of bad strips for a given module*/
-  virtual void                          badStrips(Identifier moduleId, std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false);
+  virtual void                          badStrips(const Identifier & moduleId , std::set<Identifier>& strips, bool ignoreBadModules = false, bool ignoreBadChips = false);
   /**List of bad links*/
-  virtual std::pair<bool, bool>         badLinks(Identifier moduleId);                        
+  virtual std::pair<bool, bool>         badLinks(const Identifier & moduleId);                        
   /**Bad links for a given module*/
   virtual std::map<Identifier, std::pair<bool, bool> >* badLinks() {return m_badLinks;}
   /**List of bad chips*/
   virtual std::map<Identifier, unsigned int>*           badChips() {return m_badChips;}
   /**Bad chips for a given module*/
-  virtual unsigned int                  badChips(Identifier moduleId);
+  virtual unsigned int                  badChips(const Identifier & moduleId);
   /** Get the chip number containing a particular strip*/
-  int                                   getChip(Identifier stripId);
+  int                                   getChip(const Identifier & stripId);
 
 private:
   std::set<Identifier>*                 m_badChannelIds;                 //!< Set of bad strip identifiers (not those in bad strips)
@@ -140,8 +143,7 @@ private:
   bool                                  isStripInBadModule(const Identifier& stripId);
   /** Is a wafer in a bad module*/
   bool                                  isWaferInBadModule(const Identifier& waferId);
-  /** Truncate a module serial nmuber*/
-  int                                   truncateSerialNumber(long long serialNumber);
+  
   ///** Get the chip number containing a particular strip*/
   //int                                   getChip(Identifier stripId);
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.cxx
index 2529d16d8d4302d4454c459fc89647e4e4be6428..b3c83672664dfbf65d6c898613256ce305df8875 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.cxx
@@ -46,7 +46,6 @@
 #include <sstream>
 #include <iostream>
 #include <istream>
-#include <boost/lexical_cast.hpp>
 
 using std::string;
 using SCT_ConditionsServices::castId;
@@ -272,26 +271,25 @@ SCT_MonitorConditionsSvc::addDefect(const string& defectlist,const int defectBeg
     return createDefectString(defectBeginChannel,defectEndChannel);
   }
   // adding another Defect in DefectList
-  std::ostringstream defect;
-  defect << defectlist << " " << defectBeginChannel;
+  std::string defect= defectlist + " " +std::to_string( defectBeginChannel);
   if (defectBeginChannel==defectEndChannel){
-     defect << " ";
+     defect+= " ";
   } else {
-    defect << "-" << defectEndChannel << " ";
+    defect+= "-" +std::to_string( defectEndChannel) + " ";
   }
-  return defect.str();
+  return defect;
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////
 std::string
 SCT_MonitorConditionsSvc::createDefectString(const int defectBeginChannel,const int defectEndChannel) const{
-  std::ostringstream defect;
-  defect << " " << defectBeginChannel;
+  std::string defect(" ");
+  defect += std::to_string(defectBeginChannel);
   if (defectBeginChannel!=defectEndChannel) {
-    defect << "-" << defectEndChannel;
+    defect += "-" + std::to_string(defectEndChannel);
   }
-  defect << " ";
-  return defect.str();
+  defect += " ";
+  return defect;
 }
 StatusCode 
 SCT_MonitorConditionsSvc::setBasicListValues(coral::AttributeList & attrList0,
@@ -578,11 +576,11 @@ bool SCT_MonitorConditionsSvc::inRange(const int theNumber, const std::string &
   std::string::size_type p = stringRange.find(s_separator);
   if (p != std::string::npos) { //its a range
     std::string::size_type len1(p++), len2(stringRange.size()-p);
-    int min = boost::lexical_cast<int>(stringRange.substr(0,len1));
-    int max = boost::lexical_cast<int>(stringRange.substr(p,len2));
+    int min = std::stoi(stringRange.substr(0,len1));
+    int max = std::stoi(stringRange.substr(p,len2));
     return inRange(theNumber, min, max);
   } else { //assume its a single number
-    return boost::lexical_cast<int>(stringRange) == theNumber;
+    return std::stoi(stringRange) == theNumber;
   }
 }
 
@@ -613,12 +611,12 @@ SCT_MonitorConditionsSvc::nBlock(const int theNumber, const std::string& stringR
   std::string::size_type p=stringRange.find(s_separator);
   if (p!=std::string::npos){ //its a range
     std::string::size_type len1(p++), len2(stringRange.size()-p);
-    int min=boost::lexical_cast<int>(stringRange.substr(0,len1));
-    int max=boost::lexical_cast<int>(stringRange.substr(p,len2));
+    int min=std::stoi(stringRange.substr(0,len1));
+    int max=std::stoi(stringRange.substr(p,len2));
     if ( inRange(theNumber, min, max) )
       ndefect = max-min+one;
   } else { //assume its a single number
-    if ( boost::lexical_cast<int>(stringRange) == theNumber )
+    if ( std::stoi(stringRange) == theNumber )
       ndefect = 0;
   }
   return ndefect;
@@ -648,8 +646,8 @@ SCT_MonitorConditionsSvc::nBlock(const std::string& stringRange) const{
   std::string::size_type p = stringRange.find(s_separator);
   if (p != std::string::npos){ //its a range
     std::string::size_type len1(p++), len2(stringRange.size()-p);
-    int min=boost::lexical_cast<int>(stringRange.substr(0,len1));
-    int max=boost::lexical_cast<int>(stringRange.substr(p,len2));
+    int min=std::stoi(stringRange.substr(0,len1));
+    int max=std::stoi(stringRange.substr(p,len2));
     ndefect = max-min+one;
   } else { //assume its a single number
     ndefect = one;
@@ -680,10 +678,7 @@ SCT_MonitorConditionsSvc::inRange(const int x, const int min, const int max) con
 }
 // ===========================================================================
 
-int 
-SCT_MonitorConditionsSvc::stringToInt(const std::string& s) const {
-    return atoi(s.c_str());  
-}
+
 
 
 
@@ -864,7 +859,7 @@ SCT_MonitorConditionsSvc::no_module(const Identifier& id) const{
 //////////////////////////////////////////////////////////////////////////////
 
 std::string 
-SCT_MonitorConditionsSvc::badStripsAsString(Identifier moduleId) {
+SCT_MonitorConditionsSvc::badStripsAsString(const Identifier & moduleId) {
    return getList(moduleId);
 }
 
@@ -881,7 +876,7 @@ SCT_MonitorConditionsSvc::badStrips(std::set<Identifier>& strips) {
 }
 
 void 
-SCT_MonitorConditionsSvc::badStrips(Identifier moduleId, std::set<Identifier>& strips) {
+SCT_MonitorConditionsSvc::badStrips(const Identifier & moduleId, std::set<Identifier>& strips) {
   // Set of bad strip Identifers for a given module
   // Get defect string and check it is sensible, i.e. non-empty and contains numbers
   std::string defectStr = getList(moduleId);
@@ -931,22 +926,22 @@ void SCT_MonitorConditionsSvc::expandRange(const std::string& rangeStr, std::set
   if (sepPos != std::string::npos) { 
     // Extract min and max
     std::string::size_type len1(sepPos++), len2(rangeStr.size()-sepPos);
-    int min = boost::lexical_cast<int>(rangeStr.substr(0,len1));
-    int max = boost::lexical_cast<int>(rangeStr.substr(sepPos,len2));
+    int min = std::stoi(rangeStr.substr(0,len1));
+    int max = std::stoi(rangeStr.substr(sepPos,len2));
     // Add all strips in range to list
     while (min != (max+1)) rangeList.insert(min++);
   } else { 
     // Assume single number
-    rangeList.insert(boost::lexical_cast<int>(rangeStr));
+    rangeList.insert(std::stoi(rangeStr));
   }  
 }
 
 //////////////////////////////////////////////////////////////////////////////
-std::string SCT_MonitorConditionsSvc::deadStripsAsString(Identifier moduleId) {
+std::string SCT_MonitorConditionsSvc::deadStripsAsString(const Identifier & moduleId) {
   return getDeadStripList(moduleId);
 }
 
 //////////////////////////////////////////////////////////////////////////////
-std::string SCT_MonitorConditionsSvc::deadChipsAsString(Identifier moduleId) {
+std::string SCT_MonitorConditionsSvc::deadChipsAsString(const Identifier & moduleId) {
   return getDeadChipList(moduleId);
 }
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.h
index 1bde08fac1590a81c51afd81a35c0a704f4baac5..68548ce746bd57606fe8c7ca347097f09aaa6fdf 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_MonitorConditionsSvc.h
@@ -88,14 +88,14 @@ public:
   virtual void badStrips(std::set<Identifier>& strips);
   
   /// List of bad strip Identifiers for a given module
-  virtual void badStrips(Identifier moduleId, std::set<Identifier>& strips);
+  virtual void badStrips(const Identifier & moduleId, std::set<Identifier>& strips);
 
   /// String of bad strip numbers for a given module
-  virtual std::string badStripsAsString(Identifier moduleId);
+  virtual std::string badStripsAsString(const Identifier & moduleId);
 
   /// String of dead strip/chip numbers for a given module
-  virtual std::string deadStripsAsString(Identifier moduleId);
-  virtual std::string deadChipsAsString(Identifier moduleId);
+  virtual std::string deadStripsAsString(const Identifier & moduleId);
+  virtual std::string deadChipsAsString(const Identifier & moduleId);
 
   // ------------------------------------------------------------------------------------
   // local stuff 
@@ -177,8 +177,6 @@ private:
   
   void expandList(const std::string& defectStr, std::set<int>& defectList);
 
-  int stringToInt(const std::string& s) const;
-
   StatusCode printCondObjects(const std::string & foldername) const;
 
   StatusCode streamOutCondObjects(const std::string & foldername) const;
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_RODVetoSvc.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_RODVetoSvc.cxx
index ba1a86eb105c7bcab61598c8c60e5fe4942954cf..f544d3cd7512f683c8efcf33d80425af33d80882 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_RODVetoSvc.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_RODVetoSvc.cxx
@@ -101,7 +101,8 @@ bool
 SCT_RODVetoSvc::isGood(const IdentifierHash & hashId){
   if (not filled() and fillData().isFailure()) ATH_MSG_WARNING("Data structure could not be filled");
   Identifier elementId=m_pHelper->wafer_id(hashId);
-  return isGood(elementId);
+  Identifier moduleId =m_pHelper->module_id(elementId);
+  return isGood(moduleId);
 }
 
 StatusCode 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.cxx
index 5d41c3af0f61a4011f1bcda2c4ac004e15ddd27c..92d605234dcf9a906c9126f13183cc6da8bd9c6a 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.cxx
@@ -54,14 +54,10 @@ SCT_ReadoutTool::SCT_ReadoutTool(const std::string &type, const std::string &nam
 // Initialize
 StatusCode SCT_ReadoutTool::initialize() {
   ATH_MSG_DEBUG("Initialize SCT_ReadoutTool");
-
   // Retrieve cabling
-  if (m_cablingSvc.retrieve().isFailure()) return msg(MSG::ERROR) << "Can't get the cabling tool." << endreq, StatusCode::FAILURE;
-
+  ATH_CHECK(m_cablingSvc.retrieve());
   // Retrieve SCT helper
-  if (detStore()->retrieve(m_sctId,"SCT_ID").isFailure()) 
-    return  msg(MSG::ERROR) << "Unable to retrieve SCT_ID" << endreq, StatusCode::FAILURE;
-  
+  ATH_CHECK(detStore()->retrieve(m_sctId,"SCT_ID")) ;
   return StatusCode::SUCCESS;
 }
 
@@ -73,7 +69,6 @@ StatusCode SCT_ReadoutTool::finalize() {
 
 void SCT_ReadoutTool::setModuleType(Identifier moduleId) {
   // Set module type as per the ModuleType enum
-
   int bec = m_sctId->barrel_ec(moduleId);
   if (fabs(bec) == 2) {
     m_type = SCT_Parameters::ENDCAP;
@@ -278,17 +273,11 @@ bool SCT_ReadoutTool::isEndBeingTalkedTo(const SCT_Chip& chip) const {
 void SCT_ReadoutTool::maskChipsNotInReadout() {
   // Mask chip (is set mask to 0 0 0 0) if not in readout
   // If the readout of a particular link is not sane mask all chips on that link
-
-  std::vector<SCT_Chip*>::iterator chipItr(m_chips.begin());
-  std::vector<SCT_Chip*>::iterator chipEnd(m_chips.end());
-  
-  for (; chipItr != chipEnd; ++chipItr) {
-    if(!isChipReadOut(*(*chipItr))) {
-
-      ATH_MSG_INFO( "Masking chip " <<  (*chipItr)->id() );
-
+  for (const auto & thisChip:m_chips) {
+    if(!isChipReadOut(*thisChip)) {
+      ATH_MSG_DEBUG( "Masking chip " <<  thisChip->id() );
       uint32_t masked = 0;
-      (*chipItr)->initializeMaskFromInts(masked, masked, masked, masked);
+      thisChip->initializeMaskFromInts(masked, masked, masked, masked);
     }
   }
 }
@@ -296,7 +285,6 @@ void SCT_ReadoutTool::maskChipsNotInReadout() {
 bool SCT_ReadoutTool::followReadoutUpstream(int link, const SCT_Chip& chip, int remainingDepth) {
   // Follow the readout upstream (to input side).  Will return true if the readout is sane
   // The "error" cases are only warnings since they possibly only affect one module of the SCT
-
   // Have we gone though all 12 chips -> infinite loop
   if (remainingDepth < 0) {    
     ATH_MSG_WARNING( "Infinite loop detected in readout" );
@@ -320,9 +308,7 @@ bool SCT_ReadoutTool::followReadoutUpstream(int link, const SCT_Chip& chip, int
 #ifndef NDEBUG
       ATH_MSG_DEBUG( "MasterChip" );
 #endif
-
       // Chip will be set in readout below
-      
     } else if (chip.id() == link*6) {      
       // Link is active but the master position for THAT link does not contain a master 
       // This can happen if everything is readout via other link, therefore the readout is still sane.
@@ -373,7 +359,7 @@ bool SCT_ReadoutTool::isLinkStandard(int link){
 
   std::vector<int>& m_chipsOnThisLink = ((link==0) ? m_chipsOnLink0 : m_chipsOnLink1);
 
-  // Then it must have six ships being readout ...
+  // Then it must have six chips being readout ...
   if (m_chipsOnThisLink.size() != 6) return false;
 
   std::vector<int>::const_iterator linkItr(m_chipsOnThisLink.begin());
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.h b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.h
index ec7936a4c3c6b893df88025cb4c4781794ea9930..34768ebcd499d7b2c702577731ba69bfbedd9edb 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_ReadoutTool.h
@@ -14,7 +14,8 @@
 // C++
 #include <string> 
 #include <vector> 
-#include <bitset> 
+#include <bitset>
+#include <array>
 
 // Gaudi
 #include "GaudiKernel/ServiceHandle.h"
@@ -91,7 +92,7 @@ private:
   const SCT_ID*                       m_sctId;               //!< ID helper for SCT
   ServiceHandle<ISCT_CablingSvc>      m_cablingSvc;          //!< Service handle for SCT Cabling
   std::vector<SCT_Chip*>              m_chips;               //!< Vector of actual SCT Chips for that module
-  std::vector<SCT_PortMap>            m_chipMap;             //!< Vector of port mapping fro the chips in an SCT module 
+  std::vector<SCT_PortMap>            m_chipMap;             //!< Vector of port mapping from the chips in an SCT module 
   bool                                m_linkActive[2];       //!< Links status for link 0 and 1
   std::bitset<SCT_Parameters::NChips> m_chipInReadout;       //!< Bitset indicating whether a chip is readout or not
   SCT_Parameters::ModuleType          m_type;                //!< The type of this module (Barrel, Modified Barrel (0 or 1), Endcap)
@@ -100,12 +101,12 @@ private:
 
   /** Find the ID of the input chip for chip*/ 
   inline SCT_Parameters::ChipType inputChip(const SCT_Chip& chip) const {
-    return m_chipMap.at(chip.id()).input(chip.inPort());
+    return m_chipMap[chip.id()].input(chip.inPort());
   }
 
   /** Find the ID of the output chip for chip*/
   inline SCT_Parameters::ChipType outputChip(const SCT_Chip& chip) const {
-    return m_chipMap.at(chip.id()).output(chip.outPort());
+    return m_chipMap[chip.id()].output(chip.outPort());
   }
 
   /** Set chip in readout and which link it is on*/
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_SensorsSvc.cxx b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_SensorsSvc.cxx
index 223d70e8ba55a36d4504853bf7c1bf3182c6f17d..7cda75487fc62a30d7b6d7e6eeaa1bf0cf588e27 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_SensorsSvc.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsServices/src/SCT_SensorsSvc.cxx
@@ -54,7 +54,7 @@ StatusCode SCT_SensorsSvc::queryInterface(const InterfaceID& riid, void** ppvInt
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
-void SCT_SensorsSvc::getSensorsData(std::vector<std::string> & userVector){ 
+void SCT_SensorsSvc::getSensorsData(std::vector<std::string> & /*userVector*/){ 
 
   //for (unsigned int i(0);i!=m_sensorsValues.size();++i){
   //userVector.push_back(m_sensorsValues[i]);