diff --git a/example/calculator-server.cpp b/example/calculator-server.cpp
index c089d91..c31fc19 100644
--- a/example/calculator-server.cpp
+++ b/example/calculator-server.cpp
@@ -13,7 +13,7 @@
 struct Calculator : Calculator_inherit
 {
     /** Constructor */
-    Calculator(sdbusplus::bus::bus& bus, const char* path) :
+    Calculator(sdbusplus::bus_t& bus, const char* path) :
         Calculator_inherit(bus, path)
     {}
 
diff --git a/include/sdbusplus/asio/connection.hpp b/include/sdbusplus/asio/connection.hpp
index 7e94cdd..a164ac1 100644
--- a/include/sdbusplus/asio/connection.hpp
+++ b/include/sdbusplus/asio/connection.hpp
@@ -46,18 +46,18 @@
 /**
  * A connection to a bus, through which messages may be sent or received.
  */
-class connection : public sdbusplus::bus::bus
+class connection : public sdbusplus::bus_t
 {
   public:
     // default to system bus
     connection(boost::asio::io_context& io) :
-        sdbusplus::bus::bus(sdbusplus::bus::new_default()), io_(io), socket(io_)
+        sdbusplus::bus_t(sdbusplus::bus::new_default()), io_(io), socket(io_)
     {
         socket.assign(get_fd());
         read_wait();
     }
     connection(boost::asio::io_context& io, sd_bus* bus) :
-        sdbusplus::bus::bus(bus), io_(io), socket(io_)
+        sdbusplus::bus_t(bus), io_(io), socket(io_)
     {
         socket.assign(get_fd());
         read_wait();
diff --git a/include/sdbusplus/asio/object_server.hpp b/include/sdbusplus/asio/object_server.hpp
index 6bd90e0..d03c602 100644
--- a/include/sdbusplus/asio/object_server.hpp
+++ b/include/sdbusplus/asio/object_server.hpp
@@ -748,7 +748,7 @@
         vtable_.emplace_back(vtable::end());
 
         interface_ = std::make_unique<sdbusplus::server::interface::interface>(
-            static_cast<sdbusplus::bus::bus&>(*conn_), path_.c_str(),
+            static_cast<sdbusplus::bus_t&>(*conn_), path_.c_str(),
             name_.c_str(), static_cast<const sd_bus_vtable*>(&vtable_[0]),
             this);
         conn_->emit_interfaces_added(path_.c_str(),
@@ -857,7 +857,7 @@
     {
         managers_.emplace_back(
             std::make_unique<server::manager::manager>(server::manager::manager(
-                static_cast<sdbusplus::bus::bus&>(*conn_), path.c_str())));
+                static_cast<sdbusplus::bus_t&>(*conn_), path.c_str())));
     }
 
     bool remove_interface(const std::shared_ptr<dbus_interface>& iface)
diff --git a/include/sdbusplus/bus.hpp b/include/sdbusplus/bus.hpp
index 8c6094a..676a445 100644
--- a/include/sdbusplus/bus.hpp
+++ b/include/sdbusplus/bus.hpp
@@ -588,6 +588,8 @@
 
 } // namespace bus
 
+using bus_t = bus::bus;
+
 /** @brief Get the dbus bus from the message.
  *
  *  @return The dbus bus.
@@ -596,7 +598,7 @@
 {
     sd_bus* b = nullptr;
     b = _intf->sd_bus_message_get_bus(_msg.get());
-    return bus::bus(b, _intf);
+    return bus_t(b, _intf);
 }
 
 } // namespace sdbusplus
diff --git a/include/sdbusplus/bus/match.hpp b/include/sdbusplus/bus/match.hpp
index 9d4b363..be391b2 100644
--- a/include/sdbusplus/bus/match.hpp
+++ b/include/sdbusplus/bus/match.hpp
@@ -41,7 +41,7 @@
      *  @param[in] handler - The callback for matches.
      *  @param[in] context - An optional context to pass to the handler.
      */
-    match(sdbusplus::bus::bus& bus, const char* match,
+    match(sdbusplus::bus_t& bus, const char* match,
           sd_bus_message_handler_t handler, void* context = nullptr) :
         _slot(nullptr)
     {
@@ -50,7 +50,7 @@
 
         _slot = decltype(_slot){slot};
     }
-    match(sdbusplus::bus::bus& bus, const std::string& _match,
+    match(sdbusplus::bus_t& bus, const std::string& _match,
           sd_bus_message_handler_t handler, void* context = nullptr) :
         match(bus, _match.c_str(), handler, context)
     {}
@@ -63,7 +63,7 @@
      *  @param[in] match - The match to register.
      *  @param[in] callback - The callback for matches.
      */
-    match(sdbusplus::bus::bus& bus, const char* match, callback_t callback) :
+    match(sdbusplus::bus_t& bus, const char* match, callback_t callback) :
         _slot(nullptr),
         _callback(std::make_unique<callback_t>(std::move(callback)))
     {
@@ -73,7 +73,7 @@
 
         _slot = decltype(_slot){slot};
     }
-    match(sdbusplus::bus::bus& bus, const std::string& _match,
+    match(sdbusplus::bus_t& bus, const std::string& _match,
           callback_t callback) :
         match(bus, _match.c_str(), callback)
     {}
diff --git a/include/sdbusplus/server/interface.hpp b/include/sdbusplus/server/interface.hpp
index f12270c..446e023 100644
--- a/include/sdbusplus/server/interface.hpp
+++ b/include/sdbusplus/server/interface.hpp
@@ -57,7 +57,7 @@
      *  @param[in] context - User-defined context, which is often 'this' from
      *                       the interface implementation class.
      */
-    interface(sdbusplus::bus::bus& bus, const char* path, const char* interf,
+    interface(sdbusplus::bus_t& bus, const char* path, const char* interf,
               const sdbusplus::vtable::vtable_t* vtable, void* context);
 
     ~interface();
@@ -97,7 +97,7 @@
         }
     }
 
-    bus::bus& bus()
+    bus_t& bus()
     {
         return _bus;
     }
@@ -107,7 +107,7 @@
     }
 
   private:
-    bus::bus _bus;
+    bus_t _bus;
     std::string _path;
     std::string _interf;
     slot::slot _slot;
diff --git a/include/sdbusplus/server/manager.hpp b/include/sdbusplus/server/manager.hpp
index 7c10bb3..2a71127 100644
--- a/include/sdbusplus/server/manager.hpp
+++ b/include/sdbusplus/server/manager.hpp
@@ -41,7 +41,7 @@
      *  @param[in] bus - The bus to register on.
      *  @param[in] path - The path to register.
      */
-    manager(sdbusplus::bus::bus& bus, const char* path) : _slot(nullptr)
+    manager(sdbusplus::bus_t& bus, const char* path) : _slot(nullptr)
     {
         sd_bus_slot* slot = nullptr;
         sdbusplus::SdBusInterface* intf = bus.getInterface();
diff --git a/include/sdbusplus/server/object.hpp b/include/sdbusplus/server/object.hpp
index 5481f79..8553bd4 100644
--- a/include/sdbusplus/server/object.hpp
+++ b/include/sdbusplus/server/object.hpp
@@ -44,7 +44,7 @@
 template <class T, class... Rest>
 struct compose_impl : T, compose_impl<Rest...>
 {
-    compose_impl(bus::bus& bus, const char* path) :
+    compose_impl(bus_t& bus, const char* path) :
         T(bus, path), compose_impl<Rest...>(bus, path)
     {}
 };
@@ -53,7 +53,7 @@
 template <class T>
 struct compose_impl<T> : T
 {
-    compose_impl(bus::bus& bus, const char* path) : T(bus, path)
+    compose_impl(bus_t& bus, const char* path) : T(bus, path)
     {}
 };
 
@@ -61,7 +61,7 @@
 template <class... Args>
 struct compose : compose_impl<Args...>
 {
-    compose(bus::bus& bus, const char* path) : compose_impl<Args...>(bus, path)
+    compose(bus_t& bus, const char* path) : compose_impl<Args...>(bus, path)
     {}
 };
 
@@ -69,7 +69,7 @@
 template <>
 struct compose<>
 {
-    compose(bus::bus& /*bus*/, const char* /*path*/)
+    compose(bus_t& /*bus*/, const char* /*path*/)
     {}
 };
 
@@ -120,7 +120,7 @@
      *                           object needs custom property init before the
      *                           signal can be sent.
      */
-    object(bus::bus& bus, const char* path,
+    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()),
@@ -132,7 +132,7 @@
         check_action(act);
     }
 
-    object(bus::bus& bus, const char* path, bool deferSignal) :
+    object(bus_t& bus, const char* path, bool deferSignal) :
         object(bus, path,
                deferSignal ? action::defer_emit : action::emit_object_added)
     {
@@ -166,7 +166,7 @@
     // unique.  Since an object is 'composed' via multiple-inheritence,
     // all members need to have unique names to ensure there is no
     // ambiguity.
-    bus::bus __sdbusplus_server_object_bus;
+    bus_t __sdbusplus_server_object_bus;
     std::string __sdbusplus_server_object_path;
     bool __sdbusplus_server_object_emitremoved;
     SdBusInterface* __sdbusplus_server_object_intf;
diff --git a/include/sdbusplus/server/transaction.hpp b/include/sdbusplus/server/transaction.hpp
index cbb08f5..32f6fa3 100644
--- a/include/sdbusplus/server/transaction.hpp
+++ b/include/sdbusplus/server/transaction.hpp
@@ -33,11 +33,11 @@
 
 struct Transaction
 {
-    Transaction(sdbusplus::bus::bus& bus, sdbusplus::message_t& msg) :
+    Transaction(sdbusplus::bus_t& bus, sdbusplus::message_t& msg) :
         bus(bus), msg(msg)
     {}
 
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
     sdbusplus::message_t& msg;
 };
 
@@ -48,11 +48,11 @@
 namespace std
 {
 
-/** @ brief Overload of std::hash for sdbusplus::bus::bus */
+/** @ brief Overload of std::hash for sdbusplus::bus_t */
 template <>
-struct hash<sdbusplus::bus::bus>
+struct hash<sdbusplus::bus_t>
 {
-    size_t operator()(sdbusplus::bus::bus& b) const;
+    size_t operator()(sdbusplus::bus_t& b) const;
 };
 
 /** @ brief Overload of std::hash for sdbusplus::message_t */
diff --git a/include/sdbusplus/test/sdbus_mock.hpp b/include/sdbusplus/test/sdbus_mock.hpp
index e4df6a3..db6e4bc 100644
--- a/include/sdbusplus/test/sdbus_mock.hpp
+++ b/include/sdbusplus/test/sdbus_mock.hpp
@@ -127,13 +127,13 @@
     MOCK_METHOD2(sd_bus_wait, int(sd_bus*, uint64_t));
 };
 
-inline bus::bus get_mocked_new(SdBusMock* sdbus)
+inline bus_t get_mocked_new(SdBusMock* sdbus)
 {
     using ::testing::IsNull;
     using ::testing::Return;
 
     EXPECT_CALL(*sdbus, sd_bus_ref(IsNull())).WillRepeatedly(Return(nullptr));
-    bus::bus bus_mock(nullptr, sdbus);
+    bus_t bus_mock(nullptr, sdbus);
 
     return bus_mock;
 }
diff --git a/src/server/interface.cpp b/src/server/interface.cpp
index a72c656..166a80c 100644
--- a/src/server/interface.cpp
+++ b/src/server/interface.cpp
@@ -9,7 +9,7 @@
 namespace interface
 {
 
-interface::interface(sdbusplus::bus::bus& bus, const char* path,
+interface::interface(sdbusplus::bus_t& bus, const char* path,
                      const char* interf,
                      const sdbusplus::vtable::vtable_t* vtable, void* context) :
     _bus(bus.get(), bus.getInterface()),
diff --git a/src/server/transaction.cpp b/src/server/transaction.cpp
index cdb3e56..f70bb37 100644
--- a/src/server/transaction.cpp
+++ b/src/server/transaction.cpp
@@ -44,7 +44,7 @@
 namespace std
 {
 
-size_t hash<sdbusplus::bus::bus>::operator()(sdbusplus::bus::bus& b) const
+size_t hash<sdbusplus::bus_t>::operator()(sdbusplus::bus_t& b) const
 {
     auto name = b.get_unique_name();
     return std::hash<std::string>{}(name);
@@ -77,7 +77,7 @@
 size_t hash<sdbusplus::server::transaction::Transaction>::operator()(
     sdbusplus::server::transaction::Transaction const& t) const
 {
-    auto hash1 = std::hash<sdbusplus::bus::bus>{}(t.bus);
+    auto hash1 = std::hash<sdbusplus::bus_t>{}(t.bus);
     auto hash2 = std::hash<sdbusplus::message_t>{}(t.msg);
 
     // boost::hash_combine() algorithm.
diff --git a/test/bus/match.cpp b/test/bus/match.cpp
index ee76972..2d95cf9 100644
--- a/test/bus/match.cpp
+++ b/test/bus/match.cpp
@@ -6,7 +6,7 @@
 class Match : public ::testing::Test
 {
   protected:
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_bus();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_bus();
 
     static constexpr auto busName = "xyz.openbmc_project.sdbusplus.test.Match";
 
diff --git a/test/message/call.cpp b/test/message/call.cpp
index 0ef015f..f0122ee 100644
--- a/test/message/call.cpp
+++ b/test/message/call.cpp
@@ -20,13 +20,13 @@
     m.read(globalId);
 }
 
-message newBusIdReq(bus::bus& b)
+message newBusIdReq(bus_t& b)
 {
     return b.new_method_call("org.freedesktop.DBus", "/org/freedesktop/DBus",
                              "org.freedesktop.DBus", "GetId");
 }
 
-std::string syncBusId(bus::bus& b)
+std::string syncBusId(bus_t& b)
 {
     std::string ret;
     newBusIdReq(b).call().read(ret);
diff --git a/test/server/message_variant.cpp b/test/server/message_variant.cpp
index 0fcde8d..2ddfac4 100644
--- a/test/server/message_variant.cpp
+++ b/test/server/message_variant.cpp
@@ -8,7 +8,7 @@
 
 struct Object : public ::testing::Test
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     sdbusplus::message_t msg = bus.new_method_call(
         "xyz.openbmc_project.sdbusplus.test.Object",
         "/xyz/openbmc_project/sdbusplus/test/object",
diff --git a/test/server/object.cpp b/test/server/object.cpp
index 76e077d..abbb412 100644
--- a/test/server/object.cpp
+++ b/test/server/object.cpp
@@ -16,7 +16,7 @@
 {
   protected:
     sdbusplus::SdBusMock sdbusMock;
-    sdbusplus::bus::bus bus = sdbusplus::get_mocked_new(&sdbusMock);
+    sdbusplus::bus_t bus = sdbusplus::get_mocked_new(&sdbusMock);
 
     static constexpr auto busName = "xyz.openbmc_project.sdbusplus.test.Object";
     static constexpr auto objPath = "/xyz/openbmc_project/sdbusplus/test";
diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index 202d409..f9d17d2 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -27,14 +27,14 @@
 namespace server
 {
 
-${classname}::${classname}(bus::bus& bus, const char* path)
+${classname}::${classname}(bus_t& bus, const char* path)
         : _${interface_instance()}(
                 bus, path, interface, _vtable, this), _intf(bus.getInterface())
 {
 }
 
     % if interface.properties:
-${classname}::${classname}(bus::bus& bus, const char* path,
+${classname}::${classname}(bus_t& bus, const char* path,
                            const std::map<std::string, PropertiesVariant>& vals,
                            bool skipSignal)
         : ${classname}(bus, path)
diff --git a/tools/sdbusplus/templates/interface.server.hpp.mako b/tools/sdbusplus/templates/interface.server.hpp.mako
index 92f29ee..f521895 100644
--- a/tools/sdbusplus/templates/interface.server.hpp.mako
+++ b/tools/sdbusplus/templates/interface.server.hpp.mako
@@ -55,7 +55,7 @@
          *  @param[in] bus - Bus to attach to.
          *  @param[in] path - Path to attach at.
          */
-        ${classname}(bus::bus& bus, const char* path);
+        ${classname}(bus_t& bus, const char* path);
 
     % for e in interface.enums:
         enum class ${e.name}
@@ -77,7 +77,7 @@
          *  @param[in] path - Path to attach at.
          *  @param[in] vals - Map of property name to value for initialization.
          */
-        ${classname}(bus::bus& bus, const char* path,
+        ${classname}(bus_t& bus, const char* path,
                      const std::map<std::string, PropertiesVariant>& vals,
                      bool skipSignal = false);
 
