diff --git a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/conf/machine/include/ast2400.inc b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/conf/machine/include/ast2400.inc
index 8510a03..d67959a 100644
--- a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/conf/machine/include/ast2400.inc
+++ b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/conf/machine/include/ast2400.inc
@@ -4,10 +4,10 @@
 
 PREFERRED_PROVIDER_virtual/kernel ?= "linux-obmc"
 PREFERRED_VERSION_linux-obmc ?= "4.4+git%"
-PREFERRED_VERSION_u-boot ?= "v2013.07+git%"
-PREFERRED_VERSION_u-boot-fw-utils ?= "v2013.07+git%"
+PREFERRED_VERSION_u-boot ?= "v2016.05+git%"
+PREFERRED_VERSION_u-boot-fw-utils ?= "v2016.05+git%"
 
-UBOOT_MACHINE ?= "palmetto_config"
+UBOOT_MACHINE ?= "ast_g4_config"
 UBOOT_ENTRYPOINT ?= "0x40001000"
 UBOOT_LOADADDRESS ?= "0x40001000"
 
diff --git a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_2013.07%.bbappend b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_%.bbappend
similarity index 89%
rename from meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_2013.07%.bbappend
rename to meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_%.bbappend
index 4020696..070f389 100644
--- a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_2013.07%.bbappend
+++ b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot-fw-utils_%.bbappend
@@ -1,7 +1,6 @@
 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
 
 SRC_URI += "file://fw_env.config"
-SRC_URI += "file://config.patch"
 
 do_install_append() {
     if [ -e ${WORKDIR}/fw_env.config ] ; then
diff --git a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_2013.07%.bbappend b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_%.bbappend
similarity index 71%
rename from meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_2013.07%.bbappend
rename to meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_%.bbappend
index 42a4704..ef6a709 100644
--- a/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_2013.07%.bbappend
+++ b/meta-openbmc-bsp/meta-aspeed/meta-ast2400/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -1,4 +1,3 @@
 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
 
 SRC_URI += "file://fw_env.config"
-SRC_URI += "file://config.patch"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-firestone/conf/machine/firestone.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-firestone/conf/machine/firestone.conf
index 42f2d29..fa0d35e 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-firestone/conf/machine/firestone.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-firestone/conf/machine/firestone.conf
@@ -5,7 +5,7 @@
 require conf/machine/include/obmc-bsp-common.inc
 require conf/machine/include/ibm.inc
 
-UBOOT_MACHINE_firestone = "palmetto_config"
+UBOOT_MACHINE_firestone = "ast_g4_config"
 UBOOT_ENTRYPOINT = "0x40008000"
 UBOOT_LOADADDRESS = "0x40008000"
 
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-garrison/conf/machine/garrison.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-garrison/conf/machine/garrison.conf
index 4fd03fd..820a513 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-garrison/conf/machine/garrison.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-garrison/conf/machine/garrison.conf
@@ -5,7 +5,7 @@
 require conf/machine/include/obmc-bsp-common.inc
 require conf/machine/include/ibm.inc
 
-UBOOT_MACHINE_garrison = "palmetto_config"
+UBOOT_MACHINE_garrison = "ast_g4_config"
 UBOOT_ENTRYPOINT = "0x40008000"
 UBOOT_LOADADDRESS = "0x40008000"
 
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/conf/machine/palmetto.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/conf/machine/palmetto.conf
index f6256a7..e69a9af 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/conf/machine/palmetto.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-palmetto/conf/machine/palmetto.conf
@@ -5,7 +5,7 @@
 require conf/machine/include/obmc-bsp-common.inc
 require conf/machine/include/ibm.inc
 
-UBOOT_MACHINE_palmetto = "palmetto_config"
+UBOOT_MACHINE_palmetto = "ast_g4_config"
 UBOOT_ENTRYPOINT = "0x40008000"
 UBOOT_LOADADDRESS = "0x40008000"
 
diff --git a/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/conf/machine/barreleye.conf b/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/conf/machine/barreleye.conf
index f9d31f1..d861f74 100644
--- a/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/conf/machine/barreleye.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/conf/machine/barreleye.conf
@@ -5,7 +5,7 @@
 require conf/machine/include/obmc-bsp-common.inc
 require conf/machine/include/rackspace.inc
 
-UBOOT_MACHINE_barreleye = "palmetto_config"
+UBOOT_MACHINE_barreleye = "ast_g4_config"
 UBOOT_ENTRYPOINT = "0x40008000"
 UBOOT_LOADADDRESS = "0x40008000"
 
diff --git a/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/recipes-bsp/u-boot/u-boot_2013.07%.bbappend b/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/recipes-bsp/u-boot/u-boot_2013.07%.bbappend
deleted file mode 100644
index 1eeec2e..0000000
--- a/meta-openbmc-machines/meta-openpower/meta-rackspace/meta-barreleye/recipes-bsp/u-boot/u-boot_2013.07%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS_append := "${THISDIR}/files:"
-
-SRC_URI += "file://u-boot-barreleye.patch"
diff --git a/meta-phosphor/classes/obmc-phosphor-image.bbclass b/meta-phosphor/classes/obmc-phosphor-image.bbclass
index d3960c7..2d97cde 100644
--- a/meta-phosphor/classes/obmc-phosphor-image.bbclass
+++ b/meta-phosphor/classes/obmc-phosphor-image.bbclass
@@ -48,9 +48,10 @@
 
 OBMC_IMAGE_EXTRA_INSTALL ?= ""
 
-def build_overlay(d):
-        if bb.utils.contains("IMAGE_FSTYPES", "overlay", "overlay", "0", d) != "0":
-                return "image-overlay"
-        return ""
+def image_overlay_enabled(d, ifEnabledStr):
+        if d.getVar('OBMC_PHOSPHOR_IMAGE_OVERLAY', True) != "1":
+            return ""
+        return ifEnabledStr
 
-inherit ${@build_overlay(d)}
+IMAGE_FSTYPES += "${@image_overlay_enabled(d, "overlay")}"
+inherit ${@image_overlay_enabled(d, "image-overlay")}
diff --git a/meta-phosphor/classes/obmc-phosphor-image_types_uboot.bbclass b/meta-phosphor/classes/obmc-phosphor-image_types_uboot.bbclass
index adb86e0..c44139e 100644
--- a/meta-phosphor/classes/obmc-phosphor-image_types_uboot.bbclass
+++ b/meta-phosphor/classes/obmc-phosphor-image_types_uboot.bbclass
@@ -14,6 +14,7 @@
 INITRD_LINK_NAME = "${INITRD_IMAGE}-${MACHINE}${INITRAMFS_FSTYPE}"
 
 FLASH_IMAGE_NAME ?= "flash-${MACHINE}-${DATETIME}"
+FLASH_IMAGE_NAME[vardepsexclude] = "DATETIME"
 FLASH_IMAGE_LINK ?= "flash-${MACHINE}"
 
 FLASH_UBOOT_OFFSET ?= "0"
@@ -95,3 +96,4 @@
        tar -h -cvf ${ddir}/${MACHINE}-${DATETIME}.all.tar -C ${ddir} image-bmc
        tar -h -cvf ${ddir}/${MACHINE}-${DATETIME}.tar -C ${ddir} image-u-boot image-kernel image-initramfs image-rofs image-rwfs
 }
+do_generate_flash[vardepsexclude] = "DATETIME"
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2013.07.bb b/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2013.07.bb
deleted file mode 100644
index bfbdcf6..0000000
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2013.07.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-#require recipes-bsp/u-boot/u-boot.inc
-
-SUMMARY = "U-Boot bootloader fw_printenv/setenv utilities"
-SECTION = "bootloader"
-DEPENDS = "mtd-utils"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb \
-                    file://README;beginline=1;endline=22;md5=78b195c11cb6ef63e6985140db7d7bab"
-
-# This revision corresponds to the tag "v2013.07"
-# We use the revision in order to avoid having to fetch it from the
-# repo during parse
-# SRCREV = "62c175fbb8a0f9a926c88294ea9f7e88eb898f6c"
-SRCREV="4b44678c11ac82c7c797bb115e276181752ad54d"
-
-PV = "v2013.07+git${SRCPV}"
-
-UBRANCH = "v2013.07-aspeed-openbmc"
-SRC_URI = "git://git@github.com/openbmc/u-boot.git;branch=${UBRANCH};protocol=https"
-S = "${WORKDIR}/git"
-
-#INSANE_SKIP_${PN} = "already-stripped"
-#EXTRA_OEMAKE_class-target = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${CC} ${CFLAGS} ${LDFLAGS}" V=1'
-#EXTRA_OEMAKE_class-cross = 'ARCH=${TARGET_ARCH} CC="${CC} ${CFLAGS} ${LDFLAGS}" V=1'
-EXTRA_OEMAKE = 'HOSTCC="${CC}" CC="${CC}" HOSTSTRIP="true"'
-
-inherit uboot-config
-
-do_compile () {
-	oe_runmake ${UBOOT_MACHINE}
-	oe_runmake env
-}
-
-do_install () {
-	install -d ${D}${base_sbindir}
-	install -d ${D}${sysconfdir}
-	install -m 755 ${S}/tools/env/fw_printenv ${D}${base_sbindir}/fw_printenv
-	ln -sf fw_printenv ${D}${base_sbindir}/fw_setenv
-	install -m 0644 ${S}/tools/env/fw_env.config ${D}${sysconfdir}/fw_env.config
-}
-
-#do_install_class-cross () {
-#	install -d ${D}${bindir_cross}
-#	install -m 755 ${S}/tools/env/fw_printenv ${D}${bindir_cross}/fw_printenv
-#	install -m 755 ${S}/tools/env/fw_printenv ${D}${bindir_cross}/fw_setenv
-#}
-
-#SYSROOT_PREPROCESS_FUNCS_class-cross = "uboot_fw_utils_cross"
-#uboot_fw_utils_cross() {
-#	sysroot_stage_dir ${D}${bindir_cross} ${SYSROOT_DESTDIR}${bindir_cross}
-#}
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-#BBCLASSEXTEND = "cross native"
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2016.05.bb b/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2016.05.bb
index 80d90fa..c240236 100644
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2016.05.bb
+++ b/meta-phosphor/common/recipes-bsp/u-boot/u-boot-fw-utils_2016.05.bb
@@ -4,8 +4,8 @@
 SECTION = "bootloader"
 DEPENDS = "mtd-utils"
 
-SRCREV = "47441cc36bb8e919a066837e4d7c5a8a1c475da4"
-UBRANCH = "v2016.05-ast2500"
+SRCREV = "3f04d9fef7bbfec3a536337e7fc1b3492d20e331"
+UBRANCH = "v2016.05-aspeed-openbmc"
 SRC_URI = "git://git@github.com/openbmc/u-boot.git;branch=${UBRANCH};protocol=https"
 
 PV = "v2016.05+git${SRCPV}"
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2013.07.bb b/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2013.07.bb
deleted file mode 100644
index f2434ad..0000000
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2013.07.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require recipes-bsp/u-boot/u-boot.inc
-
-# To build u-boot for your machine, provide the following lines in your machine
-# config, replacing the assignments as appropriate for your machine.
-# UBOOT_MACHINE = "omap3_beagle_config"
-# UBOOT_ENTRYPOINT = "0x80008000"
-# UBOOT_LOADADDRESS = "0x80008000"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb \
-                    file://README;beginline=1;endline=22;md5=78b195c11cb6ef63e6985140db7d7bab"
-
-# We use the revision in order to avoid having to fetch it from the repo during parse
-SRCREV = "44f1262bdf39ad93032d39f17a298165372be82e"
-
-PV = "v2013.07+git${SRCPV}"
-
-UBRANCH = "v2013.07-aspeed-openbmc"
-SRC_URI = "git://git@github.com/openbmc/u-boot.git;branch=${UBRANCH};protocol=https"
-
-S = "${WORKDIR}/git"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2016.05.bb b/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2016.05.bb
index f1d6318..bb97e8b 100644
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2016.05.bb
+++ b/meta-phosphor/common/recipes-bsp/u-boot/u-boot_2016.05.bb
@@ -3,8 +3,8 @@
 LIC_FILES_CHKSUM = "file://Licenses/README;md5=a2c678cfd4a4d97135585cad908541c6"
 DEPENDS += "dtc-native"
 
-SRCREV = "47441cc36bb8e919a066837e4d7c5a8a1c475da4"
-UBRANCH = "v2016.05-ast2500"
+SRCREV = "3f04d9fef7bbfec3a536337e7fc1b3492d20e331"
+UBRANCH = "v2016.05-aspeed-openbmc"
 SRC_URI = "git://git@github.com/openbmc/u-boot.git;branch=${UBRANCH};protocol=https"
 
 PV = "v2016.05+git${SRCPV}"
diff --git a/meta-phosphor/common/recipes-core/images/core-image-minimal-initramfs.bbappend b/meta-phosphor/common/recipes-core/images/core-image-minimal-initramfs.bbappend
index 90a1c3f..5710d22 100644
--- a/meta-phosphor/common/recipes-core/images/core-image-minimal-initramfs.bbappend
+++ b/meta-phosphor/common/recipes-core/images/core-image-minimal-initramfs.bbappend
@@ -1,3 +1,4 @@
 PACKAGE_INSTALL_remove = "initramfs-live-boot initramfs-live-install initramfs-live-install-efi"
 PACKAGE_INSTALL += "obmc-phosphor-initfs"
+INITRAMFS_CTYPE ?= "lzma"
 INITRAMFS_FSTYPES = "cpio.${INITRAMFS_CTYPE}"
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd/0100-systemd_networkd_dbus_setaddress.patch b/meta-phosphor/common/recipes-core/systemd/systemd/0100-systemd_networkd_dbus_setaddress.patch
deleted file mode 100644
index e105ddd..0000000
--- a/meta-phosphor/common/recipes-core/systemd/systemd/0100-systemd_networkd_dbus_setaddress.patch
+++ /dev/null
@@ -1,1209 +0,0 @@
-From 4bdb01553409269f992cd3ae76f06aeebf498ade Mon Sep 17 00:00:00 2001
-From: Hariharasubramanian R <hramasub@in.ibm.com>
-Date: Thu, 4 Feb 2016 09:52:48 -0600
-Subject: [PATCH] Sprint 5 : DBus API for network address configuration
-
----
- src/network/networkd-link-bus.c           | 375 +++++++++++++++++++
- src/network/networkd-network-bus.c        | 601 ++++++++++++++++++++++++++++++
- src/network/networkd-network.c            | 108 ++++++
- src/network/org.freedesktop.network1.conf |  20 +
- 4 files changed, 1104 insertions(+)
-
-diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c
-index 1a1524d..5af57e1 100644
---- a/src/network/networkd-link-bus.c
-+++ b/src/network/networkd-link-bus.c
-@@ -25,15 +25,69 @@
- #include "networkd.h"
- #include "networkd-link.h"
- 
-+#define SYSTEMD_NETWORKD_DBUS 1
-+#define SYSTEMD_NETWORKD_DBUS_SETMAC_NETLINK 1
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+/*
-+#include "hostname-util.h"
-+#include "network-internal.h"
-+#include "networkd-link.h"
-+#include "bus-util.h"
-+*/
-+#include <stdio.h>
-+#include <linux/filter.h>
-+#include <netinet/if_ether.h>
-+
-+#include <linux/sockios.h>
-+#include <sys/socket.h>
-+#include <net/if.h>
-+#include <sys/types.h>
-+#include <sys/wait.h>
-+
-+#if 0
-+#include "util.h" /* bus/util.h */
-+#include "sparse-endian.h" /* bus/util.h */
-+#endif
-+
-+#include "sd-network.h"
-+#include "sd-netlink.h"
-+#include "socket-util.h"
-+#include "ether-addr-util.h"
-+#include "netlink-internal.h"
-+/*
-+#include "local-addresses.h"
-+*/
-+#endif
-+
- static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_operational_state, link_operstate, LinkOperationalState);
- static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_administrative_state, link_state, LinkState);
- 
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+static int method_get_address (sd_bus_message *m, void* userdata, sd_bus_error *error);
-+static int method_set_address (sd_bus_message *m, void* userdata, sd_bus_error *error);
-+#endif
-+
-+#if defined (SYSTEMD_NETWORKD_DBUS_SETMAC_IPV4LL)
-+static int link_arp_network_bind_raw_socket(int index, union sockaddr_union *link);
-+static int link_arp_network_send_raw_socket(int fd, const union sockaddr_union *link, const struct ether_arp *arp);
-+#elif defined (SYSTEMD_NETWORKD_DBUS_SETMAC_NETLINK)
-+static int link_if_updown(sd_netlink* rtnl, sd_netlink_message** req, sd_netlink_message** rep, int ifindex, int cmd);
-+static int link_if_setaddr(sd_netlink* rtnl, sd_netlink_message** req, sd_netlink_message** rep, int ifindex, const char* ea);
-+#endif
-+
- const sd_bus_vtable link_vtable[] = {
-         SD_BUS_VTABLE_START(0),
- 
-         SD_BUS_PROPERTY("OperationalState", "s", property_get_operational_state, offsetof(Link, operstate), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
-         SD_BUS_PROPERTY("AdministrativeState", "s", property_get_administrative_state, offsetof(Link, state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
- 
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+	    /* device name */
-+    	SD_BUS_METHOD("GetAddress", "s", "s", method_get_address, SD_BUS_VTABLE_UNPRIVILEGED),
-+	    /* device name, mac addr */
-+    	SD_BUS_METHOD("SetAddress", "ss", "s", method_set_address, SD_BUS_VTABLE_UNPRIVILEGED),
-+#endif
-         SD_BUS_VTABLE_END
- };
- 
-@@ -136,3 +190,324 @@ int link_send_changed(Link *link, const char *property, ...) {
-                         "org.freedesktop.network1.Link",
-                         l);
- }
-+
-+static int method_set_address (sd_bus_message *m, void* userdata, sd_bus_error *error)
-+{
-+    _cleanup_netlink_unref_ sd_netlink                  *rtnl   = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *req    = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *reply  = NULL;
-+    _cleanup_bus_message_unref_ sd_bus_message          *resp   = NULL;
-+    Manager                                             *mgr    = userdata;
-+
-+    struct udev*        udev               = NULL;
-+    struct udev_device* udev_eth           = NULL;
-+    const char*         device             = NULL;
-+    const char*         ea                  = NULL;
-+    char                devpath [32]       = "/sys/class/net/"; 
-+
-+    int                 r;
-+    int                 pid=0;
-+    unsigned char       ifindex;
-+
-+#if defined(SYSTEMD_NETWORKD_DBUS_SETMAC_IPV4LL)
-+        bool                have_mac;
-+        struct ether_addr   e;
-+        struct ether_addr*  ep = NULL;
-+        union sockaddr_union link;
-+        uint8_t             seed[8];
-+        uint8_t             i=0;
-+
-+        struct ifreq        dev;
-+        int                 sock;
-+#endif
-+
-+
-+    assert(m);
-+    assert(mgr);
-+
-+    r = sd_bus_message_read (m, "ss", &device, &ea);
-+    if (r < 0)
-+        return r;
-+
-+/*
-+    if (isempty (device))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Device Name.");
-+
-+    if (isempty (ea))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid MAC Address.");
-+*/
-+
-+    udev = udev_new();
-+    udev_eth = udev_device_new_from_syspath(udev, strcat (devpath, device));
-+    if (!udev_eth)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not find udev device");
-+
-+    ifindex = udev_device_get_ifindex(udev_eth);
-+
-+#if defined (SYSTEMD_NETWORKD_DBUS_SETMAC_IPV4LL)
-+    r = link_arp_network_bind_raw_socket(ifindex, &link);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unable to bind ARP Raw socket.");
-+#elif defined (SYSTEMD_NETWORKD_DBUS_SETMAC_IOCTL)
-+    sock = socket (AF_INET, SOCK_DGRAM, 0);
-+    if (sock < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unable to bind socket.");
-+
-+    strcpy (dev.ifr_name, device);
-+    if (ioctl(sock, SIOCGIFHWADDR, &dev) < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unable to bind socket.");
-+#elif defined (SYSTEMD_NETWORKD_DBUS_SETMAC_NETLINK)
-+    r = link_if_updown (rtnl, &req, &reply, ifindex, 0); /* i/f down */
-+    if (r < 0)
-+        /*return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error shutting down interface");*/
-+        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error shutting down interface");
-+
-+    r = link_if_setaddr(rtnl, &req, &reply, ifindex, ea);
-+    if (r < 0)
-+        /*return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error setting MAC addr on interface");*/
-+        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error setting MAC addr on interface");
-+
-+    r = link_if_updown (rtnl, &req, &reply, ifindex, 1); /* i/f up */
-+    if (r < 0)
-+        /*return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error starting up interface");*/
-+        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error starting up interface");
-+
-+    /* Set U-Boot environment variable.*/
-+    pid = fork (); 
-+    if (!pid)
-+    {
-+        char* argv [] = {"/sbin/fw_setenv", "ethaddr", ea, NULL};
-+        execv (argv[0], argv);
-+        exit (1);
-+    }
-+    else
-+    {
-+        int childerror = 0;
-+
-+        waitpid (pid, &childerror, 0);
-+        if (childerror)        
-+        {
-+            sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error setting u-boot env");
-+        }
-+    }
-+#endif
-+
-+    r = sd_bus_message_new_method_return(m, &resp);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating reply messgage");
-+
-+    r = sd_bus_message_append(resp, "s", ea);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+    r = sd_bus_send(mgr->bus, resp, NULL);
-+
-+    /*return sd_bus_reply_method_return(m, "s", "Setting IFLA address ...");*/
-+    return sd_bus_reply_method_return(m, "s", ea);
-+
-+}
-+
-+static int method_get_address (sd_bus_message *m, void* userdata, sd_bus_error *error)
-+{
-+    _cleanup_netlink_unref_ sd_netlink                  *rtnl   = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *req    = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *reply  = NULL;
-+    _cleanup_bus_message_unref_ sd_bus_message          *resp   = NULL;
-+    Manager                                             *mgr    = userdata;
-+
-+    struct udev*        udev               = NULL;
-+    struct udev_device* udev_eth           = NULL;
-+    const char*         device             = NULL;
-+    char                devpath [32]       = "/sys/class/net/"; 
-+
-+    int                 r;
-+    unsigned char       ifindex;
-+    bool                have_mac;
-+    struct ether_addr   e;
-+    char                ea[ETHER_ADDR_TO_STRING_MAX];
-+
-+    assert(m);
-+    assert(mgr);
-+
-+    r = sd_bus_message_read (m, "s", &device);
-+    if (r < 0)
-+        return r;
-+
-+    if (isempty (device))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Device Name.");
-+
-+    udev = udev_new();
-+    udev_eth = udev_device_new_from_syspath(udev, strcat (devpath, device));
-+    if (!udev_eth)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not find udev device");
-+
-+    ifindex = udev_device_get_ifindex(udev_eth);
-+
-+    r = sd_netlink_open(&rtnl);
-+    if (r < 0)
-+            return log_error_errno(r, "Failed to connect to netlink:"); /* fixme */
-+
-+    r = sd_rtnl_message_new_link(rtnl, &req, RTM_GETLINK, ifindex);
-+    if (r < 0)
-+            return r;
-+
-+    r = sd_netlink_call(rtnl, req, 0, &reply); /* fixme */
-+    if (r < 0)
-+            return r;
-+
-+    have_mac = sd_netlink_message_read_ether_addr(reply, IFLA_ADDRESS, &e) >= 0;
-+    if (!have_mac)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error reading IFLA address");
-+
-+    ether_addr_to_string(&e, ea);
-+
-+    r = sd_bus_message_new_method_return(m, &resp);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating reply messgage");
-+
-+    r = sd_bus_message_append(resp, "s", ea);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+    r = sd_bus_send(mgr->bus, resp, NULL);
-+
-+    /*return sd_bus_reply_method_return(m, "s", "Getting IFLA address ...");*/
-+    return sd_bus_reply_method_return(m, "s", ea);
-+}
-+
-+#if defined (SYSTEMD_NETWORKD_DBUS_SETMAC_IPV4LL)
-+/*----------------------------------------------------------------------------*/
-+/* ARP helper routines copied from ipv4ll-network.c                           */
-+/*----------------------------------------------------------------------------*/
-+static int link_arp_network_bind_raw_socket(int ifindex, union sockaddr_union *link) {
-+
-+        static const struct sock_filter filter[] = {
-+                BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0),                                         /* A <- packet length */
-+                BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(struct ether_arp), 1, 0),           /* packet >= arp packet ? */
-+                BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
-+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct ether_arp, ea_hdr.ar_hrd)), /* A <- header */
-+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPHRD_ETHER, 1, 0),                       /* header == ethernet ? */
-+                BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
-+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct ether_arp, ea_hdr.ar_pro)), /* A <- protocol */
-+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETHERTYPE_IP, 1, 0),                       /* protocol == IP ? */
-+                BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
-+                BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(struct ether_arp, ea_hdr.ar_op)),  /* A <- operation */
-+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPOP_REQUEST, 0, 1),                      /* protocol == request ? */
-+                BPF_STMT(BPF_RET + BPF_K, 65535),                                              /* return all */
-+                BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPOP_REPLY, 0, 1),                        /* protocol == reply ? */
-+                BPF_STMT(BPF_RET + BPF_K, 65535),                                              /* return all */
-+                BPF_STMT(BPF_RET + BPF_K, 0),                                                  /* ignore */
-+        };
-+        struct sock_fprog fprog = {
-+                .len = ELEMENTSOF(filter),
-+                .filter = (struct sock_filter*) filter
-+        };
-+        _cleanup_close_ int s = -1;
-+        int r;
-+
-+        assert(ifindex > 0);
-+        assert(link);
-+
-+        s = socket(PF_PACKET, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
-+        if (s < 0)
-+                return -errno;
-+
-+        r = setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, &fprog, sizeof(fprog));
-+        if (r < 0)
-+                return -errno;
-+
-+        link->ll.sll_family = AF_PACKET;
-+        link->ll.sll_protocol = htons(ETH_P_ARP);
-+        link->ll.sll_ifindex = ifindex;
-+        link->ll.sll_halen = ETH_ALEN;
-+        memset(link->ll.sll_addr, 0xff, ETH_ALEN);
-+
-+        r = bind(s, &link->sa, sizeof(link->ll));
-+        if (r < 0)
-+                return -errno;
-+
-+        r = s;
-+        s = -1;
-+
-+        return r;
-+}
-+static int arp_network_send_raw_socket(int fd, const union sockaddr_union *link,
-+                                        const struct ether_arp *arp) {
-+        int r;
-+
-+        assert(arp);
-+        assert(link);
-+        assert(fd >= 0);
-+
-+        r = sendto(fd, arp, sizeof(struct ether_arp), 0, &link->sa, sizeof(link->ll));
-+        if (r < 0)
-+                return -errno;
-+
-+        return 0;
-+}
-+#endif
-+
-+#if defined (SYSTEMD_NETWORKD_DBUS_SETMAC_NETLINK)
-+/* */
-+/* Bring interface up/down */
-+int link_if_updown(sd_netlink* rtnl, sd_netlink_message** req, sd_netlink_message** rep, int ifindex, int cmd)
-+{
-+    int r=0;
-+    struct ifinfomsg *ifi;
-+
-+    r = message_new(rtnl, req, RTM_NEWLINK);
-+    if (r < 0)
-+            return r;
-+
-+    (*req)->hdr->nlmsg_len = NLMSG_LENGTH(sizeof (struct ifinfomsg));
-+    (*req)->hdr->nlmsg_flags = NLM_F_REQUEST;
-+    (*req)->hdr->nlmsg_type = RTM_NEWLINK;
-+
-+    ifi = NLMSG_DATA((*req)->hdr);
-+
-+    ifi->ifi_family = AF_UNSPEC;
-+    ifi->ifi_change |= IFF_UP;
-+    ifi->ifi_index = index;
-+
-+    /* when IFF_UP flag is set i/f will be active, otherwise i/f is shut down */
-+    if (cmd)
-+        ifi->ifi_flags |= IFF_UP;
-+
-+    return sd_netlink_call(rtnl, *req, 0, rep);
-+}
-+
-+/* Set interface MAC address */
-+int link_if_setaddr(sd_netlink* rtnl, sd_netlink_message** req, sd_netlink_message** rep, int ifindex, const char* ea)
-+{
-+    int r=0;
-+    int i=0;
-+
-+    struct ifinfomsg *ifi;
-+    struct ether_addr   e;
-+    struct ether_addr*  ep;
-+
-+    r = message_new(rtnl, req, RTM_NEWLINK);
-+    if (r < 0)
-+            return r;
-+
-+    (*req)->hdr->nlmsg_len = NLMSG_LENGTH(sizeof (struct ifinfomsg));
-+    (*req)->hdr->nlmsg_flags = NLM_F_REQUEST;
-+    (*req)->hdr->nlmsg_type = RTM_NEWLINK;
-+
-+    ifi = NLMSG_DATA((*req)->hdr);
-+
-+    ifi->ifi_family = AF_UNSPEC;
-+    ifi->ifi_index = ifindex;
-+
-+    ep = ether_aton (ea);
-+    if (!ep)
-+        return -1;
-+
-+    for (i=0; i<6; i++)
-+        e.ether_addr_octet[i] = ep->ether_addr_octet[i];
-+
-+    r = sd_netlink_message_append_ether_addr(*req, IFLA_ADDRESS, &e);
-+
-+    return sd_netlink_call(rtnl, *req, 0, rep);
-+}
-+#endif
-diff --git a/src/network/networkd-network-bus.c b/src/network/networkd-network-bus.c
-index 5717a15..0a4cdd6 100644
---- a/src/network/networkd-network-bus.c
-+++ b/src/network/networkd-network-bus.c
-@@ -19,10 +19,39 @@
-   along with systemd; If not, see <http://www.gnu.org/licenses/>.
- ***/
- 
-+#define SYSTEMD_NETWORKD_DBUS 1
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <netinet/ether.h>
-+#include <linux/if.h>
-+#endif
-+
- #include "strv.h"
- 
- #include "networkd.h"
- 
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+#include "hostname-util.h"
-+#include "network-internal.h"
-+#include "networkd-link.h"
-+#include "bus-util.h"
-+
-+#include "sd-network.h"
-+#include "sd-netlink.h"
-+#include "local-addresses.h"
-+#endif
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+int network_address_added_handler (sd_netlink* rtnl, sd_netlink_message* m, void* userdata);
-+int network_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message, void *userdata, Address* address); /* fixme */
-+static int method_get_address (sd_bus_message *m, void* userdata, sd_bus_error *error); /* fixme */
-+int network_save_static (int cmd, const char* device, const char* ipaddr, int prefixlen, const char* gwaddr);
-+#endif
-+
- static int property_get_ether_addrs(
-                 sd_bus *bus,
-                 const char *path,
-@@ -56,6 +85,11 @@ static int property_get_ether_addrs(
-         return sd_bus_message_close_container(reply);
- }
- 
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+static int method_add_address (sd_bus_message *m, void* userdata, sd_bus_error *error);
-+static int method_del_address (sd_bus_message *m, void* userdata, sd_bus_error *error);
-+#endif
-+
- const sd_bus_vtable network_vtable[] = {
-         SD_BUS_VTABLE_START(0),
- 
-@@ -67,6 +101,13 @@ const sd_bus_vtable network_vtable[] = {
-         SD_BUS_PROPERTY("MatchType", "as", NULL, offsetof(Network, match_type), SD_BUS_VTABLE_PROPERTY_CONST),
-         SD_BUS_PROPERTY("MatchName", "as", NULL, offsetof(Network, match_name), SD_BUS_VTABLE_PROPERTY_CONST),
- 
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+	    /* device, IP, netmask, family, flags, scope, gateway */
-+    	SD_BUS_METHOD("AddAddress", "sssyyys", "x", method_add_address, SD_BUS_VTABLE_UNPRIVILEGED),
-+    	SD_BUS_METHOD("DelAddress", "sssyyys", "x", method_del_address, SD_BUS_VTABLE_UNPRIVILEGED),
-+	    /* (family, prefixlen, flags, scope, IP)+ gateway */
-+    	SD_BUS_METHOD("GetAddress", "s", "a(iyyus)s", method_get_address, SD_BUS_VTABLE_UNPRIVILEGED),
-+#endif
-         SD_BUS_VTABLE_END
- };
- 
-@@ -152,3 +193,563 @@ int network_object_find(sd_bus *bus, const char *path, const char *interface, vo
- 
-         return 1;
- }
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+
-+static int method_add_address (sd_bus_message *m, void* userdata, sd_bus_error *error)
-+{
-+    _cleanup_bus_message_unref_ sd_bus_message*         resp    = NULL;
-+    _cleanup_netlink_unref_ sd_netlink*                 rtnl    = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message* req     = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message* reply   = NULL;
-+    _cleanup_address_free_ Address *addr                        = NULL;
-+    _cleanup_route_free_ Route *rt                              = NULL;
-+    Manager *mgr                                                = userdata;
-+    Link*               link               = NULL;
-+    struct udev*        udev               = NULL;
-+    struct udev_device* udev_eth           = NULL;
-+
-+    const char*         device             = NULL;
-+    const char*         ipaddr             = NULL;
-+    const char*         netmask            = NULL;
-+    const char*         gateway            = NULL;
-+    char                devpath [32]       = "/sys/class/net/"; 
-+
-+    unsigned char       family;
-+    unsigned char       prefixlen;
-+    unsigned char       flags;
-+    unsigned char       scope;
-+    unsigned char       ifindex;
-+
-+    struct in_addr      nm;
-+    struct in_addr      ip;
-+    struct in_addr      gw;
-+    int r;
-+
-+    assert(m);
-+    assert(mgr);
-+
-+    r = sd_bus_message_read (m, "sssyyys", &device, &ipaddr, &netmask, &family, &flags, &scope, &gateway);
-+    if (r < 0)
-+        return r;
-+
-+    if (isempty (device))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Device Name.");
-+
-+    if (isempty (ipaddr))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IP Address.");
-+
-+    if (isempty (netmask))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IP Netmask.");
-+
-+    assert(family == AF_INET || family == AF_INET6);
-+
-+    udev = udev_new();
-+    udev_eth = udev_device_new_from_syspath(udev, strcat (devpath, device));
-+    if (!udev_eth)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not find udev device");
-+
-+    ifindex = udev_device_get_ifindex(udev_eth);
-+
-+    inet_aton (netmask, &nm);
-+    inet_aton (ipaddr, &ip);
-+    if (!isempty (gateway)) inet_aton (gateway, &gw);
-+
-+    prefixlen = in_addr_netmask_to_prefixlen(&nm);
-+    assert(prefixlen > 0);
-+
-+#if 0
-+    r = network_save_static (1, device, ipaddr, prefixlen, gateway); /* persist config - add */
-+    if (r)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, strerror(r));
-+#endif
-+
-+    r = address_new_dynamic(&addr);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating new address");
-+
-+    r = sd_netlink_open(&rtnl);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_IO_ERROR, "Failed to connect to netlink");
-+
-+    link = new0(Link, 1);
-+    if (!link)
-+            return -ENOMEM;
-+
-+    link->network = new0(Network, 1);
-+    if (!link->network)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Could not alloc memory for Network");
-+
-+    link->n_ref                 = 1;
-+    link->manager               = mgr;
-+    link->manager->rtnl         = rtnl;
-+    link->state                 = LINK_STATE_PENDING;
-+    link->rtnl_extended_attrs   = true;
-+    link->ifindex               = ifindex;
-+    link->ifname                = strdup(device); /*FIXME:*/
-+    if (!link->ifname)
-+            return -ENOMEM;
-+
-+    addr->family                = family;
-+    addr->in_addr.in.s_addr     = ip.s_addr;
-+    addr->prefixlen             = prefixlen;
-+    addr->broadcast.s_addr      = ip.s_addr | ~nm.s_addr;
-+
-+    LIST_PREPEND(addresses, link->network->static_addresses, addr);
-+
-+    if (!isempty (gateway))
-+    {
-+        r = route_new_dynamic(&rt, RTPROT_STATIC);
-+        if (r < 0)
-+            return r;
-+
-+        rt->protocol        = RTPROT_STATIC;
-+        rt->network         = link->network;
-+        rt->family          = family;
-+        rt->scope           = RT_SCOPE_LINK;            /* FIXME: */
-+        rt->dst_prefixlen   = prefixlen;                /* FIXME: AF_INET assumed */
-+/*
-+        rt->dst_addr.in     = gw;
-+        rt->in_addr.in      = ip.s_addr & nm.s_addr;
-+*/
-+        rt->dst_addr.in.s_addr      = ip.s_addr & nm.s_addr;
-+        rt->in_addr.in              = gw;
-+
-+        LIST_PREPEND(routes, link->network->static_routes, rt);
-+    }
-+
-+    /* send an nlmsg (RTM_NEWADDR) and append address to link address list */
-+    r = address_update (addr, link, network_address_added_handler);
-+    if (r < 0)
-+        return r;
-+
-+    r = sd_bus_message_new_method_return(m, &resp);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating reply messgage");
-+
-+    r = sd_bus_message_append(resp, "x", 0);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+    /*r = sd_bus_send(mgr->bus, resp, NULL);*/
-+    r = sd_bus_send(NULL, resp, NULL);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error sending reply messgage");
-+
-+
-+    return sd_bus_reply_method_return(m, "s", "Adding IP address...");
-+}
-+
-+static int method_del_address (sd_bus_message *m, void* userdata, sd_bus_error *error)
-+{
-+    _cleanup_bus_message_unref_ sd_bus_message*         resp    = NULL;
-+    _cleanup_netlink_unref_ sd_netlink*                 rtnl    = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message* req     = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message* reply   = NULL;
-+    _cleanup_address_free_ Address *addr                        = NULL;
-+    _cleanup_route_free_ Route *rt                              = NULL;
-+    Manager *mgr                                                = userdata;
-+    Link*               link               = NULL;
-+    struct udev*        udev               = NULL;
-+    struct udev_device* udev_eth           = NULL;
-+
-+    const char*         device             = NULL;
-+    const char*         ipaddr             = NULL;
-+    const char*         netmask            = NULL;
-+    const char*         gateway            = NULL;
-+    char                devpath [32]       = "/sys/class/net/"; 
-+
-+    unsigned char       family;
-+    unsigned char       prefixlen;
-+    unsigned char       flags;
-+    unsigned char       scope;
-+    unsigned char       ifindex;
-+
-+    struct in_addr      nm;
-+    struct in_addr      ip;
-+    struct in_addr      gw;
-+    int r;
-+
-+    assert(m);
-+    assert(mgr);
-+
-+    r = sd_bus_message_read (m, "sssyyys", &device, &ipaddr, &netmask, &family, &flags, &scope, &gateway);
-+    if (r < 0)
-+        return r;
-+
-+    if (isempty (device))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Device Name.");
-+
-+    if (isempty (ipaddr))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IP Address.");
-+
-+    if (isempty (netmask))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid IP Netmask.");
-+
-+    assert(family == AF_INET || family == AF_INET6);
-+
-+    udev = udev_new();
-+    udev_eth = udev_device_new_from_syspath(udev, strcat (devpath, device));
-+    if (!udev_eth)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not find udev device");
-+
-+    ifindex = udev_device_get_ifindex(udev_eth);
-+
-+    inet_aton (netmask, &nm);
-+    inet_aton (ipaddr, &ip);
-+    if (!isempty (gateway)) inet_aton (gateway, &gw);
-+
-+    prefixlen = in_addr_netmask_to_prefixlen(&nm);
-+    assert(prefixlen > 0);
-+
-+    r = address_new_dynamic(&addr);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating new address");
-+
-+    r = sd_netlink_open(&rtnl);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_IO_ERROR, "Failed to connect to netlink");
-+
-+    link = new0(Link, 1);
-+    if (!link)
-+            return -ENOMEM;
-+
-+    link->network = new0(Network, 1);
-+    if (!link->network)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Could not alloc memory for Network");
-+
-+    link->n_ref                 = 1;
-+    link->manager               = mgr;
-+    link->manager->rtnl         = rtnl;
-+    link->state                 = LINK_STATE_PENDING;
-+    link->rtnl_extended_attrs   = true;
-+    link->ifindex               = ifindex;
-+    link->ifname                = strdup(device);
-+    if (!link->ifname)
-+            return -ENOMEM;
-+
-+    addr->family                = family;
-+    addr->in_addr.in.s_addr     = ip.s_addr;
-+    addr->prefixlen             = prefixlen;
-+    addr->broadcast.s_addr      = ip.s_addr | ~nm.s_addr;
-+
-+    if (!isempty (gateway))
-+    {
-+        r = route_new_dynamic(&rt, RTPROT_STATIC);
-+        if (r < 0)
-+            return r;
-+
-+        rt->network         = link->network;
-+        rt->family          = family;
-+        rt->scope           = RT_SCOPE_LINK;            /* FIXME: */
-+        rt->dst_prefixlen   = 32;                       /* FIXME: AF_INET assumed */
-+        rt->dst_addr.in     = gw;
-+
-+        /*LIST_PREPEND(routes, link->network->static_routes, rt);*/
-+        /* Drop the Gateway */
-+        route_drop (rt, link, link_route_drop_handler);
-+    }
-+
-+    /* send an nlmsg to delete address from address list */
-+    r = address_drop(addr, link, link_address_drop_handler);
-+    if (r < 0)
-+        return r;
-+
-+    r = sd_bus_message_new_method_return(m, &resp);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating reply messgage");
-+
-+    r = sd_bus_message_append(resp, "x", 0);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+    /*r = sd_bus_send(mgr->bus, resp, NULL);*/
-+    r = sd_bus_send(NULL, resp, NULL);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error sending reply messgage");
-+
-+#if 0
-+    r = network_save_static (0, device, ipaddr, prefixlen, gateway); /* persist config - del */
-+    if (r)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, strerror(r));
-+#endif
-+
-+    return sd_bus_reply_method_return(m, "s", "Deleted IP address...");
-+}
-+
-+static int method_get_address (sd_bus_message *m, void* userdata, sd_bus_error *error)
-+{
-+    _cleanup_netlink_unref_ sd_netlink  *rtnl   = NULL;
-+    _cleanup_address_free_ Address      *addr   = NULL;
-+    _cleanup_route_free_ Route          *rt     = NULL;
-+    Manager                             *mgr    = userdata;
-+    struct udev*        udev               = NULL;
-+    struct udev_device* udev_eth           = NULL;
-+    const char*         device             = NULL;
-+    char                devpath [32]       = "/sys/class/net/"; 
-+    unsigned char       ifindex;
-+    int                 r;
-+
-+    sd_netlink_message* maddr;
-+
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *req    = NULL;
-+    _cleanup_netlink_message_unref_ sd_netlink_message  *reply    = NULL;
-+    _cleanup_bus_message_unref_ sd_bus_message  *resp   = NULL;
-+    _cleanup_address_free_ Address              *address = NULL;
-+    _cleanup_free_ struct local_address         *local   = NULL;
-+    _cleanup_free_ char                         *ipr     = NULL;
-+    _cleanup_free_ char                         *gwr     = NULL;
-+    int                 n;
-+    int                 i;
-+
-+    assert(m);
-+    assert(mgr);
-+
-+    r = sd_bus_message_read (m, "s", &device);
-+    if (r < 0)
-+        return r;
-+
-+    if (isempty (device))
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Device Name.");
-+
-+    udev = udev_new();
-+    udev_eth = udev_device_new_from_syspath(udev, strcat (devpath, device));
-+    if (!udev_eth)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not find udev device");
-+
-+    ifindex = udev_device_get_ifindex(udev_eth);
-+
-+    r = sd_netlink_open(&rtnl);
-+    if (r < 0)
-+            return log_error_errno(r, "Failed to connect to netlink:"); /* fixme */
-+
-+    r = sd_rtnl_message_new_addr(rtnl, &req, RTM_GETADDR, 0, 0);
-+    if (r < 0)
-+            return r;
-+
-+    r = sd_netlink_message_request_dump(req, true);
-+    if (r < 0)
-+            return r;
-+
-+    r = sd_netlink_call(rtnl, req, 0, &reply); /* fixme */
-+    if (r < 0)
-+            return r;
-+
-+    r = sd_bus_message_new_method_return(m, &resp);
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error allocating reply messgage");
-+
-+    r = sd_bus_message_open_container(resp, 'a', "(iyyus)"); /*family,prefixlen,scope,flags,addr*/
-+    if (r < 0)
-+        return sd_bus_error_setf(error, SD_BUS_ERROR_NO_MEMORY, "Error opening a container for reply message");
-+
-+    for (maddr = reply; maddr; maddr = sd_netlink_message_next(maddr)) {
-+            int k;
-+
-+            r = address_new_dynamic(&address);
-+            if (r < 0)
-+                    return r;
-+
-+            k = network_rtnl_process_address(rtnl, maddr, mgr, address);
-+            if (k) {
-+                r = in_addr_to_string(address->family, &address->in_addr, &ipr); /* fixme */
-+                if (r < 0)
-+                        return r;
-+
-+                r = sd_bus_message_append (resp, "(iyyus)",
-+                                                    address->family,
-+                                                    address->prefixlen,
-+                                                    address->scope,
-+                                                    address->flags, 
-+                                                    ipr);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+#if 0
-+                r = sd_bus_message_open_container(resp, 'r', "iyyus");
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error opening struct in reply messgage");
-+
-+                r = sd_bus_message_append(resp, "i", address->family);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+                r = sd_bus_message_append(resp, "y", address->prefixlen);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+                r = sd_bus_message_append(resp, "y", address->scope);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+                r = sd_bus_message_append(resp, "u", address->flags);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+                r = in_addr_to_string(address->family, &address->in_addr, &ipr); /* fixme */
-+                if (r < 0)
-+                        return r;
-+
-+                r = sd_bus_message_append(resp, "s", ipr);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+                r = sd_bus_message_close_container(resp);
-+                if (r < 0)
-+                        return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error closing struct in reply messgage");
-+#endif
-+            }
-+    }
-+
-+    r = sd_bus_message_close_container(resp);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error closing reply container");
-+
-+    n = local_gateways(rtnl, ifindex, AF_UNSPEC, &local);
-+    if (n < 0)
-+            return n;
-+
-+    for (i = 0; i < n; i++) {
-+
-+            r = in_addr_to_string(local[i].family, &local[i].address, &gwr);
-+            if (r < 0)
-+                    return r;
-+    }
-+
-+    r = sd_bus_message_append(resp, "s", gwr);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error appending to reply messgage");
-+
-+    /*r = sd_bus_send(mgr->bus, resp, NULL);*/
-+    r = sd_bus_send(NULL, resp, NULL);
-+    if (r < 0)
-+            return sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Error sending reply messgage");
-+
-+    return sd_bus_reply_method_return(m, "s", "Getting IP configuration...");
-+}
-+
-+
-+int network_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message, void *userdata, Address* address) {
-+        Manager*        m       = (Manager*) userdata; /* fixme */
-+        uint16_t        type;
-+        unsigned char   flags;
-+        char            buf[INET6_ADDRSTRLEN]; 
-+        int             ifindex;
-+        int             r; 
-+        sd_bus_error err    = SD_BUS_ERROR_NULL; /* fixme */
-+        sd_bus_error* error = &err;             /* fixme */
-+
-+        assert(rtnl);
-+        assert(message);
-+        assert(m);
-+        assert(address);
-+
-+        if (sd_netlink_message_is_error(message)) {
-+                r = sd_netlink_message_get_errno(message);
-+                if (r < 0)
-+                        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: failed to receive address: ");
-+
-+                return 0;
-+        }
-+
-+        r = sd_netlink_message_get_type(message, &type);
-+        if (r < 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: could not get message type: ");
-+                return 0;
-+        } else if (type != RTM_NEWADDR && type != RTM_DELADDR) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received unexpected message type when processing address");
-+                return 0;
-+        }
-+
-+        r = sd_rtnl_message_addr_get_ifindex(message, &ifindex);
-+        if (r < 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: could not get ifindex from address: %m");
-+                return 0;
-+        } else if (ifindex <= 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address message with invalid ifindex: %d", ifindex);
-+                return 0;
-+        } 
-+
-+        r = sd_rtnl_message_addr_get_family(message, &address->family); /* int : i*/
-+        if (r < 0 || !IN_SET(address->family, AF_INET, AF_INET6)) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address with invalid family, ignoring.");
-+                return 0;
-+        }
-+
-+        r = sd_rtnl_message_addr_get_prefixlen(message, &address->prefixlen); /* uchar : byte : y */
-+        if (r < 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address with invalid prefixlen, ignoring: ");
-+                return 0;
-+        }
-+
-+        r = sd_rtnl_message_addr_get_scope(message, &address->scope); /* uchar : byte : y*/
-+        if (r < 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address with invalid scope, ignoring: ");
-+                return 0;
-+        }
-+
-+        r = sd_rtnl_message_addr_get_flags(message, &flags); /* uint32 : u*/
-+        if (r < 0) {
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address with invalid flags, ignoring: ");
-+                return 0;
-+        }
-+        address->flags = flags;
-+
-+        switch (address->family) {
-+        case AF_INET:
-+                r = sd_netlink_message_read_in_addr(message, IFA_LOCAL, &address->in_addr.in); /* ulong : uint64 : t */
-+                if (r < 0) {
-+                        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address without valid address, ignoring: ");
-+                        return 0;
-+                }
-+
-+                break;
-+
-+        case AF_INET6:
-+                r = sd_netlink_message_read_in6_addr(message, IFA_ADDRESS, &address->in_addr.in6); /* ulong : uint64 : t */
-+                if (r < 0) {
-+                        sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "rtnl: received address without valid address, ignoring: ");
-+                        return 0;
-+                }
-+
-+                break;
-+
-+        default:
-+                assert_not_reached("invalid address family");
-+        }
-+
-+        if (!inet_ntop(address->family, &address->in_addr, buf, INET6_ADDRSTRLEN)) { /* string : s */
-+                sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Could not print address");
-+                return 0;
-+        }
-+
-+        return 1;
-+}
-+
-+int network_save_static (int cmd, const char* device, const char* ipaddr, int prefixlen, const char* gwaddr)
-+{
-+#define NETWORKD_CONFIG_FILE_NAME_LEN_MAX 64
-+    char    ncfn [NETWORKD_CONFIG_FILE_NAME_LEN_MAX];
-+    FILE*   ncfp = NULL;
-+    int     r=0;
-+
-+    /* /usr/lib/systemd/network/10-bmc-ethx-192.168.255.255.32.network */
-+    snprintf (ncfn, NETWORKD_CONFIG_FILE_NAME_LEN_MAX, "/usr/lib/systemd/network/10-bmc-%s-%s.%d.network", device, ipaddr, prefixlen);
-+
-+    if (cmd) /* add */
-+    {
-+        ncfp = fopen (ncfn, "w+");
-+        if (!ncfp) {
-+            r = errno;
-+        }
-+
-+        fprintf (ncfp, "[Match]\nName=%s\n\n[Network]\nAddress=%s/%d\nGateway=%s\n", device, ipaddr, prefixlen, gwaddr);
-+        fclose (ncfp);
-+    }
-+    else /* del */
-+    {
-+        r = remove (ncfn); 
-+    }
-+
-+    return r;
-+}
-+#endif
-diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
-index 6587ea9..f773936 100644
---- a/src/network/networkd-network.c
-+++ b/src/network/networkd-network.c
-@@ -20,6 +20,9 @@
- ***/
- 
- #include <ctype.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
- #include <net/if.h>
- 
- #include "conf-files.h"
-@@ -32,6 +35,15 @@
- #include "network-internal.h"
- #include "dns-domain.h"
- 
-+#define SYSTEMD_NETWORKD_DBUS 1
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+int network_address_added_handler (sd_netlink* rtnl, sd_netlink_message* m, void* userdata);
-+int network_set_gateway (Link* link);
-+static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata);
-+int network_save_static (int cmd, const char* device, const char* ipaddr, int prefixlen, const char* gwaddr);
-+#endif
-+
- static int network_load_one(Manager *manager, const char *filename) {
-         _cleanup_network_free_ Network *network = NULL;
-         _cleanup_fclose_ FILE *file = NULL;
-@@ -850,3 +862,99 @@ int config_parse_hostname(const char *unit,
- 
-         return 0;
- }
-+
-+#ifdef SYSTEMD_NETWORKD_DBUS
-+int network_address_added_handler (sd_netlink* rtnl, sd_netlink_message* m, void* userdata)
-+{
-+        _cleanup_link_unref_ Link *link = userdata;
-+        int r;
-+
-+        assert(link);
-+
-+        r = sd_netlink_message_get_errno(m);
-+        if (r < 0 && r != -EEXIST) {
-+                log_debug("Error in set IP address!");
-+                link_enter_failed(link);
-+                return r;
-+        } else if (r >= 0)
-+                link_rtnl_process_address(rtnl, m, link->manager);
-+
-+	network_set_gateway (link);
-+
-+	return 0;
-+}
-+
-+/* link_enter_set_routes */
-+int network_set_gateway (Link* link)
-+{
-+        _cleanup_address_free_ Address* addr = NULL;
-+        const char*                     device = NULL;
-+        const char*                     ipaddr = NULL;
-+        const char*                     gwaddr = NULL;
-+        Route*                          rt;
-+        unsigned char                   prefixlen;
-+        int                             r=0;
-+
-+        assert(link);
-+        assert(link->network);
-+        assert(link->state == LINK_STATE_SETTING_ADDRESSES);
-+
-+        link->state = LINK_STATE_SETTING_ROUTES;
-+
-+        LIST_FOREACH(routes, rt, link->network->static_routes) {
-+                gwaddr = inet_ntoa (rt->dst_addr.in);
-+                r = route_configure(rt, link, &route_handler);
-+                if (r < 0) {
-+                        log_debug ("Could not set Gateway!");
-+                        link_enter_failed(link);
-+                        return r;
-+                }
-+
-+                link->link_messages ++;
-+        }
-+
-+        if (link->link_messages == 0) {
-+                link->static_configured = true;
-+
-+                /*link_enter_configured (link);*/
-+                log_link_info(link, "Configured");
-+                link->state = LINK_STATE_CONFIGURED;
-+                link_save(link);
-+        } 
-+        else
-+        { 
-+                log_debug("Setting Gateway");
-+        } 
-+
-+        LIST_FOREACH(addresses, addr, link->network->static_addresses) {
-+            device = strdup (link->ifname);
-+            ipaddr = inet_ntoa (addr->in_addr.in);
-+            prefixlen = addr->prefixlen;
-+#if 1
-+            r = network_save_static (1, device, ipaddr, prefixlen, gwaddr); /* persist config - add */
-+            if (r)
-+            {
-+                log_debug(strerror(r));
-+            }
-+#endif
-+        }
-+
-+        return r;
-+}
-+
-+static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-+        _cleanup_link_unref_ Link *link = userdata;
-+        int r;
-+
-+        assert(link);
-+
-+        r = sd_netlink_message_get_errno(m);
-+        if (r < 0 && r != -EEXIST) {
-+                log_debug ("Could not set route! ");
-+                link_enter_failed(link);
-+        }
-+
-+        return 1;
-+}
-+
-+#endif
-diff --git a/src/network/org.freedesktop.network1.conf b/src/network/org.freedesktop.network1.conf
-index 52dad33..3db7a90 100644
---- a/src/network/org.freedesktop.network1.conf
-+++ b/src/network/org.freedesktop.network1.conf
-@@ -36,6 +36,26 @@
-                        send_interface="org.freedesktop.DBus.Properties"
-                        send_member="GetAll"/>
- 
-+                <allow send_destination="org.freedesktop.network1"
-+                       send_interface="org.freedesktop.network1.Network"
-+                       send_member="AddAddress"/>
-+
-+                <allow send_destination="org.freedesktop.network1"
-+                       send_interface="org.freedesktop.network1.Network"
-+                       send_member="DelAddress"/>
-+
-+                <allow send_destination="org.freedesktop.network1"
-+                       send_interface="org.freedesktop.network1.Network"
-+                       send_member="GetAddress"/>
-+
-+                <allow send_destination="org.freedesktop.network1"
-+                       send_interface="org.freedesktop.network1.Link"
-+                       send_member="GetAddress"/>
-+
-+                <allow send_destination="org.freedesktop.network1"
-+                       send_interface="org.freedesktop.network1.Link"
-+                       send_member="SetAddress"/>
-+
-                 <allow receive_sender="org.freedesktop.network1"/>
-         </policy>
- 
--- 
-1.8.2.2
-
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
index 222be49..9ad6a40 100644
--- a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
+++ b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
@@ -1,7 +1,7 @@
-PACKAGECONFIG += "networkd"
+PACKAGECONFIG_append = " networkd"
+PACKAGECONFIG_remove = "machined hibernate ldconfig binfmt backlight quotacheck localed kdbus ima smack polkit"
 FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
 SRC_URI += "file://default.network"
-SRC_URI += "file://0100-systemd_networkd_dbus_setaddress.patch"
 
 FILES_${PN} += "${libdir}/systemd/network/default.network"
 
diff --git a/meta-phosphor/common/recipes-phosphor/host-ipmid/btbridged.bb b/meta-phosphor/common/recipes-phosphor/host-ipmid/btbridged.bb
index a1a32d9..f3a7003 100644
--- a/meta-phosphor/common/recipes-phosphor/host-ipmid/btbridged.bb
+++ b/meta-phosphor/common/recipes-phosphor/host-ipmid/btbridged.bb
@@ -15,4 +15,4 @@
 
 # This is how linux-libc-headers says to include custom uapi headers
 EXTRA_OEMAKE_append = "CFLAGS=-I${STAGING_KERNEL_DIR}/include/uapi"
-DEPENDS += "virtual/kernel"
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
diff --git a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
index 8d1fd7e..2b6a163 100644
--- a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
+++ b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
@@ -13,7 +13,7 @@
 
 MACHINEOVERRIDES =. "openbmc:"
 
-IMAGE_FSTYPES += "overlay"
+OBMC_PHOSPHOR_IMAGE_OVERLAY= "1"
 IMAGE_FSTYPES += "cpio.${INITRAMFS_CTYPE}.u-boot"
 OBMC_IMAGE_EXTRA_INSTALL_append = " u-boot-fw-utils"
 
diff --git a/meta-phosphor/conf/machine/include/sample.inc b/meta-phosphor/conf/machine/include/sample.inc
index e66dc77..e4d70d1 100644
--- a/meta-phosphor/conf/machine/include/sample.inc
+++ b/meta-phosphor/conf/machine/include/sample.inc
@@ -24,10 +24,10 @@
        "
 PREFERRED_PROVIDER_virtual/obmc-phosphor-host-ipmi-hw = "host-ipmi-hw-example"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-chassis-mgmt = "obmc-phosphor-chassisd"
-PREFERRED_PROVIDER_virtual/obmc-phosphor-event-mgmt = "obmc-phosphor-eventd"
+PREFERRED_PROVIDER_virtual/obmc-phosphor-event-mgmt = "obmc-phosphor-event"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-fan-mgmt = "obmc-phosphor-fand"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-flash-mgmt = "obmc-phosphor-flashd"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-policy-mgmt = "obmc-phosphor-policyd"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-sensor-mgmt = "obmc-phosphor-sensord"
 PREFERRED_PROVIDER_virtual/obmc-phosphor-system-mgmt = "obmc-phosphor-sysd"
-PREFERRED_PROVIDER_virtual/obmc-phosphor-user-mgmt = "obmc-phosphor-userd"
+PREFERRED_PROVIDER_virtual/obmc-phosphor-user-mgmt = "obmc-phosphor-user"
