diff --git a/hsbp-manager/CMakeLists.txt b/hsbp-manager/CMakeLists.txt
index eeb6f0a..2d7aae2 100644
--- a/hsbp-manager/CMakeLists.txt
+++ b/hsbp-manager/CMakeLists.txt
@@ -52,7 +52,7 @@
     externalproject_add (sdbusplus-project PREFIX
                          ${CMAKE_BINARY_DIR}/sdbusplus-project GIT_REPOSITORY
                          https://github.com/openbmc/sdbusplus.git GIT_TAG
-                         bed15f0cee4784acdf151cca14efdfb98cb9d397 SOURCE_DIR
+                         4212292bcf136d04b38ba5116aa568b0fa312798 SOURCE_DIR
                          ${CMAKE_BINARY_DIR}/sdbusplus-src BINARY_DIR
                          ${CMAKE_BINARY_DIR}/sdbusplus-build CONFIGURE_COMMAND
                          "" BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src
diff --git a/hsbp-manager/include/utils.hpp b/hsbp-manager/include/utils.hpp
index 002b1ed..c333089 100644
--- a/hsbp-manager/include/utils.hpp
+++ b/hsbp-manager/include/utils.hpp
@@ -35,6 +35,9 @@
                  double, int32_t, uint32_t, int16_t, uint16_t, uint8_t, bool>;
 using Association = std::tuple<std::string, std::string, std::string>;
 
+constexpr const char* assetTag =
+    "xyz.openbmc_project.Inventory.Decorator.Asset";
+
 namespace mapper
 {
 constexpr const char* busName = "xyz.openbmc_project.ObjectMapper";
diff --git a/hsbp-manager/src/hsbp_manager.cpp b/hsbp-manager/src/hsbp_manager.cpp
index f6a1b5f..d8df646 100644
--- a/hsbp-manager/src/hsbp_manager.cpp
+++ b/hsbp-manager/src/hsbp_manager.cpp
@@ -301,7 +301,39 @@
         muxes(std::make_shared<boost::container::flat_set<Mux>>())
     {
     }
-    void run()
+    void populateAsset(const std::string& rootPath, const std::string& busname)
+    {
+        conn->async_method_call(
+            [assetIface{assetInterface}, hsbpIface{hsbpItemIface}](
+                const boost::system::error_code ec,
+                const boost::container::flat_map<
+                    std::string, std::variant<std::string>>& values) mutable {
+                if (ec)
+                {
+                    std::cerr
+                        << "Error getting asset tag from HSBP configuration\n";
+
+                    return;
+                }
+                assetIface = objServer.add_interface(
+                    hsbpIface->get_object_path(), assetTag);
+                for (const auto& [key, value] : values)
+                {
+                    const std::string* ptr = std::get_if<std::string>(&value);
+                    if (ptr == nullptr)
+                    {
+                        std::cerr << key << " Invalid type!\n";
+                        continue;
+                    }
+                    assetIface->register_property(key, *ptr);
+                }
+                assetIface->initialize();
+            },
+            busname, rootPath, "org.freedesktop.DBus.Properties", "GetAll",
+            assetTag);
+    }
+
+    void run(const std::string& rootPath, const std::string& busname)
     {
         file = open(("/dev/i2c-" + std::to_string(bus)).c_str(),
                     O_RDWR | O_CLOEXEC);
@@ -334,6 +366,11 @@
         hsbpItemIface->register_property("PrettyName", name);
         hsbpItemIface->initialize();
 
+        storageInterface = objServer.add_interface(
+            hsbpItemIface->get_object_path(),
+            "xyz.openbmc_project.Inventory.Item.StorageController");
+        storageInterface->initialize();
+
         versionIface =
             objServer.add_interface(hsbpItemIface->get_object_path(),
                                     "xyz.openbmc_project.Software.Version");
@@ -348,6 +385,8 @@
         getPresence(presence);
         getIFDET(ifdet);
 
+        populateAsset(rootPath, busname);
+
         createDrives();
 
         runTimer();
@@ -599,6 +638,8 @@
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> hsbpItemIface;
     std::shared_ptr<sdbusplus::asio::dbus_interface> versionIface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> storageInterface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> assetInterface;
 
     std::list<Drive> drives;
     std::vector<std::shared_ptr<Led>> leds;
@@ -622,8 +663,6 @@
 {
     static constexpr const char* nvmeType =
         "xyz.openbmc_project.Inventory.Item.NVMe";
-    static const std::string assetTag =
-        "xyz.openbmc_project.Inventory.Decorator.Asset";
 
     conn->async_method_call(
         [](const boost::system::error_code ec, const GetSubTreeType& subtree) {
@@ -911,9 +950,9 @@
 
                 const std::string& owner = objDict.begin()->first;
                 conn->async_method_call(
-                    [path](const boost::system::error_code ec2,
-                           const boost::container::flat_map<
-                               std::string, BasicVariantType>& resp) {
+                    [path, owner](const boost::system::error_code ec2,
+                                  const boost::container::flat_map<
+                                      std::string, BasicVariantType>& resp) {
                         if (ec2)
                         {
                             std::cerr << "Error Getting Config "
@@ -955,7 +994,7 @@
                         const auto& [backplane, status] = backplanes.emplace(
                             *name,
                             Backplane(*bus, *address, *backplaneIndex, *name));
-                        backplane->second.run();
+                        backplane->second.run(parentPath, owner);
                         populateMuxes(backplane->second.muxes, parentPath);
                     },
                     owner, path, "org.freedesktop.DBus.Properties", "GetAll",
