diff --git a/example/calculator-server.cpp b/example/calculator-server.cpp
new file mode 100644
index 0000000..e72c493
--- /dev/null
+++ b/example/calculator-server.cpp
@@ -0,0 +1,72 @@
+#include <iostream>
+#include <sdbusplus/server.hpp>
+#include <net/poettering/Calculator/server.hpp>
+#include <net/poettering/Calculator/error.hpp>
+
+using Calculator_inherit = sdbusplus::server::object_t<
+        sdbusplus::net::poettering::server::Calculator>;
+
+/** Example implementation of net.poettering.Calculator */
+struct Calculator : Calculator_inherit
+{
+    /** Constructor */
+    Calculator(sdbusplus::bus::bus& bus, const char* path) :
+        Calculator_inherit(bus, path) { }
+
+    /** Multiply (x*y), update lastResult */
+    int64_t multiply(int64_t x, int64_t y) override
+    {
+        return lastResult(x*y);
+    }
+
+    /** Divide (x/y), update lastResult
+     *
+     *  Throws DivisionByZero on error.
+     */
+    int64_t divide(int64_t x, int64_t y) override
+    {
+        using sdbusplus::net::poettering::Calculator::Error::DivisionByZero;
+        if (y == 0)
+        {
+            status(State::Error);
+            throw DivisionByZero();
+        }
+
+        return lastResult(x/y);
+    }
+
+    /** Clear lastResult, broadcast 'Cleared' signal */
+    void clear() override
+    {
+        auto v = lastResult();
+        lastResult(0);
+        cleared(v);
+        return;
+    }
+};
+
+int main()
+{
+    // Define a dbus path location to place the object.
+    constexpr auto path = "/net/poettering/calculator";
+
+    // Create a new bus and affix an object manager for the subtree path we
+    // intend to place objects at..
+    auto b = sdbusplus::bus::new_default();
+    sdbusplus::server::manager_t m{b, path};
+
+    // Reserve the dbus service name : net.poettering.Calculator
+    b.request_name("net.poettering.Calculator");
+
+    // Create a calculator object at /net/poettering/calculator
+    Calculator c1{b, path};
+
+    // Handle dbus processing forever.
+    while(1)
+    {
+        b.process_discard(); // discard any unhandled messages
+        b.wait();
+    }
+
+    return 0;
+}
