diff --git a/obmc/dbuslib/propertycacher.py b/obmc/dbuslib/propertycacher.py
new file mode 100644
index 0000000..701a413
--- /dev/null
+++ b/obmc/dbuslib/propertycacher.py
@@ -0,0 +1,64 @@
+# Contributors Listed Below - COPYRIGHT 2016
+# [+] International Business Machines Corp.
+#
+#
+# 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 os
+import cPickle
+import json
+
+CACHE_PATH = '/var/cache/obmc/'
+
+
+def getCacheFilename(obj_path, iface_name):
+    name = obj_path.replace('/', '.')
+    filename = CACHE_PATH+name[1:]+"@"+iface_name+".props"
+    return filename
+
+
+def save(obj_path, iface_name, properties):
+    print "Caching: "+obj_path
+    try:
+        filename = getCacheFilename(obj_path, iface_name)
+        output = open(filename, 'wb')
+        try:
+            ## use json module to convert dbus datatypes
+            props = json.dumps(properties[iface_name])
+            prop_obj = json.loads(props)
+            cPickle.dump(prop_obj, output)
+        except Exception as e:
+            print "ERROR: "+str(e)
+        finally:
+            output.close()
+    except:
+        print "ERROR opening cache file: "+filename
+
+
+def load(obj_path, iface_name, properties):
+    ## overlay with pickled data
+    filename = getCacheFilename(obj_path, iface_name)
+    if (os.path.isfile(filename)):
+        if iface_name in properties:
+            properties[iface_name] = {}
+        print "Loading from cache: "+filename
+        try:
+            p = open(filename, 'rb')
+            data = cPickle.load(p)
+            for prop in data.keys():
+                properties[iface_name][prop] = data[prop]
+
+        except Exception as e:
+            print "ERROR: Loading cache file: " + str(e)
+        finally:
+            p.close()
