diff --git a/classes/obmc-phosphor-utils.bbclass b/classes/obmc-phosphor-utils.bbclass
index 713c892..baaa19d 100644
--- a/classes/obmc-phosphor-utils.bbclass
+++ b/classes/obmc-phosphor-utils.bbclass
@@ -42,3 +42,11 @@
     lists = [listvar_to_list(d, x) for x in listvars]
     lst = [fmt.format(*x) for x in zip(*lists)]
     return (kw.get('sep') or ' ').join(lst)
+
+
+def append_suffix(val, suffix):
+    words = val.split(' ')
+    newval = []
+    for w in words:
+        newval.append(w + suffix)
+    return ' '.join(newval)
\ No newline at end of file
diff --git a/classes/phosphor-ipmi-host-whitelist.bbclass b/classes/phosphor-ipmi-host-whitelist.bbclass
new file mode 100644
index 0000000..7db71d5
--- /dev/null
+++ b/classes/phosphor-ipmi-host-whitelist.bbclass
@@ -0,0 +1,27 @@
+# Common code for recipes that implement Phosphor IPMI Whitelist
+# packages
+
+WHITELIST ?= "${PN}.conf"
+INSTALLDIR = "${sysconfdir}/phosphor-ipmi-host/"
+
+python phosphor_ipmi_host_whitelist_postinstall() {
+    def install_whitelist(d):
+        # Create the install directory if needed
+        whitelist_file = d.getVar('WHITELIST', True)
+        install_dir = d.getVar('INSTALLDIR', True)
+        if not os.path.exists(install_dir):
+            os.makedirs(install_dir)
+        install_file = os.path.join(install_dir, whitelist_file)
+
+        # Search for conf file in FILESPATH
+        searchpaths = d.getVar('FILESPATH', True)
+        path = bb.utils.which(searchpaths, whitelist_file)
+        if not os.path.isfile(path):
+            bb.fatal('Did not find conf file "%s"' % whitelist_file)
+
+        # Copy the conf file into install directory
+        bb.utils.copyfile(path, install_file)
+
+    install_whitelist(d)
+}
+do_install[postfuncs] += "phosphor_ipmi_host_whitelist_postinstall"
\ No newline at end of file
