diff --git a/obmc/dbuslib/bindings.py b/obmc/dbuslib/bindings.py
index 3eea6a5..8a04447 100644
--- a/obmc/dbuslib/bindings.py
+++ b/obmc/dbuslib/bindings.py
@@ -187,7 +187,7 @@
         obj = self.objects.pop(object_path, None)
         obj.remove_from_connection()
         if self._export:
-            self.InterfacesRemoved(object_path, obj.properties.keys())
+            self.InterfacesRemoved(object_path, list(obj.properties.keys()))
 
     def get(self, object_path, default=None):
         return self.objects.get(object_path, default)
@@ -197,7 +197,7 @@
         in_signature='', out_signature='a{oa{sa{sv}}}')
     def GetManagedObjects(self):
         data = {}
-        for objpath in self.objects.keys():
+        for objpath in list(self.objects.keys()):
             data[objpath] = self.objects[objpath].properties
         return data
 
diff --git a/obmc/dbuslib/introspection.py b/obmc/dbuslib/introspection.py
index 9ec9c05..5288bcb 100644
--- a/obmc/dbuslib/introspection.py
+++ b/obmc/dbuslib/introspection.py
@@ -104,7 +104,7 @@
 
     def _discover_flat(self, path, parser):
         items = {}
-        interfaces = parser.get_interfaces().keys()
+        interfaces = list(parser.get_interfaces().keys())
         if interfaces:
             items[path] = {}
             items[path]['interfaces'] = interfaces
diff --git a/obmc/dbuslib/propertycacher.py b/obmc/dbuslib/propertycacher.py
index 7888b46..875b164 100644
--- a/obmc/dbuslib/propertycacher.py
+++ b/obmc/dbuslib/propertycacher.py
@@ -15,7 +15,12 @@
 # permissions and limitations under the License.
 
 import os
-import cPickle
+# TODO: openbmc/openbmc#2994 remove python 2 support
+import sys
+if sys.version_info[0] < 3:
+    import cPickle as pickle
+else:
+    import pickle
 import json
 
 CACHE_PATH = '/var/cache/obmc/'
@@ -28,7 +33,7 @@
 
 
 def save(obj_path, iface_name, properties):
-    print "Caching: "+obj_path
+    print("Caching: "+obj_path)
     filename = getCacheFilename(obj_path, iface_name)
     parent = os.path.dirname(filename)
     try:
@@ -39,11 +44,11 @@
                 ## use json module to convert dbus datatypes
                 props = json.dumps(properties[iface_name])
                 prop_obj = json.loads(props)
-                cPickle.dump(prop_obj, output)
+                pickle.dump(prop_obj, output)
             except Exception as e:
-                print "ERROR: "+str(e)
+                print("ERROR: "+str(e))
     except:
-        print "ERROR opening cache file: "+filename
+        print("ERROR opening cache file: "+filename)
 
 
 def load(obj_path, iface_name, properties):
@@ -52,14 +57,14 @@
     if (os.path.isfile(filename)):
         if iface_name in properties:
             properties[iface_name] = {}
-        print "Loading from cache: "+filename
+        print("Loading from cache: "+filename)
         try:
             p = open(filename, 'rb')
-            data = cPickle.load(p)
-            for prop in data.keys():
+            data = pickle.load(p)
+            for prop in list(data.keys()):
                 properties[iface_name][prop] = data[prop]
 
         except Exception as e:
-            print "ERROR: Loading cache file: " + str(e)
+            print("ERROR: Loading cache file: " + str(e))
         finally:
             p.close()
diff --git a/obmc/sensors.py b/obmc/sensors.py
index ca48525..e61ddac 100644
--- a/obmc/sensors.py
+++ b/obmc/sensors.py
@@ -91,7 +91,7 @@
     @dbus.service.method(
         SensorValue.IFACE_NAME, in_signature='v', out_signature='')
     def setValue(self, value):
-        print "Setting boot count to " + str(value)
+        print("Setting boot count to " + str(value))
         SensorValue.setValue(self, value)
 
 
@@ -129,7 +129,7 @@
             intf = self.getPowerSupplyInterface()
             intf.Set(self.iface, self.property_name, False)
         else:
-            print "Invalid Power Supply Redundancy value"
+            print("Invalid Power Supply Redundancy value")
             return
         super(PowerSupplyRedundancySensor, self).setValue(value)
 
@@ -144,7 +144,7 @@
         elif (value == 0):
             return "Disabled"
         else:
-            print "Unable to determine Power Supply Redundancy value"
+            print("Unable to determine Power Supply Redundancy value")
             return ""
 
     def getPowerSupplyInterface(self):
@@ -162,7 +162,7 @@
     @dbus.service.method(
         SensorValue.IFACE_NAME, in_signature='v', out_signature='')
     def setValue(self, value):
-        print "Setting Power Supply Derating is not allowed"
+        print("Setting Power Supply Derating is not allowed")
 
 
 class TurboAllowedSensor(VirtualSensor):
