diff --git a/sdbusplus/sdbus.hpp b/sdbusplus/sdbus.hpp
index 0f2772f..5d553a2 100644
--- a/sdbusplus/sdbus.hpp
+++ b/sdbusplus/sdbus.hpp
@@ -16,6 +16,12 @@
     virtual int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot,
                                           const char *path) = 0;
 
+    virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot,
+                                         const char *path,
+                                         const char *interface,
+                                         const sd_bus_vtable *vtable,
+                                         void *userdata) = 0;
+
     virtual int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) = 0;
 
     virtual int sd_bus_call(sd_bus *bus, sd_bus_message *m, uint64_t usec,
@@ -31,6 +37,10 @@
                                                     char **interfaces) = 0;
     virtual int sd_bus_emit_object_added(sd_bus *bus, const char *path) = 0;
     virtual int sd_bus_emit_object_removed(sd_bus *bus, const char *path) = 0;
+    virtual int sd_bus_emit_properties_changed_strv(sd_bus *bus,
+                                                    const char *path,
+                                                    const char *interface,
+                                                    char **names) = 0;
 
     virtual sd_event *sd_bus_get_event(sd_bus *bus) = 0;
     virtual int sd_bus_get_unique_name(sd_bus *bus, const char **unique) = 0;
@@ -129,6 +139,15 @@
         return ::sd_bus_add_object_manager(bus, slot, path);
     }
 
+    int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot,
+                                 const char *path, const char *interface,
+                                 const sd_bus_vtable *vtable,
+                                 void *userdata) override
+    {
+        return ::sd_bus_add_object_vtable(bus, slot, path, interface, vtable,
+                                          userdata);
+    }
+
     int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) override
     {
         return ::sd_bus_attach_event(bus, e, priority);
@@ -167,6 +186,14 @@
         return ::sd_bus_emit_object_removed(bus, path);
     }
 
+    int sd_bus_emit_properties_changed_strv(sd_bus *bus, const char *path,
+                                            const char *interface,
+                                            char **names) override
+    {
+        return ::sd_bus_emit_properties_changed_strv(bus, path, interface,
+                                                     names);
+    }
+
     sd_event *sd_bus_get_event(sd_bus *bus) override
     {
         return ::sd_bus_get_event(bus);
diff --git a/sdbusplus/server/interface.hpp b/sdbusplus/server/interface.hpp
index 1e743f9..35c1fe0 100644
--- a/sdbusplus/server/interface.hpp
+++ b/sdbusplus/server/interface.hpp
@@ -5,6 +5,7 @@
 #include <sdbusplus/slot.hpp>
 #include <sdbusplus/vtable.hpp>
 #include <sdbusplus/bus.hpp>
+#include <sdbusplus/sdbus.hpp>
 
 namespace sdbusplus
 {
@@ -57,12 +58,12 @@
      */
     interface(sdbusplus::bus::bus& bus, const char* path, const char* interf,
               const sdbusplus::vtable::vtable_t* vtable, void* context) :
-        _bus(bus.get()),
-        _path(path), _interf(interf), _slot(nullptr)
+        _bus(bus.get(), bus.getInterface()),
+        _path(path), _interf(interf), _slot(nullptr), _intf(bus.getInterface())
     {
         sd_bus_slot* slot = nullptr;
-        sd_bus_add_object_vtable(_bus.get(), &slot, _path.c_str(),
-                                 _interf.c_str(), vtable, context);
+        _intf->sd_bus_add_object_vtable(_bus.get(), &slot, _path.c_str(),
+                                        _interf.c_str(), vtable, context);
 
         _slot = decltype(_slot){slot};
     }
@@ -82,8 +83,13 @@
      */
     void property_changed(const char* property)
     {
-        sd_bus_emit_properties_changed(_bus.get(), _path.c_str(),
-                                       _interf.c_str(), property, nullptr);
+        std::vector<std::string> values{property};
+        sdbusplus::bus::details::Strv p(values);
+
+        // Note: Converting to use _strv version, could also mock two pointer
+        // use-case explicitly.
+        _intf->sd_bus_emit_properties_changed_strv(
+            _bus.get(), _path.c_str(), _interf.c_str(), static_cast<char**>(p));
     }
 
     bus::bus& bus()
@@ -100,6 +106,7 @@
     std::string _path;
     std::string _interf;
     slot::slot _slot;
+    SdBusInterface* _intf;
 };
 
 } // namespace interface
diff --git a/sdbusplus/test/sdbus_mock.hpp b/sdbusplus/test/sdbus_mock.hpp
index 059eae6..e22de18 100644
--- a/sdbusplus/test/sdbus_mock.hpp
+++ b/sdbusplus/test/sdbus_mock.hpp
@@ -14,6 +14,9 @@
 
     MOCK_METHOD3(sd_bus_add_object_manager,
                  int(sd_bus *, sd_bus_slot **, const char *));
+    MOCK_METHOD6(sd_bus_add_object_vtable,
+                 int(sd_bus *, sd_bus_slot **, const char *, const char *,
+                     const sd_bus_vtable *, void *));
     MOCK_METHOD3(sd_bus_attach_event, int(sd_bus *, sd_event *, int));
     MOCK_METHOD5(sd_bus_call, int(sd_bus *, sd_bus_message *, uint64_t,
                                   sd_bus_error *, sd_bus_message **));
@@ -25,6 +28,8 @@
                  int(sd_bus *, const char *, char **));
     MOCK_METHOD2(sd_bus_emit_object_added, int(sd_bus *, const char *));
     MOCK_METHOD2(sd_bus_emit_object_removed, int(sd_bus *, const char *));
+    MOCK_METHOD4(sd_bus_emit_properties_changed_strv,
+                 int(sd_bus *, const char *, const char *, char **));
 
     MOCK_METHOD1(sd_bus_get_event, sd_event *(sd_bus *));
     MOCK_METHOD2(sd_bus_get_unique_name, int(sd_bus *, const char **));
