diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index f49bcca..4fa802f 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -121,7 +121,7 @@
     return {base, connector};
 }
 
-DataInterface::DataInterface(sdbusplus::bus::bus& bus) : _bus(bus)
+DataInterface::DataInterface(sdbusplus::bus_t& bus) : _bus(bus)
 {
     readBMCFWVersion();
     readServerFWVersion();
@@ -749,7 +749,7 @@
         _bus.call_noreply(method, hwIsolationTimeout);
     }
 
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::string errName = e.name();
         // SD_BUS_ERROR_TIMEOUT error is expected, due to PEL api dependency
diff --git a/extensions/openpower-pels/data_interface.hpp b/extensions/openpower-pels/data_interface.hpp
index c0e8c45..90f0aa2 100644
--- a/extensions/openpower-pels/data_interface.hpp
+++ b/extensions/openpower-pels/data_interface.hpp
@@ -573,7 +573,7 @@
      *
      * @param[in] bus - The sdbusplus bus object
      */
-    explicit DataInterface(sdbusplus::bus::bus& bus);
+    explicit DataInterface(sdbusplus::bus_t& bus);
 
     /**
      * @brief Finds the D-Bus service name that hosts the
@@ -814,7 +814,7 @@
      *        When the motherboard is found, it then adds a PropertyWatcher
      *        for the motherboard CCIN.
      */
-    void motherboardIfaceAdded(sdbusplus::message::message& msg);
+    void motherboardIfaceAdded(sdbusplus::message_t& msg);
 
     /**
      * @brief Adds the Ufcs- prefix to the location code passed in
@@ -839,7 +839,7 @@
     /**
      * @brief The sdbusplus bus object for making D-Bus calls.
      */
-    sdbusplus::bus::bus& _bus;
+    sdbusplus::bus_t& _bus;
 
     /**
      * @brief The interfacesAdded match object used to wait for inventory
diff --git a/extensions/openpower-pels/dbus_watcher.hpp b/extensions/openpower-pels/dbus_watcher.hpp
index 54cf6d4..dcf2744 100644
--- a/extensions/openpower-pels/dbus_watcher.hpp
+++ b/extensions/openpower-pels/dbus_watcher.hpp
@@ -97,7 +97,7 @@
      * @param[in] dataIface - The DataInterface object
      * @param[in] func - The callback used any time the property is read
      */
-    PropertyWatcher(sdbusplus::bus::bus& bus, const std::string& path,
+    PropertyWatcher(sdbusplus::bus_t& bus, const std::string& path,
                     const std::string& interface,
                     const std::string& propertyName, const std::string& service,
                     const DataIface& dataIface, PropertySetFunc func) :
@@ -119,7 +119,7 @@
         {
             read(dataIface, service);
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             // Path doesn't exist now
         }
@@ -142,7 +142,7 @@
      * @param[in] dataIface - The DataInterface object
      * @param[in] func - The callback used any time the property is read
      */
-    PropertyWatcher(sdbusplus::bus::bus& bus, const std::string& path,
+    PropertyWatcher(sdbusplus::bus_t& bus, const std::string& path,
                     const std::string& interface,
                     const std::string& propertyName, const DataIface& dataIface,
                     PropertySetFunc func) :
@@ -183,7 +183,7 @@
      *
      * @param[in] msg - The sdbusplus message object
      */
-    void propChanged(sdbusplus::message::message& msg)
+    void propChanged(sdbusplus::message_t& msg)
     {
         DBusInterface interface;
         DBusPropertyMap properties;
@@ -204,7 +204,7 @@
      *
      * @param[in] msg - The sdbusplus message object
      */
-    void interfaceAdded(sdbusplus::message::message& msg)
+    void interfaceAdded(sdbusplus::message_t& msg)
     {
         sdbusplus::message::object_path path;
         DBusInterfaceMap interfaces;
@@ -278,7 +278,7 @@
      * @param[in] dataIface - The DataInterface object
      * @param[in] func - The callback used any time the property is read
      */
-    InterfaceWatcher(sdbusplus::bus::bus& bus, const std::string& path,
+    InterfaceWatcher(sdbusplus::bus_t& bus, const std::string& path,
                      const std::string& interface, const DataIface& dataIface,
                      InterfaceSetFunc func) :
         DBusWatcher(path, interface),
@@ -299,7 +299,7 @@
         {
             read(dataIface);
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             // Path doesn't exist now
         }
@@ -331,7 +331,7 @@
      *
      * @param[in] msg - The sdbusplus message object
      */
-    void propChanged(sdbusplus::message::message& msg)
+    void propChanged(sdbusplus::message_t& msg)
     {
         DBusInterface interface;
         DBusPropertyMap properties;
@@ -348,7 +348,7 @@
      *
      * @param[in] msg - The sdbusplus message object
      */
-    void interfaceAdded(sdbusplus::message::message& msg)
+    void interfaceAdded(sdbusplus::message_t& msg)
     {
         sdbusplus::message::object_path path;
         DBusInterfaceMap interfaces;
diff --git a/extensions/openpower-pels/manager.hpp b/extensions/openpower-pels/manager.hpp
index e6ae00f..44a9ec2 100644
--- a/extensions/openpower-pels/manager.hpp
+++ b/extensions/openpower-pels/manager.hpp
@@ -23,7 +23,7 @@
 namespace pels
 {
 
-using PELInterface = sdbusplus::server::object::object<
+using PELInterface = sdbusplus::server::object_t<
     sdbusplus::org::open_power::Logging::server::PEL>;
 
 /**
diff --git a/extensions/openpower-pels/pel_entry.hpp b/extensions/openpower-pels/pel_entry.hpp
index 4d1bd6c..be8360e 100644
--- a/extensions/openpower-pels/pel_entry.hpp
+++ b/extensions/openpower-pels/pel_entry.hpp
@@ -30,7 +30,7 @@
      * attributes.
      */
 
-    PELEntry(sdbusplus::bus::bus& bus, const std::string& path,
+    PELEntry(sdbusplus::bus_t& bus, const std::string& path,
              const std::map<std::string, PropertiesVariant>& prop, uint32_t id,
              Repository* repo) :
         PELEntryIface(bus, path.c_str(), prop, true),
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index f0f530e..1a5acf7 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -887,7 +887,7 @@
             callout =
                 std::make_unique<src::Callout>(p, locCode, fn, ccin, sn, mrus);
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             std::string msg =
                 "No VPD found for " + inventoryPath + ": " + e.what();
@@ -898,7 +898,7 @@
                 CalloutPriority::high, locCode, fn, ccin, sn, mrus);
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::string msg = "Could not get location code for " + inventoryPath +
                           ": " + e.what();
