diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index bf9259f..52db15d 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -2505,8 +2505,10 @@
     const char *encoding = NULL;
     const char *errors = NULL;
     PyObject *new = NULL;
+    PyObject *func;
     Py_ssize_t size;
     static char *kwlist[] = {"source", "encoding", "errors", 0};
+    _Py_IDENTIFIER(__bytes__);
 
     if (type != &PyBytes_Type)
         return str_subtype_new(type, args, kwds);
@@ -2536,6 +2538,28 @@
         assert(PyBytes_Check(new));
         return new;
     }
+
+    /* We'd like to call PyObject_Bytes here, but we need to check for an
+       integer argument before deferring to PyBytes_FromObject, something
+       PyObject_Bytes doesn't do. */
+    func = _PyObject_LookupSpecial(x, &PyId___bytes__);
+    if (func != NULL) {
+        new = PyObject_CallFunctionObjArgs(func, NULL);
+        Py_DECREF(func);
+        if (new == NULL)
+            return NULL;
+        if (!PyBytes_Check(new)) {
+            PyErr_Format(PyExc_TypeError,
+                         "__bytes__ returned non-bytes (type %.200s)",
+                         Py_TYPE(new)->tp_name);
+            Py_DECREF(new);
+            return NULL;
+        }
+        return new;
+    }
+    else if (PyErr_Occurred())
+        return NULL;
+
     /* Is it an integer? */
     size = PyNumber_AsSsize_t(x, PyExc_OverflowError);
     if (size == -1 && PyErr_Occurred()) {
@@ -2549,12 +2573,10 @@
     }
     else {
         new = PyBytes_FromStringAndSize(NULL, size);
-        if (new == NULL) {
+        if (new == NULL)
             return NULL;
-        }
-        if (size > 0) {
+        if (size > 0)
             memset(((PyBytesObject*)new)->ob_sval, 0, size);
-        }
         return new;
     }
 
@@ -2564,7 +2586,8 @@
             "encoding or errors without a string argument");
         return NULL;
     }
-    return PyObject_Bytes(x);
+
+    return PyBytes_FromObject(x);
 }
 
 PyObject *
