diff --git a/const.hpp b/const.hpp
index 1fc24cc..e986425 100644
--- a/const.hpp
+++ b/const.hpp
@@ -38,6 +38,8 @@
 static constexpr auto MB_HOUR_END = 13;
 static constexpr auto MB_MIN_END = 16;
 
+static constexpr auto LOCATION_CODE_INF = "com.ibm.ipzvpd.Location";
+
 constexpr int IPZ_DATA_START = 11;
 constexpr uint8_t KW_VAL_PAIR_START_TAG = 0x84;
 constexpr uint8_t RECORD_END_TAG = 0x78;
diff --git a/vpd-manager/editor_impl.cpp b/vpd-manager/editor_impl.cpp
index b116d2d..091eac4 100644
--- a/vpd-manager/editor_impl.cpp
+++ b/vpd-manager/editor_impl.cpp
@@ -250,6 +250,70 @@
     checkPTForRecord(itrToRecord, ptLen);
 }
 
+void EditorImpl::processAndUpdateCI(const std::string& objectPath)
+{
+    for (auto& commonInterface : jsonFile["commonInterfaces"].items())
+    {
+        for (auto& ciPropertyList : commonInterface.value().items())
+        {
+            if ((ciPropertyList.value().value("recordName", "") ==
+                 thisRecord.recName) &&
+                (ciPropertyList.value().value("keywordName", "") ==
+                 thisRecord.recKWd))
+            {
+                // implement busctl call here
+            }
+        }
+    }
+}
+
+void EditorImpl::processAndUpdateEI(const nlohmann::json& Inventory,
+                                    const inventory::Path& objPath)
+{
+    for (const auto& extraInterface : Inventory["extraInterfaces"].items())
+    {
+        if (extraInterface.value() != NULL)
+        {
+            for (const auto& eiPropertyList : extraInterface.value().items())
+            {
+                if ((eiPropertyList.value().value("recordName", "") ==
+                     thisRecord.recName) &&
+                    ((eiPropertyList.value().value("keywordName", "") ==
+                      thisRecord.recKWd)))
+                {
+                    // implement busctl call here
+                }
+            }
+        }
+    }
+}
+
+void EditorImpl::updateCache()
+{
+    const std::vector<nlohmann::json>& groupEEPROM =
+        jsonFile["frus"][vpdFilePath].get_ref<const nlohmann::json::array_t&>();
+
+    // iterate through all the inventories for this file path
+    for (const auto& singleInventory : groupEEPROM)
+    {
+        // process and update CI
+        const std::string& LocationCode =
+            singleInventory["extraInterfaces"][LOCATION_CODE_INF]
+                           ["LocationCode"]
+                               .get_ref<const nlohmann::json::string_t&>();
+        if (LocationCode.substr(1, 3) != "mts")
+        {
+            processAndUpdateCI(singleInventory["inventoryPath"]
+                                   .get_ref<const nlohmann::json::string_t&>());
+        }
+
+        // process extra interfaces
+        processAndUpdateEI(singleInventory,
+                           singleInventory["inventoryPath"]
+                               .get_ref<const nlohmann::json::string_t&>());
+    }
+}
+
 void EditorImpl::updateKeyword(const Binary& kwdData)
 {
     vpdFileStream.open(vpdFilePath,
@@ -284,6 +348,9 @@
         // update the ECC data for the record once data has been updated
         updateRecordECC();
 
+        // update the cache once data has been updated
+        updateCache();
+
         return;
     }
 
diff --git a/vpd-manager/editor_impl.hpp b/vpd-manager/editor_impl.hpp
index 70596a4..ff94692 100644
--- a/vpd-manager/editor_impl.hpp
+++ b/vpd-manager/editor_impl.hpp
@@ -5,6 +5,7 @@
 
 #include <cstddef>
 #include <fstream>
+#include <nlohmann/json.hpp>
 #include <tuple>
 
 namespace openpower
@@ -52,10 +53,10 @@
      *
      *  @param[in] path - Path to the vpd file
      */
-    EditorImpl(const inventory::Path& path, const std::string& record,
-               const std::string& kwd) :
+    EditorImpl(const inventory::Path& path, const nlohmann::json& json,
+               const std::string& record, const std::string& kwd) :
         vpdFilePath(path),
-        thisRecord(record, kwd)
+        jsonFile(json), thisRecord(record, kwd)
     {
     }
 
@@ -105,12 +106,31 @@
      */
     void updateRecordECC();
 
+    /** @brief method to update cache once the data for kwd has been updated
+     */
+    void updateCache();
+
+    /** @brief method to process and update CI in case required
+     *  @param[in] - objectPath - path of the object to introspect
+     */
+    void processAndUpdateCI(const std::string& objectPath);
+
+    /** @brief method to process and update Extra Interface
+     *  @param[in] Inventory - single inventory json subpart
+     *  @param[in] objectPath - path of the object to introspect
+     */
+    void processAndUpdateEI(const nlohmann::json& Inventory,
+                            const inventory::Path& objPath);
+
     // path to the VPD file to edit
     const inventory::Path& vpdFilePath;
 
     // stream to perform operation on file
     std::fstream vpdFileStream;
 
+    // file to store parsed json
+    const nlohmann::json& jsonFile;
+
     // structure to hold info about record to edit
     struct RecInfo
     {
diff --git a/vpd-manager/manager.cpp b/vpd-manager/manager.cpp
index 766583d..dfcdc39 100644
--- a/vpd-manager/manager.cpp
+++ b/vpd-manager/manager.cpp
@@ -86,7 +86,7 @@
         inventory::Path vpdFilePath = frus.find(path)->second;
 
         // instantiate editor class to update the data
-        EditorImpl edit(vpdFilePath, recordName, keyword);
+        EditorImpl edit(vpdFilePath, jsonFile, recordName, keyword);
         edit.updateKeyword(value);
 
         return;
