diff --git a/src/async/match.cpp b/src/async/match.cpp
index ae8ed73..ed5237b 100644
--- a/src/async/match.cpp
+++ b/src/async/match.cpp
@@ -3,7 +3,7 @@
 namespace sdbusplus::async
 {
 
-match::match(context& ctx, const std::string_view& pattern)
+slot_t match::makeMatch(context& ctx, const std::string_view& pattern)
 {
     // C-style callback to redirect into this::handle_match.
     static auto match_cb =
@@ -12,7 +12,7 @@
         return 0;
     };
 
-    sd_bus_slot* s = nullptr;
+    sd_bus_slot* s;
     auto r = sd_bus_add_match(get_busp(ctx.get_bus()), &s, pattern.data(),
                               match_cb, this);
     if (r < 0)
@@ -20,9 +20,13 @@
         throw exception::SdBusError(-r, "sd_bus_add_match (async::match)");
     }
 
-    slot = std::move(s);
+    return slot_t{s, &sdbus_impl};
 }
 
+match::match(context& ctx, const std::string_view& pattern) :
+    slot(makeMatch(ctx, pattern))
+{}
+
 match::~match()
 {
     match_ns::match_completion* c = nullptr;
diff --git a/src/bus/match.cpp b/src/bus/match.cpp
index c5b9b19..033a47f 100644
--- a/src/bus/match.cpp
+++ b/src/bus/match.cpp
@@ -7,21 +7,22 @@
 namespace sdbusplus::bus::match
 {
 
-static sd_bus_slot* makeMatch(sd_bus* bus, const char* _match,
-                              sd_bus_message_handler_t handler, void* context)
+static slot_t makeMatch(SdBusInterface* intf, sd_bus* bus, const char* _match,
+                        sd_bus_message_handler_t handler, void* context)
 {
     sd_bus_slot* slot;
-    int r = sd_bus_add_match(bus, &slot, _match, handler, context);
+    int r = intf->sd_bus_add_match(bus, &slot, _match, handler, context);
     if (r < 0)
     {
         throw exception::SdBusError(-r, "sd_bus_match");
     }
-    return slot;
+    return slot_t{slot, intf};
 }
 
 match::match(sdbusplus::bus_t& bus, const char* _match,
              sd_bus_message_handler_t handler, void* context) :
-    _slot(makeMatch(get_busp(bus), _match, handler, context))
+    _slot(
+        makeMatch(bus.getInterface(), get_busp(bus), _match, handler, context))
 {}
 
 // The callback is 'noexcept' because it is called from C code (sd-bus).
@@ -36,7 +37,8 @@
 
 match::match(sdbusplus::bus_t& bus, const char* _match, callback_t callback) :
     _callback(std::make_unique<callback_t>(std::move(callback))),
-    _slot(makeMatch(get_busp(bus), _match, matchCallback, _callback.get()))
+    _slot(makeMatch(bus.getInterface(), get_busp(bus), _match, matchCallback,
+                    _callback.get()))
 {}
 
 } // namespace sdbusplus::bus::match
diff --git a/src/server/interface.cpp b/src/server/interface.cpp
index e47f6ef..d3a975f 100644
--- a/src/server/interface.cpp
+++ b/src/server/interface.cpp
@@ -9,24 +9,29 @@
 namespace interface
 {
 
-interface::interface(sdbusplus::bus_t& bus, const char* path,
-                     const char* interf, const sdbusplus::vtable_t* vtable,
-                     void* context) :
-    _bus(get_busp(bus), bus.getInterface()),
-    _path(path), _interf(interf), _intf(bus.getInterface()),
-    _interface_added(false)
+static slot_t makeObjVtable(SdBusInterface* intf, sd_bus* bus, const char* path,
+                            const char* interf,
+                            const sdbusplus::vtable_t* vtable, void* context)
 {
-    sd_bus_slot* slot = nullptr;
-    int r = _intf->sd_bus_add_object_vtable(
-        get_busp(_bus), &slot, _path.c_str(), _interf.c_str(), vtable, context);
+    sd_bus_slot* slot;
+    int r = intf->sd_bus_add_object_vtable(bus, &slot, path, interf, vtable,
+                                           context);
     if (r < 0)
     {
         throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
     }
-
-    _slot = std::move(slot);
+    return slot_t{slot, intf};
 }
 
+interface::interface(sdbusplus::bus_t& bus, const char* path,
+                     const char* interf, const sdbusplus::vtable_t* vtable,
+                     void* context) :
+    _bus(get_busp(bus), bus.getInterface()),
+    _path(path), _interf(interf), _interface_added(false),
+    _slot(makeObjVtable(_bus.getInterface(), get_busp(_bus), _path.c_str(),
+                        _interf.c_str(), vtable, context))
+{}
+
 interface::~interface()
 {
     emit_removed();
@@ -38,8 +43,8 @@
 
     // Note: Converting to use _strv version, could also mock two pointer
     // use-case explicitly.
-    _intf->sd_bus_emit_properties_changed_strv(get_busp(_bus), _path.c_str(),
-                                               _interf.c_str(), values.data());
+    _bus.getInterface()->sd_bus_emit_properties_changed_strv(
+        get_busp(_bus), _path.c_str(), _interf.c_str(), values.data());
 }
 
 } // namespace interface
