diff --git a/tools/sdbusplus/interface.py b/tools/sdbusplus/interface.py
index ce740a8..461b987 100644
--- a/tools/sdbusplus/interface.py
+++ b/tools/sdbusplus/interface.py
@@ -34,6 +34,16 @@
     def joinedName(self, join_str, append):
         return join_str.join(self.namespaces + [self.classname, append])
 
+    def error_includes(self, inc_list):
+        includes = []
+        for e in inc_list:
+            e = e.replace("self.", self.name + ".")
+            n = "/".join(
+                e.split(".")[:-2],  # ignore the Error.Name
+            )
+            includes.append(f"{n}/error.hpp")
+        return sorted(set(includes))
+
     def enum_includes(self, inc_list):
         includes = []
         for e in inc_list:
@@ -60,10 +70,12 @@
         return self.render(loader, "interface.common.hpp.mako", interface=self)
 
     def cpp_includes(self):
-        return set.union(
-            set(),
-            *[
-                set(m.cpp_includes(self))
-                for m in self.methods + self.properties + self.signals
-            ]
+        return sorted(
+            set.union(
+                set(),
+                *[
+                    set(m.cpp_includes(self))
+                    for m in self.methods + self.properties + self.signals
+                ],
+            )
         )
diff --git a/tools/sdbusplus/method.py b/tools/sdbusplus/method.py
index 47d0c33..92bf139 100644
--- a/tools/sdbusplus/method.py
+++ b/tools/sdbusplus/method.py
@@ -27,7 +27,9 @@
         )
 
     def cpp_includes(self, interface):
-        return interface.enum_includes(self.returns + self.parameters)
+        return interface.error_includes(self.errors) + interface.enum_includes(
+            self.returns + self.parameters
+        )
 
     def returns_as_list(self, interface, full=False):
         return ", ".join(
diff --git a/tools/sdbusplus/property.py b/tools/sdbusplus/property.py
index 9ac86fb..a798245 100644
--- a/tools/sdbusplus/property.py
+++ b/tools/sdbusplus/property.py
@@ -305,7 +305,9 @@
         )
 
     def cpp_includes(self, interface):
-        return interface.enum_includes([self])
+        return interface.error_includes(self.errors) + interface.enum_includes(
+            [self]
+        )
 
     def or_cpp_flags(self, flags):
         """Return the corresponding ORed cpp flags."""
diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index 2d7d32d..9c726cd 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -7,9 +7,7 @@
 #include <tuple>
 
 #include <${interface.headerFile("server")}>
-% for m in interface.methods + interface.properties + interface.signals:
-${ m.cpp_prototype(loader, interface=interface, ptype='callback-cpp-includes') }
-% endfor
+
 namespace sdbusplus::server::${interface.cppNamespace()}
 {
 
diff --git a/tools/sdbusplus/templates/method.prototype.hpp.mako b/tools/sdbusplus/templates/method.prototype.hpp.mako
index 9618abd..ec0f3dc 100644
--- a/tools/sdbusplus/templates/method.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/method.prototype.hpp.mako
@@ -8,11 +8,6 @@
 
     def error_name(e):
         return e.split('.').pop();
-
-    def error_include(e):
-        l = error_namespace(e).split('::')
-        l.pop() # Remove "Error"
-        return '/'.join(l) + '/error.hpp';
 %>
 ###
 ### Emit 'header'
@@ -117,8 +112,4 @@
     % endif
 }
 }
-    % elif ptype == 'callback-cpp-includes':
-        % for e in method.errors:
-#include <${error_include(e)}>
-        % endfor
     % endif
diff --git a/tools/sdbusplus/templates/property.prototype.hpp.mako b/tools/sdbusplus/templates/property.prototype.hpp.mako
index bc7c323..f8da663 100644
--- a/tools/sdbusplus/templates/property.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/property.prototype.hpp.mako
@@ -8,11 +8,6 @@
 
     def error_name(e):
         return e.split('.').pop();
-
-    def error_include(e):
-        l = error_namespace(e).split('::')
-        l.pop() # Remove "Error"
-        return '/'.join(l) + '/error.hpp';
 %>
 % if ptype == 'callback-cpp':
 auto ${interface.classname}::${property.camelCase}() const ->
@@ -116,8 +111,4 @@
             ${property.cppTypeParam(interface.name, full=True)}>());
 }
 }
-% elif ptype == 'callback-cpp-includes':
-        % for e in property.errors:
-#include <${error_include(e)}>
-        % endfor
 % endif
