diff --git a/include/sdbusplus/asio/object_server.hpp b/include/sdbusplus/asio/object_server.hpp
index c35413d..6275d46 100644
--- a/include/sdbusplus/asio/object_server.hpp
+++ b/include/sdbusplus/asio/object_server.hpp
@@ -641,7 +641,7 @@
 
         catch (const sdbusplus::exception_t& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
         catch (...)
         {
@@ -681,7 +681,7 @@
 
         catch (const sdbusplus::exception_t& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
         catch (...)
         {
@@ -711,7 +711,7 @@
 
         catch (const sdbusplus::exception_t& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
         catch (...)
         {
diff --git a/include/sdbusplus/exception.hpp b/include/sdbusplus/exception.hpp
index 3b01466..0ba477c 100644
--- a/include/sdbusplus/exception.hpp
+++ b/include/sdbusplus/exception.hpp
@@ -28,6 +28,9 @@
     virtual const char* description() const noexcept = 0;
     virtual int get_errno() const noexcept = 0;
 
+    virtual int set_error(sd_bus_error*) const;
+    virtual int set_error(SdBusInterface*, sd_bus_error*) const;
+
   private:
     // This unused function is to ensure that the vtable for this class is
     // properly emitted when `-flto=auto` is used, which is the default in
diff --git a/include/sdbusplus/message.hpp b/include/sdbusplus/message.hpp
index 4e5f790..fa3f690 100644
--- a/include/sdbusplus/message.hpp
+++ b/include/sdbusplus/message.hpp
@@ -368,8 +368,11 @@
     message new_method_error(const sdbusplus::exception::exception& e)
     {
         msgp_t reply = nullptr;
-        int r = _intf->sd_bus_message_new_method_error(
-            this->get(), &reply, e.name(), e.description());
+        sd_bus_error error = SD_BUS_ERROR_NULL;
+        e.set_error(_intf, &error);
+        int r =
+            _intf->sd_bus_message_new_method_error(this->get(), &reply, &error);
+        sd_bus_error_free(&error);
         if (r < 0)
         {
             throw exception::SdBusError(-r, "sd_bus_message_new_method_error");
diff --git a/include/sdbusplus/sdbus.hpp b/include/sdbusplus/sdbus.hpp
index a5d2cfd..fae1d2e 100644
--- a/include/sdbusplus/sdbus.hpp
+++ b/include/sdbusplus/sdbus.hpp
@@ -115,8 +115,7 @@
                                                  sd_bus_message** m) = 0;
 
     virtual int sd_bus_message_new_method_error(
-        sd_bus_message* call, sd_bus_message** m, const char* name,
-        const char* description) = 0;
+        sd_bus_message* call, sd_bus_message** m, sd_bus_error* e) = 0;
 
     virtual int sd_bus_message_new_method_errno(sd_bus_message* call,
                                                 sd_bus_message** m, int error,
@@ -440,12 +439,10 @@
         return ::sd_bus_message_new_method_return(call, m);
     }
 
-    int sd_bus_message_new_method_error(sd_bus_message* call,
-                                        sd_bus_message** m, const char* name,
-                                        const char* description) override
+    int sd_bus_message_new_method_error(
+        sd_bus_message* call, sd_bus_message** m, sd_bus_error* e) override
     {
-        return ::sd_bus_message_new_method_errorf(call, m, name, "%s",
-                                                  description);
+        return ::sd_bus_message_new_method_error(call, m, e);
     }
 
     int sd_bus_message_new_method_errno(sd_bus_message* call,
diff --git a/include/sdbusplus/sdbuspp_support/server.hpp b/include/sdbusplus/sdbuspp_support/server.hpp
index 3cf78e9..f2865f6 100644
--- a/include/sdbusplus/sdbuspp_support/server.hpp
+++ b/include/sdbusplus/sdbuspp_support/server.hpp
@@ -53,7 +53,7 @@
     }
     catch (const sdbusplus::internal_exception_t& e)
     {
-        return intf->sd_bus_error_set(error, e.name(), e.description());
+        return e.set_error(intf, error);
     }
 
     // A positive integer must be returned to indicate that the callback
@@ -126,7 +126,7 @@
     }
     catch (const sdbusplus::internal_exception_t& e)
     {
-        return intf->sd_bus_error_set(error, e.name(), e.description());
+        return e.set_error(intf, error);
     }
 
     // A positive integer must be returned to indicate that the callback
diff --git a/include/sdbusplus/test/sdbus_mock.hpp b/include/sdbusplus/test/sdbus_mock.hpp
index 6e1a1a3..c555dc1 100644
--- a/include/sdbusplus/test/sdbus_mock.hpp
+++ b/include/sdbusplus/test/sdbus_mock.hpp
@@ -117,8 +117,7 @@
                 (sd_bus_message*, sd_bus_message**), (override));
 
     MOCK_METHOD(int, sd_bus_message_new_method_error,
-                (sd_bus_message * call, sd_bus_message** m, const char* name,
-                 const char* description),
+                (sd_bus_message * call, sd_bus_message** m, sd_bus_error* e),
                 (override));
 
     MOCK_METHOD(int, sd_bus_message_new_method_errno,
diff --git a/src/exception.cpp b/src/exception.cpp
index c03e2bf..565e059 100644
--- a/src/exception.cpp
+++ b/src/exception.cpp
@@ -16,6 +16,16 @@
 
 void exception::unused() const noexcept {}
 
+int exception::set_error(sd_bus_error* e) const
+{
+    return sd_bus_error_set(e, name(), description());
+}
+
+int exception::set_error(SdBusInterface* i, sd_bus_error* e) const
+{
+    return i->sd_bus_error_set(e, name(), description());
+}
+
 int generated_exception::get_errno() const noexcept
 {
     return EIO;
diff --git a/tools/sdbusplus/templates/method.aserver.callback.hpp.mako b/tools/sdbusplus/templates/method.aserver.callback.hpp.mako
index 20ad4ad..27d36d7 100644
--- a/tools/sdbusplus/templates/method.aserver.callback.hpp.mako
+++ b/tools/sdbusplus/templates/method.aserver.callback.hpp.mako
@@ -231,7 +231,7 @@
 % for e in method.errors:
         catch(const ${interface.errorNamespacedClass(e)}& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
 % endfor
         catch(const std::exception&)
diff --git a/tools/sdbusplus/templates/method.prototype.hpp.mako b/tools/sdbusplus/templates/method.prototype.hpp.mako
index 74d0cbc..9dd232f 100644
--- a/tools/sdbusplus/templates/method.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/method.prototype.hpp.mako
@@ -56,7 +56,7 @@
     % for e in method.errors:
     catch(const ${interface.errorNamespacedClass(e)}& e)
     {
-        return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
+        return e.set_error(o->get_bus().getInterface(), error);
     }
     % endfor
     catch (const std::exception&)
diff --git a/tools/sdbusplus/templates/property.aserver.callback.hpp.mako b/tools/sdbusplus/templates/property.aserver.callback.hpp.mako
index 58f3df4..39dda8a 100644
--- a/tools/sdbusplus/templates/property.aserver.callback.hpp.mako
+++ b/tools/sdbusplus/templates/property.aserver.callback.hpp.mako
@@ -38,7 +38,7 @@
         % for e in property.errors:
         catch (const ${interface.errorNamespacedClass(e)}& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
         % endfor
         catch (const std::exception&)
@@ -82,7 +82,7 @@
         % for e in property.errors:
         catch (const ${interface.errorNamespacedClass(e)}& e)
         {
-            return sd_bus_error_set(error, e.name(), e.description());
+            return e.set_error(error);
         }
         % endfor
         catch (const std::exception&)
diff --git a/tools/sdbusplus/templates/property.server.cpp.mako b/tools/sdbusplus/templates/property.server.cpp.mako
index 3b5b64d..8d851c8 100644
--- a/tools/sdbusplus/templates/property.server.cpp.mako
+++ b/tools/sdbusplus/templates/property.server.cpp.mako
@@ -25,7 +25,7 @@
     % for e in property.errors:
     catch(const ${interface.errorNamespacedClass(e)}& e)
     {
-        return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
+        return e.set_error(o->get_bus().getInterface(), error);
     }
     % endfor
     catch (const std::exception&)
@@ -79,7 +79,7 @@
     % for e in property.errors:
     catch(const ${interface.errorNamespacedClass(e)}& e)
     {
-        return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
+        return e.set_error(o->get_bus().getInterface(), error);
     }
     % endfor
     catch (const std::exception&)
