diff --git a/include/ipmid/api.hpp b/include/ipmid/api.hpp
index 68e24ea..2366b91 100644
--- a/include/ipmid/api.hpp
+++ b/include/ipmid/api.hpp
@@ -35,6 +35,8 @@ std::shared_ptr<boost::asio::io_context> getIoContext();
 
 // any client can interact with the main sdbus
 std::shared_ptr<sdbusplus::asio::connection> getSdBus();
+// any client can interact with the object server
+std::shared_ptr<sdbusplus::asio::object_server> getObjectServer();
 
 /**
  * @brief post some work to the async exection queue
diff --git a/ipmid-new.cpp b/ipmid-new.cpp
index fd93097..c0b6c7d 100644
--- a/ipmid-new.cpp
+++ b/ipmid-new.cpp
@@ -810,7 +810,8 @@ std::unique_ptr<phosphor::host::command::Manager>& ipmid_get_host_cmd_manager()
 // to be used except here (or maybe a unit test), so declare them here
 extern void setIoContext(std::shared_ptr<boost::asio::io_context>& newIo);
 extern void setSdBus(std::shared_ptr<sdbusplus::asio::connection>& newBus);
-
+extern void
+    setObjectServer(std::shared_ptr<sdbusplus::asio::object_server>& newServer);
 int main(int argc, char* argv[])
 {
     // Connect to system bus
@@ -874,9 +875,10 @@ int main(int argc, char* argv[])
 
     sdbusp->request_name("xyz.openbmc_project.Ipmi.Host");
     // Add bindings for inbound IPMI requests
-    auto server = sdbusplus::asio::object_server(sdbusp);
-    auto iface = server.add_interface("/xyz/openbmc_project/Ipmi",
-                                      "xyz.openbmc_project.Ipmi.Server");
+    auto server = std::make_shared<sdbusplus::asio::object_server>(sdbusp);
+    setObjectServer(server);
+    auto iface = server->add_interface("/xyz/openbmc_project/Ipmi",
+                                       "xyz.openbmc_project.Ipmi.Server");
     iface->register_method("execute", ipmi::executionEntry);
     iface->initialize();
 
diff --git a/libipmid/sdbus-asio.cpp b/libipmid/sdbus-asio.cpp
index 0f4cdaa..2ac9c1e 100644
--- a/libipmid/sdbus-asio.cpp
+++ b/libipmid/sdbus-asio.cpp
@@ -1,5 +1,6 @@
 #include <boost/asio/io_context.hpp>
 #include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
 
 #include <memory>
 
@@ -8,6 +9,8 @@ namespace
 
 std::shared_ptr<boost::asio::io_context> ioCtx;
 std::shared_ptr<sdbusplus::asio::connection> sdbusp;
+std::shared_ptr<sdbusplus::asio::object_server> objServer;
+
 
 } // namespace
 
@@ -30,3 +33,13 @@ std::shared_ptr<sdbusplus::asio::connection> getSdBus()
 {
     return sdbusp;
 }
+
+void setObjectServer(std::shared_ptr<sdbusplus::asio::object_server>& s)
+{
+    objServer = s;
+}
+
+std::shared_ptr<sdbusplus::asio::object_server> getObjectServer()
+{
+    return objServer;
+}
\ No newline at end of file
diff --git a/storagehandler.cpp b/storagehandler.cpp
index 405a8a1..6bc207b 100644
--- a/storagehandler.cpp
+++ b/storagehandler.cpp
@@ -214,6 +214,28 @@ void initSELCache()
     selCacheMapInitialized = true;
 }
 
+std::shared_ptr<sdbusplus::asio::dbus_interface> sensorInfoInterface
+    __attribute__((init_priority(101)));
+void initSensorInfoOnDBus()
+{
+    // For now the sensor path and type code are needed.
+    auto init = []() {
+        auto objServer = getObjectServer();
+        std::unordered_map<std::string, uint16_t> sensorInfo;
+        for (const auto& s : invSensors)
+        {
+            sensorInfo[s.first] = s.second.eventReadingType;
+        }
+        sensorInfoInterface =
+            objServer->add_interface("/xyz/openbmc_project/Ipmi/SensorInfo",
+                                     "xyz.openbmc_project.IPMI.SensorInfo");
+        sensorInfoInterface->register_property("SensorInfo", sensorInfo);
+        sensorInfoInterface->initialize();
+    };
+    boost::asio::post(*getIoContext(), std::move(init));
+}
+
+
 /**
  * @enum Device access mode
  */
@@ -899,6 +921,7 @@ void register_netfn_storage_functions()
 {
     selCacheMapInitialized = false;
     initSELCache();
+    initSensorInfoOnDBus();
     // Handlers with dbus-sdr handler implementation.
     // Do not register the hander if it dynamic sensors stack is used.
 
