diff --git a/classes/obmc-phosphor-systemd.bbclass b/classes/obmc-phosphor-systemd.bbclass
index 12e0bc1..b07174f 100644
--- a/classes/obmc-phosphor-systemd.bbclass
+++ b/classes/obmc-phosphor-systemd.bbclass
@@ -1,14 +1,52 @@
-# Common code for Phosphor OpenBMC systemd services.
-
+# Common code for systemd based services.
+#
+# Prior to inheriting this class, recipes can define services like this:
+#
+# SYSTEMD_SERVICE_${PN} = "foo.service bar.socket baz@.service"
+#
+# and these files will be added to the main package if they exist.
+#
+# Alternatively this class can just be inherited and
+# ${BPN}.service will be added to the main package.
 inherit systemd
 
-SYSTEMD_SERVICE_${PN} = "${BPN}.service"
-SRC_URI += " \
-        file://${BPN}.service \
-        "
+
+python() {
+    bpn = d.getVar('BPN', True)
+    searchpaths = d.getVar('FILESPATH', True)
+
+    services = d.getVar('SYSTEMD_SERVICE_' + bpn, True)
+
+    if services:
+        services = services.split()
+    else:
+        services = [bpn + '.service']
+
+    for s in services:
+        file = s
+        path = bb.utils.which(searchpaths, file)
+        if os.path.isfile(path):
+            d.appendVar('SRC_URI', ' file://' + file)
+            d.appendVar(
+                'FILES_' + bpn, ' ' +
+                d.getVar('systemd_system_unitdir', True) + file)
+            d.appendVar('OBMC_SYSTEMD_SERVICES', ' ' + file)
+            if file not in (d.getVar('SYSTEMD_SERVICE_' + bpn, True) or "").split():
+                d.appendVar('SYSTEMD_SERVICE_' + bpn, ' ' + file)
+        else:
+            bb.error("Could not find service file: %s" % file)
+}
 
 do_install_append() {
-        # install systemd unit files
-        install -d ${D}${systemd_unitdir}/system
-        install -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_unitdir}/system
+        # install systemd service/socket/template files
+        if [ "${OBMC_SYSTEMD_SERVICES}" ]; then
+                install -d ${D}${systemd_system_unitdir}
+        fi
+        for s in ${OBMC_SYSTEMD_SERVICES}; do
+                install -m 0644 ${WORKDIR}/$s ${D}${systemd_system_unitdir}
+                sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+                        -e 's,@BINDIR@,${bindir},g' \
+                        -e 's,@SBINDIR@,${sbindir},g' \
+                        ${D}${systemd_system_unitdir}/$s
+        done
 }
diff --git a/common/recipes-phosphor/host-ipmid/host-ipmi-hw-example/host-ipmi-hw-example.service b/common/recipes-phosphor/host-ipmid/host-ipmi-hw-example/host-ipmi-hw.service
similarity index 100%
rename from common/recipes-phosphor/host-ipmid/host-ipmi-hw-example/host-ipmi-hw-example.service
rename to common/recipes-phosphor/host-ipmid/host-ipmi-hw-example/host-ipmi-hw.service
