diff --git a/fault-monitor/fru-fault-monitor.cpp b/fault-monitor/fru-fault-monitor.cpp
index 35b30ec..885c020 100644
--- a/fault-monitor/fru-fault-monitor.cpp
+++ b/fault-monitor/fru-fault-monitor.cpp
@@ -68,7 +68,7 @@
     {
         mapperResponseMsg.read(mapperResponse);
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         log<level::ERR>(
             "Failed to parse getService mapper response",
@@ -132,7 +132,7 @@
     {
         bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         // Log an info message, system may not have all the LED Groups defined
         log<level::INFO>("Failed to Assert LED Group",
@@ -152,7 +152,7 @@
     {
         msg.read(objectPath, interfaces);
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         log<level::ERR>("Failed to parse created message",
                         entry("ERROR=%s", e.what()),
@@ -228,7 +228,7 @@
         {
             mapperResponseMsg.read(subtree);
         }
-        catch (const sdbusplus::exception::SdBusError& e)
+        catch (const sdbusplus::exception::exception& e)
         {
             log<level::ERR>(
                 "Failed to parse existing callouts subtree message",
@@ -236,7 +236,7 @@
                 entry("REPLY_SIG=%s", mapperResponseMsg.get_signature()));
         }
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         // Just means no log entries at the moment
     }
@@ -273,7 +273,7 @@
         {
             reply.read(assoc);
         }
-        catch (const sdbusplus::exception::SdBusError& e)
+        catch (const sdbusplus::exception::exception& e)
         {
             log<level::ERR>(
                 "Failed to parse existing callouts associations message",
diff --git a/fault-monitor/operational-status-monitor.cpp b/fault-monitor/operational-status-monitor.cpp
index 7a6595f..66c6d3f 100644
--- a/fault-monitor/operational-status-monitor.cpp
+++ b/fault-monitor/operational-status-monitor.cpp
@@ -70,7 +70,7 @@
                                            "xyz.openbmc_project.Association",
                                            "endpoints");
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         log<level::ERR>("Failed to get endpoints property",
                         entry("ERROR=%s", e.what()),
@@ -98,7 +98,7 @@
             dBusHandler.setProperty(path, "xyz.openbmc_project.Led.Group",
                                     "Asserted", assertedValue);
         }
-        catch (const sdbusplus::exception::SdBusError& e)
+        catch (const sdbusplus::exception::exception& e)
         {
             log<level::ERR>("Failed to set Asserted property",
                             entry("ERROR=%s", e.what()),
diff --git a/json-config.hpp b/json-config.hpp
index b9bb36f..d625d49 100644
--- a/json-config.hpp
+++ b/json-config.hpp
@@ -183,7 +183,7 @@
                     }
                     confFile.clear();
                 }
-                catch (const sdbusplus::exception::SdBusError& e)
+                catch (const sdbusplus::exception::exception& e)
                 {
                     // Property unavailable on object.
                     log<level::ERR>(
@@ -196,7 +196,7 @@
                 }
             }
         }
-        catch (const sdbusplus::exception::SdBusError& e)
+        catch (const sdbusplus::exception::exception& e)
         {
             log<level::ERR>("Failed to call the SubTreePaths method",
                             entry("ERROR=%s", e.what()),
diff --git a/lamptest.cpp b/lamptest.cpp
index 8220f96..1182768 100644
--- a/lamptest.cpp
+++ b/lamptest.cpp
@@ -141,7 +141,7 @@
             period = std::get<uint16_t>(properties["Period"]);
             dutyOn = std::get<uint8_t>(properties["DutyOn"]);
         }
-        catch (const sdbusplus::exception::SdBusError& e)
+        catch (const sdbusplus::exception::exception& e)
         {
             log<level::ERR>("Failed to get All properties",
                             entry("ERROR=%s", e.what()),
@@ -252,7 +252,7 @@
                                 "xyz.openbmc_project.Led.Group", "Asserted",
                                 assertedValue);
     }
-    catch (const sdbusplus::exception::SdBusError& e)
+    catch (const sdbusplus::exception::exception& e)
     {
         log<level::ERR>("Failed to set Asserted property",
                         entry("ERROR=%s", e.what()),
diff --git a/utils.hpp b/utils.hpp
index 8499b2a..d663b2f 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -62,7 +62,7 @@
      *
      *  @return The Map to constructs all properties values
      *
-     *  @throw sdbusplus::exception::SdBusError when it fails
+     *  @throw sdbusplus::exception::exception when it fails
      */
     const PropertyMap getAllProperties(const std::string& objectPath,
                                        const std::string& interface) const;
@@ -75,7 +75,7 @@
      *
      *  @return The value of the property(type: variant)
      *
-     *  @throw sdbusplus::exception::SdBusError when it fails
+     *  @throw sdbusplus::exception::exception when it fails
      */
     const PropertyValue getProperty(const std::string& objectPath,
                                     const std::string& interface,
@@ -88,7 +88,7 @@
      *  @param[in] propertyName     -   D-Bus property name
      *  @param[in] value            -   The value to be set
      *
-     *  @throw sdbusplus::exception::SdBusError when it fails
+     *  @throw sdbusplus::exception::exception when it fails
      */
     void setProperty(const std::string& objectPath,
                      const std::string& interface,
