diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index 67b4c32..2d648a0 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -703,7 +703,8 @@
 #endif
 
 void DataInterface::createProgressSRC(
-    const uint64_t& priSRC, const std::vector<uint8_t>& srcStruct) const
+    const std::vector<uint8_t>& priSRC,
+    const std::vector<uint8_t>& srcStruct) const
 {
     DBusValue variant = std::make_tuple(priSRC, srcStruct);
 
@@ -810,7 +811,8 @@
 
 std::vector<uint8_t> DataInterface::getRawProgressSRC(void) const
 {
-    using RawProgressProperty = std::tuple<uint64_t, std::vector<uint8_t>>;
+    using RawProgressProperty =
+        std::tuple<std::vector<uint8_t>, std::vector<uint8_t>>;
 
     DBusValue value;
     getProperty(service_name::bootRawProgress, object_path::bootRawProgress,
diff --git a/extensions/openpower-pels/data_interface.hpp b/extensions/openpower-pels/data_interface.hpp
index d15a580..0e322fa 100644
--- a/extensions/openpower-pels/data_interface.hpp
+++ b/extensions/openpower-pels/data_interface.hpp
@@ -473,7 +473,7 @@
      * @param[in] srcStruct - Full SRC base structure
      */
     virtual void createProgressSRC(
-        const uint64_t& priSRC,
+        const std::vector<uint8_t>& priSRC,
         const std::vector<uint8_t>& srcStruct) const = 0;
 
     /**
@@ -887,7 +887,7 @@
      * @param[in] srcStruct - Full SRC base structure
      */
     void createProgressSRC(
-        const uint64_t& priSRC,
+        const std::vector<uint8_t>& priSRC,
         const std::vector<uint8_t>& srcStruct) const override;
 
     /**
diff --git a/extensions/openpower-pels/dbus_types.hpp b/extensions/openpower-pels/dbus_types.hpp
index 142ee46..a04c993 100644
--- a/extensions/openpower-pels/dbus_types.hpp
+++ b/extensions/openpower-pels/dbus_types.hpp
@@ -19,11 +19,10 @@
         std::vector<std::tuple<std::string, std::variant<int64_t, std::string>,
                                std::string>>>>;
 
-using DBusValue =
-    std::variant<std::string, bool, std::vector<uint8_t>,
-                 std::vector<std::string>,
-                 std::vector<std::tuple<std::string, std::string, std::string>>,
-                 std::tuple<uint64_t, std::vector<uint8_t>>, BiosAttributes>;
+using DBusValue = std::variant<
+    std::string, bool, std::vector<uint8_t>, std::vector<std::string>,
+    std::vector<std::tuple<std::string, std::string, std::string>>,
+    std::tuple<std::vector<uint8_t>, std::vector<uint8_t>>, BiosAttributes>;
 using DBusProperty = std::string;
 using DBusInterface = std::string;
 using DBusService = std::string;
diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index 2694499..7153c12 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -1012,6 +1012,9 @@
 void Manager::updateProgressSRC(
     std::unique_ptr<openpower::pels::PEL>& pel) const
 {
+    const size_t refcodeBegin = 40;
+    const size_t refcodeSize = 8;
+
     // Check for pel severity of type - 0x51 = critical error, system
     // termination
     if (pel->userHeader().severity() == 0x51)
@@ -1020,15 +1023,20 @@
         if (src)
         {
             std::vector<uint8_t> asciiSRC = (*src)->getSrcStruct();
-            uint64_t srcRefCode = 0;
 
-            // Read bytes from offset [40-47] e.g. BD8D1001
-            for (int i = 0; i < 8; i++)
+            if (asciiSRC.size() < (refcodeBegin + refcodeSize))
             {
-                srcRefCode |=
-                    (static_cast<uint64_t>(asciiSRC[40 + i]) << (8 * i));
+                lg2::error(
+                    "SRC struct is too short to get progress code ({SIZE})",
+                    "SIZE", asciiSRC.size());
+                return;
             }
 
+            // Pull the ASCII SRC from offset [40-47] e.g. BD8D1001
+            std::vector<uint8_t> srcRefCode(
+                asciiSRC.begin() + refcodeBegin,
+                asciiSRC.begin() + refcodeBegin + refcodeSize);
+
             try
             {
                 _dataIface->createProgressSRC(srcRefCode, asciiSRC);
diff --git a/test/openpower-pels/mocks.hpp b/test/openpower-pels/mocks.hpp
index ae8d385..eadf3b6 100644
--- a/test/openpower-pels/mocks.hpp
+++ b/test/openpower-pels/mocks.hpp
@@ -61,7 +61,7 @@
                  const std::string&),
                 (const override));
     MOCK_METHOD(void, createProgressSRC,
-                (const uint64_t&, const std::vector<uint8_t>&),
+                (const std::vector<uint8_t>&, const std::vector<uint8_t>&),
                 (const override));
     MOCK_METHOD(std::vector<uint32_t>, getLogIDWithHwIsolation, (),
                 (const override));
