new file
diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
new file mode 100644
index 0000000..312c688
--- /dev/null
+++ b/bin/PropertyManager.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+
+import sys
+import cPickle
+import os
+import Openbmc
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+
+
+SAVE_PATH = 'data/'
+
+def loadProperties(bus,bus_name,obj_path,properties):
+	## Load properties from system config
+	obj = bus.get_object(bus_name,obj_path)
+	dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+	for prop_interface in properties.keys():
+		print "Intf: "+prop_interface
+		for prop in properties[prop_interface]:
+			tmp_val = dbus_properties.Get(prop_interface,prop)
+			dbus_prop = Openbmc.DbusProperty(prop,tmp_val)
+			value = properties[prop_interface][prop]
+			dbus_prop.changeValue(value)
+			dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
+		
+		## if save file exists, overlay properties from file
+		directory = obj_path.replace('/','.')
+		directory = SAVE_PATH+directory.lstrip('.')
+		filename = directory+"/"+prop_interface
+		if (os.path.isfile(filename) == False):
+			## 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(bus,bus_name,obj_path,interface_name,cache,properties):
+	obj = 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
+		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.DbusProperty(prop,all_properties[prop])
+			dbus_props.append(dbus_prop)
+		
+		try:
+			directory = obj_path.replace('/','.')
+			directory = 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
+
+