diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 25232f3..5f0bb96 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -365,10 +365,11 @@
                 res = eval(expr, dict)
                 testbinop(a, b, res, expr, name)
     for name, expr in unops.items():
-        name = "__%s__" % name
-        if hasattr(a, name):
-            res = eval(expr, dict)
-            testunop(a, res, expr, name)
+        if name not in skip:
+            name = "__%s__" % name
+            if hasattr(a, name):
+                res = eval(expr, dict)
+                testunop(a, res, expr, name)
 
 def ints():
     if verbose: print "Testing int operations..."
@@ -384,7 +385,7 @@
 
 def complexes():
     if verbose: print "Testing complex operations..."
-    numops(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge'])
+    numops(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge', 'int', 'long', 'float'])
     class Number(complex):
         __slots__ = ['prec']
         def __new__(cls, *args, **kwds):
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 34a20e1..65267d3 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1979,6 +1979,22 @@
 }
 
 static PyObject *
+wrap_binaryfunc_l(PyObject *self, PyObject *args, void *wrapped)
+{
+	binaryfunc func = (binaryfunc)wrapped;
+	PyObject *other;
+
+	if (!PyArg_ParseTuple(args, "O", &other))
+		return NULL;
+	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
+	    self->ob_type != other->ob_type) {
+		Py_INCREF(Py_NotImplemented);
+		return Py_NotImplemented;
+	}
+	return (*func)(self, other);
+}
+
+static PyObject *
 wrap_binaryfunc_r(PyObject *self, PyObject *args, void *wrapped)
 {
 	binaryfunc func = (binaryfunc)wrapped;
@@ -1986,6 +2002,11 @@
 
 	if (!PyArg_ParseTuple(args, "O", &other))
 		return NULL;
+	if (!(self->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
+	    self->ob_type != other->ob_type) {
+		Py_INCREF(Py_NotImplemented);
+		return Py_NotImplemented;
+	}
 	return (*func)(other, self);
 }
 
@@ -1993,7 +2014,7 @@
 #define BINARY(NAME, OP) \
 static struct wrapperbase tab_##NAME[] = { \
 	{"__" #NAME "__", \
-	 (wrapperfunc)wrap_binaryfunc, \
+	 (wrapperfunc)wrap_binaryfunc_l, \
 	 "x.__" #NAME "__(y) <==> " #OP}, \
 	{"__r" #NAME "__", \
 	 (wrapperfunc)wrap_binaryfunc_r, \
@@ -2778,11 +2799,7 @@
 		ADD(mp->mp_ass_subscript, tab_setitem);
 	}
 
-	/* We don't support "old-style numbers" because their binary
-	   operators require that both arguments have the same type;
-	   the wrappers here only work for new-style numbers. */
-	if ((type->tp_flags & Py_TPFLAGS_CHECKTYPES) &&
-	    (nb = type->tp_as_number) != NULL) {
+	if ((nb = type->tp_as_number) != NULL) {
 		ADD(nb->nb_add, tab_add);
 		ADD(nb->nb_subtract, tab_sub);
 		ADD(nb->nb_multiply, tab_mul);
@@ -2817,7 +2834,7 @@
 		ADD(nb->nb_inplace_and, tab_iand);
 		ADD(nb->nb_inplace_xor, tab_ixor);
 		ADD(nb->nb_inplace_or, tab_ior);
-		if (type->tp_flags & Py_TPFLAGS_CHECKTYPES) {
+		if (type->tp_flags & Py_TPFLAGS_HAVE_CLASS) {
 			ADD(nb->nb_floor_divide, tab_floordiv);
 			ADD(nb->nb_true_divide, tab_truediv);
 			ADD(nb->nb_inplace_floor_divide, tab_ifloordiv);
