diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index be2f7d7..60b89e0 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -558,9 +558,9 @@
 {
     for (const auto& interfacesPropPair : interfaceJson.items())
     {
-        uint16_t l_errCode = 0;
         const std::string& interface = interfacesPropPair.key();
         types::PropertyMap propertyMap;
+        uint16_t l_errCode = 0;
 
         for (const auto& propValuePair : interfacesPropPair.value().items())
         {
@@ -579,7 +579,19 @@
                     std::string value =
                         vpdSpecificUtility::getExpandedLocationCode(
                             propValuePair.value().get<std::string>(),
-                            parsedVpdMap);
+                            parsedVpdMap, l_errCode);
+
+                    if (l_errCode)
+                    {
+                        logging::logMessage(
+                            "Failed to get expanded location code for location code - " +
+                            propValuePair.value().get<std::string>() +
+                            " ,error : " +
+                            commonUtility::getErrCodeMsg(l_errCode));
+
+                        l_errCode = 0;
+                    }
+
                     propertyMap.emplace(property, value);
 
                     auto l_locCodeProperty = propertyMap;
@@ -593,6 +605,8 @@
                         logging::logMessage(
                             "Failed to insert value into map, error : " +
                             commonUtility::getErrCodeMsg(l_errCode));
+
+                        l_errCode = 0;
                     }
                 }
                 else
@@ -630,8 +644,6 @@
                 const std::string& encoding =
                     propValuePair.value().value("encoding", "");
 
-                uint16_t l_errCode = 0;
-
                 if (auto ipzVpdMap =
                         std::get_if<types::IPZVpdMap>(&parsedVpdMap))
                 {
@@ -650,6 +662,8 @@
                                     "Failed to get encoded keyword value for : ") +
                                 keyword + std::string(", error : ") +
                                 commonUtility::getErrCodeMsg(l_errCode));
+
+                            l_errCode = 0;
                         }
 
                         propertyMap.emplace(property, encoded);
@@ -676,6 +690,8 @@
                                         "Failed to get encoded keyword value for : ") +
                                     keyword + std::string(", error : ") +
                                     commonUtility::getErrCodeMsg(l_errCode));
+
+                                l_errCode = 0;
                             }
 
                             propertyMap.emplace(property, encodedValue);
@@ -695,6 +711,8 @@
                                     "Failed to get encoded keyword value for : " +
                                     keyword + ", error : " +
                                     commonUtility::getErrCodeMsg(l_errCode));
+
+                                l_errCode = 0;
                             }
 
                             propertyMap.emplace(property, encodedValue);
@@ -713,7 +731,6 @@
                 }
             }
         }
-        l_errCode = 0;
         vpdSpecificUtility::insertOrMerge(interfaceMap, interface,
                                           move(propertyMap), l_errCode);
 
@@ -721,6 +738,8 @@
         {
             logging::logMessage("Failed to insert value into map, error : " +
                                 commonUtility::getErrCodeMsg(l_errCode));
+
+            l_errCode = 0;
         }
     }
 }
