diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 8a78e69..901d026 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -44,7 +44,7 @@
 						  (int)(s - type->tp_name));
 	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE))
 		return PyString_FromString("__builtin__");
-	mod = PyDict_GetItemString(type->tp_defined, "__module__");
+	mod = PyDict_GetItemString(type->tp_dict, "__module__");
 	if (mod != NULL && PyString_Check(mod)) {
 		Py_INCREF(mod);
 		return mod;
@@ -80,21 +80,10 @@
 	return PyDictProxy_New(type->tp_dict);
 }
 
-static PyObject *
-type_defined(PyTypeObject *type, void *context)
-{
-	if (type->tp_defined == NULL) {
-		Py_INCREF(Py_None);
-		return Py_None;
-	}
-	return PyDictProxy_New(type->tp_defined);
-}
-
 PyGetSetDef type_getsets[] = {
 	{"__name__", (getter)type_name, NULL, NULL},
 	{"__module__", (getter)type_module, (setter)type_set_module, NULL},
 	{"__dict__",  (getter)type_dict,  NULL, NULL},
-	{"__defined__",  (getter)type_defined,  NULL, NULL},
 	{0}
 };
 
@@ -838,8 +827,8 @@
 	Py_INCREF(base);
 	type->tp_base = base;
 
-	/* Initialize tp_defined from passed-in dict */
-	type->tp_defined = dict = PyDict_Copy(dict);
+	/* Initialize tp_dict from passed-in dict */
+	type->tp_dict = dict = PyDict_Copy(dict);
 	if (dict == NULL) {
 		Py_DECREF(type);
 		return NULL;
@@ -973,14 +962,14 @@
 	int i, n;
 	PyObject *mro, *res, *dict;
 
-	/* Look in tp_defined of types in MRO */
+	/* Look in tp_dict of types in MRO */
 	mro = type->tp_mro;
 	assert(PyTuple_Check(mro));
 	n = PyTuple_GET_SIZE(mro);
 	for (i = 0; i < n; i++) {
 		type = (PyTypeObject *) PyTuple_GET_ITEM(mro, i);
 		assert(PyType_Check(type));
-		dict = type->tp_defined;
+		dict = type->tp_dict;
 		assert(dict && PyDict_Check(dict));
 		res = PyDict_GetItem(dict, name);
 		if (res != NULL)
@@ -1014,7 +1003,7 @@
 				 (PyObject *)type, (PyObject *)metatype);
 	}
 
-	/* Look in tp_defined of this type and its bases */
+	/* Look in tp_dict of this type and its bases */
 	res = _PyType_Lookup(type, name);
 	if (res != NULL) {
 		f = res->ob_type->tp_descr_get;
@@ -1070,7 +1059,7 @@
 	Py_XDECREF(type->tp_dict);
 	Py_XDECREF(type->tp_bases);
 	Py_XDECREF(type->tp_mro);
-	Py_XDECREF(type->tp_defined);
+	Py_XDECREF(type->tp_cache);
 	Py_XDECREF(type->tp_subclasses);
 	Py_XDECREF(et->name);
 	Py_XDECREF(et->slots);
@@ -1136,7 +1125,7 @@
 	}
 
 	VISIT(type->tp_dict);
-	VISIT(type->tp_defined);
+	VISIT(type->tp_cache);
 	VISIT(type->tp_mro);
 	VISIT(type->tp_bases);
 	VISIT(type->tp_base);
@@ -1167,7 +1156,7 @@
 	}
 
 	CLEAR(type->tp_dict);
-	CLEAR(type->tp_defined);
+	CLEAR(type->tp_cache);
 	CLEAR(type->tp_mro);
 	CLEAR(type->tp_bases);
 	CLEAR(type->tp_base);
@@ -1455,7 +1444,7 @@
 static int
 add_methods(PyTypeObject *type, PyMethodDef *meth)
 {
-	PyObject *dict = type->tp_defined;
+	PyObject *dict = type->tp_dict;
 
 	for (; meth->ml_name != NULL; meth++) {
 		PyObject *descr;
@@ -1474,7 +1463,7 @@
 static int
 add_members(PyTypeObject *type, PyMemberDef *memb)
 {
-	PyObject *dict = type->tp_defined;
+	PyObject *dict = type->tp_dict;
 
 	for (; memb->name != NULL; memb++) {
 		PyObject *descr;
@@ -1493,7 +1482,7 @@
 static int
 add_getset(PyTypeObject *type, PyGetSetDef *gsp)
 {
-	PyObject *dict = type->tp_defined;
+	PyObject *dict = type->tp_dict;
 
 	for (; gsp->name != NULL; gsp++) {
 		PyObject *descr;
@@ -1746,7 +1735,6 @@
 		return 0;
 	}
 	assert((type->tp_flags & Py_TPFLAGS_READYING) == 0);
-	assert(type->tp_dict == NULL);
 
 	type->tp_flags |= Py_TPFLAGS_READYING;
 
@@ -1773,16 +1761,16 @@
 			goto error;
 	}
 
-	/* Initialize tp_defined */
-	dict = type->tp_defined;
+	/* Initialize tp_dict */
+	dict = type->tp_dict;
 	if (dict == NULL) {
 		dict = PyDict_New();
 		if (dict == NULL)
 			goto error;
-		type->tp_defined = dict;
+		type->tp_dict = dict;
 	}
 
-	/* Add type-specific descriptors to tp_defined */
+	/* Add type-specific descriptors to tp_dict */
 	if (add_operators(type) < 0)
 		goto error;
 	if (type->tp_methods != NULL) {
@@ -1798,12 +1786,6 @@
 			goto error;
 	}
 
-	/* Temporarily make tp_dict the same object as tp_defined.
-	   (This is needed to call mro(), and can stay this way for
-	   dynamic types). */
-	Py_INCREF(type->tp_defined);
-	type->tp_dict = type->tp_defined;
-
 	/* Calculate method resolution order */
 	if (mro_internal(type) < 0) {
 		goto error;
@@ -2676,18 +2658,18 @@
 {
 	PyObject *func;
 
-	if (PyDict_GetItemString(type->tp_defined, "__new__") != NULL)
+	if (PyDict_GetItemString(type->tp_dict, "__new__") != NULL)
 		return 0;
 	func = PyCFunction_New(tp_new_methoddef, (PyObject *)type);
 	if (func == NULL)
 		return -1;
-	return PyDict_SetItemString(type->tp_defined, "__new__", func);
+	return PyDict_SetItemString(type->tp_dict, "__new__", func);
 }
 
 static int
 add_wrappers(PyTypeObject *type, struct wrapperbase *wraps, void *wrapped)
 {
-	PyObject *dict = type->tp_defined;
+	PyObject *dict = type->tp_dict;
 
 	for (; wraps->name != NULL; wraps++) {
 		PyObject *descr;
@@ -2706,14 +2688,14 @@
 /* This function is called by PyType_Ready() to populate the type's
    dictionary with method descriptors for function slots.  For each
    function slot (like tp_repr) that's defined in the type, one or
-   more corresponding descriptors are added in the type's tp_defined
+   more corresponding descriptors are added in the type's tp_dict
    dictionary under the appropriate name (like __repr__).  Some
    function slots cause more than one descriptor to be added (for
    example, the nb_add slot adds both __add__ and __radd__
    descriptors) and some function slots compete for the same
    descriptor (for example both sq_item and mp_subscript generate a
    __getitem__ descriptor).  This only adds new descriptors and
-   doesn't overwrite entries in tp_defined that were previously
+   doesn't overwrite entries in tp_dict that were previously
    defined.  The descriptors contain a reference to the C function
    they must call, so that it's safe if they are copied into a
    subtype's __dict__ and the subtype has a different C function in
@@ -3942,7 +3924,7 @@
 				base = (PyTypeObject *)PyTuple_GET_ITEM(mro, i);
 				assert(PyType_Check(base));
 				descr = PyDict_GetItem(
-					base->tp_defined, p->name_strobj);
+					base->tp_dict, p->name_strobj);
 				if (descr != NULL)
 					break;
 			}
@@ -4055,7 +4037,7 @@
 			tmp = PyTuple_GET_ITEM(mro, i);
 			assert(PyType_Check(tmp));
 			res = PyDict_GetItem(
-				((PyTypeObject *)tmp)->tp_defined, name);
+				((PyTypeObject *)tmp)->tp_dict, name);
 			if (res != NULL) {
 				Py_INCREF(res);
 				f = res->ob_type->tp_descr_get;
