diff --git a/configs/Barreleye.py b/configs/Barreleye.py
index 6403ed6..a4b3203 100644
--- a/configs/Barreleye.py
+++ b/configs/Barreleye.py
@@ -14,6 +14,7 @@
 SYSTEM_STATES = [
 	'BASE_APPS',
 	'BMC_STARTING',
+	'BMC_STARTING1',
 	'BMC_STARTING2',
 	'BMC_READY',
 	'HOST_POWERING_ON',
@@ -198,33 +199,47 @@
 		'process_name'    : 'chassis_control.py',
 	},
 	'board_vpd' : {
-		'system_state'    : 'BMC_STARTING2',
+		'system_state'    : 'BMC_STARTING1',
 		'start_process'   : True,
 		'monitor_process' : False,
-		'process_name'    : 'phosphor-read-eeprom',
-		'args'            : ['--eeprom','/sys/bus/i2c/devices/0-0050/eeprom','--fruid','64'],
+		'process_name'    : 'goto_system_state.py',
+		'args'            : ['BMC_STARTING2','phosphor-read-eeprom','--eeprom','/sys/bus/i2c/devices/0-0050/eeprom','--fruid','64']
 	},
 	'motherboard_vpd' : {
-		'system_state'    : 'BMC_STARTING2',
+		'system_state'    : 'BMC_STARTING1',
 		'start_process'   : True,
 		'monitor_process' : False,
 		'process_name'    : 'phosphor-read-eeprom',
 		'args'            : ['--eeprom','/sys/bus/i2c/devices/4-0054/eeprom','--fruid','3'],
 	},
 	'exp_vpd' : {
-		'system_state'    : 'BMC_STARTING2',
+		'system_state'    : 'BMC_STARTING1',
 		'start_process'   : True,
 		'monitor_process' : False,
 		'process_name'    : 'phosphor-read-eeprom',
 		'args'            : ['--eeprom','/sys/bus/i2c/devices/6-0051/eeprom','--fruid','65'],
 	},
 	'hdd_vpd' : {
-		'system_state'    : 'BMC_STARTING2',
+		'system_state'    : 'BMC_STARTING1',
 		'start_process'   : True,
 		'monitor_process' : False,
 		'process_name'    : 'phosphor-read-eeprom',
 		'args'            : ['--eeprom','/sys/bus/i2c/devices/6-0055/eeprom','--fruid','66'],
 	},
+	'sync_mac' : {
+		'system_state'    : 'BMC_READY',
+		'start_process'   : True,
+		'monitor_process' : False,
+		'process_name'    : 'sync_inventory_items.py',
+		'args'            : ['-t','DAUGHTER_CARD','-n','io_board','-p','Custom Field 2','-s','mac'],
+	},
+	'sync_uuid' : {
+		'system_state'    : 'BMC_READY',
+		'start_process'   : True,
+		'monitor_process' : False,
+		'process_name'    : 'sync_inventory_items.py',
+		'args'            : ['-t','MAIN_PLANAR','-n','motherboard','-p','Custom Field 1','-s','uuid'],
+	},
 	'restore' : {
 		'system_state'    : 'BMC_READY',
 		'start_process'   : True,
diff --git a/pyinventorymgr/setup.py b/pyinventorymgr/setup.py
index 851d961..07e48b4 100644
--- a/pyinventorymgr/setup.py
+++ b/pyinventorymgr/setup.py
@@ -2,5 +2,5 @@
 
 setup(name='pyinventorymgr',
       version='1.0',
-      scripts=['inventory_items.py'],
+      scripts=['inventory_items.py', 'sync_inventory_items.py'],
       )
diff --git a/pyinventorymgr/sync_inventory_items.py b/pyinventorymgr/sync_inventory_items.py
new file mode 100644
index 0000000..8f265ab
--- /dev/null
+++ b/pyinventorymgr/sync_inventory_items.py
@@ -0,0 +1,131 @@
+#!/usr/bin/python -u
+#
+# Copyright 2016 IBM Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import sys
+import dbus
+import argparse
+import subprocess
+import obmc_system_config as System
+
+INV_DBUS_NAME = 'org.openbmc.Inventory'
+INV_INTF_NAME = 'org.openbmc.InventoryItem'
+NET_DBUS_NAME = 'org.openbmc.NetworkManager'
+NET_OBJ_NAME = '/org/openbmc/NetworkManager/Interface'
+CHS_DBUS_NAME = 'org.openbmc.control.Chassis'
+CHS_OBJ_NAME = '/org/openbmc/control/chassis0'
+PROP_INTF_NAME = 'org.freedesktop.DBus.Properties'
+
+FRUS = System.FRU_INSTANCES
+
+# IEEE 802 MAC address mask for locally administered.
+# This means the admin has set the MAC and is no longer
+# the unique number set by the device manufacturer.
+MAC_LOCALLY_ADMIN_MASK = 0x20000000000
+
+
+# Get the inventory dbus path based on the requested fru
+def get_inv_obj_path(fru_type, fru_name):
+    obj_path = ''
+    for f in FRUS.keys():
+        if (FRUS[f]['fru_type'] == fru_type and f.endswith(fru_name)):
+            obj_path = f.replace("<inventory_root>", System.INVENTORY_ROOT)
+    return obj_path
+
+
+# Get the inventory property value
+def get_inv_value(obj, prop_name):
+    value = ''
+    dbus_method = obj.get_dbus_method("Get", PROP_INTF_NAME)
+    value = dbus_method(INV_INTF_NAME, prop_name)
+    return value
+
+
+# Get the value of the mac on the system without ':' separators
+def get_sys_mac(obj):
+    sys_mac = ''
+    dbus_method = obj.get_dbus_method("GetHwAddress", NET_DBUS_NAME)
+    sys_mac = dbus_method("eth0")
+    sys_mac = sys_mac.replace(":", "")
+    return sys_mac
+
+
+# Replace the value of the system mac with the value of the inventory
+# MAC if the system MAC is not locally administered because this means
+# the system admin has purposely set the MAC
+def sync_mac(obj, inv_mac, sys_mac):
+    # Convert sys MAC to int to perform bitwise '&'
+    int_sys_mac = int(sys_mac, 16)
+    if not int_sys_mac & MAC_LOCALLY_ADMIN_MASK:
+        # Sys MAC is not locally administered, go replace it with inv value
+        # Add the ':' separators
+        mac_str = ':'.join([inv_mac[i]+inv_mac[i+1] for i in range(0, 12, 2)])
+        # The Set HW Method already has checking for mac format
+        dbus_method = obj.get_dbus_method("SetHwAddress", NET_DBUS_NAME)
+        dbus_method("eth0", mac_str)
+
+
+# Get sys uuid
+def get_sys_uuid(obj):
+    sys_uuid = ''
+    dbus_method = obj.get_dbus_method("Get", PROP_INTF_NAME)
+    sys_uuid = dbus_method(CHS_DBUS_NAME, "uuid")
+    return sys_uuid
+
+
+# Set sys uuid, this reboots the BMC for the value to take effect
+def set_sys_uuid(uuid):
+    rc = subprocess.call(["fw_setenv", "uuid", uuid])
+    if rc == 0:
+        print "Rebooting BMC to set uuid"
+        # TODO Uncomment once sync from u-boot to /etc/machine-id is in place
+        # Issue openbmc/openbmc#479
+        # rc = subprocess.call(["reboot"])
+    else:
+        print "Error setting uuid"
+
+if __name__ == '__main__':
+    arg = argparse.ArgumentParser()
+    arg.add_argument('-t')
+    arg.add_argument('-n')
+    arg.add_argument('-p')
+    arg.add_argument('-s')
+
+    opt = arg.parse_args()
+    fru_type = opt.t
+    fru_name = opt.n
+    prop_name = opt.p
+    sync_type = opt.s
+
+    bus = dbus.SystemBus()
+    inv_obj_path = get_inv_obj_path(fru_type, fru_name)
+    inv_obj = bus.get_object(INV_DBUS_NAME, inv_obj_path)
+    net_obj = bus.get_object(NET_DBUS_NAME, NET_OBJ_NAME)
+    chs_obj = bus.get_object(CHS_DBUS_NAME, CHS_OBJ_NAME)
+
+    # Get the value of the requested inventory property
+    inv_value = get_inv_value(inv_obj, prop_name)
+
+    if sync_type == "mac":
+        sys_mac = get_sys_mac(net_obj)
+        if inv_value != sys_mac:
+            sync_mac(net_obj, inv_value, sys_mac)
+    elif sync_type == "uuid":
+        sys_uuid = get_sys_uuid(chs_obj)
+        if inv_value != sys_uuid:
+            set_sys_uuid(inv_value)
+
