diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
deleted file mode 100755
index 1fa8d87..0000000
--- a/bin/PropertyManager.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import cPickle
-import os
-import Openbmc
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-#from gi.repository import Gio, GLib, GObject
-import gobject
-
-
-class PropertyManager():
-	def __init__(self,bus,save_path):
-		self.bus = bus
-		self.save_path = save_path
-	
-	def loadProperties(self,bus_name,obj_path,properties):
-		## Load properties from system config
-		obj = self.bus.get_object(bus_name,obj_path)
-		dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-		for prop_interface in properties.keys():
-			for prop in properties[prop_interface]:
-				tmp_val = dbus_properties.Get(prop_interface,prop)
-				dbus_prop = Openbmc.DbusVariable(prop,tmp_val)
-				value = properties[prop_interface][prop]
-				dbus_prop.setValue(value)
-				dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
-			
-			## if save file exists, overlay properties from file
-			directory = obj_path.replace('/','.')
-			directory = self.save_path+directory.lstrip('.')
-			filename = directory+"/"+prop_interface
-			if (os.path.isfile(filename) == False):
-				pass
-				## not an error	
-				#print "No cache available for: "+filename
-			else:
-				try:
-					print "Loading from disk: "+obj_path
-					output = open(filename, 'rb')
-					dbus_props = cPickle.load(output)
-					output.close()
-					save_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-					for dbus_prop in dbus_props:
-						save_properties.Set(prop_interface,dbus_prop.getName(),dbus_prop.getValue())
-		
-				except Exception as e:
-					## TODO: Error handling
-					print "Error loadFru: "+str(e)
-
-		return None
-
-	def saveProperties(self,bus_name,obj_path,interface_name,cache,properties):
-		obj = self.bus.get_object(bus_name,obj_path)
-		prop_intf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-
-		for prop in properties.keys():
-			print "Saving properties: "+prop
-			## convert property to correct dbus type
-			prop_intf.Set(interface_name,prop,properties[prop])
-
-		dbus_props = []
-		if (cache):
-			print "Caching: "+obj_path
-			all_properties = prop_intf.GetAll(interface_name)
-			for prop in all_properties.keys():
-				dbus_prop = Openbmc.DbusVariable(prop,all_properties[prop])
-				dbus_props.append(dbus_prop)
-		
-			try:
-				directory = obj_path.replace('/','.')
-				directory = self.save_path+directory.lstrip('.')
-				filename = directory+"/"+interface_name	
-				if not os.path.exists(directory):
-   					os.makedirs(directory)
-
-				output = open(filename, 'wb')
-				cPickle.dump(dbus_props,output)
-				output.close()	
-			except Exception as e:
-				## TODO: error handling
-				print str(e)
-		
-		return None
-
-
diff --git a/bin/property_manager.py b/bin/property_manager.py
deleted file mode 100755
index 108f81c..0000000
--- a/bin/property_manager.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/python -u
-
-import sys
-#from gi.repository import GObject
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import cPickle
-import glob
-import os
-
-if (len(sys.argv) < 2):
-	print "Usage:  property_manager.py [system name]"
-	exit(1)
-System = __import__(sys.argv[1])
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.managers.Property'
-OBJ_NAME = '/org/openbmc/managers/Property'
-INTF_NAME = 'org.openbmc.managers.Property'
-
-class PropertyManager(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-		if not os.path.exists(System.CACHE_PATH):
-   			os.makedirs(System.CACHE_PATH)
-
-		
-		bus.add_signal_receiver(self.PropertyChangedHandler,
-			dbus_interface = 'org.freedesktop.DBus.Properties', 
-			signal_name = 'PropertiesChanged', sender_keyword='bus_name', path_keyword='path')
-
-		bus.add_signal_receiver(self.RegisterPersistantInterface,
-			dbus_interface = 'org.openbmc.PersistantInterface', 
-			signal_name = 'Register', sender_keyword='bus_name', path_keyword='path')
-		
-		self.registered_interfaces = {}	
-
-
-	def RegisterPersistantInterface(self,interface_name, bus_name = None, path = None):
-		interface_name = str(interface_name)
-		print "Registering cached object (interface): "+path+" ("+interface_name+")"
-		self.registered_interfaces[interface_name] = True
-		self.loadFromCache(bus_name,path,interface_name)
-		
-
-	def PropertyChangedHandler(self, interface_name, changed_properties, 
-		invalidated_properties, bus_name = None, path = None):
-		## TODO: just save all properties, probably should journal changes instead
-		if (self.registered_interfaces.has_key(interface_name)):
-			self.saveToCache(bus_name,path,interface_name)
-
-	def getCacheFilename(self,obj_path,intf_name):
-		name = obj_path.replace('/','.')
-		filename = System.CACHE_PATH+name[1:]+"@"+intf_name+".props"
-		return filename
-
-	def saveToCache(self, bus_name, object_path, interface_name):
-		print "Caching: "+object_path
-		try:
-			obj = bus.get_object(bus_name,object_path)
-			intf = dbus.Interface(obj,"org.freedesktop.DBus.Properties")
-			props = intf.GetAll(interface_name)	
-			output = open(self.getCacheFilename(object_path,interface_name), 'wb')
-			## save properties
-			dbus_props = {}
-			for p in props.keys():
-				dbus_prop = Openbmc.DbusVariable(p,props[p])
-				dbus_props[str(p)] = dbus_prop.getBaseValue()
-			cPickle.dump(dbus_props,output)
-		except Exception as e:
-			print "ERROR: "+str(e)
-		finally:
-			output.close()
-
-	def loadFromCache(self,bus_name, object_path, interface_name):
-		## overlay with pickled data
-		filename=self.getCacheFilename(object_path,interface_name)
-		if (os.path.isfile(filename)):
-			print "Loading from cache: "+filename
-			try:			
-				p = open(filename, 'rb')
-				data = cPickle.load(p)
-				obj = bus.get_object(bus_name,object_path)
-				## TODO: don't use exception to determine whether interface is implemented
-				try:
-					intf = dbus.Interface(obj,"org.openbmc.Object.Properties")
-					props = intf.SetMultiple(interface_name,data)
-				except TypeError as t:
-					print "SetMultiple interface doesn't exist, doing 1 set a time"
-					intf = dbus.Interface(obj,dbus.PROPERTIES_IFACE)
-					for prop in data:
-						intf.Set(interface_name,prop,data[prop])
-						
-							
-			except Exception as e:
-				print "ERROR: Loading cache file: " +str(e)
-			finally:
-				p.close()
-	
-				
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = Openbmc.getDBus()
-    name = dbus.service.BusName(DBUS_NAME,bus)
-    obj = PropertyManager(bus,OBJ_NAME)
-    mainloop = gobject.MainLoop()
-
-    print "Running Property Manager"
-    mainloop.run()
-
diff --git a/objects/control_bmc_barreleye.c b/objects/control_bmc_barreleye.c
index a3a19e8..1bfb4c4 100644
--- a/objects/control_bmc_barreleye.c
+++ b/objects/control_bmc_barreleye.c
@@ -57,7 +57,7 @@
 
 	bmcreg = memmap(mem_fd,LPC_BASE);
 	devmem(bmcreg+LPC_HICR6,0x00000500); //Enable LPC FWH cycles, Enable LPC to AHB bridge
-	devmem(bmcreg+LPC_HICR7,0x30000E00); //32M PNOR
+	devmem(bmcreg+LPC_HICR7,0x30000C00); //32M PNOR
 	devmem(bmcreg+LPC_HICR8,0xFC0003FF);
 
 	//flash controller
