diff --git a/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch b/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch
new file mode 100644
index 0000000..afb2a48
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/systemd/0001-Export-message_append_cmdline.patch
@@ -0,0 +1,323 @@
+From 5dfdd9973fe6437985d535fd530cec83a2774113 Mon Sep 17 00:00:00 2001
+From: Brad Bishop <bradleyb@us.ibm.com>
+Date: Tue, 16 Aug 2016 15:07:34 -0400
+Subject: [PATCH] Export message_append_cmdline
+
+Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
+---
+ Makefile.am                         |  43 ++++--
+ src/libsystemd/libsystemd.sym       |   1 +
+ src/libsystemd/sd-bus/bus-message.c | 254 ++++++++++++++++++++++++++++++++++++
+ src/systemd/sd-bus.h                |   1 +
+ 4 files changed, 285 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 03341fc..0dbf4b7 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -3032,7 +3033,10 @@ libsystemd_internal_la_SOURCES = \
+ 	src/libsystemd/sd-device/sd-device.c \
+ 	src/libsystemd/sd-device/device-private.c \
+ 	src/libsystemd/sd-device/device-private.h \
+-	src/libsystemd/sd-resolve/sd-resolve.c
++	src/libsystemd/sd-resolve/sd-resolve.c \
++	src/shared/bus-util.c \
++	src/shared/bus-util.h
++
+ 
+ libsystemd_internal_la_LIBADD = \
+ 	libbasic.la \
+diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
+index 4ab637b..f0c06c7 100644
+--- a/src/libsystemd/libsystemd.sym
++++ b/src/libsystemd/libsystemd.sym
+@@ -488,4 +488,5 @@ global:
+         sd_journal_has_persistent_files;
+         sd_journal_enumerate_fields;
+         sd_journal_restart_fields;
++        sd_bus_message_append_cmdline;
+ } LIBSYSTEMD_227;
+diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
+index c2e913f..d8d3ec8 100644
+--- a/src/libsystemd/sd-bus/bus-message.c
++++ b/src/libsystemd/sd-bus/bus-message.c
+@@ -38,6 +38,7 @@
+ #include "time-util.h"
+ #include "utf8.h"
+ #include "util.h"
++#include "parse-util.h"
+ 
+ static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
+ 
+@@ -5946,3 +5947,256 @@ _public_ int sd_bus_message_set_priority(sd_bus_message *m, int64_t priority) {
+         m->priority = priority;
+         return 0;
+ }
++
++_public_ int sd_bus_message_append_cmdline(sd_bus_message *m, const char *signature, char ***x) {
++        char **p;
++        int r;
++
++        assert(m);
++        assert(signature);
++        assert(x);
++
++        p = *x;
++
++        for (;;) {
++                const char *v;
++                char t;
++
++                t = *signature;
++                v = *p;
++
++                if (t == 0)
++                        break;
++                if (!v) {
++                        log_error("Too few parameters for signature.");
++                        return -EINVAL;
++                }
++
++                signature++;
++                p++;
++
++                switch (t) {
++
++                case SD_BUS_TYPE_BOOLEAN:
++
++                        r = parse_boolean(v);
++                        if (r < 0) {
++                                log_error("Failed to parse as boolean: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &r);
++                        break;
++
++                case SD_BUS_TYPE_BYTE: {
++                        uint8_t z;
++
++                        r = safe_atou8(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as byte (unsigned 8bit integer): %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_INT16: {
++                        int16_t z;
++
++                        r = safe_atoi16(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as signed 16bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_UINT16: {
++                        uint16_t z;
++
++                        r = safe_atou16(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as unsigned 16bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_INT32: {
++                        int32_t z;
++
++                        r = safe_atoi32(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as signed 32bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_UINT32: {
++                        uint32_t z;
++
++                        r = safe_atou32(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as unsigned 32bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_INT64: {
++                        int64_t z;
++
++                        r = safe_atoi64(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as signed 64bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_UINT64: {
++                        uint64_t z;
++
++                        r = safe_atou64(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as unsigned 64bit integer: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++
++                case SD_BUS_TYPE_DOUBLE: {
++                        double z;
++
++                        r = safe_atod(v, &z);
++                        if (r < 0) {
++                                log_error("Failed to parse as double precision floating point: %s", v);
++                                return r;
++                        }
++
++                        r = sd_bus_message_append_basic(m, t, &z);
++                        break;
++                }
++
++                case SD_BUS_TYPE_STRING:
++                case SD_BUS_TYPE_OBJECT_PATH:
++                case SD_BUS_TYPE_SIGNATURE:
++
++                        r = sd_bus_message_append_basic(m, t, v);
++                        break;
++
++                case SD_BUS_TYPE_ARRAY: {
++                        uint32_t n;
++                        size_t k;
++
++                        r = safe_atou32(v, &n);
++                        if (r < 0) {
++                                log_error("Failed to parse number of array entries: %s", v);
++                                return r;
++                        }
++
++                        r = signature_element_length(signature, &k);
++                        if (r < 0) {
++                                log_error("Invalid array signature.");
++                                return r;
++                        }
++
++                        {
++                                unsigned i;
++                                char s[k + 1];
++                                memcpy(s, signature, k);
++                                s[k] = 0;
++
++                                r = sd_bus_message_open_container(m, SD_BUS_TYPE_ARRAY, s);
++                                if (r < 0)
++                                        return bus_log_create_error(r);
++
++                                for (i = 0; i < n; i++) {
++                                        r = sd_bus_message_append_cmdline(m, s, &p);
++                                        if (r < 0)
++                                                return r;
++                                }
++                        }
++
++                        signature += k;
++
++                        r = sd_bus_message_close_container(m);
++                        break;
++                }
++
++                case SD_BUS_TYPE_VARIANT:
++                        r = sd_bus_message_open_container(m, SD_BUS_TYPE_VARIANT, v);
++                        if (r < 0)
++                                return bus_log_create_error(r);
++
++                        r = sd_bus_message_append_cmdline(m, v, &p);
++                        if (r < 0)
++                                return r;
++
++                        r = sd_bus_message_close_container(m);
++                        break;
++
++                case SD_BUS_TYPE_STRUCT_BEGIN:
++                case SD_BUS_TYPE_DICT_ENTRY_BEGIN: {
++                        size_t k;
++
++                        signature--;
++                        p--;
++
++                        r = signature_element_length(signature, &k);
++                        if (r < 0) {
++                                log_error("Invalid struct/dict entry signature.");
++                                return r;
++                        }
++
++                        {
++                                char s[k-1];
++                                memcpy(s, signature + 1, k - 2);
++                                s[k - 2] = 0;
++
++                                r = sd_bus_message_open_container(m, t == SD_BUS_TYPE_STRUCT_BEGIN ? SD_BUS_TYPE_STRUCT : SD_BUS_TYPE_DICT_ENTRY, s);
++                                if (r < 0)
++                                        return bus_log_create_error(r);
++
++                                r = sd_bus_message_append_cmdline(m, s, &p);
++                                if (r < 0)
++                                        return r;
++                        }
++
++                        signature += k;
++
++                        r = sd_bus_message_close_container(m);
++                        break;
++                }
++
++                case SD_BUS_TYPE_UNIX_FD:
++                        log_error("UNIX file descriptor not supported as type.");
++                        return -EINVAL;
++
++                default:
++                        log_error("Unknown signature type %c.", t);
++                        return -EINVAL;
++                }
++
++                if (r < 0)
++                        return bus_log_create_error(r);
++        }
++
++        *x = p;
++        return 0;
++}
+diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
+index 2a2ef0e..a6a21a4 100644
+--- a/src/systemd/sd-bus.h
++++ b/src/systemd/sd-bus.h
+@@ -233,6 +233,7 @@ int sd_bus_message_get_priority(sd_bus_message *m, int64_t *priority);
+ int sd_bus_message_get_expect_reply(sd_bus_message *m);
+ int sd_bus_message_get_auto_start(sd_bus_message *m);
+ int sd_bus_message_get_allow_interactive_authorization(sd_bus_message *m);
++int sd_bus_message_append_cmdline(sd_bus_message *m, const char *signature, char ***x);
+ 
+ const char *sd_bus_message_get_signature(sd_bus_message *m, int complete);
+ const char *sd_bus_message_get_path(sd_bus_message *m);
+-- 
+1.8.3.1
+
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
index 3c3dbac..0fd2931 100644
--- a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
+++ b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
@@ -3,6 +3,7 @@
 FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
 SRC_URI += "file://default.network"
 SRC_URI += "file://obmc-standby.target"
+SRC_URI += "file://0001-Export-message_append_cmdline.patch"
 
 FILES_${PN} += "${libdir}/systemd/network/default.network"
 FILES_${PN} += "${systemd_system_unitdir}/obmc-standby.target"
