diff --git a/include/estoraged.hpp b/include/estoraged.hpp
index 791134d..d14a007 100644
--- a/include/estoraged.hpp
+++ b/include/estoraged.hpp
@@ -8,6 +8,7 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/exception.hpp>
 #include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/Inventory/Item/Drive/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/Volume/server.hpp>
 
 #include <filesystem>
@@ -18,6 +19,8 @@
 
 namespace estoraged
 {
+using driveInherit = sdbusplus::server::object_t<
+    sdbusplus::xyz::openbmc_project::Inventory::Item::server::Drive>;
 using eStoragedInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Inventory::Item::server::Volume>;
 using estoraged::Cryptsetup;
@@ -26,7 +29,7 @@
 /** @class eStoraged
  *  @brief eStoraged object to manage a LUKS encrypted storage device.
  */
-class EStoraged : eStoragedInherit
+class EStoraged : private eStoragedInherit, private driveInherit
 {
   public:
     /** @brief Constructor for eStoraged
@@ -47,7 +50,7 @@
               std::unique_ptr<FilesystemInterface> fsInterface =
                   std::make_unique<Filesystem>()) :
         eStoragedInherit(bus, path),
-        devPath(devPath), containerName(luksName),
+        driveInherit(bus, path), devPath(devPath), containerName(luksName),
         mountPoint("/mnt/" + luksName + "_fs"),
         cryptIface(std::move(cryptInterface)), fsIface(std::move(fsInterface))
     {}
diff --git a/src/test/estoraged_test.cpp b/src/test/estoraged_test.cpp
index 7a3286c..e77d4c6 100644
--- a/src/test/estoraged_test.cpp
+++ b/src/test/estoraged_test.cpp
@@ -48,6 +48,7 @@
     const char* testPath = "/test/openbmc_project/storage/test_dev";
     const char* estoragedInterface =
         "xyz.openbmc_project.Inventory.Item.Volume";
+    const char* driveInterface = "xyz.openbmc_project.Inventory.Item.Drive";
     sdbusplus::bus::bus bus;
     std::string passwordString;
     std::vector<uint8_t> password;
@@ -76,6 +77,11 @@
             .WillRepeatedly(Return(0));
 
         EXPECT_CALL(sdbusMock,
+                    sd_bus_add_object_vtable(IsNull(), _, StrEq(testPath),
+                                             StrEq(driveInterface), _, _))
+            .WillRepeatedly(Return(0));
+
+        EXPECT_CALL(sdbusMock,
                     sd_bus_emit_object_added(IsNull(), StrEq(testPath)))
             .WillRepeatedly(Return(0));
 
@@ -105,6 +111,11 @@
 TEST_F(EStoragedTest, FormatPass)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -155,6 +166,11 @@
 TEST_F(EStoragedTest, MountPointExistsPass)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -229,6 +245,11 @@
 TEST_F(EStoragedTest, AddKeyslotFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -247,6 +268,11 @@
 TEST_F(EStoragedTest, LoadLuksHeaderFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -267,6 +293,11 @@
 TEST_F(EStoragedTest, ActivateFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -290,6 +321,11 @@
 TEST_F(EStoragedTest, CreateFilesystemFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -315,6 +351,11 @@
 TEST_F(EStoragedTest, CreateMountPointFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -346,6 +387,11 @@
 TEST_F(EStoragedTest, MountFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -385,6 +431,11 @@
 TEST_F(EStoragedTest, UnmountFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -426,6 +477,11 @@
 TEST_F(EStoragedTest, RemoveMountPointFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
@@ -471,6 +527,11 @@
 TEST_F(EStoragedTest, DeactivateFail)
 {
     EXPECT_CALL(sdbusMock,
+                sd_bus_emit_properties_changed_strv(IsNull(), StrEq(testPath),
+                                                    StrEq(driveInterface), _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(sdbusMock,
                 sd_bus_emit_properties_changed_strv(
                     IsNull(), StrEq(testPath), StrEq(estoragedInterface), _))
         .WillRepeatedly(Return(0));
