diff --git a/sdbusplus/sdbus.hpp b/sdbusplus/sdbus.hpp
index 5d553a2..2b77271 100644
--- a/sdbusplus/sdbus.hpp
+++ b/sdbusplus/sdbus.hpp
@@ -42,6 +42,9 @@
                                                     const char *interface,
                                                     char **names) = 0;
 
+    virtual int sd_bus_error_set_const(sd_bus_error *e, const char *name,
+                                       const char *message) = 0;
+
     virtual sd_event *sd_bus_get_event(sd_bus *bus) = 0;
     virtual int sd_bus_get_unique_name(sd_bus *bus, const char **unique) = 0;
 
@@ -194,6 +197,12 @@
                                                      names);
     }
 
+    int sd_bus_error_set_const(sd_bus_error *e, const char *name,
+                               const char *message) override
+    {
+        return ::sd_bus_error_set_const(e, name, message);
+    }
+
     sd_event *sd_bus_get_event(sd_bus *bus) override
     {
         return ::sd_bus_get_event(bus);
diff --git a/sdbusplus/test/sdbus_mock.hpp b/sdbusplus/test/sdbus_mock.hpp
index e22de18..fe01797 100644
--- a/sdbusplus/test/sdbus_mock.hpp
+++ b/sdbusplus/test/sdbus_mock.hpp
@@ -31,6 +31,9 @@
     MOCK_METHOD4(sd_bus_emit_properties_changed_strv,
                  int(sd_bus *, const char *, const char *, char **));
 
+    MOCK_METHOD3(sd_bus_error_set_const,
+                 int(sd_bus_error *, const char *, const char *));
+
     MOCK_METHOD1(sd_bus_get_event, sd_event *(sd_bus *));
     MOCK_METHOD2(sd_bus_get_unique_name, int(sd_bus *, const char **));
 
diff --git a/tools/sdbusplus/templates/interface.mako.server.cpp.in b/tools/sdbusplus/templates/interface.mako.server.cpp.in
index 7a2a798..d519c26 100644
--- a/tools/sdbusplus/templates/interface.mako.server.cpp.in
+++ b/tools/sdbusplus/templates/interface.mako.server.cpp.in
@@ -1,4 +1,5 @@
 #include <algorithm>
+#include <sdbusplus/sdbus.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/exception.hpp>
 #include <${"/".join(interface.name.split('.') + [ 'server.hpp' ])}>
@@ -23,7 +24,7 @@
 
 ${classname}::${classname}(bus::bus& bus, const char* path)
         : _${interface_instance()}(
-                bus, path, _interface, _vtable, this)
+                bus, path, _interface, _vtable, this), _intf(bus.getInterface())
 {
 }
 
@@ -61,9 +62,13 @@
 {
     using sdbusplus::server::binding::details::convertForMessage;
 
+    // TODO(venture): Can this except? I wouldn't think so.
+    auto o = static_cast<${classname}*>(context);
+
     try
     {
-        auto m = message::message(reply);
+        auto m = message::message(reply, o->_intf);
+
 #if @WANT_TRANSACTION@
         {
             auto tbus = m.get_bus();
@@ -73,12 +78,11 @@
         }
 #endif
 
-        auto o = static_cast<${classname}*>(context);
         m.append(convertForMessage(o->${p.camelCase}()));
     }
     catch(sdbusplus::internal_exception_t& e)
     {
-        sd_bus_error_set_const(error, e.name(), e.description());
+        o->_intf->sd_bus_error_set_const(error, e.name(), e.description());
         return -EINVAL;
     }
 
@@ -102,9 +106,12 @@
         const char* property, sd_bus_message* value, void* context,
         sd_bus_error* error)
 {
+    auto o = static_cast<${classname}*>(context);
+
     try
     {
-        auto m = message::message(value);
+        auto m = message::message(value, o->_intf);
+
 #if @WANT_TRANSACTION@
         {
             auto tbus = m.get_bus();
@@ -114,8 +121,6 @@
         }
 #endif
 
-        auto o = static_cast<${classname}*>(context);
-
         ${p.cppTypeMessage(interface.name)} v{};
         m.read(v);
     % if p.is_enum():
@@ -127,7 +132,7 @@
     }
     catch(sdbusplus::internal_exception_t& e)
     {
-        sd_bus_error_set_const(error, e.name(), e.description());
+        o->_intf->sd_bus_error_set_const(error, e.name(), e.description());
         return -EINVAL;
     }
 
diff --git a/tools/sdbusplus/templates/interface.mako.server.hpp b/tools/sdbusplus/templates/interface.mako.server.hpp
index 9ca67e0..ec02c57 100644
--- a/tools/sdbusplus/templates/interface.mako.server.hpp
+++ b/tools/sdbusplus/templates/interface.mako.server.hpp
@@ -1,6 +1,7 @@
 #pragma once
 #include <tuple>
 #include <systemd/sd-bus.h>
+#include <sdbusplus/sdbus.hpp>
 #include <sdbusplus/server.hpp>
 <%
     namespaces = interface.name.split('.')
@@ -129,6 +130,7 @@
         static const vtable::vtable_t _vtable[];
         sdbusplus::server::interface::interface
                 _${"_".join(interface.name.split('.'))}_interface;
+        sdbusplus::SdBusInterface *_intf;
 
     % for p in interface.properties:
         % if p.defaultValue:
