diff --git a/tools/sdbusplus/interface.py b/tools/sdbusplus/interface.py
index 461b987..e766a86 100644
--- a/tools/sdbusplus/interface.py
+++ b/tools/sdbusplus/interface.py
@@ -44,6 +44,10 @@
             includes.append(f"{n}/error.hpp")
         return sorted(set(includes))
 
+    def errorNamespacedClass(self, error):
+        error = error.replace("self.", self.name + ".")
+        return "sdbusplus::" + "::".join(error.split("."))
+
     def enum_includes(self, inc_list):
         includes = []
         for e in inc_list:
diff --git a/tools/sdbusplus/templates/method.prototype.hpp.mako b/tools/sdbusplus/templates/method.prototype.hpp.mako
index ec0f3dc..6cfe02d 100644
--- a/tools/sdbusplus/templates/method.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/method.prototype.hpp.mako
@@ -1,14 +1,3 @@
-<%
-    def error_namespace(e):
-        n = e.split('.');
-        n.pop(); # Remove error name.
-
-        n = map((lambda x: interface.name if x == "self" else x), n);
-        return '::'.join('.'.join(n).split('.'));
-
-    def error_name(e):
-        return e.split('.').pop();
-%>
 ###
 ### Emit 'header'
 ###
@@ -80,7 +69,7 @@
                 ));
     }
     % for e in method.errors:
-    catch(const sdbusplus::${error_namespace(e)}::${error_name(e)}& e)
+    catch(const ${interface.errorNamespacedClass(e)}& e)
     {
         return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
     }
diff --git a/tools/sdbusplus/templates/property.prototype.hpp.mako b/tools/sdbusplus/templates/property.prototype.hpp.mako
index f8da663..ec54869 100644
--- a/tools/sdbusplus/templates/property.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/property.prototype.hpp.mako
@@ -1,14 +1,3 @@
-<%
-    def error_namespace(e):
-        n = e.split('.');
-        n.pop(); # Remove error name.
-
-        n = map((lambda x: interface.name if x == "self" else x), n);
-        return '::'.join('.'.join(n).split('.'));
-
-    def error_name(e):
-        return e.split('.').pop();
-%>
 % if ptype == 'callback-cpp':
 auto ${interface.classname}::${property.camelCase}() const ->
         ${property.cppTypeParam(interface.name)}
@@ -35,7 +24,7 @@
                 ));
     }
     % for e in property.errors:
-    catch(const sdbusplus::${error_namespace(e)}::${error_name(e)}& e)
+    catch(const ${interface.errorNamespacedClass(e)}& e)
     {
         return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
     }
@@ -89,7 +78,7 @@
                 ));
     }
     % for e in property.errors:
-    catch(const sdbusplus::${error_namespace(e)}::${error_name(e)}& e)
+    catch(const ${interface.errorNamespacedClass(e)}& e)
     {
         return o->get_bus().getInterface()->sd_bus_error_set(error, e.name(), e.description());
     }
