diff --git a/objects/led_controller.c b/objects/led_controller.c
new file mode 100644
index 0000000..b4cd04d
--- /dev/null
+++ b/objects/led_controller.c
@@ -0,0 +1,159 @@
+#include "interfaces/openbmc_intf.h"
+#include <stdio.h>
+#include "openbmc.h"
+#include "gpio.h"
+
+/* ---------------------------------------------------------------------------------------------------- */
+static const gchar* dbus_object_path = "/org/openbmc/control/led";
+static const gchar* dbus_name        = "org.openbmc.control.led";
+
+static GDBusObjectManagerServer *manager = NULL;
+
+#define  NUM_GPIO 2
+
+GPIO led_gpio[NUM_GPIO] = { 
+	(GPIO){"IDENTIFY"},
+	(GPIO){"BMC_READY"}
+};
+
+
+static gboolean
+on_set_on       (Led          *led,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	printf("Turn on chassis identify led\n");
+	GPIO* mygpio = (GPIO*)user_data;
+	led_complete_set_on(led,invocation);
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_open(mygpio);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_write(mygpio,1); 
+		if (rc != GPIO_OK) { break; }
+	} while(0);
+	gpio_close(mygpio);
+	if (rc != GPIO_OK)
+	{
+		printf("ERROR ledcontrol: GPIO error %s (rc=%d)\n",mygpio->name,rc);
+	}
+
+	return TRUE;
+
+}
+
+static gboolean
+on_set_off       (Led          *led,
+                GDBusMethodInvocation  *invocation,
+                gpointer                user_data)
+{
+	g_print("Turn off chassis identify led\n");
+	GPIO* mygpio = (GPIO*)user_data;
+	led_complete_set_off(led,invocation);
+	int rc = GPIO_OK;
+	do {
+		rc = gpio_open(mygpio);
+		if (rc != GPIO_OK) { break; }
+		rc = gpio_write(mygpio,0); 
+		if (rc != GPIO_OK) { break; }
+	} while(0);
+	gpio_close(mygpio);
+	if (rc != GPIO_OK)
+	{
+		printf("ERROR ChassisIdentify: GPIO error %s (rc=%d)\n",mygpio->name,rc);
+	}
+	return TRUE;
+}
+
+static void 
+on_bus_acquired (GDBusConnection *connection,
+                 const gchar     *name,
+                 gpointer         user_data)
+{
+	ObjectSkeleton *object;
+
+	cmdline *cmd = user_data;
+	if (cmd->argc < 2)
+	{
+		g_print("No objects created.  Put object name(s) on command line\n");
+		return;
+	}	
+
+	manager = g_dbus_object_manager_server_new (dbus_object_path);
+	int i = 0;
+	for (i=0;i<NUM_GPIO;i++)
+  	{
+		gchar *s;
+		s = g_strdup_printf ("%s/%s",dbus_object_path,led_gpio[i].name);
+		object = object_skeleton_new (s);
+		g_free (s);
+
+		Led *led = led_skeleton_new ();
+		object_skeleton_set_led (object, led);
+		g_object_unref (led);
+
+		//define method callbacks
+		g_signal_connect (led,
+                    "handle-set-on",
+                    G_CALLBACK (on_set_on),
+                    &led_gpio[i]); /* user_data */
+		g_signal_connect (led,
+                    "handle-set-off",
+                    G_CALLBACK (on_set_off),
+                    &led_gpio[i]);
+
+		led_set_color(led,0);
+		led_set_function(led,led_gpio[i].name);
+ 
+		gpio_init(connection,&led_gpio[i]);
+		/* Export the object (@manager takes its own reference to @object) */
+		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
+		g_object_unref (object);
+	}
+	/* Export all objects */
+ 	g_dbus_object_manager_server_set_connection (manager, connection);
+
+}
+
+static void
+on_name_acquired (GDBusConnection *connection,
+                  const gchar     *name,
+                  gpointer         user_data)
+{
+}
+
+static void
+on_name_lost (GDBusConnection *connection,
+              const gchar     *name,
+              gpointer         user_data)
+{
+}
+
+
+gint
+main (gint argc, gchar *argv[])
+{
+  GMainLoop *loop;
+  cmdline cmd;
+  cmd.argc = argc;
+  cmd.argv = argv;
+
+  guint id;
+  loop = g_main_loop_new (NULL, FALSE);
+
+  id = g_bus_own_name (DBUS_TYPE,
+                       dbus_name,
+                       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
+                       G_BUS_NAME_OWNER_FLAGS_REPLACE,
+                       on_bus_acquired,
+                       on_name_acquired,
+                       on_name_lost,
+                       &cmd,
+                       NULL);
+
+  g_main_loop_run (loop);
+  
+  g_bus_unown_name (id);
+  g_main_loop_unref (loop);
+  return 0;
+}
