diff --git a/vpd-manager/oem-handler/ibm_handler.cpp b/vpd-manager/oem-handler/ibm_handler.cpp
index 7d0c4d7..62199f8 100644
--- a/vpd-manager/oem-handler/ibm_handler.cpp
+++ b/vpd-manager/oem-handler/ibm_handler.cpp
@@ -37,7 +37,6 @@
         m_logger->logMessage(
             "Error while trying to read VPD collection mode: " +
             commonUtility::getErrCodeMsg(l_errCode));
-        l_errCode = 0;
     }
 
     if (dbusUtility::isChassisPowerOn())
@@ -218,8 +217,6 @@
         // check if the FRU needs CCIN check before updating PN.
         if (l_recJson.contains("CCIN"))
         {
-            l_errCode = 0;
-
             const auto& l_ccinFromDbus =
                 vpdSpecificUtility::getCcinFromDbus(l_inventoryPath, l_errCode);
 
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index 548f9ba..809ff53 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -259,7 +259,6 @@
         // update keyword in inherited FRUs
         if (l_rc != constants::FAILURE)
         {
-            l_errCode = 0;
             vpdSpecificUtility::updateKwdOnInheritedFrus(
                 l_fruPath, l_writeParams, l_sysCfgJsonObj, l_errCode);
 
@@ -278,7 +277,6 @@
         // update common interface(s) properties
         if (l_rc != constants::FAILURE)
         {
-            l_errCode = 0;
             vpdSpecificUtility::updateCiPropertyOfInheritedFrus(
                 l_fruPath, l_writeParams, l_sysCfgJsonObj, l_errCode);
 
@@ -290,7 +288,6 @@
             }
         }
 
-        l_errCode = 0;
         l_logger->logMessage(
             "VPD write " +
                 std::string(
diff --git a/vpd-manager/src/parser.cpp b/vpd-manager/src/parser.cpp
index 20c6bd2..ba8a9d4 100644
--- a/vpd-manager/src/parser.cpp
+++ b/vpd-manager/src/parser.cpp
@@ -202,7 +202,6 @@
             }
 
             // Get D-bus name for the given keyword
-            l_errCode = 0;
             l_propertyName = vpdSpecificUtility::getDbusPropNameForGivenKw(
                 l_propertyName, l_errCode);
 
diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index 48d4dc8..a712775 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -588,8 +588,6 @@
                             propValuePair.value().get<std::string>() +
                             " ,error : " +
                             commonUtility::getErrCodeMsg(l_errCode));
-
-                        l_errCode = 0;
                     }
 
                     propertyMap.emplace(property, value);
@@ -605,8 +603,6 @@
                         logging::logMessage(
                             "Failed to insert value into map, error : " +
                             commonUtility::getErrCodeMsg(l_errCode));
-
-                        l_errCode = 0;
                     }
                 }
                 else
@@ -662,8 +658,6 @@
                                     "Failed to get encoded keyword value for : ") +
                                 keyword + std::string(", error : ") +
                                 commonUtility::getErrCodeMsg(l_errCode));
-
-                            l_errCode = 0;
                         }
 
                         propertyMap.emplace(property, encoded);
@@ -690,8 +684,6 @@
                                         "Failed to get encoded keyword value for : ") +
                                     keyword + std::string(", error : ") +
                                     commonUtility::getErrCodeMsg(l_errCode));
-
-                                l_errCode = 0;
                             }
 
                             propertyMap.emplace(property, encodedValue);
@@ -711,8 +703,6 @@
                                     "Failed to get encoded keyword value for : " +
                                     keyword + ", error : " +
                                     commonUtility::getErrCodeMsg(l_errCode));
-
-                                l_errCode = 0;
                             }
 
                             propertyMap.emplace(property, encodedValue);
@@ -738,8 +728,6 @@
         {
             logging::logMessage("Failed to insert value into map, error : " +
                                 commonUtility::getErrCodeMsg(l_errCode));
-
-            l_errCode = 0;
         }
     }
 }
@@ -1187,6 +1175,7 @@
                               const std::string& i_flagToProcess,
                               uint16_t& i_errCode)
 {
+    i_errCode = 0;
     if (i_vpdFilePath.empty() || i_flagToProcess.empty())
     {
         i_errCode = error_code::INVALID_INPUT_PARAMETER;
@@ -1285,7 +1274,6 @@
         }
     }
 
-    l_errCode = 0;
     if (!jsonUtility::executeBaseAction(m_parsedJson, "postAction",
                                         i_vpdFruPath, i_flagToProcess,
                                         l_errCode))
@@ -1319,7 +1307,6 @@
         if (jsonUtility::isActionRequired(m_parsedJson, i_vpdFilePath,
                                           "preAction", "collection", l_errCode))
         {
-            l_errCode = 0;
             isPreActionRequired = true;
             if (!processPreAction(i_vpdFilePath, "collection", l_errCode))
             {
@@ -1367,8 +1354,6 @@
         // any post action in the flow of collection.
         // Note: Don't change the order, post action needs to be processed only
         // after collection for FRU is successfully done.
-        l_errCode = 0;
-
         if (jsonUtility::isActionRequired(m_parsedJson, i_vpdFilePath,
                                           "postAction", "collection",
                                           l_errCode))
@@ -1583,7 +1568,6 @@
                 "], error : " + commonUtility::getErrCodeMsg(l_errCode));
         }
 
-        l_errCode = 0;
         std::string l_invPath = jsonUtility::getInventoryObjPathFromJson(
             m_parsedJson, i_vpdFilePath, l_errCode);
 
@@ -1802,7 +1786,6 @@
                 for (const auto& [l_objectPath, l_serviceInterfaceMap] :
                      l_subTreeMap)
                 {
-                    l_errCode = 0;
                     types::InterfaceMap l_interfaceMap;
                     vpdSpecificUtility::resetDataUnderPIM(
                         l_objectPath, l_interfaceMap, l_errCode);
@@ -1819,7 +1802,6 @@
                                         std::move(l_interfaceMap));
                 }
 
-                l_errCode = 0;
                 types::InterfaceMap l_interfaceMap;
                 vpdSpecificUtility::resetDataUnderPIM(
                     i_dbusObjPath, l_interfaceMap, l_errCode);
@@ -1838,8 +1820,6 @@
                     throw std::runtime_error("Call to PIM failed.");
                 }
 
-                l_errCode = 0;
-
                 if (jsonUtility::isActionRequired(m_parsedJson, l_fruPath,
                                                   "postAction", "deletion",
                                                   l_errCode))
@@ -2106,7 +2086,6 @@
                     "], error : " + commonUtility::getErrCodeMsg(l_errCode));
             }
 
-            l_errCode = 0;
             bool isFruReplaceableAtRuntime =
                 jsonUtility::isFruReplaceableAtRuntime(m_parsedJson, l_fruPath,
                                                        l_errCode);
