diff --git a/meson.build b/meson.build
index ce2830a..b61f44a 100644
--- a/meson.build
+++ b/meson.build
@@ -28,6 +28,9 @@
                        'BUSNAME' : '"' + get_option('BUSNAME') + '"',
                        'OBJPATH' : '"' + get_option('OBJPATH') + '"',
                        'IFACE' : '"' + get_option('IFACE') + '"',
+		       'OBJECT_MAPPER_SERVICE' : '"'+get_option('OBJECT_MAPPER_SERVICE')+'"',
+		       'OBJECT_MAPPER_OBJECT' : '"'+get_option('OBJECT_MAPPER_OBJECT')+'"',
+		       'POWER_SUPPLY_TYPE_INTERFACE' : '"'+get_option('POWER_SUPPLY_TYPE_INTERFACE')+'"'
                        }
   )
         ibm_read_vpd_SOURCES = ['ibm_vpd_app.cpp',
@@ -61,7 +64,7 @@
                                  dependencies: [
                                    sdbusplus
                                    ],
-                                 install: true,
+                                 install: true
                                  )
 if get_option('vpd-manager').enabled()
     subdir('vpd-manager')
diff --git a/meson_options.txt b/meson_options.txt
index c08c94a..df9b3ac 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -11,3 +11,6 @@
 option('OBJPATH', type : 'string', value : '/com/ibm/VPD/Manager', description : 'OBJECT PATH FOT THE SERVICE')
 option('IFACE', type : 'string', value : 'com.ibm.VPD.Manager', description : 'INTERFACE NAME')
 option('vpd-manager', type: 'feature', description: 'ENABLE VPD-MANAGERR APPLICATION')
+option('OBJECT_MAPPER_SERVICE', type : 'string', value : 'xyz.openbmc_project.ObjectMapper', description : 'Object Mapper service')
+option('OBJECT_MAPPER_OBJECT', type : 'string', value : '/xyz/openbmc_project/object_mapper', description : 'One of the objects in Object Mapper service')
+option('POWER_SUPPLY_TYPE_INTERFACE', type : 'string', value : 'xyz.openbmc_project.Inventory.Item.PowerSupply', description : 'Power Supply Type Interface')
diff --git a/vpd_tool_impl.cpp b/vpd_tool_impl.cpp
index 893109c..a424312 100644
--- a/vpd_tool_impl.cpp
+++ b/vpd_tool_impl.cpp
@@ -1,5 +1,7 @@
 #include "vpd_tool_impl.hpp"
 
+#include <cstdlib>
+#include <filesystem>
 #include <iomanip>
 #include <iostream>
 #include <sdbusplus/bus.hpp>
@@ -10,6 +12,36 @@
 using namespace std;
 using sdbusplus::exception::SdBusError;
 using namespace openpower::vpd;
+namespace fs = std::filesystem;
+
+void VpdTool::eraseInventoryPath(string& fru)
+{
+    // Power supply frupath comes with INVENTORY_PATH appended in prefix.
+    // Stripping it off inorder to avoid INVENTORY_PATH duplication
+    // during getVINIProperties() execution.
+    fru.erase(0, sizeof(INVENTORY_PATH) - 1);
+}
+
+void VpdTool::getPowerSupplyFruPath(vector<string>& powSuppFrus)
+{
+    auto bus = sdbusplus::bus::new_default();
+    auto properties = bus.new_method_call(
+        OBJECT_MAPPER_SERVICE, OBJECT_MAPPER_OBJECT,
+        "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths");
+    properties.append(INVENTORY_PATH);
+    properties.append(0);
+    properties.append(std::array<const char*, 1>{POWER_SUPPLY_TYPE_INTERFACE});
+
+    auto result = bus.call(properties);
+
+    if (result.is_method_error())
+    {
+        throw runtime_error(
+            "GetSubTreePaths api in ObjectMapper service is failed.");
+    }
+
+    result.read(powSuppFrus);
+}
 
 void VpdTool::debugger(json output)
 {
@@ -37,13 +69,23 @@
 void VpdTool::addFruTypeAndLocation(json exIntf, const string& object,
                                     json& kwVal)
 {
-    for (const auto& intf : exIntf.items())
+    if (object.find("powersupply") != string::npos)
     {
-        if ((intf.key().find("Item") != string::npos) &&
-            (intf.value().is_null()))
+        kwVal.emplace("type", POWER_SUPPLY_TYPE_INTERFACE);
+    }
+
+    // add else if statement for fan fru
+
+    else
+    {
+        for (const auto& intf : exIntf.items())
         {
-            kwVal.emplace("type", intf.key());
-            break;
+            if ((intf.key().find("Item") != string::npos) &&
+                (intf.value().is_null()))
+            {
+                kwVal.emplace("type", intf.key());
+                break;
+            }
         }
     }
 
@@ -76,7 +118,17 @@
 
     vector<string> keyword{"CC", "SN", "PN", "FN", "DR"};
     string interface = "com.ibm.ipzvpd.VINI";
-    string objectName = INVENTORY_PATH + invPath;
+    string objectName = {};
+
+    if (invPath.find(INVENTORY_PATH) != string::npos)
+    {
+        objectName = invPath;
+        eraseInventoryPath(invPath);
+    }
+    else
+    {
+        objectName = INVENTORY_PATH + invPath;
+    }
 
     for (string kw : keyword)
     {
@@ -223,14 +275,40 @@
 void VpdTool::dumpInventory(const nlohmann::basic_json<>& jsObject)
 {
     char flag = 'I';
-    json output = parseInvJson(jsObject, flag, "");
+    json output = json::array({});
+    output.emplace_back(parseInvJson(jsObject, flag, ""));
+
+    vector<string> powSuppFrus;
+
+    getPowerSupplyFruPath(powSuppFrus);
+
+    for (const auto& fru : powSuppFrus)
+    {
+        output.emplace_back(
+            getVINIProperties(fru, nlohmann::detail::value_t::null));
+    }
+
     debugger(output);
 }
 
 void VpdTool::dumpObject(const nlohmann::basic_json<>& jsObject)
 {
     char flag = 'O';
-    json output = parseInvJson(jsObject, flag, fruPath);
+    json output = json::array({});
+    vector<string> powSuppFrus;
+
+    getPowerSupplyFruPath(powSuppFrus);
+
+    if (find(powSuppFrus.begin(), powSuppFrus.end(), fruPath) !=
+        powSuppFrus.end())
+    {
+        output.emplace_back(
+            getVINIProperties(fruPath, nlohmann::detail::value_t::null));
+    }
+    else
+    {
+        output.emplace_back(parseInvJson(jsObject, flag, fruPath));
+    }
     debugger(output);
 }
 
diff --git a/vpd_tool_impl.hpp b/vpd_tool_impl.hpp
index 6c9cf12..1ac96bd 100644
--- a/vpd_tool_impl.hpp
+++ b/vpd_tool_impl.hpp
@@ -104,6 +104,25 @@
      */
     json parseInvJson(const json& jsObject, char flag, std::string fruPath);
 
+    /**
+     * @brief getPowerSupplyFruPath
+     * Get the power supply fru paths from Object mapper service.
+     *
+     * @param[out] powSuppFrus - Reference to a vector which has the power
+     * supply fru paths.
+     */
+    void getPowerSupplyFruPath(std::vector<std::string>& powSuppFrus);
+
+    /**
+     * @brief eraseInventoryPath
+     * Remove the INVENTORY_PATH - "/xyz/openbmc_project/inventory"
+     * for code convenience.
+     *
+     * @param[out] fru - Reference to the fru path whose INVENTORY_PATH is
+     * stripped off.
+     */
+    void eraseInventoryPath(std::string& fru);
+
   public:
     /**
      * @brief Dump the complete inventory in JSON format
@@ -136,7 +155,7 @@
     int updateKeyword();
 
     /**
-     * @brief A Constructor
+     * @brief Constructor
      * Constructor is called during the
      * object instantiation for dumpInventory option.
      */
