diff --git a/include/sdbusplus/bus.hpp b/include/sdbusplus/bus.hpp
index 676a445..874c364 100644
--- a/include/sdbusplus/bus.hpp
+++ b/include/sdbusplus/bus.hpp
@@ -22,37 +22,6 @@
 namespace sdbusplus
 {
 
-// Forward declare.
-namespace server
-{
-namespace interface
-{
-struct interface;
-}
-} // namespace server
-namespace server
-{
-namespace manager
-{
-struct manager;
-}
-} // namespace server
-namespace server
-{
-namespace object
-{
-template <class...>
-struct object;
-}
-} // namespace server
-namespace bus
-{
-namespace match
-{
-struct match;
-}
-} // namespace bus
-
 namespace bus
 {
 
@@ -116,6 +85,8 @@
 /* @brief Alias 'bus' to a unique_ptr type for auto-release. */
 using bus = std::unique_ptr<sd_bus, BusDeleter>;
 
+struct bus_friend;
+
 } // namespace details
 
 /** @class bus
@@ -476,14 +447,10 @@
         return _intf;
     }
 
-    friend struct server::interface::interface;
-    friend struct server::manager::manager;
-    template <class... Args>
-    friend struct server::object::object;
-    friend struct match::match;
+    friend struct details::bus_friend;
 
   protected:
-    busp_t get()
+    busp_t get() noexcept
     {
         return _bus.get();
     }
@@ -586,6 +553,23 @@
     return bus;
 }
 
+namespace details
+{
+
+// Some sdbusplus classes need to be able to pass the underlying bus pointer
+// along to sd_bus calls, but we don't want to make it available for everyone.
+// Define a class which can be inherited explicitly (intended for internal users
+// only) to get the underlying bus pointer.
+struct bus_friend
+{
+    static busp_t get_busp(sdbusplus::bus::bus& b) noexcept
+    {
+        return b.get();
+    }
+};
+
+} // namespace details
+
 } // namespace bus
 
 using bus_t = bus::bus;
diff --git a/include/sdbusplus/bus/match.hpp b/include/sdbusplus/bus/match.hpp
index cc6c19c..3032712 100644
--- a/include/sdbusplus/bus/match.hpp
+++ b/include/sdbusplus/bus/match.hpp
@@ -17,7 +17,7 @@
 namespace match
 {
 
-struct match
+struct match : private sdbusplus::bus::details::bus_friend
 {
     /* Define all of the basic class operations:
      *     Not allowed:
@@ -45,7 +45,7 @@
           sd_bus_message_handler_t handler, void* context = nullptr)
     {
         sd_bus_slot* slot = nullptr;
-        sd_bus_add_match(bus.get(), &slot, match, handler, context);
+        sd_bus_add_match(get_busp(bus), &slot, match, handler, context);
 
         _slot = std::move(slot);
     }
@@ -66,7 +66,7 @@
         _callback(std::make_unique<callback_t>(std::move(callback)))
     {
         sd_bus_slot* slot = nullptr;
-        sd_bus_add_match(bus.get(), &slot, match, callCallback,
+        sd_bus_add_match(get_busp(bus), &slot, match, callCallback,
                          _callback.get());
 
         _slot = std::move(slot);
diff --git a/include/sdbusplus/server/interface.hpp b/include/sdbusplus/server/interface.hpp
index 946c50e..be450ac 100644
--- a/include/sdbusplus/server/interface.hpp
+++ b/include/sdbusplus/server/interface.hpp
@@ -32,7 +32,7 @@
  *  implementation should 'has-a' server::interface with a name sufficiently
  *  unique to prevent name collisions in multiple-inheritence situations.
  */
-struct interface final
+struct interface final : private sdbusplus::bus::details::bus_friend
 {
     /* Define all of the basic class operations:
      *     Not allowed:
diff --git a/include/sdbusplus/server/manager.hpp b/include/sdbusplus/server/manager.hpp
index 32519f4..797fb0f 100644
--- a/include/sdbusplus/server/manager.hpp
+++ b/include/sdbusplus/server/manager.hpp
@@ -19,7 +19,7 @@
  *  Wraps sd_bus_add_object_manager so that an sd-bus owned object manager
  *  can be installed at a path and automatically removed when destructed.
  */
-struct manager
+struct manager : private sdbusplus::bus::details::bus_friend
 {
     /* Define all of the basic class operations:
      *     Not allowed:
@@ -46,7 +46,7 @@
         sd_bus_slot* slot = nullptr;
         sdbusplus::SdBusInterface* intf = bus.getInterface();
 
-        intf->sd_bus_add_object_manager(bus.get(), &slot, path);
+        intf->sd_bus_add_object_manager(get_busp(bus), &slot, path);
 
         _slot = std::move(slot);
     }
diff --git a/include/sdbusplus/server/object.hpp b/include/sdbusplus/server/object.hpp
index 8553bd4..f258435 100644
--- a/include/sdbusplus/server/object.hpp
+++ b/include/sdbusplus/server/object.hpp
@@ -88,7 +88,9 @@
  *
  */
 template <class... Args>
-struct object : details::compose<Args...>
+struct object :
+    details::compose<Args...>,
+    private sdbusplus::bus::details::bus_friend
 {
     /* Define all of the basic class operations:
      *     Not allowed:
@@ -123,7 +125,7 @@
     object(bus_t& bus, const char* path,
            action act = action::emit_object_added) :
         details::compose<Args...>(bus, path),
-        __sdbusplus_server_object_bus(bus.get(), bus.getInterface()),
+        __sdbusplus_server_object_bus(get_busp(bus), bus.getInterface()),
         __sdbusplus_server_object_path(path),
         __sdbusplus_server_object_emitremoved(false),
         __sdbusplus_server_object_intf(bus.getInterface())
@@ -144,7 +146,7 @@
         if (__sdbusplus_server_object_emitremoved)
         {
             __sdbusplus_server_object_intf->sd_bus_emit_object_removed(
-                __sdbusplus_server_object_bus.get(),
+                get_busp(__sdbusplus_server_object_bus),
                 __sdbusplus_server_object_path.c_str());
         }
     }
@@ -155,7 +157,7 @@
         if (!__sdbusplus_server_object_emitremoved)
         {
             __sdbusplus_server_object_intf->sd_bus_emit_object_added(
-                __sdbusplus_server_object_bus.get(),
+                get_busp(__sdbusplus_server_object_bus),
                 __sdbusplus_server_object_path.c_str());
             __sdbusplus_server_object_emitremoved = true;
         }
diff --git a/src/server/interface.cpp b/src/server/interface.cpp
index 653e6d6..e47f6ef 100644
--- a/src/server/interface.cpp
+++ b/src/server/interface.cpp
@@ -12,13 +12,13 @@
 interface::interface(sdbusplus::bus_t& bus, const char* path,
                      const char* interf, const sdbusplus::vtable_t* vtable,
                      void* context) :
-    _bus(bus.get(), bus.getInterface()),
+    _bus(get_busp(bus), bus.getInterface()),
     _path(path), _interf(interf), _intf(bus.getInterface()),
     _interface_added(false)
 {
     sd_bus_slot* slot = nullptr;
-    int r = _intf->sd_bus_add_object_vtable(_bus.get(), &slot, _path.c_str(),
-                                            _interf.c_str(), vtable, context);
+    int r = _intf->sd_bus_add_object_vtable(
+        get_busp(_bus), &slot, _path.c_str(), _interf.c_str(), vtable, context);
     if (r < 0)
     {
         throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
@@ -38,7 +38,7 @@
 
     // 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(),
+    _intf->sd_bus_emit_properties_changed_strv(get_busp(_bus), _path.c_str(),
                                                _interf.c_str(), values.data());
 }
 
