diff --git a/power-supply/example/psu_fru.json b/power-supply/example/psu_fru.json
deleted file mode 100644
index f7da0a1..0000000
--- a/power-supply/example/psu_fru.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "inventoryPMBusAccessType": "HwmonDeviceDebug",
-  "fruConfigs": [
-    {
-      "propertyName": "PartNumber",
-      "fileName": "part_number",
-      "interface": "xyz.openbmc_project.Inventory.Decorator.Asset"
-    },
-    {
-      "propertyName": "SerialNumber",
-      "fileName": "serial_number",
-      "interface": "xyz.openbmc_project.Inventory.Decorator.Asset"
-    },
-    {
-      "propertyName": "Manufacturer",
-      "fileName": "manufacturer",
-      "interface": "xyz.openbmc_project.Inventory.Decorator.Asset"
-    },
-    {
-      "propertyName": "Model",
-      "fileName": "ccin",
-      "interface": "xyz.openbmc_project.Inventory.Decorator.Asset"
-    },
-    {
-      "propertyName": "Version",
-      "fileName": "fw_version",
-      "interface": "xyz.openbmc_project.Software.Version"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/power-supply/power_supply.cpp b/power-supply/power_supply.cpp
index 487921d..0758d2a 100644
--- a/power-supply/power_supply.cpp
+++ b/power-supply/power_supply.cpp
@@ -13,6 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "config.h"
+
 #include "power_supply.hpp"
 
 #include "elog-errors.hpp"
@@ -23,7 +25,6 @@
 
 #include <functional>
 #include <org/open_power/Witherspoon/Fault/error.hpp>
-#include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/Common/Device/error.hpp>
 #include <xyz/openbmc_project/Software/Version/server.hpp>
@@ -52,19 +53,11 @@
 constexpr auto MESSAGE_PROP = "Message";
 constexpr auto RESOLVED_PROP = "Resolved";
 constexpr auto PRESENT_PROP = "Present";
-constexpr auto SN_PROP = "SerialNumber";
-constexpr auto PN_PROP = "PartNumber";
-constexpr auto MODEL_PROP = "Model";
-constexpr auto VERSION_PROP = "Version";
 constexpr auto VERSION_PURPOSE_PROP = "Purpose";
 
 constexpr auto INVENTORY_OBJ_PATH = "/xyz/openbmc_project/inventory";
 constexpr auto POWER_OBJ_PATH = "/org/openbmc/control/power0";
 
-constexpr auto SERIAL_NUMBER = "serial_number";
-constexpr auto PART_NUMBER = "part_number";
-constexpr auto FW_VERSION = "fw_version";
-constexpr auto CCIN = "ccin";
 constexpr auto INPUT_HISTORY = "input_history";
 
 PowerSupply::PowerSupply(const std::string& name, size_t inst,
@@ -88,6 +81,8 @@
     powerOnInterval(t),
     powerOnTimer(e, std::bind([this]() { this->powerOn = true; }))
 {
+    getAccessType();
+
     using namespace sdbusplus::bus;
     using namespace witherspoon::pmbus;
     std::uint16_t statusWord = 0;
@@ -124,6 +119,41 @@
     updatePowerState();
 }
 
+void PowerSupply::getAccessType()
+{
+    using namespace witherspoon::pmbus;
+    using namespace witherspoon::power::util;
+    fruJson = loadJSONFromFile(PSU_JSON_PATH);
+    if (fruJson == nullptr)
+    {
+        log<level::ERR>("InternalFailure when parsing the JSON file");
+        return;
+    }
+
+    auto type = fruJson.at("inventoryPMBusAccessType");
+
+    if (type == "Hwmon")
+    {
+        inventoryPMBusAccessType = Type::Hwmon;
+    }
+    else if (type == "DeviceDebug")
+    {
+        inventoryPMBusAccessType = Type::DeviceDebug;
+    }
+    else if (type == "Debug")
+    {
+        inventoryPMBusAccessType = Type::Debug;
+    }
+    else if (type == "HwmonDeviceDebug")
+    {
+        inventoryPMBusAccessType = Type::HwmonDeviceDebug;
+    }
+    else
+    {
+        inventoryPMBusAccessType = Type::Base;
+    }
+}
+
 void PowerSupply::captureCmd(util::NamesValues& nv, const std::string& cmd,
                              witherspoon::pmbus::Type type)
 {
@@ -647,52 +677,6 @@
     using namespace witherspoon::pmbus;
     using namespace sdbusplus::message;
 
-    // If any of these accesses fail, the fields will just be
-    // blank in the inventory.  Leave logging ReadFailure errors
-    // to analyze() as it runs continuously and will most
-    // likely hit and threshold them first anyway.  The
-    // readString() function will do the tracing of the failing
-    // path so this code doesn't need to.
-    std::string pn;
-    std::string sn;
-    std::string ccin;
-    std::string version;
-
-    if (present)
-    {
-        try
-        {
-            sn = pmbusIntf.readString(SERIAL_NUMBER, Type::HwmonDeviceDebug);
-        }
-        catch (ReadFailure& e)
-        {
-        }
-
-        try
-        {
-            pn = pmbusIntf.readString(PART_NUMBER, Type::HwmonDeviceDebug);
-        }
-        catch (ReadFailure& e)
-        {
-        }
-
-        try
-        {
-            ccin = pmbusIntf.readString(CCIN, Type::HwmonDeviceDebug);
-        }
-        catch (ReadFailure& e)
-        {
-        }
-
-        try
-        {
-            version = pmbusIntf.readString(FW_VERSION, Type::HwmonDeviceDebug);
-        }
-        catch (ReadFailure& e)
-        {
-        }
-    }
-
     // Build the object map and send it to the inventory
     using Properties = std::map<std::string, variant<std::string>>;
     using Interfaces = std::map<std::string, Properties>;
@@ -702,12 +686,45 @@
     Interfaces interfaces;
     Object object;
 
-    assetProps.emplace(SN_PROP, sn);
-    assetProps.emplace(PN_PROP, pn);
-    assetProps.emplace(MODEL_PROP, ccin);
-    interfaces.emplace(ASSET_IFACE, std::move(assetProps));
+    // If any of these accesses fail, the fields will just be
+    // blank in the inventory.  Leave logging ReadFailure errors
+    // to analyze() as it runs continuously and will most
+    // likely hit and threshold them first anyway.  The
+    // readString() function will do the tracing of the failing
+    // path so this code doesn't need to.
+    for (const auto& fru : fruJson.at("fruConfigs"))
+    {
+        if (fru.at("interface") == ASSET_IFACE)
+        {
+            try
+            {
+                assetProps.emplace(
+                    fru.at("propertyName"),
+                    present ? pmbusIntf.readString(fru.at("fileName"),
+                                                   inventoryPMBusAccessType)
+                            : "");
+            }
+            catch (ReadFailure& e)
+            {
+            }
+        }
+        else if (fru.at("interface") == VERSION_IFACE)
+        {
+            try
+            {
+                versionProps.emplace(
+                    fru.at("propertyName"),
+                    present ? pmbusIntf.readString(fru.at("fileName"),
+                                                   inventoryPMBusAccessType)
+                            : "");
+            }
+            catch (const std::exception& e)
+            {
+            }
+        }
+    }
 
-    versionProps.emplace(VERSION_PROP, version);
+    interfaces.emplace(ASSET_IFACE, std::move(assetProps));
     interfaces.emplace(VERSION_IFACE, std::move(versionProps));
 
     // For Notify(), just send the relative path of the inventory
diff --git a/power-supply/power_supply.hpp b/power-supply/power_supply.hpp
index d997423..0968a78 100644
--- a/power-supply/power_supply.hpp
+++ b/power-supply/power_supply.hpp
@@ -6,6 +6,7 @@
 #include "pmbus.hpp"
 #include "record_manager.hpp"
 
+#include <nlohmann/json.hpp>
 #include <sdbusplus/bus/match.hpp>
 #include <sdeventplus/clock.hpp>
 #include <sdeventplus/event.hpp>
@@ -17,7 +18,6 @@
 {
 namespace psu
 {
-
 namespace sdbusRule = sdbusplus::bus::match::rules;
 
 constexpr auto FAULT_COUNT = 3;
@@ -263,6 +263,22 @@
     size_t syncGPIONumber = 0;
 
     /**
+     * @brief The type of the power supply inventory pmbus access.
+     */
+    witherspoon::pmbus::Type inventoryPMBusAccessType;
+
+    /**
+     * @brief The JSON from the parsed power supply FRU JSON File.
+     */
+    nlohmann::json fruJson;
+
+    /**
+     * @brief get the power supply access type from the JSON file.
+     *
+     */
+    void getAccessType();
+
+    /**
      * @brief Callback for inventory property changes
      *
      * Process change of Present property for power supply.
@@ -376,7 +392,8 @@
      * Properties added:
      * - Serial Number
      * - Part Number
-     * - CCIN (Customer Card Identification Number) - added as the Model
+     * - Manufacturer
+     * - Model
      * - Firmware version
      */
     void updateInventory();
