diff --git a/classes/obmc-phosphor-dbus-service.bbclass b/classes/obmc-phosphor-dbus-service.bbclass
index e7f6340..7616d94 100644
--- a/classes/obmc-phosphor-dbus-service.bbclass
+++ b/classes/obmc-phosphor-dbus-service.bbclass
@@ -9,6 +9,14 @@
 #    appended.  If one is found, it is added to the package
 #    and used verbatim.  If it is not found, a default one
 #    (with very open permissions) is generated and used.
+#
+#    Additionally the class will instantiate obmc-phosphor-systemd
+#    with any SYSTEMD_SERVICE_%s variables translated appropriately.
+#
+#  DBUS_USER_${PN}_org.openbmc.Foo = "dbususer"
+#    The user a service should be configured to run as.  If unspecified
+#    no User property is added.
+
 
 inherit dbus-dir
 inherit obmc-phosphor-utils
@@ -21,14 +29,14 @@
 
 
 python dbus_do_postinst() {
-    def make_default_dbus_config(d, service):
+    def make_default_dbus_config(d, service, user):
         path = d.getVar('D', True)
         path += d.getVar('dbus_system_confdir', True)
         with open('%s/%s.conf' % (path, service), 'w+') as fd:
             fd.write('<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"\n')
             fd.write('        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">\n')
             fd.write('<busconfig>\n')
-            fd.write('        <policy user="root">\n')
+            fd.write('        <policy user="%s">\n' % user)
             fd.write('                <allow own="%s"/>\n' % service)
             fd.write('                <allow send_destination="%s"/>\n' % service)
             fd.write('        </policy>\n')
@@ -36,8 +44,8 @@
             fd.close()
 
 
-    for service in listvar_to_list(d, '_DEFAULT_DBUS_CONFIGS'):
-        make_default_dbus_config(d, service)
+    for service_user in listvar_to_list(d, '_DEFAULT_DBUS_CONFIGS'):
+        make_default_dbus_config(d, *service_user.split(':'))
 }
 
 
@@ -47,7 +55,10 @@
     def add_dbus_config(d, service, pkg):
         path = bb.utils.which(searchpaths, '%s.conf' % service)
         if not os.path.isfile(path):
-            set_append(d, '_DEFAULT_DBUS_CONFIGS', service)
+            user = d.getVar(
+                'DBUS_USER_%s_%s' % (pkg, service), True) or 'root'
+            set_append(d, '_DEFAULT_DBUS_CONFIGS', '%s:%s' % (
+                service, user))
         else:
             set_append(d, 'SRC_URI', 'file://%s.conf' % service)
             set_append(d, '_INSTALL_DBUS_CONFIGS', '%s.conf' % service)
@@ -55,11 +66,31 @@
             % (d.getVar('dbus_system_confdir', True), service))
 
 
+    def add_sd_unit(d, service, pkg):
+        set_append(
+            d, 'SYSTEMD_SERVICE_%s' % pkg, '%s.service' % service)
+        set_append(d, 'SYSTEMD_SUBSTITUTIONS_%s.service' % service,
+            'BUSNAME:%s' % service)
+
+
+    def add_sd_user(d, service, pkg):
+        user = d.getVar(
+            'DBUS_USER_%s_%s' % (pkg, service), True)
+        if user:
+            set_append(d, 'SYSTEMD_USER_%s_%s.service' % (
+                pkg, service), user)
+
+
     for pkg in listvar_to_list(d, 'DBUS_PACKAGES'):
+        if pkg not in (d.getVar('SYSTEMD_PACKAGES', True) or ''):
+            set_append(d, 'SYSTEMD_PACKAGES', pkg)
+
         services = listvar_to_list(d, 'DBUS_SERVICE_%s' % pkg)
 
         for service in services:
             add_dbus_config(d, service, pkg)
+            add_sd_unit(d, service, pkg)
+            add_sd_user(d, service, pkg)
 }
 
 
@@ -75,3 +106,5 @@
 }
 
 do_install[postfuncs] += "dbus_do_postinst"
+
+inherit obmc-phosphor-systemd
