diff --git a/Include/object.h b/Include/object.h
index d79b6ab..772bbb3 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -414,6 +414,7 @@
 PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
 					       PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
+PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, char *, PyObject **);
 PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
 PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
 
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 4558b98..7137095 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1538,6 +1538,58 @@
         self.assertEqual(E().foo.__func__, C.foo) # i.e., unbound
         self.assert_(repr(C.foo.__get__(C(1))).startswith("<bound method "))
 
+    def test_special_method_lookup(self):
+        # The lookup of special methods bypasses __getattr__ and
+        # __getattribute__, but they still can be descriptors.
+
+        def run_context(manager):
+            with manager:
+                pass
+        def iden(self):
+            return self
+        def hello(self):
+            return b"hello"
+
+        # It would be nice to have every special method tested here, but I'm
+        # only listing the ones I can remember outside of typeobject.c, since it
+        # does it right.
+        specials = [
+            ("__bytes__", bytes, hello),
+            # These two fail because the compiler generates LOAD_ATTR to look
+            # them up.  We'd have to add a new opcode to fix this, and it's
+            # probably not worth it.
+            # ("__enter__", run_context, iden),
+            # ("__exit__", run_context, iden),
+            ]
+
+        class Checker(object):
+            def __getattr__(self, attr, test=self):
+                test.fail("__getattr__ called with {0}".format(attr))
+            def __getattribute__(self, attr, test=self):
+                test.fail("__getattribute__ called with {0}".format(attr))
+        class SpecialDescr(object):
+            def __init__(self, impl):
+                self.impl = impl
+            def __get__(self, obj, owner):
+                record.append(1)
+                return self
+            def __call__(self, *args):
+                return self.impl(*args)
+
+
+        for name, runner, meth_impl in specials:
+            class X(Checker):
+                pass
+            setattr(X, name, staticmethod(meth_impl))
+            runner(X())
+
+            record = []
+            class X(Checker):
+                pass
+            setattr(X, name, SpecialDescr(meth_impl))
+            runner(X())
+            self.assertEqual(record, [1], name)
+
     def test_specials(self):
         # Testing special operators...
         # Test operators like __hash__ for which a built-in default exists
diff --git a/Objects/object.c b/Objects/object.c
index 57b4906..d8fc91e 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -474,12 +474,6 @@
 	PyObject *result, *func;
 	static PyObject *bytesstring = NULL;
 
-	if (bytesstring == NULL) {
-		bytesstring = PyUnicode_InternFromString("__bytes__");
-		if (bytesstring == NULL)
-			return NULL;
-	}
-
 	if (v == NULL)
 		return PyBytes_FromString("<NULL>");
 
@@ -488,10 +482,10 @@
 		return v;
 	}
 
-        /* Doesn't create a reference */
-	func = _PyType_Lookup(Py_TYPE(v), bytesstring);
+	func = _PyObject_LookupSpecial(v, "__bytes__", &bytesstring);
 	if (func != NULL) {
             result = PyObject_CallFunctionObjArgs(func, v, NULL);
+	    Py_DECREF(func);
             if (result == NULL)
 		return NULL;
             if (!PyBytes_Check(result)) {
@@ -503,7 +497,6 @@
             }
             return result;
 	}
-        PyErr_Clear();
 	return PyBytes_FromObject(v);
 }
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 06d600e..7e81ce6 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1125,6 +1125,8 @@
      when the _PyType_Lookup() call fails;
 
    - lookup_method() always raises an exception upon errors.
+
+   - _PyObject_LookupSpecial() exported for the benefit of other places.
 */
 
 static PyObject *
@@ -1157,6 +1159,12 @@
 	return res;
 }
 
+PyObject *
+_PyObject_LookupSpecial(PyObject *self, char *attrstr, PyObject **attrobj)
+{
+	return lookup_maybe(self, attrstr, attrobj);
+}
+
 /* A variation of PyObject_CallMethod that uses lookup_method()
    instead of PyObject_GetAttrString().	 This uses the same convention
    as lookup_method to cache the interned name string object. */
