diff --git a/Include/object.h b/Include/object.h
index 5739651..9198007 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -158,7 +158,6 @@
 	binaryfunc nb_add;
 	binaryfunc nb_subtract;
 	binaryfunc nb_multiply;
-	binaryfunc nb_divide;
 	binaryfunc nb_remainder;
 	binaryfunc nb_divmod;
 	ternaryfunc nb_power;
@@ -182,7 +181,6 @@
 	binaryfunc nb_inplace_add;
 	binaryfunc nb_inplace_subtract;
 	binaryfunc nb_inplace_multiply;
-	binaryfunc nb_inplace_divide;
 	binaryfunc nb_inplace_remainder;
 	ternaryfunc nb_inplace_power;
 	binaryfunc nb_inplace_lshift;
@@ -192,7 +190,6 @@
 	binaryfunc nb_inplace_or;
 
 	/* Added in release 2.2 */
-	/* The following require the Py_TPFLAGS_HAVE_CLASS flag */
 	binaryfunc nb_floor_divide;
 	binaryfunc nb_true_divide;
 	binaryfunc nb_inplace_floor_divide;
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 967f101..9815ab3 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -1135,10 +1135,9 @@
         return ans
     __rmul__ = __mul__
 
-    def __div__(self, other, context=None):
+    def __truediv__(self, other, context=None):
         """Return self / other."""
         return self._divide(other, context=context)
-    __truediv__ = __div__
 
     def _divide(self, other, divmod = 0, context=None):
         """Return a / b, to context.prec precision.
@@ -1306,13 +1305,12 @@
             ans = ans._fix(context)
         return ans
 
-    def __rdiv__(self, other, context=None):
-        """Swaps self/other and returns __div__."""
+    def __rtruediv__(self, other, context=None):
+        """Swaps self/other and returns __truediv__."""
         other = _convert_other(other)
         if other is NotImplemented:
             return other
-        return other.__div__(self, context=context)
-    __rtruediv__ = __rdiv__
+        return other.__truediv__(self, context=context)
 
     def __divmod__(self, other, context=None):
         """
@@ -1384,9 +1382,9 @@
         rounding = context._set_rounding_decision(NEVER_ROUND)
 
         if other._sign:
-            comparison = other.__div__(Decimal(-2), context=context)
+            comparison = other.__truediv__(Decimal(-2), context=context)
         else:
-            comparison = other.__div__(Decimal(2), context=context)
+            comparison = other.__truediv__(Decimal(2), context=context)
 
         context._set_rounding_decision(rounding)
         context._regard_flags(*flags)
@@ -1751,7 +1749,7 @@
         if n < 0:
             #n is a long now, not Decimal instance
             n = -n
-            mul = Decimal(1).__div__(mul, context=context)
+            mul = Decimal(1).__truediv__(mul, context=context)
 
         spot = 1
         while spot <= n:
@@ -1972,7 +1970,7 @@
         rounding = context._set_rounding(ROUND_HALF_EVEN)
         while 1:
             context.prec = min(2*context.prec - 2, maxp)
-            ans = half.__mul__(ans.__add__(tmp.__div__(ans, context=context),
+            ans = half.__mul__(ans.__add__(tmp.__truediv__(ans, context=context),
                                            context=context), context=context)
             if context.prec == maxp:
                 break
@@ -2454,7 +2452,7 @@
         >>> ExtendedContext.divide(Decimal('2.40E+6'), Decimal('2'))
         Decimal("1.20E+6")
         """
-        return a.__div__(b, context=self)
+        return a.__truediv__(b, context=self)
 
     def divide_int(self, a, b):
         """Divides two numbers and returns the integer part of the result.
diff --git a/Lib/test/test_augassign.py b/Lib/test/test_augassign.py
index 8a8f00d..228e03a 100644
--- a/Lib/test/test_augassign.py
+++ b/Lib/test/test_augassign.py
@@ -5,7 +5,7 @@
 x *= 2
 x **= 2
 x -= 8
-x //= 2
+x /= 2
 x //= 1
 x %= 12
 x &= 2
@@ -19,7 +19,7 @@
 x[0] *= 2
 x[0] **= 2
 x[0] -= 8
-x[0] //= 2
+x[0] /= 2
 x[0] //= 2
 x[0] %= 12
 x[0] &= 2
@@ -33,7 +33,7 @@
 x[0] *= 2
 x[0] **= 2
 x[0] -= 8
-x[0] //= 2
+x[0] /= 2
 x[0] //= 1
 x[0] %= 12
 x[0] &= 2
@@ -123,14 +123,6 @@
         print "__imul__ called"
         return self
 
-    def __div__(self, val):
-        print "__div__ called"
-    def __rdiv__(self, val):
-        print "__rdiv__ called"
-    def __idiv__(self, val):
-        print "__idiv__ called"
-        return self
-
     def __floordiv__(self, val):
         print "__floordiv__ called"
         return self
@@ -147,6 +139,9 @@
     def __itruediv__(self, val):
         print "__itruediv__ called"
         return self
+    def __rtruediv__(self, val):
+        print "__rtruediv__ called"
+        return self
 
     def __mod__(self, val):
         print "__mod__ called"
@@ -217,16 +212,9 @@
 1 * x
 x *= 1
 
-if 1/2 == 0:
-    x / 1
-    1 / x
-    x /= 1
-else:
-    # True division is in effect, so "/" doesn't map to __div__ etc;
-    # but the canned expected-output file requires that those get called.
-    x.__div__(1)
-    x.__rdiv__(1)
-    x.__idiv__(1)
+x / 1
+1 / x
+x /= 1
 
 x // 1
 1 // x
diff --git a/Lib/test/test_binop.py b/Lib/test/test_binop.py
index b3d9a62..719186b 100644
--- a/Lib/test/test_binop.py
+++ b/Lib/test/test_binop.py
@@ -140,8 +140,6 @@
             return float(self) / other
         return NotImplemented
 
-    __div__ = __truediv__
-
     def __rtruediv__(self, other):
         """Divide two Rats, or a Rat and a number (reversed args)."""
         if isRat(other):
@@ -152,8 +150,6 @@
             return other / float(self)
         return NotImplemented
 
-    __rdiv__ = __rtruediv__
-
     def __floordiv__(self, other):
         """Divide two Rats, returning the floored result."""
         if isint(other):
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index 92c220e..b8b4cab 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -11,8 +11,8 @@
     "rsub",
     "mul",
     "rmul",
-    "div",
-    "rdiv",
+    "truediv",
+    "rtruediv",
     "mod",
     "rmod",
     "divmod",
@@ -134,16 +134,8 @@
 testme * 1
 1 * testme
 
-if 1/2 == 0:
-    testme / 1
-    1 / testme
-else:
-    # True division is in effect, so "/" doesn't map to __div__ etc; but
-    # the canned expected-output file requires that __div__ etc get called.
-    testme.__coerce__(1)
-    testme.__div__(1)
-    testme.__coerce__(1)
-    testme.__rdiv__(1)
+testme / 1
+1 / testme
 
 testme % 1
 1 % testme
diff --git a/Lib/test/test_coercion.py b/Lib/test/test_coercion.py
index ceea17b..e12ef0d 100644
--- a/Lib/test/test_coercion.py
+++ b/Lib/test/test_coercion.py
@@ -44,10 +44,10 @@
     def __rmul__(self,other):
         return other * self.arg
 
-    def __div__(self,other):
+    def __truediv__(self,other):
         return self.arg / other
 
-    def __rdiv__(self,other):
+    def __rtruediv__(self,other):
         return other / self.arg
 
     def __pow__(self,other):
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index 0d42bd2b..035f524 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -55,19 +55,15 @@
         if x != 0:
             q = z / x
             self.assertClose(q, y)
-            q = z.__div__(x)
-            self.assertClose(q, y)
             q = z.__truediv__(x)
             self.assertClose(q, y)
         if y != 0:
             q = z / y
             self.assertClose(q, x)
-            q = z.__div__(y)
-            self.assertClose(q, x)
             q = z.__truediv__(y)
             self.assertClose(q, x)
 
-    def test_div(self):
+    def test_truediv(self):
         simple_real = [float(i) for i in xrange(-5, 6)]
         simple_complex = [complex(x, y) for x in simple_real for y in simple_real]
         for x in simple_complex:
@@ -84,7 +80,7 @@
             self.check_div(complex(random(), random()),
                            complex(random(), random()))
 
-        self.assertRaises(ZeroDivisionError, complex.__div__, 1+1j, 0+0j)
+        self.assertRaises(ZeroDivisionError, complex.__truediv__, 1+1j, 0+0j)
         # FIXME: The following currently crashes on Alpha
         # self.assertRaises(OverflowError, pow, 1e200+1j, 1e200+1j)
 
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index 7d0addf..1d33ec4 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -507,7 +507,7 @@
                 ('+', '__add__', '__radd__'),
                 ('-', '__sub__', '__rsub__'),
                 ('*', '__mul__', '__rmul__'),
-                ('/', '__div__', '__rdiv__'),
+                ('/', '__truediv__', '__rtruediv__'),
                 ('%', '__mod__', '__rmod__'),
                 ('//', '__floordiv__', '__rfloordiv__'),
                 ('**', '__pow__', '__rpow__'),
@@ -975,7 +975,6 @@
 
         checkSameDec("__abs__")
         checkSameDec("__add__", True)
-        checkSameDec("__div__", True)
         checkSameDec("__divmod__", True)
         checkSameDec("__cmp__", True)
         checkSameDec("__float__")
@@ -990,7 +989,6 @@
         checkSameDec("__pos__")
         checkSameDec("__pow__", True)
         checkSameDec("__radd__", True)
-        checkSameDec("__rdiv__", True)
         checkSameDec("__rdivmod__", True)
         checkSameDec("__repr__")
         checkSameDec("__rfloordiv__", True)
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 57a8f44..108d95e 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -29,10 +29,6 @@
     if verbose: print "checking", expr
     dict = {'a': a, 'b': b}
 
-    # XXX Hack so this passes before 2.3 when -Qnew is specified.
-    if meth == "__div__" and 1/2 == 0.5:
-        meth = "__truediv__"
-
     vereq(eval(expr, dict), res)
     t = type(a)
     m = getattr(t, meth)
@@ -4044,9 +4040,8 @@
                 ('__add__',      'x + y',                   'x += y'),
                 ('__sub__',      'x - y',                   'x -= y'),
                 ('__mul__',      'x * y',                   'x *= y'),
-                ('__truediv__',  'operator.truediv(x, y)',  None),
-                ('__floordiv__', 'operator.floordiv(x, y)', None),
-                ('__div__',      'x / y',                   'x /= y'),
+                ('__truediv__',  'x / y',                   None),
+                ('__floordiv__', 'x // y',                  None),
                 ('__mod__',      'x % y',                   'x %= y'),
                 ('__divmod__',   'divmod(x, y)',            None),
                 ('__pow__',      'x ** y',                  'x **= y'),
diff --git a/Lib/test/test_operator.py b/Lib/test/test_operator.py
index c1fe88c..50c3b0c 100644
--- a/Lib/test/test_operator.py
+++ b/Lib/test/test_operator.py
@@ -144,11 +144,6 @@
         self.failUnless(operator.delslice(a, 2, 8) is None)
         self.assert_(a == [0, 1, 8, 9])
 
-    def test_div(self):
-        self.failUnlessRaises(TypeError, operator.div, 5)
-        self.failUnlessRaises(TypeError, operator.div, None, None)
-        self.failUnless(operator.floordiv(5, 2) == 2)
-
     def test_floordiv(self):
         self.failUnlessRaises(TypeError, operator.floordiv, 5)
         self.failUnlessRaises(TypeError, operator.floordiv, None, None)
@@ -416,7 +411,6 @@
         class C(object):
             def __iadd__     (self, other): return "iadd"
             def __iand__     (self, other): return "iand"
-            def __idiv__     (self, other): return "idiv"
             def __ifloordiv__(self, other): return "ifloordiv"
             def __ilshift__  (self, other): return "ilshift"
             def __imod__     (self, other): return "imod"
@@ -431,7 +425,6 @@
         c = C()
         self.assertEqual(operator.iadd     (c, 5), "iadd")
         self.assertEqual(operator.iand     (c, 5), "iand")
-        self.assertEqual(operator.idiv     (c, 5), "idiv")
         self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
         self.assertEqual(operator.ilshift  (c, 5), "ilshift")
         self.assertEqual(operator.imod     (c, 5), "imod")
@@ -446,7 +439,6 @@
         self.assertEqual(operator.irepeat  (c, 5), "imul")
         self.assertEqual(operator.__iadd__     (c, 5), "iadd")
         self.assertEqual(operator.__iand__     (c, 5), "iand")
-        self.assertEqual(operator.__idiv__     (c, 5), "idiv")
         self.assertEqual(operator.__ifloordiv__(c, 5), "ifloordiv")
         self.assertEqual(operator.__ilshift__  (c, 5), "ilshift")
         self.assertEqual(operator.__imod__     (c, 5), "imod")
diff --git a/Misc/NEWS b/Misc/NEWS
index 3dce99d..e5d19ec 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,6 +40,14 @@
 - Exceptions *must* derive from BaseException.
 
 - Integer division always returns a float.  The -Q option is no more.
+  All the following are gone:
+   * PyNumber_Divide and PyNumber_InPlaceDivide
+   * __div__, __rdiv__, and __idiv__
+   * nb_divide, nb_inplace_divide
+   * operator.div, operator.idiv, operator.__div__, operator.__idiv__
+  (Only __truediv__ and __floordiv__ remain, not sure how to handle them
+   if we want to re-use __div__ and friends.  If we do, it will make
+   it harder to write code for both 2.x and 3.x.)
 
 - 'as' and 'with' are keywords.
 
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 3a7d3ef..7c5da64 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3812,7 +3812,6 @@
 	0, /* nb_add */
 	0, /* nb_subtract */
 	0, /* nb_multiply */
-	0, /* nb_divide */
 	0, /* nb_remainder */
 	0, /* nb_divmod */
 	0, /* nb_power */
@@ -4165,7 +4164,6 @@
 	0, /* nb_add */
 	0, /* nb_subtract */
 	0, /* nb_multiply */
-	0, /* nb_divide */
 	0, /* nb_remainder */
 	0, /* nb_divmod */
 	0, /* nb_power */
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index b011729..c1a0cb3 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -2080,7 +2080,6 @@
 	delta_add,				/* nb_add */
 	delta_subtract,				/* nb_subtract */
 	delta_multiply,				/* nb_multiply */
-	delta_divide,				/* nb_divide */
 	0,					/* nb_remainder */
 	0,					/* nb_divmod */
 	0,					/* nb_power */
@@ -2103,7 +2102,6 @@
 	0,					/*nb_inplace_add*/
 	0,					/*nb_inplace_subtract*/
 	0,					/*nb_inplace_multiply*/
-	0,					/*nb_inplace_divide*/
 	0,					/*nb_inplace_remainder*/
 	0,					/*nb_inplace_power*/
 	0,					/*nb_inplace_lshift*/
@@ -2665,7 +2663,6 @@
 	date_add,					/* nb_add */
 	date_subtract,					/* nb_subtract */
 	0,						/* nb_multiply */
-	0,						/* nb_divide */
 	0,						/* nb_remainder */
 	0,						/* nb_divmod */
 	0,						/* nb_power */
@@ -3441,7 +3438,6 @@
 	0,					/* nb_add */
 	0,					/* nb_subtract */
 	0,					/* nb_multiply */
-	0,					/* nb_divide */
 	0,					/* nb_remainder */
 	0,					/* nb_divmod */
 	0,					/* nb_power */
@@ -4526,7 +4522,6 @@
 	datetime_add,				/* nb_add */
 	datetime_subtract,			/* nb_subtract */
 	0,					/* nb_multiply */
-	0,					/* nb_divide */
 	0,					/* nb_remainder */
 	0,					/* nb_divmod */
 	0,					/* nb_power */
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index e7fc6dd..731b1d9 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -266,7 +266,7 @@
 		return NULL;
 	}
 
-	ans = PyNumber_Divide(num, den);
+	ans = PyNumber_TrueDivide(num, den);
 	Py_DECREF(num);
 	Py_DECREF(den);
 	return ans;
diff --git a/Modules/operator.c b/Modules/operator.c
index 53144f1..24f4e0a 100644
--- a/Modules/operator.c
+++ b/Modules/operator.c
@@ -65,7 +65,6 @@
 spam2(op_add           , PyNumber_Add)
 spam2(op_sub           , PyNumber_Subtract)
 spam2(op_mul           , PyNumber_Multiply)
-spam2(op_div           , PyNumber_Divide)
 spam2(op_floordiv      , PyNumber_FloorDivide)
 spam2(op_truediv       , PyNumber_TrueDivide)
 spam2(op_mod           , PyNumber_Remainder)
@@ -83,7 +82,6 @@
 spam2(op_iadd          , PyNumber_InPlaceAdd)
 spam2(op_isub          , PyNumber_InPlaceSubtract)
 spam2(op_imul          , PyNumber_InPlaceMultiply)
-spam2(op_idiv          , PyNumber_InPlaceDivide)
 spam2(op_ifloordiv     , PyNumber_InPlaceFloorDivide)
 spam2(op_itruediv      , PyNumber_InPlaceTrueDivide)
 spam2(op_imod          , PyNumber_InPlaceRemainder)
@@ -247,9 +245,8 @@
 spam2(add,__add__, "add(a, b) -- Same as a + b.")
 spam2(sub,__sub__, "sub(a, b) -- Same as a - b.")
 spam2(mul,__mul__, "mul(a, b) -- Same as a * b.")
-spam2(div,__div__, "div(a, b) -- Same as a / b when __future__.division is not in effect.")
 spam2(floordiv,__floordiv__, "floordiv(a, b) -- Same as a // b.")
-spam2(truediv,__truediv__, "truediv(a, b) -- Same as a / b when __future__.division is in effect.")
+spam2(truediv,__truediv__, "truediv(a, b) -- Same as a / b.")
 spam2(mod,__mod__, "mod(a, b) -- Same as a % b.")
 spam2o(neg,__neg__, "neg(a) -- Same as -a.")
 spam2o(pos,__pos__, "pos(a) -- Same as +a.")
@@ -265,9 +262,8 @@
 spam2(iadd,__iadd__, "iadd(a, b) -- Same as a += b.")
 spam2(isub,__isub__, "isub(a, b) -- Same as a -= b.")
 spam2(imul,__imul__, "imul(a, b) -- Same as a *= b.")
-spam2(idiv,__idiv__, "idiv(a, b) -- Same as a /= b when __future__.division is not in effect.")
 spam2(ifloordiv,__ifloordiv__, "ifloordiv(a, b) -- Same as a //= b.")
-spam2(itruediv,__itruediv__, "itruediv(a, b) -- Same as a /= b when __future__.division is in effect.")
+spam2(itruediv,__itruediv__, "itruediv(a, b) -- Same as a /= b.")
 spam2(imod,__imod__, "imod(a, b) -- Same as a %= b.")
 spam2(ilshift,__ilshift__, "ilshift(a, b) -- Same as a <<= b.")
 spam2(irshift,__irshift__, "irshift(a, b) -- Same as a >>= b.")
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 052e3ca..c755654 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -625,7 +625,6 @@
 BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
 BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
 BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
-BINARY_FUNC(PyNumber_Divide, nb_divide, "/")
 BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
 
 PyObject *
@@ -765,7 +764,6 @@
 INPLACE_BINOP(PyNumber_InPlaceLshift, nb_inplace_lshift, nb_lshift, "<<=")
 INPLACE_BINOP(PyNumber_InPlaceRshift, nb_inplace_rshift, nb_rshift, ">>=")
 INPLACE_BINOP(PyNumber_InPlaceSubtract, nb_inplace_subtract, nb_subtract, "-=")
-INPLACE_BINOP(PyNumber_InPlaceDivide, nb_inplace_divide, nb_divide, "/=")
 
 PyObject *
 PyNumber_InPlaceFloorDivide(PyObject *v, PyObject *w)
diff --git a/Objects/boolobject.c b/Objects/boolobject.c
index f2429fe..05784e5 100644
--- a/Objects/boolobject.c
+++ b/Objects/boolobject.c
@@ -106,7 +106,6 @@
 	0,					/* nb_add */
 	0,					/* nb_subtract */
 	0,					/* nb_multiply */
-	0,					/* nb_divide */
 	0,					/* nb_remainder */
 	0,					/* nb_divmod */
 	0,					/* nb_power */
@@ -129,7 +128,6 @@
 	0,					/* nb_inplace_add */
 	0,					/* nb_inplace_subtract */
 	0,					/* nb_inplace_multiply */
-	0,					/* nb_inplace_divide */
 	0,					/* nb_inplace_remainder */
 	0,					/* nb_inplace_power */
 	0,					/* nb_inplace_lshift */
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 037252d..93acb50 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -1551,7 +1551,6 @@
 BINARY(instance_add, "add", PyNumber_Add)
 BINARY(instance_sub, "sub", PyNumber_Subtract)
 BINARY(instance_mul, "mul", PyNumber_Multiply)
-BINARY(instance_div, "div", PyNumber_Divide)
 BINARY(instance_mod, "mod", PyNumber_Remainder)
 BINARY(instance_divmod, "divmod", PyNumber_Divmod)
 BINARY(instance_floordiv, "floordiv", PyNumber_FloorDivide)
@@ -1565,7 +1564,6 @@
 BINARY_INPLACE(instance_iadd, "add", PyNumber_InPlaceAdd)
 BINARY_INPLACE(instance_isub, "sub", PyNumber_InPlaceSubtract)
 BINARY_INPLACE(instance_imul, "mul", PyNumber_InPlaceMultiply)
-BINARY_INPLACE(instance_idiv, "div", PyNumber_InPlaceDivide)
 BINARY_INPLACE(instance_imod, "mod", PyNumber_InPlaceRemainder)
 BINARY_INPLACE(instance_ifloordiv, "floordiv", PyNumber_InPlaceFloorDivide)
 BINARY_INPLACE(instance_itruediv, "truediv", PyNumber_InPlaceTrueDivide)
@@ -2054,7 +2052,6 @@
 	(binaryfunc)instance_add,		/* nb_add */
 	(binaryfunc)instance_sub,		/* nb_subtract */
 	(binaryfunc)instance_mul,		/* nb_multiply */
-	(binaryfunc)instance_div,		/* nb_divide */
 	(binaryfunc)instance_mod,		/* nb_remainder */
 	(binaryfunc)instance_divmod,		/* nb_divmod */
 	(ternaryfunc)instance_pow,		/* nb_power */
@@ -2077,7 +2074,6 @@
 	(binaryfunc)instance_iadd,		/* nb_inplace_add */
 	(binaryfunc)instance_isub,		/* nb_inplace_subtract */
 	(binaryfunc)instance_imul,		/* nb_inplace_multiply */
-	(binaryfunc)instance_idiv,		/* nb_inplace_divide */
 	(binaryfunc)instance_imod,		/* nb_inplace_remainder */
 	(ternaryfunc)instance_ipow,		/* nb_inplace_power */
 	(binaryfunc)instance_ilshift,		/* nb_inplace_lshift */
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 5c84eff..f0915dd 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -382,27 +382,6 @@
 }
 
 static PyObject *
-complex_classic_div(PyComplexObject *v, PyComplexObject *w)
-{
-	Py_complex quot;
-
-	if (Py_DivisionWarningFlag >= 2 &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "classic complex division") < 0)
-		return NULL;
-
-	PyFPE_START_PROTECT("complex_classic_div", return 0)
-	errno = 0;
-	quot = c_quot(v->cval,w->cval);
-	PyFPE_END_PROTECT(quot)
-	if (errno == EDOM) {
-		PyErr_SetString(PyExc_ZeroDivisionError, "complex division");
-		return NULL;
-	}
-	return PyComplex_FromCComplex(quot);
-}
-
-static PyObject *
 complex_remainder(PyComplexObject *v, PyComplexObject *w)
 {
         Py_complex div, mod;
@@ -948,7 +927,6 @@
 	(binaryfunc)complex_add, 		/* nb_add */
 	(binaryfunc)complex_sub, 		/* nb_subtract */
 	(binaryfunc)complex_mul, 		/* nb_multiply */
-	(binaryfunc)complex_classic_div,	/* nb_divide */
 	(binaryfunc)complex_remainder,		/* nb_remainder */
 	(binaryfunc)complex_divmod,		/* nb_divmod */
 	(ternaryfunc)complex_pow,		/* nb_power */
@@ -971,7 +949,6 @@
 	0,					/* nb_inplace_add */
 	0,					/* nb_inplace_subtract */
 	0,					/* nb_inplace_multiply*/
-	0,					/* nb_inplace_divide */
 	0,					/* nb_inplace_remainder */
 	0, 					/* nb_inplace_power */
 	0,					/* nb_inplace_lshift */
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index c27a41a..20ed86e 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -642,25 +642,6 @@
 }
 
 static PyObject *
-float_classic_div(PyObject *v, PyObject *w)
-{
-	double a,b;
-	CONVERT_TO_DOUBLE(v, a);
-	CONVERT_TO_DOUBLE(w, b);
-	if (Py_DivisionWarningFlag >= 2 &&
-	    PyErr_Warn(PyExc_DeprecationWarning, "classic float division") < 0)
-		return NULL;
-	if (b == 0.0) {
-		PyErr_SetString(PyExc_ZeroDivisionError, "float division");
-		return NULL;
-	}
-	PyFPE_START_PROTECT("divide", return 0)
-	a = a / b;
-	PyFPE_END_PROTECT(a)
-	return PyFloat_FromDouble(a);
-}
-
-static PyObject *
 float_rem(PyObject *v, PyObject *w)
 {
 	double vx, wx;
@@ -1128,7 +1109,6 @@
 	(binaryfunc)float_add, /*nb_add*/
 	(binaryfunc)float_sub, /*nb_subtract*/
 	(binaryfunc)float_mul, /*nb_multiply*/
-	(binaryfunc)float_classic_div, /*nb_divide*/
 	(binaryfunc)float_rem, /*nb_remainder*/
 	(binaryfunc)float_divmod, /*nb_divmod*/
 	(ternaryfunc)float_pow, /*nb_power*/
@@ -1151,7 +1131,6 @@
 	0,		/* nb_inplace_add */
 	0,		/* nb_inplace_subtract */
 	0,		/* nb_inplace_multiply */
-	0,		/* nb_inplace_divide */
 	0,		/* nb_inplace_remainder */
 	0, 		/* nb_inplace_power */
 	0,		/* nb_inplace_lshift */
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 86e2e8c..c734840 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -580,29 +580,8 @@
 	case DIVMOD_OK:
 		return PyInt_FromLong(d);
 	case DIVMOD_OVERFLOW:
-		return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
-							   (PyObject *)y);
-	default:
-		return NULL;
-	}
-}
-
-static PyObject *
-int_classic_div(PyIntObject *x, PyIntObject *y)
-{
-	long xi, yi;
-	long d, m;
-	CONVERT_TO_LONG(x, xi);
-	CONVERT_TO_LONG(y, yi);
-	if (Py_DivisionWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, "classic int division") < 0)
-		return NULL;
-	switch (i_divmod(xi, yi, &d, &m)) {
-	case DIVMOD_OK:
-		return PyInt_FromLong(d);
-	case DIVMOD_OVERFLOW:
-		return PyLong_Type.tp_as_number->nb_divide((PyObject *)x,
-							   (PyObject *)y);
+		return PyLong_Type.tp_as_number->nb_floor_divide((PyObject *)x,
+							         (PyObject *)y);
 	default:
 		return NULL;
 	}
@@ -1034,7 +1013,6 @@
 	(binaryfunc)int_add,	/*nb_add*/
 	(binaryfunc)int_sub,	/*nb_subtract*/
 	(binaryfunc)int_mul,	/*nb_multiply*/
-	(binaryfunc)int_classic_div, /*nb_divide*/
 	(binaryfunc)int_mod,	/*nb_remainder*/
 	(binaryfunc)int_divmod,	/*nb_divmod*/
 	(ternaryfunc)int_pow,	/*nb_power*/
@@ -1057,7 +1035,6 @@
 	0,			/*nb_inplace_add*/
 	0,			/*nb_inplace_subtract*/
 	0,			/*nb_inplace_multiply*/
-	0,			/*nb_inplace_divide*/
 	0,			/*nb_inplace_remainder*/
 	0,			/*nb_inplace_power*/
 	0,			/*nb_inplace_lshift*/
diff --git a/Objects/longobject.c b/Objects/longobject.c
index e47c292..7c5ebc4 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -2355,22 +2355,6 @@
 }
 
 static PyObject *
-long_classic_div(PyObject *v, PyObject *w)
-{
-	PyLongObject *a, *b, *div;
-
-	CONVERT_BINOP(v, w, &a, &b);
-	if (Py_DivisionWarningFlag &&
-	    PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)
-		div = NULL;
-	else if (l_divmod(a, b, &div, NULL) < 0)
-		div = NULL;
-	Py_DECREF(a);
-	Py_DECREF(b);
-	return (PyObject *)div;
-}
-
-static PyObject *
 long_true_divide(PyObject *v, PyObject *w)
 {
 	PyLongObject *a, *b;
@@ -3130,7 +3114,6 @@
 	(binaryfunc)	long_add,	/*nb_add*/
 	(binaryfunc)	long_sub,	/*nb_subtract*/
 	(binaryfunc)	long_mul,	/*nb_multiply*/
-	(binaryfunc)	long_classic_div, /*nb_divide*/
 	(binaryfunc)	long_mod,	/*nb_remainder*/
 	(binaryfunc)	long_divmod,	/*nb_divmod*/
 	(ternaryfunc)	long_pow,	/*nb_power*/
@@ -3153,7 +3136,6 @@
 	0,				/* nb_inplace_add */
 	0,				/* nb_inplace_subtract */
 	0,				/* nb_inplace_multiply */
-	0,				/* nb_inplace_divide */
 	0,				/* nb_inplace_remainder */
 	0,				/* nb_inplace_power */
 	0,				/* nb_inplace_lshift */
diff --git a/Objects/setobject.c b/Objects/setobject.c
index ed3d190..89d574f 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -1755,7 +1755,6 @@
 	0,				/*nb_add*/
 	(binaryfunc)set_sub,		/*nb_subtract*/
 	0,				/*nb_multiply*/
-	0,				/*nb_divide*/
 	0,				/*nb_remainder*/
 	0,				/*nb_divmod*/
 	0,				/*nb_power*/
@@ -1778,7 +1777,6 @@
 	0,				/*nb_inplace_add*/
 	(binaryfunc)set_isub,		/*nb_inplace_subtract*/
 	0,				/*nb_inplace_multiply*/
-	0,				/*nb_inplace_divide*/
 	0,				/*nb_inplace_remainder*/
 	0,				/*nb_inplace_power*/
 	0,				/*nb_inplace_lshift*/
@@ -1867,7 +1865,6 @@
 	0,				/*nb_add*/
 	(binaryfunc)set_sub,		/*nb_subtract*/
 	0,				/*nb_multiply*/
-	0,				/*nb_divide*/
 	0,				/*nb_remainder*/
 	0,				/*nb_divmod*/
 	0,				/*nb_power*/
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 16d542a..32aacf5 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -3408,7 +3408,6 @@
 	0,			/*nb_add*/
 	0,			/*nb_subtract*/
 	0,			/*nb_multiply*/
-	0, 			/*nb_divide*/
 	string_mod,		/*nb_remainder*/
 };
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 65bf404..c02f060 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3014,7 +3014,6 @@
 		COPYNUM(nb_add);
 		COPYNUM(nb_subtract);
 		COPYNUM(nb_multiply);
-		COPYNUM(nb_divide);
 		COPYNUM(nb_remainder);
 		COPYNUM(nb_divmod);
 		COPYNUM(nb_power);
@@ -3037,7 +3036,6 @@
 		COPYNUM(nb_inplace_add);
 		COPYNUM(nb_inplace_subtract);
 		COPYNUM(nb_inplace_multiply);
-		COPYNUM(nb_inplace_divide);
 		COPYNUM(nb_inplace_remainder);
 		COPYNUM(nb_inplace_power);
 		COPYNUM(nb_inplace_lshift);
@@ -3045,12 +3043,11 @@
 		COPYNUM(nb_inplace_and);
 		COPYNUM(nb_inplace_xor);
 		COPYNUM(nb_inplace_or);
-		if (base->tp_flags & Py_TPFLAGS_CHECKTYPES) {
-			COPYNUM(nb_true_divide);
-			COPYNUM(nb_floor_divide);
-			COPYNUM(nb_inplace_true_divide);
-			COPYNUM(nb_inplace_floor_divide);
-		}
+		COPYNUM(nb_true_divide);
+		COPYNUM(nb_floor_divide);
+		COPYNUM(nb_inplace_true_divide);
+		COPYNUM(nb_inplace_floor_divide);
+		/* XXX(nnorwitz): we don't need to check flags do we? */
 		if (base->tp_flags & Py_TPFLAGS_HAVE_INDEX) {
 			COPYNUM(nb_index);
 		}
@@ -4291,7 +4288,6 @@
 SLOT1BIN(slot_nb_add, nb_add, "__add__", "__radd__")
 SLOT1BIN(slot_nb_subtract, nb_subtract, "__sub__", "__rsub__")
 SLOT1BIN(slot_nb_multiply, nb_multiply, "__mul__", "__rmul__")
-SLOT1BIN(slot_nb_divide, nb_divide, "__div__", "__rdiv__")
 SLOT1BIN(slot_nb_remainder, nb_remainder, "__mod__", "__rmod__")
 SLOT1BIN(slot_nb_divmod, nb_divmod, "__divmod__", "__rdivmod__")
 
@@ -4470,7 +4466,6 @@
 SLOT1(slot_nb_inplace_add, "__iadd__", PyObject *, "O")
 SLOT1(slot_nb_inplace_subtract, "__isub__", PyObject *, "O")
 SLOT1(slot_nb_inplace_multiply, "__imul__", PyObject *, "O")
-SLOT1(slot_nb_inplace_divide, "__idiv__", PyObject *, "O")
 SLOT1(slot_nb_inplace_remainder, "__imod__", PyObject *, "O")
 SLOT1(slot_nb_inplace_power, "__ipow__", PyObject *, "O")
 SLOT1(slot_nb_inplace_lshift, "__ilshift__", PyObject *, "O")
@@ -5077,10 +5072,6 @@
 		"*"),
 	RBINSLOT("__rmul__", nb_multiply, slot_nb_multiply,
 		 "*"),
-	BINSLOT("__div__", nb_divide, slot_nb_divide,
-		"/"),
-	RBINSLOT("__rdiv__", nb_divide, slot_nb_divide,
-		 "/"),
 	BINSLOT("__mod__", nb_remainder, slot_nb_remainder,
 		"%"),
 	RBINSLOT("__rmod__", nb_remainder, slot_nb_remainder,
@@ -5130,8 +5121,6 @@
 	       wrap_binaryfunc, "-"),
 	IBSLOT("__imul__", nb_inplace_multiply, slot_nb_inplace_multiply,
 	       wrap_binaryfunc, "*"),
-	IBSLOT("__idiv__", nb_inplace_divide, slot_nb_inplace_divide,
-	       wrap_binaryfunc, "/"),
 	IBSLOT("__imod__", nb_inplace_remainder, slot_nb_inplace_remainder,
 	       wrap_binaryfunc, "%"),
 	IBSLOT("__ipow__", nb_inplace_power, slot_nb_inplace_power,
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 52bff2d..7fbce14 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6445,7 +6445,6 @@
 	0,				/*nb_add*/
 	0,				/*nb_subtract*/
 	0,				/*nb_multiply*/
-	0,				/*nb_divide*/
 	unicode_mod,			/*nb_remainder*/
 };
 
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 1d68bb5..39595ae 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -471,7 +471,6 @@
 WRAP_BINARY(proxy_add, PyNumber_Add)
 WRAP_BINARY(proxy_sub, PyNumber_Subtract)
 WRAP_BINARY(proxy_mul, PyNumber_Multiply)
-WRAP_BINARY(proxy_div, PyNumber_Divide)
 WRAP_BINARY(proxy_mod, PyNumber_Remainder)
 WRAP_BINARY(proxy_divmod, PyNumber_Divmod)
 WRAP_TERNARY(proxy_pow, PyNumber_Power)
@@ -490,7 +489,6 @@
 WRAP_BINARY(proxy_iadd, PyNumber_InPlaceAdd)
 WRAP_BINARY(proxy_isub, PyNumber_InPlaceSubtract)
 WRAP_BINARY(proxy_imul, PyNumber_InPlaceMultiply)
-WRAP_BINARY(proxy_idiv, PyNumber_InPlaceDivide)
 WRAP_BINARY(proxy_imod, PyNumber_InPlaceRemainder)
 WRAP_TERNARY(proxy_ipow, PyNumber_InPlacePower)
 WRAP_BINARY(proxy_ilshift, PyNumber_InPlaceLshift)
@@ -591,7 +589,6 @@
     (binaryfunc)proxy_add,      /*nb_add*/
     (binaryfunc)proxy_sub,      /*nb_subtract*/
     (binaryfunc)proxy_mul,      /*nb_multiply*/
-    (binaryfunc)proxy_div,      /*nb_divide*/
     (binaryfunc)proxy_mod,      /*nb_remainder*/
     (binaryfunc)proxy_divmod,   /*nb_divmod*/
     (ternaryfunc)proxy_pow,     /*nb_power*/
@@ -614,7 +611,6 @@
     (binaryfunc)proxy_iadd,     /*nb_inplace_add*/
     (binaryfunc)proxy_isub,     /*nb_inplace_subtract*/
     (binaryfunc)proxy_imul,     /*nb_inplace_multiply*/
-    (binaryfunc)proxy_idiv,     /*nb_inplace_divide*/
     (binaryfunc)proxy_imod,     /*nb_inplace_remainder*/
     (ternaryfunc)proxy_ipow,    /*nb_inplace_power*/
     (binaryfunc)proxy_ilshift,  /*nb_inplace_lshift*/
diff --git a/PC/_winreg.c b/PC/_winreg.c
index 007885c..5ed58bb 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -431,7 +431,6 @@
 	PyHKEY_binaryFailureFunc,	/* nb_add */
 	PyHKEY_binaryFailureFunc,	/* nb_subtract */
 	PyHKEY_binaryFailureFunc,	/* nb_multiply */
-	PyHKEY_binaryFailureFunc,	/* nb_divide */
 	PyHKEY_binaryFailureFunc,	/* nb_remainder */
 	PyHKEY_binaryFailureFunc,	/* nb_divmod */
 	PyHKEY_ternaryFailureFunc,	/* nb_power */
