diff --git a/vpd-manager/src/backup_restore.cpp b/vpd-manager/src/backup_restore.cpp
index 89d7d2a..0a8d844 100644
--- a/vpd-manager/src/backup_restore.cpp
+++ b/vpd-manager/src/backup_restore.cpp
@@ -154,10 +154,30 @@
         return;
     }
 
+    uint16_t l_errCode = 0;
+
     const std::string l_srcFruPath =
-        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_srcPath);
+        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_srcPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get source FRU path for [" + i_srcPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        return;
+    }
+
     const std::string l_dstFruPath =
-        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_dstPath);
+        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_dstPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get destination FRU path for [" + i_dstPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        return;
+    }
+
     if (l_srcFruPath.empty() || l_dstFruPath.empty())
     {
         logging::logMessage(
@@ -165,7 +185,6 @@
         return;
     }
 
-    uint16_t l_errCode = 0;
     const std::string l_srcInvPath = jsonUtility::getInventoryObjPathFromJson(
         m_sysCfgJsonObj, i_srcPath, l_errCode);
 
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index d7b512d..27b1f63 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -172,6 +172,7 @@
         return -1;
     }
 
+    uint16_t l_errCode = 0;
     types::Path l_fruPath;
     nlohmann::json l_sysCfgJsonObj{};
 
@@ -182,13 +183,20 @@
         // Get the EEPROM path
         if (!l_sysCfgJsonObj.empty())
         {
-            l_fruPath =
-                jsonUtility::getFruPathFromJson(l_sysCfgJsonObj, i_vpdPath);
+            l_fruPath = jsonUtility::getFruPathFromJson(l_sysCfgJsonObj,
+                                                        i_vpdPath, l_errCode);
         }
     }
 
     if (l_fruPath.empty())
     {
+        if (l_errCode)
+        {
+            logging::logMessage(
+                "Failed to get FRU path from JSON for [" + i_vpdPath +
+                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        }
+
         l_fruPath = i_vpdPath;
     }
 
diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index b5b3780..04f060f 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -1688,8 +1688,18 @@
         throw std::runtime_error("Given DBus object path is empty.");
     }
 
+    uint16_t l_errCode = 0;
     const std::string& l_fruPath =
-        jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath);
+        jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get FRU path for inventory path [" + i_dbusObjPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+            " Aborting FRU VPD deletion.");
+        return;
+    }
 
     try
     {
@@ -1922,6 +1932,8 @@
     const sdbusplus::message::object_path& i_dbusObjPath)
 {
     std::string l_fruPath{};
+    uint16_t l_errCode = 0;
+
     try
     {
         // Check if system config JSON is present
@@ -1934,11 +1946,21 @@
         }
 
         // Get FRU path for the given D-bus object path from JSON
-        l_fruPath =
-            jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath);
+        l_fruPath = jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath,
+                                                    l_errCode);
 
         if (l_fruPath.empty())
         {
+            if (l_errCode)
+            {
+                logging::logMessage(
+                    "Failed to get FRU path for [" +
+                    std::string(i_dbusObjPath) + "], error : " +
+                    vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+                    " Aborting single FRU VPD collection.");
+                return;
+            }
+
             logging::logMessage(
                 "D-bus object path not present in JSON. Single FRU VPD collection is not performed for " +
                 std::string(i_dbusObjPath));
