diff --git a/callout.cpp b/callout.cpp
index 1d95036..cf88519 100644
--- a/callout.cpp
+++ b/callout.cpp
@@ -81,14 +81,14 @@
     callout.serialNumber(sn);
 }
 
-Callout::Callout(sdbusplus::bus::bus& bus, const std::string& objectPath,
+Callout::Callout(sdbusplus::bus_t& bus, const std::string& objectPath,
                  size_t id, uint64_t timestamp) :
     CalloutObject(bus, objectPath.c_str(), CalloutObject::action::defer_emit),
     entryID(id), timestamp(timestamp)
 {
 }
 
-Callout::Callout(sdbusplus::bus::bus& bus, const std::string& objectPath,
+Callout::Callout(sdbusplus::bus_t& bus, const std::string& objectPath,
                  const std::string& inventoryPath, size_t id,
                  uint64_t timestamp, const DbusPropertyMap& properties) :
     CalloutObject(bus, objectPath.c_str(), CalloutObject::action::defer_emit),
diff --git a/callout.hpp b/callout.hpp
index 32351d5..cf39c35 100644
--- a/callout.hpp
+++ b/callout.hpp
@@ -44,7 +44,7 @@
      * @param[in] timestamp - timestamp when the log was created
      * @param[in] properties - the properties for the Asset interface.
      */
-    Callout(sdbusplus::bus::bus& bus, const std::string& objectPath,
+    Callout(sdbusplus::bus_t& bus, const std::string& objectPath,
             const std::string& inventoryPath, size_t id, uint64_t timestamp,
             const DbusPropertyMap& properties);
     /**
@@ -59,7 +59,7 @@
      * @param[in] timestamp - timestamp when the log was created
      * @param[in] properties - the properties for the Asset interface.
      */
-    Callout(sdbusplus::bus::bus& bus, const std::string& objectPath, size_t id,
+    Callout(sdbusplus::bus_t& bus, const std::string& objectPath, size_t id,
             uint64_t timestamp);
 
     /**
diff --git a/dbus.cpp b/dbus.cpp
index aee1654..49e0e03 100644
--- a/dbus.cpp
+++ b/dbus.cpp
@@ -29,7 +29,7 @@
 
 using namespace phosphor::logging;
 
-ObjectValueTree getManagedObjects(sdbusplus::bus::bus& bus,
+ObjectValueTree getManagedObjects(sdbusplus::bus_t& bus,
                                   const std::string& service,
                                   const std::string& objPath)
 {
@@ -46,7 +46,7 @@
     return interfaces;
 }
 
-DbusPropertyMap getAllProperties(sdbusplus::bus::bus& bus,
+DbusPropertyMap getAllProperties(sdbusplus::bus_t& bus,
                                  const std::string& service,
                                  const std::string& objPath,
                                  const std::string& interface)
@@ -63,7 +63,7 @@
     return properties;
 }
 
-DbusSubtree getSubtree(sdbusplus::bus::bus& bus, const std::string& root,
+DbusSubtree getSubtree(sdbusplus::bus_t& bus, const std::string& root,
                        int depth, const std::string& interface)
 {
     DbusSubtree tree;
diff --git a/dbus.hpp b/dbus.hpp
index a8b16d8..3091fbf 100644
--- a/dbus.hpp
+++ b/dbus.hpp
@@ -46,7 +46,7 @@
  * @return ObjectValueTree - A map of object paths to their
  *                           interfaces and properties.
  */
-ObjectValueTree getManagedObjects(sdbusplus::bus::bus& bus,
+ObjectValueTree getManagedObjects(sdbusplus::bus_t& bus,
                                   const std::string& service,
                                   const std::string& objPath);
 
@@ -62,7 +62,7 @@
  * @return DbusSubtree - A map of object paths to their
  *                       services and interfaces.
  */
-DbusSubtree getSubtree(sdbusplus::bus::bus& bus, const std::string& root,
+DbusSubtree getSubtree(sdbusplus::bus_t& bus, const std::string& root,
                        int depth, const std::string& interface);
 
 /**
@@ -93,7 +93,7 @@
  *
  * @return DbusPropertyMap - The map of property names to values
  */
-DbusPropertyMap getAllProperties(sdbusplus::bus::bus& bus,
+DbusPropertyMap getAllProperties(sdbusplus::bus_t& bus,
                                  const std::string& service,
                                  const std::string& objPath,
                                  const std::string& interface);
diff --git a/interfaces.hpp b/interfaces.hpp
index 3014398..d43bcfd 100644
--- a/interfaces.hpp
+++ b/interfaces.hpp
@@ -10,7 +10,7 @@
 {
 
 template <typename... T>
-using ServerObject = typename sdbusplus::server::object::object<T...>;
+using ServerObject = typename sdbusplus::server::object_t<T...>;
 
 using ObjectPathInterface =
     sdbusplus::xyz::openbmc_project::Common::server::ObjectPath;
diff --git a/main.cpp b/main.cpp
index da4d05a..1551aa6 100644
--- a/main.cpp
+++ b/main.cpp
@@ -24,7 +24,7 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    sdbusplus::server::manager::manager objManager(bus, LOGGING_PATH);
+    sdbusplus::server::manager_t objManager(bus, LOGGING_PATH);
 
     ibm::logging::Manager manager{bus};
 
diff --git a/manager.cpp b/manager.cpp
index c04b59b..fd421f0 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -30,7 +30,7 @@
 namespace fs = std::experimental::filesystem;
 using namespace phosphor::logging;
 
-Manager::Manager(sdbusplus::bus::bus& bus) :
+Manager::Manager(sdbusplus::bus_t& bus) :
     bus(bus),
     addMatch(bus,
              sdbusplus::bus::match::rules::interfacesAdded() +
@@ -68,7 +68,7 @@
             }
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>("sdbusplus error getting logging managed objects",
                         entry("ERROR=%s", e.what()));
@@ -250,7 +250,7 @@
             addChildInterface(objectPath, InterfaceType::CALLOUT, anyObject);
             calloutNum++;
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             log<level::ERR>("sdbusplus exception", entry("ERROR=%s", e.what()));
         }
@@ -294,7 +294,7 @@
     }
 }
 
-void Manager::interfaceAdded(sdbusplus::message::message& msg)
+void Manager::interfaceAdded(sdbusplus::message_t& msg)
 {
     sdbusplus::message::object_path path;
     DbusInterfaceMap interfaces;
@@ -340,7 +340,7 @@
     return fs::path{objectPath} / "callouts" / std::to_string(calloutNum);
 }
 
-void Manager::interfaceRemoved(sdbusplus::message::message& msg)
+void Manager::interfaceRemoved(sdbusplus::message_t& msg)
 {
     sdbusplus::message::object_path path;
     DbusInterfaceList interfaces;
diff --git a/manager.hpp b/manager.hpp
index eff9e10..b9a2039 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -43,7 +43,7 @@
      *
      * @param[in] bus - the D-Bus bus object
      */
-    explicit Manager(sdbusplus::bus::bus& bus);
+    explicit Manager(sdbusplus::bus_t& bus);
 
   private:
     using EntryID = uint32_t;
@@ -70,7 +70,7 @@
      *
      * @param[in] msg - the sdbusplus message
      */
-    void interfaceAdded(sdbusplus::message::message& msg);
+    void interfaceAdded(sdbusplus::message_t& msg);
 
     /**
      * The callback for an interfaces removed signal
@@ -80,7 +80,7 @@
      *
      * @param[in] msg - the sdbusplus message
      */
-    void interfaceRemoved(sdbusplus::message::message& msg);
+    void interfaceRemoved(sdbusplus::message_t& msg);
 
     /**
      * Creates the IBM interfaces for all existing error log
@@ -252,7 +252,7 @@
     /**
      * The sdbusplus bus object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /**
      * The match object for interfacesAdded
