diff --git a/vpd-manager/src/bios_handler.cpp b/vpd-manager/src/bios_handler.cpp
index c266402..d9a0a20 100644
--- a/vpd-manager/src/bios_handler.cpp
+++ b/vpd-manager/src/bios_handler.cpp
@@ -423,7 +423,7 @@
     // Read required keyword from DBus as we need to set only a Bit.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdClearNVRAM_CreateLPAR);
+        constants::vsysInf, constants::kwdClearNVRAM_CreateLPAR);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
@@ -455,11 +455,11 @@
             l_valToUpdateInVpd.emplace_back((*l_pVal).at(0) & ~(0x02));
         }
 
-        if (-1 ==
-            m_manager->updateKeyword(
-                SYSTEM_VPD_FILE_PATH,
-                types::IpzData("UTIL", constants::kwdClearNVRAM_CreateLPAR,
-                               l_valToUpdateInVpd)))
+        if (-1 == m_manager->updateKeyword(
+                      SYSTEM_VPD_FILE_PATH,
+                      types::IpzData(constants::vsysInf,
+                                     constants::kwdClearNVRAM_CreateLPAR,
+                                     l_valToUpdateInVpd)))
         {
             logging::logMessage(
                 "Failed to update " +
@@ -511,7 +511,7 @@
     // Read required keyword from DBus.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdClearNVRAM_CreateLPAR);
+        constants::vsysInf, constants::kwdClearNVRAM_CreateLPAR);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
@@ -534,7 +534,7 @@
     // Read required keyword from DBus as we need to set only a Bit.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdClearNVRAM_CreateLPAR);
+        constants::vsysInf, constants::kwdClearNVRAM_CreateLPAR);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
@@ -566,11 +566,11 @@
                 (*l_pVal).at(0) & ~(constants::VALUE_4));
         }
 
-        if (-1 ==
-            m_manager->updateKeyword(
-                SYSTEM_VPD_FILE_PATH,
-                types::IpzData("UTIL", constants::kwdClearNVRAM_CreateLPAR,
-                               l_valToUpdateInVpd)))
+        if (-1 == m_manager->updateKeyword(
+                      SYSTEM_VPD_FILE_PATH,
+                      types::IpzData(constants::vsysInf,
+                                     constants::kwdClearNVRAM_CreateLPAR,
+                                     l_valToUpdateInVpd)))
         {
             logging::logMessage(
                 "Failed to update " +
@@ -620,7 +620,7 @@
     // Read required keyword from VPD.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdClearNVRAM_CreateLPAR);
+        constants::vsysInf, constants::kwdClearNVRAM_CreateLPAR);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
@@ -642,7 +642,7 @@
     // Read required keyword from DBus as we need to set only a Bit.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdKeepAndClear);
+        constants::vsysInf, constants::kwdKeepAndClear);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
@@ -674,10 +674,11 @@
                 (*l_pVal).at(0) & ~(constants::VALUE_1));
         }
 
-        if (-1 == m_manager->updateKeyword(
-                      SYSTEM_VPD_FILE_PATH,
-                      types::IpzData("UTIL", constants::kwdKeepAndClear,
-                                     l_valToUpdateInVpd)))
+        if (-1 ==
+            m_manager->updateKeyword(
+                SYSTEM_VPD_FILE_PATH,
+                types::IpzData(constants::vsysInf, constants::kwdKeepAndClear,
+                               l_valToUpdateInVpd)))
         {
             logging::logMessage(
                 "Failed to update " + std::string(constants::kwdKeepAndClear) +
@@ -726,7 +727,7 @@
     // Read required keyword from VPD.
     auto l_kwdValueVariant = dbusUtility::readDbusProperty(
         constants::pimServiceName, constants::systemVpdInvPath,
-        constants::utilInf, constants::kwdKeepAndClear);
+        constants::vsysInf, constants::kwdKeepAndClear);
 
     if (auto l_pVal = std::get_if<types::BinaryVector>(&l_kwdValueVariant))
     {
