diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile
new file mode 100644
index 0000000..5166fdf
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile
@@ -0,0 +1,17 @@
+EXE     = obmc-phosphor-example-sdbus
+OBJS    = $(EXE).o
+DEPPKGS = libsystemd
+CC      ?= $(CROSS_COMPILE)gcc
+INCLUDES += $(shell pkg-config --cflags $(DEPPKGS))
+LIBS += $(shell pkg-config --libs $(DEPPKGS))
+
+%.o : %.c
+	echo $(CFLAGS)
+	echo $(INCLUDES)
+	$(CC) -c $< $(CFLAGS) $(INCLUDES) -o $@
+$(EXE): $(OBJS)
+	$(CC) $^ $(LDFLAGS) $(LIBS) -o $@
+clean:
+	rm -f $(OBJS) $(EXE) *.o *.d
+distclean: clean
+	rm -f *.c~ *.h~ *.sh~ Makefile~ config.mk~
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c
new file mode 100644
index 0000000..a66bb55
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <systemd/sd-bus.h>
+
+static int method_echo(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
+	char *str;
+	const char *intf = sd_bus_message_get_interface(m),
+	      *path = sd_bus_message_get_path(m);
+	sd_bus *bus = sd_bus_message_get_bus(m);
+
+	char response[512] = {0};
+	int r;
+
+	/* Read the parameters */
+	r = sd_bus_message_read(m, "s", &str);
+	if (r < 0) {
+		fprintf(stderr, "Failed to parse parameters: %s\n", strerror(-r));
+		return r;
+	}
+
+	r = sd_bus_emit_signal(bus, path, intf, "MethodInvoked", "ss",
+			"Echo method was invoked", path);
+	if (r < 0) {
+		fprintf(stderr, "Failed to emit signal: %s\n", strerror(-r));
+		return r;
+	}
+
+	strncat(response, path, 128);
+	strcat(response, " says ");
+	strncat(response, str, 128);
+
+	/* Reply with the response */
+	return sd_bus_reply_method_return(m, "s", &response);
+}
+
+static const sd_bus_vtable echo_vtable[] = {
+	SD_BUS_VTABLE_START(0),
+	SD_BUS_METHOD("Echo", "s", "s", method_echo, SD_BUS_VTABLE_UNPRIVILEGED),
+	SD_BUS_SIGNAL("MethodInvoked", "s", 0),
+	SD_BUS_VTABLE_END
+};
+
+int main(int argc, char *argv[]) {
+	sd_bus_slot *slot = NULL;
+	sd_bus *bus = NULL;
+	int r;
+	char **acquired = NULL, **activatable = NULL, **i;
+
+	/* Connect to the user bus this time */
+	r = sd_bus_open_system(&bus);
+	if (r < 0) {
+		fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r));
+		goto finish;
+	}
+
+	/* Install an object */
+	r = sd_bus_add_object_vtable(bus,
+			&slot,
+			"/org/openbmc/examples/path0/SDBusObj",  /* object path */
+			"org.openbmc.examples.Echo",   /* interface name */
+			echo_vtable,
+			NULL);
+	if (r < 0) {
+		fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
+		goto finish;
+	}
+
+	/* Install an object */
+	r = sd_bus_add_object_vtable(bus,
+			&slot,
+			"/org/openbmc/examples/path1/SDBusObj",  /* object path */
+			"org.openbmc.examples.Echo",   /* interface name */
+			echo_vtable,
+			NULL);
+	if (r < 0) {
+		fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
+		goto finish;
+	}
+
+	/* Take a well-known service name so that clients can find us */
+	r = sd_bus_request_name(bus, "org.openbmc.examples.SDBusService0", 0);
+	if (r < 0) {
+		fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
+		goto finish;
+	}
+
+	r = sd_bus_request_name(bus, "org.openbmc.examples.SDBusService1", 0);
+	if (r < 0) {
+		fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
+		goto finish;
+	}
+
+	for (;;) {
+		/* Process requests */
+		r = sd_bus_process(bus, NULL);
+		if (r < 0) {
+			fprintf(stderr, "Failed to process bus: %s\n", strerror(-r));
+			goto finish;
+		}
+		if (r > 0) /* we processed a request, try to process another one, right-away */
+			continue;
+
+		/* Wait for the next request to process */
+		r = sd_bus_wait(bus, (uint64_t) -1);
+		if (r < 0) {
+			fprintf(stderr, "Failed to wait on bus: %s\n", strerror(-r));
+			goto finish;
+		}
+	}
+
+finish:
+	sd_bus_slot_unref(slot);
+	sd_bus_unref(bus);
+
+	return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service
new file mode 100644
index 0000000..dcce732
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Phosphor OpenBMC QEMU application example
+
+[Service]
+ExecStart=/usr/sbin/obmc-phosphor-example-sdbus
+
+[Install]
+WantedBy=multi-user.target
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf
new file mode 100644
index 0000000..45af4f4
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf
@@ -0,0 +1,8 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+  <policy user="root">
+    <allow own="org.openbmc.examples.SDBusService0"/>
+    <allow send_destination="org.openbmc.examples.SDBusService0"/>
+  </policy>
+</busconfig>
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf
new file mode 100644
index 0000000..5a7bfb8
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf
@@ -0,0 +1,8 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+  <policy user="root">
+    <allow own="org.openbmc.examples.SDBusService1"/>
+    <allow send_destination="org.openbmc.examples.SDBusService1"/>
+  </policy>
+</busconfig>
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb b/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb
new file mode 100644
index 0000000..3735007
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Phosphor OpenBMC BSP Example Application"
+DESCRIPTION = "Phosphor OpenBMC QEMU BSP example implementation."
+PR = "r1"
+
+DBUS_SERVICES = " \
+        org.openbmc.examples.SDBusService0 \
+        org.openbmc.examples.SDBusService1 \
+        "
+
+inherit obmc-phosphor-sdbus-service
