diff --git a/cinder/utils.py b/cinder/utils.py
index 58f23134b17..3eef2ac3c0b 100644
--- a/cinder/utils.py
+++ b/cinder/utils.py
@@ -389,12 +389,14 @@ def monkey_patch():
             # set the decorator for the class methods
             if isinstance(module_data[key], pyclbr.Class):
                 clz = importutils.import_class("%s.%s" % (module, key))
-                for method, func in inspect.getmembers(clz, inspect.ismethod):
+                # On Python 3, unbound methods are regular functions
+                predicate = inspect.isfunction if six.PY3 else inspect.ismethod
+                for method, func in inspect.getmembers(clz, predicate):
                     setattr(
                         clz, method,
                         decorator("%s.%s.%s" % (module, key, method), func))
             # set the decorator for the function
-            if isinstance(module_data[key], pyclbr.Function):
+            elif isinstance(module_data[key], pyclbr.Function):
                 func = importutils.import_class("%s.%s" % (module, key))
                 setattr(sys.modules[module], key,
                         decorator("%s.%s" % (module, key), func))
diff --git a/tests-py3.txt b/tests-py3.txt
index 2429d2ce5d5..a1ab4b57c81 100644
--- a/tests-py3.txt
+++ b/tests-py3.txt
@@ -104,6 +104,7 @@ cinder.tests.unit.test_ssh_utils
 cinder.tests.unit.test_test
 cinder.tests.unit.test_test_utils
 cinder.tests.unit.test_tintri
+cinder.tests.unit.test_utils
 cinder.tests.unit.test_v6000_common
 cinder.tests.unit.test_v6000_fcp
 cinder.tests.unit.test_v6000_iscsi