diff --git a/vpd-manager/src/backup_restore.cpp b/vpd-manager/src/backup_restore.cpp
index fd7b03b..67829d3 100644
--- a/vpd-manager/src/backup_restore.cpp
+++ b/vpd-manager/src/backup_restore.cpp
@@ -29,7 +29,7 @@
     {
         throw JsonException(
             "JSON parsing failed for file [" + l_backupAndRestoreCfgFilePath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode),
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode),
             l_backupAndRestoreCfgFilePath);
     }
 }
@@ -163,7 +163,7 @@
     {
         logging::logMessage(
             "Failed to get source FRU path for [" + i_srcPath +
-            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         return;
     }
 
@@ -174,7 +174,7 @@
     {
         logging::logMessage(
             "Failed to get destination FRU path for [" + i_dstPath +
-            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         return;
     }
 
@@ -194,7 +194,7 @@
         {
             logging::logMessage(
                 "Couldn't find source inventory path. Error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                commonUtility::getErrCodeMsg(l_errCode));
             return;
         }
 
@@ -211,7 +211,7 @@
         {
             logging::logMessage(
                 "Couldn't find destination inventory path. Error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                commonUtility::getErrCodeMsg(l_errCode));
             return;
         }
 
@@ -226,7 +226,7 @@
     {
         logging::logMessage(
             "Failed to get service name for source FRU [" + l_srcInvPath +
-            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         return;
     }
 
@@ -237,7 +237,7 @@
     {
         logging::logMessage(
             "Failed to get service name for destination FRU [" + l_dstInvPath +
-            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         return;
     }
 
diff --git a/vpd-manager/src/event_logger.cpp b/vpd-manager/src/event_logger.cpp
index 9959d2f..9ae45a7 100644
--- a/vpd-manager/src/event_logger.cpp
+++ b/vpd-manager/src/event_logger.cpp
@@ -7,6 +7,7 @@
 
 #include <systemd/sd-bus.h>
 
+#include <utility/common_utility.hpp>
 #include <utility/json_utility.hpp>
 #include <utility/vpd_specific_utility.hpp>
 
@@ -363,7 +364,7 @@
                             "Failed to parse JSON file [ " +
                             std::string(INVENTORY_JSON_SYM_LINK) +
                             " ], error : " +
-                            vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                            commonUtility::getErrCodeMsg(l_errCode));
                     }
 
                     l_calloutInvPath = jsonUtility::getInventoryObjPathFromJson(
@@ -385,8 +386,8 @@
             {
                 logging::logMessage(
                     "Failed to get inventory object path from JSON for FRU [" +
-                    std::get<0>(i_callouts[0]) + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    std::get<0>(i_callouts[0]) +
+                    "], error : " + commonUtility::getErrCodeMsg(l_errCode));
             }
         }
 
diff --git a/vpd-manager/src/gpio_monitor.cpp b/vpd-manager/src/gpio_monitor.cpp
index 9e00be7..9850276 100644
--- a/vpd-manager/src/gpio_monitor.cpp
+++ b/vpd-manager/src/gpio_monitor.cpp
@@ -52,7 +52,7 @@
             {
                 throw std::runtime_error(
                     "Failed to get inventory path from JSON, error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    commonUtility::getErrCodeMsg(l_errCode));
             }
 
             m_worker->deleteFruVpd(l_invPath);
@@ -90,7 +90,7 @@
     {
         logging::logMessage("processGpioPresenceTag returned false for FRU [" +
                             m_fruPath + "] Due to error. Reason: " +
-                            vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                            commonUtility::getErrCodeMsg(l_errCode));
     }
 
     if (m_prevPresencePinValue != l_currentPresencePinValue)
@@ -118,7 +118,7 @@
     {
         logging::logMessage("processGpioPresenceTag returned false for FRU [" +
                             m_fruPath + "] Due to error. Reason: " +
-                            vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                            commonUtility::getErrCodeMsg(l_errCode));
     }
 
     static std::vector<std::shared_ptr<boost::asio::steady_timer>> l_timers;
@@ -145,7 +145,7 @@
     {
         logging::logMessage(
             "Failed to get list of frus required for gpio polling. Error : " +
-            vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            commonUtility::getErrCodeMsg(l_errCode));
         return;
     }
 
diff --git a/vpd-manager/src/listener.cpp b/vpd-manager/src/listener.cpp
index 87cb182..c6766ba 100644
--- a/vpd-manager/src/listener.cpp
+++ b/vpd-manager/src/listener.cpp
@@ -188,7 +188,7 @@
         {
             logging::logMessage(
                 "Failed to get list of FRUs with presence monitoring, error: " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                commonUtility::getErrCodeMsg(l_errCode));
             return;
         }
 
@@ -275,11 +275,10 @@
 
         if (l_errCode)
         {
-            throw JsonException(
-                "Failed to parse correlated properties JSON [" +
-                    i_correlatedPropJsonFile + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode),
-                i_correlatedPropJsonFile);
+            throw JsonException("Failed to parse correlated properties JSON [" +
+                                    i_correlatedPropJsonFile + "], error : " +
+                                    commonUtility::getErrCodeMsg(l_errCode),
+                                i_correlatedPropJsonFile);
         }
 
         const nlohmann::json& l_serviceJsonObjectList =
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index dd94d3b..ca77491 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -194,7 +194,7 @@
         {
             logging::logMessage(
                 "Failed to get FRU path from JSON for [" + i_vpdPath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         }
 
         l_fruPath = i_vpdPath;
diff --git a/vpd-manager/src/parser.cpp b/vpd-manager/src/parser.cpp
index e0e173b..c3f319d 100644
--- a/vpd-manager/src/parser.cpp
+++ b/vpd-manager/src/parser.cpp
@@ -43,7 +43,7 @@
         {
             logging::logMessage(
                 "Failed to get vpd offset for path [" + m_vpdFilePath +
-                "], error: " + vpdSpecificUtility::getErrCodeMsg(l_errorCode));
+                "], error: " + commonUtility::getErrCodeMsg(l_errorCode));
         }
     }
 }
@@ -137,7 +137,7 @@
         {
             throw std::runtime_error(
                 "Failed to get paths to update keyword. Error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                commonUtility::getErrCodeMsg(l_errCode));
         }
 
         // If inventory D-bus object path is present, update keyword's value on
@@ -217,7 +217,7 @@
 
         if (l_errCode == error_code::ERROR_GETTING_REDUNDANT_PATH)
         {
-            logging::logMessage(vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            logging::logMessage(commonUtility::getErrCodeMsg(l_errCode));
         }
 
         // Update keyword's value on redundant hardware if present
diff --git a/vpd-manager/src/single_fab.cpp b/vpd-manager/src/single_fab.cpp
index 0b3875e..1f61165 100644
--- a/vpd-manager/src/single_fab.cpp
+++ b/vpd-manager/src/single_fab.cpp
@@ -31,8 +31,8 @@
         {
             throw JsonException(
                 "Failed to parse JSON file [ " +
-                    std::string(pimPersistVsbpPath) + " ], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode),
+                    std::string(pimPersistVsbpPath) +
+                    " ], error : " + commonUtility::getErrCodeMsg(l_errCode),
                 pimPersistVsbpPath);
         }
 
diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index c2f9621..0c8f8f7 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -12,6 +12,7 @@
 #include "parser_factory.hpp"
 #include "parser_interface.hpp"
 
+#include <utility/common_utility.hpp>
 #include <utility/dbus_utility.hpp>
 #include <utility/json_utility.hpp>
 #include <utility/vpd_specific_utility.hpp>
@@ -50,8 +51,7 @@
             {
                 throw std::runtime_error(
                     "JSON parsing failed for file [ " + m_configJsonPath +
-                    " ], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    " ], error : " + commonUtility::getErrCodeMsg(l_errCode));
             }
 
             // check for mandatory fields at this point itself.
@@ -395,7 +395,7 @@
     {
         throw(JsonException(
             "JSON parsing failed for file [ " + systemJson +
-                " ], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode),
+                " ], error : " + commonUtility::getErrCodeMsg(l_errCode),
             systemJson));
     }
 
@@ -436,7 +436,7 @@
             {
                 logging::logMessage(
                     "Failed to check if backup and restore required. Reason : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    commonUtility::getErrCodeMsg(l_errCode));
             }
         }
 
@@ -1280,7 +1280,7 @@
     {
         logging::logMessage(
             "Execution of post action failed for path: " + i_vpdFruPath +
-            " . Reason: " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+            " . Reason: " + commonUtility::getErrCodeMsg(l_errCode));
 
         // If post action was required and failed only in that case return
         // false. In all other case post action is considered passed.
@@ -1314,7 +1314,7 @@
                 if (l_errCode == error_code::DEVICE_NOT_PRESENT)
                 {
                     logging::logMessage(
-                        vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+                        commonUtility::getErrCodeMsg(l_errCode) +
                         i_vpdFilePath);
                     // Presence pin has been read successfully and has been read
                     // as false, so this is not a failure case, hence returning
@@ -1324,7 +1324,7 @@
                 throw std::runtime_error(
                     std::string(__FUNCTION__) +
                     " Pre-Action failed with error: " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    commonUtility::getErrCodeMsg(l_errCode));
             }
         }
         else if (l_errCode)
@@ -1332,7 +1332,7 @@
             logging::logMessage(
                 "Failed to check if pre action required for FRU [" +
                 i_vpdFilePath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         }
 
         if (!std::filesystem::exists(i_vpdFilePath))
@@ -1378,7 +1378,7 @@
             logging::logMessage(
                 "Error while checking if post action required for FRU [" +
                 i_vpdFilePath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         }
 
         return l_parsedVpd;
@@ -1399,7 +1399,7 @@
                                                     "collection", l_errCode))
             {
                 l_exMsg += ". Post fail action also failed. Error : " +
-                           vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+                           commonUtility::getErrCodeMsg(l_errCode) +
                            " Aborting collection for this FRU.";
             }
         }
@@ -1407,7 +1407,7 @@
         {
             l_exMsg +=
                 ". Failed to check if post fail action required, error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode);
+                commonUtility::getErrCodeMsg(l_errCode);
         }
 
         if (typeid(l_ex) == typeid(DataException))
@@ -1485,8 +1485,8 @@
                 {
                     logging::logMessage(
                         "Failed to get inventory object path from JSON for FRU [" +
-                        i_vpdFilePath + "], error: " +
-                        vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                        i_vpdFilePath +
+                        "], error: " + commonUtility::getErrCodeMsg(l_errCode));
                 }
 
                 const std::string& l_invPathLeafValue =
@@ -1562,7 +1562,7 @@
             logging::logMessage(
                 "Failed to check if FRU is power off only for FRU [" +
                 i_vpdFilePath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         }
 
         l_errCode = 0;
@@ -1574,7 +1574,7 @@
             logging::logMessage(
                 "Failed to get inventory path from JSON for FRU [" +
                 i_vpdFilePath +
-                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                "], error : " + commonUtility::getErrCodeMsg(l_errCode));
 
             return false;
         }
@@ -1654,8 +1654,8 @@
         {
             throw JsonException(
                 "JSON parsing failed for file [ " +
-                    l_backupAndRestoreCfgFilePath + " ], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode),
+                    l_backupAndRestoreCfgFilePath +
+                    " ], error : " + commonUtility::getErrCodeMsg(l_errCode),
                 l_backupAndRestoreCfgFilePath);
         }
 
@@ -1710,7 +1710,7 @@
     {
         logging::logMessage(
             "Failed to get FRU path for inventory path [" + i_dbusObjPath +
-            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+            "], error : " + commonUtility::getErrCodeMsg(l_errCode) +
             " Aborting FRU VPD deletion.");
         return;
     }
@@ -1733,7 +1733,7 @@
             {
                 throw std::runtime_error(
                     "Failed to check if FRU's presence is handled, reason: " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    commonUtility::getErrCodeMsg(l_errCode));
             }
 
             if (!(*l_value) && l_isFruPresenceHandled)
@@ -1756,9 +1756,8 @@
                         std::string l_msg = "Pre action failed";
                         if (l_errCode)
                         {
-                            l_msg +=
-                                " Reason: " +
-                                vpdSpecificUtility::getErrCodeMsg(l_errCode);
+                            l_msg += " Reason: " +
+                                     commonUtility::getErrCodeMsg(l_errCode);
                         }
                         throw std::runtime_error(l_msg);
                     }
@@ -1768,7 +1767,7 @@
                     logging::logMessage(
                         "Failed to check if pre action required for FRU [" +
                         l_fruPath + "], error : " +
-                        vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                        commonUtility::getErrCodeMsg(l_errCode));
                 }
 
                 std::vector<std::string> l_interfaceList{
@@ -1819,7 +1818,7 @@
                     logging::logMessage(
                         "Failed to check if post action required during deletion for FRU [" +
                         l_fruPath + "], error : " +
-                        vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                        commonUtility::getErrCodeMsg(l_errCode));
                 }
             }
         }
@@ -1849,14 +1848,14 @@
                                                     "deletion", l_errCode))
             {
                 l_errMsg += ". Post fail action also failed, error : " +
-                            vpdSpecificUtility::getErrCodeMsg(l_errCode);
+                            commonUtility::getErrCodeMsg(l_errCode);
             }
         }
         else if (l_errCode)
         {
             l_errMsg +=
                 ". Failed to check if post fail action required, error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode);
+                commonUtility::getErrCodeMsg(l_errCode);
         }
 
         logging::logMessage(l_errMsg);
@@ -1954,7 +1953,7 @@
         {
             logging::logMessage(
                 "Failed to get list of FRUs replaceable at runtime, error : " +
-                vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                commonUtility::getErrCodeMsg(l_errCode));
             return;
         }
 
@@ -2003,8 +2002,8 @@
             {
                 logging::logMessage(
                     "Failed to get FRU path for [" +
-                    std::string(i_dbusObjPath) + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+                    std::string(i_dbusObjPath) +
+                    "], error : " + commonUtility::getErrCodeMsg(l_errCode) +
                     " Aborting single FRU VPD collection.");
                 return;
             }
@@ -2027,8 +2026,8 @@
             {
                 logging::logMessage(
                     "Failed to check if FRU is replaceable at runtime for FRU : [" +
-                    std::string(i_dbusObjPath) + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    std::string(i_dbusObjPath) +
+                    "], error : " + commonUtility::getErrCodeMsg(l_errCode));
                 return;
             }
 
@@ -2051,8 +2050,8 @@
             {
                 logging::logMessage(
                     "Error while checking if FRU is replaceable at standby for FRU [" +
-                    std::string(i_dbusObjPath) + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    std::string(i_dbusObjPath) +
+                    "], error : " + commonUtility::getErrCodeMsg(l_errCode));
             }
 
             l_errCode = 0;
@@ -2064,8 +2063,8 @@
             {
                 logging::logMessage(
                     "Failed to check if FRU is replaceable at runtime for FRU : [" +
-                    std::string(i_dbusObjPath) + "], error : " +
-                    vpdSpecificUtility::getErrCodeMsg(l_errCode));
+                    std::string(i_dbusObjPath) +
+                    "], error : " + commonUtility::getErrCodeMsg(l_errCode));
                 return;
             }
 
