diff --git a/Makefile.am b/Makefile.am
index 337cad3..75888f6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,8 +4,7 @@
 phosphor_ledmanager_SOURCES = \
                 led-main.cpp  \
                 manager.cpp \
-                group.cpp \
-                xyz.openbmc_project.Led.Group.cpp
+                group.cpp
 
 BUILT_SOURCES = led-gen.hpp
 CLEANFILES = led-gen.hpp
@@ -13,7 +12,11 @@
 led-gen.hpp: ${srcdir}/parse_led.py
 	$(AM_V)@LEDGEN@ > $@
 
-phosphor_ledmanager_LDFLAGS = $(SDBUSPLUS_LIBS) $(PHOSPHOR_LOGGING_LIBS)
-phosphor_ledmanager_CFLAGS =  $(SDBUSPLUS_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS)
+phosphor_ledmanager_LDFLAGS = $(SDBUSPLUS_LIBS) \
+                              $(PHOSPHOR_LOGGING_LIBS) \
+                              $(PHOSPHOR_DBUS_INTERFACES_LIBS)
+phosphor_ledmanager_CFLAGS =  $(SDBUSPLUS_CFLAGS) \
+                              $(PHOSPHOR_LOGGING_CFLAGS) \
+                              $(PHOSPHOR_DBUS_INTERFACES_CFLAGS)
 
 SUBDIRS = test
diff --git a/configure.ac b/configure.ac
index 51f6ad9..8cac302 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,7 @@
 # Checks for modules
 PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus],, [AC_MSG_ERROR([Could not find sdbusplus...openbmc/sdbusplus package required])])
 PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, [AC_MSG_ERROR([Could not find phosphor-logging...openbmc/phosphor-logging package required])])
+PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces],, [AC_MSG_ERROR([Could not find phosphor-dbus-interfaces...openbmc/phosphor-dbus-interfaces package required])])
 
 # Dbus service name
 AC_ARG_VAR(BUSNAME, [The Dbus busname to own])
diff --git a/group.hpp b/group.hpp
index 3a14dc1..34f7afd 100644
--- a/group.hpp
+++ b/group.hpp
@@ -2,7 +2,7 @@
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
-#include "xyz/openbmc_project/Led/Group/server.hpp"
+#include <xyz/openbmc_project/Led/Group/server.hpp>
 #include "manager.hpp"
 namespace phosphor
 {
diff --git a/xyz.openbmc_project.Led.Group.cpp b/xyz.openbmc_project.Led.Group.cpp
deleted file mode 100644
index cd32b4b..0000000
--- a/xyz.openbmc_project.Led.Group.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <algorithm>
-#include <sdbusplus/server.hpp>
-#include <sdbusplus/exception.hpp>
-#include "xyz/openbmc_project/Led/Group/server.hpp"
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Led
-{
-namespace server
-{
-
-Group::Group(bus::bus& bus, const char* path)
-        : _xyz_openbmc_project_Led_Group_interface(
-                bus, path, _interface, _vtable, this)
-{
-}
-
-
-
-auto Group::asserted() const ->
-        bool
-{
-    return _asserted;
-}
-
-int Group::_callback_get_Asserted(
-        sd_bus* bus, const char* path, const char* interface,
-        const char* property, sd_bus_message* reply, void* context,
-        sd_bus_error* error)
-{
-    using sdbusplus::server::binding::details::convertForMessage;
-
-    try
-    {
-        auto m = message::message(sd_bus_message_ref(reply));
-
-        auto o = static_cast<Group*>(context);
-        m.append(convertForMessage(o->asserted()));
-    }
-    catch(sdbusplus::internal_exception_t& e)
-    {
-        sd_bus_error_set_const(error, e.name(), e.description());
-        return -EINVAL;
-    }
-
-    return true;
-}
-
-auto Group::asserted(bool value) ->
-        bool
-{
-    if (_asserted != value)
-    {
-        _asserted = value;
-        _xyz_openbmc_project_Led_Group_interface.property_changed("Asserted");
-    }
-
-    return _asserted;
-}
-
-int Group::_callback_set_Asserted(
-        sd_bus* bus, const char* path, const char* interface,
-        const char* property, sd_bus_message* value, void* context,
-        sd_bus_error* error)
-{
-    try
-    {
-        auto m = message::message(sd_bus_message_ref(value));
-
-        auto o = static_cast<Group*>(context);
-
-        bool v{};
-        m.read(v);
-        o->asserted(v);
-    }
-    catch(sdbusplus::internal_exception_t& e)
-    {
-        sd_bus_error_set_const(error, e.name(), e.description());
-        return -EINVAL;
-    }
-
-    return true;
-}
-
-namespace details
-{
-namespace Group
-{
-static const auto _property_Asserted =
-    utility::tuple_to_array(message::types::type_id<
-            bool>());
-}
-}
-
-
-const vtable::vtable_t Group::_vtable[] = {
-    vtable::start(),
-    vtable::property("Asserted",
-                     details::Group::_property_Asserted
-                        .data(),
-                     _callback_get_Asserted,
-                     _callback_set_Asserted,
-                     vtable::property_::emits_change),
-    vtable::end()
-};
-
-} // namespace server
-} // namespace Led
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
diff --git a/xyz/openbmc_project/Led/Group/server.hpp b/xyz/openbmc_project/Led/Group/server.hpp
deleted file mode 100644
index 9f5a796..0000000
--- a/xyz/openbmc_project/Led/Group/server.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#pragma once
-#include <tuple>
-#include <systemd/sd-bus.h>
-#include <sdbusplus/server.hpp>
-
-namespace sdbusplus
-{
-namespace xyz
-{
-namespace openbmc_project
-{
-namespace Led
-{
-namespace server
-{
-
-class Group
-{
-    public:
-        /* Define all of the basic class operations:
-         *     Not allowed:
-         *         - Default constructor to avoid nullptrs.
-         *         - Copy operations due to internal unique_ptr.
-         *     Allowed:
-         *         - Move operations.
-         *         - Destructor.
-         */
-        Group() = delete;
-        Group(const Group&) = delete;
-        Group& operator=(const Group&) = delete;
-        Group(Group&&) = default;
-        Group& operator=(Group&&) = default;
-        virtual ~Group() = default;
-
-        /** @brief Constructor to put object onto bus at a dbus path.
-         *  @param[in] bus - Bus to attach to.
-         *  @param[in] path - Path to attach at.
-         */
-        Group(bus::bus& bus, const char* path);
-
-
-
-
-        /** Get value of Asserted */
-        virtual bool asserted() const;
-        /** Set value of Asserted */
-        virtual bool asserted(bool value);
-
-
-    private:
-
-        /** @brief sd-bus callback for get-property 'Asserted' */
-        static int _callback_get_Asserted(
-            sd_bus*, const char*, const char*, const char*,
-            sd_bus_message*, void*, sd_bus_error*);
-        /** @brief sd-bus callback for set-property 'Asserted' */
-        static int _callback_set_Asserted(
-            sd_bus*, const char*, const char*, const char*,
-            sd_bus_message*, void*, sd_bus_error*);
-
-
-        static constexpr auto _interface = "xyz.openbmc_project.Led.Group";
-        static const vtable::vtable_t _vtable[];
-        sdbusplus::server::interface::interface
-                _xyz_openbmc_project_Led_Group_interface;
-
-        bool _asserted{};
-
-};
-
-
-} // namespace server
-} // namespace Led
-} // namespace openbmc_project
-} // namespace xyz
-} // namespace sdbusplus
-
