Issue #1393: object_richcompare() returns NotImplemented instead of
 False if the objects aren't equal, to give the other side a chance.
diff --git a/Lib/test/test_compare.py b/Lib/test/test_compare.py
index c660837..15fe3c2 100644
--- a/Lib/test/test_compare.py
+++ b/Lib/test/test_compare.py
@@ -16,6 +16,13 @@
     def __eq__(self, other):
         return self.arg == other
 
+class Anything:
+    def __eq__(self, other):
+        return True
+
+    def __ne__(self, other):
+        return False
+
 class ComparisonTest(unittest.TestCase):
     set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
     set2 = [[1], (3,), None, Empty()]
@@ -45,6 +52,15 @@
         self.assertTrue(a == b)
         self.assertFalse(a != b)
 
+    def test_issue_1393(self):
+        x = lambda: None
+        self.assertEqual(x, Anything())
+        self.assertEqual(Anything(), x)
+        y = object()
+        self.assertEqual(y, Anything())
+        self.assertEqual(Anything(), y)
+
+
 def test_main():
     test_support.run_unittest(ComparisonTest)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 22c4f86..72a2884 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and Builtins
 -----------------
 
+- Issue #1393: object_richcompare() returns NotImplemented instead of
+  False if the objects aren't equal, to give the other side a chance.
+
 - Issue #1692: Interpreter was not displaying location of SyntaxError
 
 - Improve some exception messages when Windows fails to load an extension
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 982eedb..2a0dd24 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2484,7 +2484,10 @@
 	switch (op) {
 
 	case Py_EQ:
-		res = (self == other) ? Py_True : Py_False;
+		/* Return NotImplemented instead of False, so if two
+		   objects are compared, both get a chance at the
+		   comparison.  See issue #1393. */
+		res = (self == other) ? Py_True : Py_NotImplemented;
 		Py_INCREF(res);
 		break;