diff --git a/tools/sdbusplus/interface.py b/tools/sdbusplus/interface.py
index 3f6d9b3..9f85f03 100644
--- a/tools/sdbusplus/interface.py
+++ b/tools/sdbusplus/interface.py
@@ -35,7 +35,10 @@
         self.classname = self.namespaces.pop()
 
     def cppNamespace(self):
-        return "::".join(self.namespaces) + "::server::" + self.classname
+        return "::".join(self.namespaces) + "::server"
+
+    def cppNamespacedClass(self):
+        return self.cppNamespace() + "::" + self.classname
 
     def enum_includes(self, inc_list):
         includes = []
diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index 94f5040..fe91780 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -18,13 +18,7 @@
     def interface_instance():
         return "_".join(interface.name.split('.') + ['interface'])
 %>
-namespace sdbusplus
-{
-    % for s in namespaces:
-namespace ${s}
-{
-    % endfor
-namespace server
+namespace sdbusplus::${interface.cppNamespace()}
 {
 
 ${classname}::${classname}(bus_t& bus, const char* path)
@@ -175,8 +169,4 @@
     vtable::end()
 };
 
-} // namespace server
-    % for s in reversed(namespaces):
-} // namespace ${s}
-    % endfor
-} // namespace sdbusplus
+} // namespace sdbusplus::${interface.cppNamespace()}
diff --git a/tools/sdbusplus/templates/interface.server.hpp.mako b/tools/sdbusplus/templates/interface.server.hpp.mako
index 234fff8..771c6ac 100644
--- a/tools/sdbusplus/templates/interface.server.hpp.mako
+++ b/tools/sdbusplus/templates/interface.server.hpp.mako
@@ -20,13 +20,7 @@
                    interface.properties);
 %>
 
-namespace sdbusplus
-{
-    % for s in namespaces:
-namespace ${s}
-{
-    % endfor
-namespace server
+namespace sdbusplus::${interface.cppNamespace()}
 {
 
 class ${classname}
@@ -208,31 +202,27 @@
 }
     % endfor
 
-} // namespace server
-    % for s in reversed(namespaces):
-} // namespace ${s}
-    % endfor
+} // namespace sdbusplus::${interface.cppNamespace()}
 
-namespace message::details
+namespace sdbusplus::message::details
 {
     % for e in interface.enums:
 template <>
-struct convert_from_string<${interface.cppNamespace()}::${e.name}>
+struct convert_from_string<${interface.cppNamespacedClass()}::${e.name}>
 {
     static auto op(const std::string& value) noexcept
     {
-        return ${interface.cppNamespace()}::convertStringTo${e.name}(value);
+        return ${interface.cppNamespacedClass()}::convertStringTo${e.name}(value);
     }
 };
 
 template <>
-struct convert_to_string<${interface.cppNamespace()}::${e.name}>
+struct convert_to_string<${interface.cppNamespacedClass()}::${e.name}>
 {
-    static std::string op(${interface.cppNamespace()}::${e.name} value)
+    static std::string op(${interface.cppNamespacedClass()}::${e.name} value)
     {
-        return ${interface.cppNamespace()}::convert${e.name}ToString(value);
+        return ${interface.cppNamespacedClass()}::convert${e.name}ToString(value);
     }
 };
     % endfor
-} // namespace message::details
-} // namespace sdbusplus
+} // namespace sdbusplus::message::details
