diff --git a/classes/obmc-phosphor-dbus-service.bbclass b/classes/obmc-phosphor-dbus-service.bbclass
index e6132fa..3277cdb 100644
--- a/classes/obmc-phosphor-dbus-service.bbclass
+++ b/classes/obmc-phosphor-dbus-service.bbclass
@@ -1,20 +1,45 @@
-# Common code for applications providing a D-Bus service.
-
-# Class users should define DBUS_SERVICES prior to including.
+# Utilities and shortcuts for recipes providing D-Bus services.
+# Variables:
+#  DBUS_PACKAGES ?= "${PN}"
+#    The list of packages to which files should be added.
+#
+#  DBUS_SERVICE_${PN} += "org.openbmc.Foo"
+#    A list of dbus service names.  The class will look for a dbus
+#    configuration file with the same name with .conf appended.
+#
+inherit dbus-dir
+inherit obmc-phosphor-utils
 
 RDEPENDS_${PN} += "dbus-perms"
+DBUS_PACKAGES ?= "${PN}"
+
+_INSTALL_DBUS_CONFIGS=""
+
 
 python() {
-        services = d.getVar('DBUS_SERVICES', True)
-        if services:
-                uris = " ".join( [ 'file://' + s + '.conf' for s in services.split() ] )
-                d.appendVar('SRC_URI', ' ' + uris + ' ')
+    searchpaths = d.getVar('FILESPATH', True)
+
+    def add_dbus_config(d, service, pkg):
+        set_append(d, 'SRC_URI', 'file://%s.conf' % service)
+        set_append(d, 'FILES_%s' % pkg, '%s%s.conf' \
+            % (d.getVar('dbus_system_confdir', True), service))
+        set_append(d, '_INSTALL_DBUS_CONFIGS', '%s.conf' % service)
+
+
+    for pkg in listvar_to_list(d, 'DBUS_PACKAGES'):
+        services = listvar_to_list(d, 'DBUS_SERVICE_%s' % pkg)
+
+        for service in services:
+            add_dbus_config(d, service, pkg)
 }
 
+
 do_install_append() {
-        # install the service configuration files
-        install -d ${D}${sysconfdir}/dbus-1/system.d
-        for s in ${DBUS_SERVICES}; do
-                install ${WORKDIR}/$s.conf ${D}${sysconfdir}/dbus-1/system.d/$s.conf
+        # install the dbus configuration files
+        [ -z "${_INSTALL_DBUS_CONFIGS}" ] || \
+                install -d ${D}${dbus_system_confdir}
+        for c in ${_INSTALL_DBUS_CONFIGS}; do
+                install -m 0644 ${WORKDIR}/$c \
+                        ${D}${dbus_system_confdir}$c
         done
 }
