diff --git a/tools/sdbusplus/signal.py b/tools/sdbusplus/signal.py
index 42dcdce..dd77f76 100644
--- a/tools/sdbusplus/signal.py
+++ b/tools/sdbusplus/signal.py
@@ -11,3 +11,7 @@
 
     def markdown(self, loader):
         return self.render(loader, "signal.mako.md", signal=self)
+
+    def cpp_prototype(self, loader, interface, ptype):
+        return self.render(loader, "signal.mako.prototype.hpp", signal=self,
+                           interface=interface, ptype=ptype, post=str.rstrip)
diff --git a/tools/templates/interface.mako.server.cpp b/tools/templates/interface.mako.server.cpp
index 63bc788..63374db 100644
--- a/tools/templates/interface.mako.server.cpp
+++ b/tools/templates/interface.mako.server.cpp
@@ -23,11 +23,18 @@
 ${ m.cpp_prototype(loader, interface=interface, ptype='callback-cpp') }
     % endfor
 
+    % for s in interface.signals:
+${ s.cpp_prototype(loader, interface=interface, ptype='callback-cpp') }
+    % endfor
+
 const vtable::vtable_t ${classname}::_vtable[] = {
     vtable::start(),
     % for m in interface.methods:
 ${ m.cpp_prototype(loader, interface=interface, ptype='vtable') }
     % endfor
+    % for s in interface.signals:
+${ s.cpp_prototype(loader, interface=interface, ptype='vtable') }
+    % endfor
     vtable::end()
 };
 
diff --git a/tools/templates/interface.mako.server.hpp b/tools/templates/interface.mako.server.hpp
index 1d23646..73aff6b 100644
--- a/tools/templates/interface.mako.server.hpp
+++ b/tools/templates/interface.mako.server.hpp
@@ -43,6 +43,10 @@
 ${ m.cpp_prototype(loader, interface=interface, ptype='header') }
     % endfor
 
+    % for s in interface.signals:
+${ s.cpp_prototype(loader, interface=interface, ptype='header') }
+    % endfor
+
     private:
     % for m in interface.methods:
 ${ m.cpp_prototype(loader, interface=interface, ptype='callback-header') }
diff --git a/tools/templates/signal.mako.prototype.hpp b/tools/templates/signal.mako.prototype.hpp
new file mode 100644
index 0000000..8dfaf81
--- /dev/null
+++ b/tools/templates/signal.mako.prototype.hpp
@@ -0,0 +1,77 @@
+<%
+    def parameters(defaultValue=False):
+        return ",\n            ".\
+            join([ parameter(p, defaultValue) for p in signal.properties ])
+
+    def parameter(p, defaultValue=False):
+        r = "%s %s" % (p.typeName, p.camelCase)
+        if defaultValue:
+            r += default_value(p)
+        return r
+
+    def parameters_as_list():
+        return ", ".join([ p.camelCase for p in signal.properties ])
+
+    def parameters_types_as_list():
+        return ", ".join([ p.typeName for p in signal.properties ])
+
+    def default_value(p):
+        if p.defaultValue != None:
+            return " = " + str(p.defaultValue)
+        else:
+            return ""
+
+    def interface_name():
+        return interface.name.split('.').pop()
+%>
+###
+### Emit 'header'
+###
+    % if ptype == 'header':
+        /** @brief Send signal '${signal.name}'
+         *
+         *  ${ signal.description.strip() }
+    % if len(signal.properties) != 0:
+         *
+        % for p in signal.properties:
+         *  @param[in] ${p.camelCase} - ${p.description.strip()}
+        % endfor
+    % endif
+         */
+        void ${ signal.camelCase }(
+            ${ parameters(True) });
+###
+### Emit 'vtable'
+###
+    % elif ptype == 'vtable':
+    vtable::signal("${signal.name}",
+                   details::${interface_name()}::_signal_${signal.CamelCase }
+                        .data()),
+###
+### Emit 'callback-cpp'
+###
+    % elif ptype == 'callback-cpp':
+void ${interface_name()}::${ signal.camelCase }(
+            ${ parameters() })
+{
+    auto& i = _${"_".join(interface.name.split('.'))}_interface;
+    auto m = i.new_signal("${ signal.name }");
+
+    m.append(${ parameters_as_list() });
+    m.signal_send();
+}
+
+namespace details
+{
+namespace ${interface_name()}
+{
+static const auto _signal_${ signal.CamelCase } =
+    % if len(signal.properties) == 0:
+        utility::tuple_to_array(std::make_tuple('\0'));
+    % else:
+        utility::tuple_to_array(message::types::type_id<
+                ${ parameters_types_as_list() }>());
+    % endif
+}
+}
+    % endif
