diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
index a06f29cdbae8e5612f8ee03c27fb5dfdee523271..99c0cb64f3fdf76ebf5b9dd9c0f3970e021c5461 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/CMakeLists.txt
@@ -8,6 +8,7 @@ find_package( CLHEP )
 find_package( CORAL COMPONENTS CoralBase )
 find_package( ROOT COMPONENTS Core RIO )
 find_package( nlohmann_json )
+find_package( Boost COMPONENTS unit_test_framework )
 
 # Component(s) in the package:
 atlas_add_component( PixelConditionsAlgorithms
@@ -15,6 +16,13 @@ atlas_add_component( PixelConditionsAlgorithms
    INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
    LINK_LIBRARIES ${CLHEP_LIBRARIES} ${CORAL_LIBRARIES} ${ROOT_LIBRARIES} nlohmann_json::nlohmann_json AthenaBaseComps AthenaKernel AthenaPoolUtilities DetDescrConditions GaudiKernel GeoModelUtilities GeoPrimitives Identifier InDetCondTools InDetIdentifier InDetReadoutGeometry PathResolver PixelConditionsData PixelReadoutGeometryLib StoreGateLib TrkGeometry TrkSurfaces MuonReadoutGeometry TRT_ReadoutGeometry)
 
+atlas_add_test( StringUtilities_test
+  SOURCES test/StringUtilities_test.cxx src/StringUtilities.cxx
+  INCLUDE_DIRS ${Boost_INCLUDE_DIRS}
+  LINK_LIBRARIES ${Boost_LIBRARIES}
+  POST_EXEC_SCRIPT "nopost.sh"
+)
+
 # Install files from the package:
 atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 atlas_install_joboptions( share/*.py )
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDeadMapCondAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDeadMapCondAlg.cxx
index f01e5c8f4ba3e4698d01bf5df1448a9b4dddb5ea..b4a22844a1a9b31a4c1623ec20acdf1f11d66354 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDeadMapCondAlg.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelDeadMapCondAlg.cxx
@@ -4,8 +4,10 @@
 
 #include "PixelDeadMapCondAlg.h"
 #include "GaudiKernel/EventIDRange.h"
+#include "StringUtilities.h"
 
-#include <sstream>
+
+using PixelConditionsAlgorithms::parseDeadMapString;
 
 PixelDeadMapCondAlg::PixelDeadMapCondAlg(const std::string& name, ISvcLocator* pSvcLocator):
   ::AthReentrantAlgorithm(name, pSvcLocator)
@@ -56,33 +58,15 @@ StatusCode PixelDeadMapCondAlg::execute(const EventContext& ctx) const {
 
     for (CondAttrListCollection::const_iterator attrList=readCdo->begin(); attrList!=readCdo->end(); ++attrList) {
       const CondAttrListCollection::AttributeList &payload = attrList->second;
-
       // RUN-3 format
       if (payload.exists("data_array") and not payload["data_array"].isNull()) {
         const std::string &stringStatus = payload["data_array"].data<std::string>();
-
-        std::stringstream ss(stringStatus);
-        std::vector<std::string> component;
-        std::string buffer;
-        while (std::getline(ss,buffer,',')) { component.push_back(buffer); }
-
-        for (int i=0; i<(int)component.size(); i++) {
-          std::stringstream checkModule(component[i]);
-          std::vector<std::string> moduleString;
-          while (std::getline(checkModule,buffer,':')) { moduleString.push_back(buffer); }
-
-          if (moduleString.size()==2) {
-            std::stringstream checkModuleHash(moduleString[0]);
-            std::vector<std::string> moduleStringHash;
-            while (std::getline(checkModuleHash,buffer,'"')) { moduleStringHash.push_back(buffer); }
-
-            int moduleHash   = std::atoi(moduleStringHash[1].c_str());
-            int moduleStatus = std::atoi(moduleString[1].c_str());
-
-            if (moduleStatus==0) { writeCdo->setModuleStatus(moduleHash, 1); }
-            else                 { writeCdo->setChipStatus(moduleHash, moduleStatus); }
-          }
-
+        const auto & hashStatusVector = parseDeadMapString(stringStatus);
+        for (const auto & [hash, status] : hashStatusVector){
+          //status ==0 means its the module status to be set to '1'
+          if (status==0) writeCdo->setModuleStatus(hash, 1);
+          //...any other status will set the chip status
+          else writeCdo->setChipStatus(hash, status);
         }
       }
     }
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..37cb8274fefb455c4193904cf4755420633b3aef
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.cxx
@@ -0,0 +1,43 @@
+/*
+  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "StringUtilities.h"
+#include <sstream>
+//getline is in <string>, already included
+
+namespace PixelConditionsAlgorithms{
+
+   //parses the data_array string from the pixel dead map conditions db
+  std::vector<std::pair<int, int>>//module hash, module status
+  parseDeadMapString(const std::string & dataArrayString){
+    std::vector<std::pair<int, int>> result;
+    if (dataArrayString.empty()) return result;
+    //
+    std::stringstream ss(dataArrayString);
+    std::vector<std::string> component;
+    std::string buffer;
+    while (std::getline(ss,buffer,',')) { 
+      component.push_back(buffer); 
+    }
+    for (const auto & elem : component) {
+      std::stringstream checkModule(elem);
+      std::vector<std::string> moduleString;
+      while (std::getline(checkModule,buffer,':')) { 
+        moduleString.push_back(buffer); 
+      }
+      if (moduleString.size()==2) {
+        std::stringstream checkModuleHash(moduleString[0]);
+        std::vector<std::string> moduleStringHash;
+        while (std::getline(checkModuleHash,buffer,'"')) { 
+          moduleStringHash.push_back(buffer); 
+        }
+        const int moduleHash   = std::stoi(moduleStringHash[1]);
+        const int moduleStatus = std::stoi(moduleString[1]);
+        result.push_back({moduleHash, moduleStatus}); 
+      }
+    }
+    //
+    return result;
+  }
+}
\ No newline at end of file
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.h
new file mode 100644
index 0000000000000000000000000000000000000000..955fe8dc6dd8b00faeb3734996777b49302e251a
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/StringUtilities.h
@@ -0,0 +1,18 @@
+/*
+  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef PixelConditionsAlgorithms_StringUtilities
+#define PixelConditionsAlgorithms_StringUtilities
+
+#include <vector>
+#include <utility> //for std::pair
+#include <string>
+
+namespace PixelConditionsAlgorithms{
+
+  //parses the data_array string from the pixel dead map conditions db
+  std::vector<std::pair<int, int>>//module hash, module status
+  parseDeadMapString(const std::string & dataArrayString);
+}
+#endif
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/DeadMapTestString.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/DeadMapTestString.h
new file mode 100644
index 0000000000000000000000000000000000000000..263de412eae0bc20a385146b5728af3ada4cd397
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/DeadMapTestString.h
@@ -0,0 +1,9 @@
+/*
+  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+*/
+#include <string_view>
+namespace PixelConditionsAlgorithms{
+//this defines a database string returned in data_array for PixelDeadMapCondAlg, for testing a parser
+constexpr std::string_view 
+  testString = R"({"12":0,"19":0,"53":0,"64":256,"65":0,"139":0,"147":0,"151":128,"152":0,"202":2,"273":0,"315":0,"442":0,"453":1,"455":96,"466":16384,"471":8192,"473":0,"487":0,"492":0,"494":512,"501":1024,"503":0,"517":128,"521":64,"527":0,"540":0,"546":0,"576":128,"623":0,"630":0,"633":256,"643":0,"645":256,"650":1,"659":1,"663":0,"670":1,"686":0,"708":0,"710":32768,"721":4,"769":2048,"783":0,"791":0,"792":0,"806":0,"819":0,"826":0,"832":0,"835":1024,"853":32768,"890":32768,"910":9,"953":32768,"967":0,"974":0,"981":0,"984":0,"991":0,"1002":0,"1004":0,"1005":0,"1008":16640,"1013":256,"1015":576,"1021":0,"1039":1024,"1044":0,"1046":0,"1050":0,"1052":32897,"1053":7944,"1059":18,"1075":36864,"1080":0,"1120":172,"1123":0,"1124":57408,"1125":0,"1128":32,"1130":8192,"1137":0,"1149":32768,"1150":168,"1167":0,"1171":0,"1177":128,"1184":51,"1187":32768,"1202":0,"1207":0,"1225":0,"1227":0,"1228":0,"1235":512,"1280":8192,"1287":16,"1315":4,"1333":256,"1339":0,"1351":0,"1360":12800,"1364":8,"1391":0,"1407":64,"1408":1,"1413":8,"1414":0,"1416":0,"1417":0,"1423":0,"1451":14,"1456":0,"1459":8192,"1461":36864,"1462":32768,"1475":0,"1476":0,"1498":512,"1500":32,"1502":8,"1520":4096,"1528":0,"1562":0,"1565":32768,"1566":0,"1576":8,"1591":32,"1592":1024,"1601":0,"1602":0,"1606":256,"1608":0,"1644":0,"1678":1024,"1682":0,"1690":0,"1700":13,"1729":0,"1732":192,"1746":0,"1747":0,"1776":8192,"1777":0,"1794":0,"1798":0,"1829":1024,"1835":1024,"1845":4,"1872":0,"1888":4096,"1920":0,"1921":0,"1976":0,"1981":0,"1984":256,"1992":0,"1995":16384,"2007":4096,"2010":4096,"2020":0,"2027":0,"2028":0})";
+}
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/StringUtilities_test.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/StringUtilities_test.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..3be2840fca4b4eaa07b1fb898d3908f21c36a6f0
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/test/StringUtilities_test.cxx
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+/*
+ */
+/**
+ * @file PixelConditionsAlgorithms/test/StringUtilities_test.cxx
+ * @author Shaun Roe
+ * @date Aug, 2022
+ * @brief Some tests for StringUtilities 
+ */
+
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MAIN
+#define BOOST_TEST_MODULE TEST_PixelConditionsAlgorithms
+
+
+#include <boost/test/unit_test.hpp>
+//
+#include <utility>
+#include <vector>
+
+#include "../src/StringUtilities.h"
+#include "DeadMapTestString.h"
+#include <stdexcept>
+
+using ValueType = std::pair<int, int>;
+std::ostream & 
+operator<<(std::ostream & o, const ValueType& v){
+  o<<"{"<<v.first<<", "<<v.second<<"}";
+  return o;
+}
+
+namespace boost::test_tools::tt_detail {
+  template<>           
+  struct print_log_value<ValueType > {
+    void operator()( std::ostream& os, ValueType const& v){
+      ::operator<<(os,v);
+    }
+  };                                                          
+}
+
+BOOST_AUTO_TEST_SUITE(PixelConditionsAlgorithmsStringUtilitiesTest)
+  BOOST_AUTO_TEST_CASE(parseDeadMapString){
+    const std::string emptyString;
+    const auto result=PixelConditionsAlgorithms::parseDeadMapString(emptyString);
+    BOOST_TEST(result.empty(),"Parsing empty string should give empty result");
+    const std::string validTestString{PixelConditionsAlgorithms::testString};
+    const auto run3Result=PixelConditionsAlgorithms::parseDeadMapString(validTestString);
+    BOOST_TEST(run3Result.size() == 164, "Test string has 164 entries");
+    //first entry is {12, 0}, the zero will cause the module status to be written as '1'
+    //in the Algorithm
+    BOOST_TEST(run3Result[0] == ValueType(12,0));
+    //check entry three which should be {64, 256}, so should be a chip status
+    BOOST_TEST(run3Result[3] == ValueType(64,256));
+  }
+
+
+BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file