diff --git a/Modules/_weakref.c b/Modules/_weakref.c
index cab64a3..695ffda 100644
--- a/Modules/_weakref.c
+++ b/Modules/_weakref.c
@@ -38,7 +38,7 @@
         _Py_NewReference((PyObject *)result);
     }
     else {
-        result = PyObject_NEW(PyWeakReference, &PyWeakReference_Type);
+        result = PyObject_GC_New(PyWeakReference, &PyWeakReference_Type);
     }
     if (result)
         result->hash = -1;
@@ -77,8 +77,8 @@
 static void
 weakref_dealloc(PyWeakReference *self)
 {
+    PyObject_GC_UnTrack((PyObject *)self);
     clear_weakref(self);
-    PyObject_GC_Fini((PyObject *)self);
     self->wr_next = free_list;
     free_list = self;
 }
@@ -170,7 +170,7 @@
     PyObject_HEAD_INIT(NULL)
     0,
     "weakref",
-    sizeof(PyWeakReference) + PyGC_HEAD_SIZE,
+    sizeof(PyWeakReference),
     0,
     (destructor)weakref_dealloc,/*tp_dealloc*/
     0,	                        /*tp_print*/
@@ -187,7 +187,7 @@
     0,                          /*tp_getattro*/
     0,                          /*tp_setattro*/
     0,                          /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC | Py_TPFLAGS_HAVE_RICHCOMPARE,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_RICHCOMPARE,
     0,                          /*tp_doc*/
     (traverseproc)gc_traverse,  /*tp_traverse*/
     (inquiry)gc_clear,          /*tp_clear*/
@@ -429,7 +429,7 @@
     PyObject_HEAD_INIT(NULL)
     0,
     "weakproxy",
-    sizeof(PyWeakReference) + PyGC_HEAD_SIZE,
+    sizeof(PyWeakReference),
     0,
     /* methods */
     (destructor)weakref_dealloc,/*tp_dealloc*/
@@ -447,7 +447,7 @@
     (getattrofunc)proxy_getattr,/*tp_getattro*/
     (setattrofunc)proxy_setattr,/*tp_setattro*/
     0,				/*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
     |Py_TPFLAGS_CHECKTYPES,     /*tp_flags*/
     0,                          /*tp_doc*/
     (traverseproc)gc_traverse,  /*tp_traverse*/
@@ -460,7 +460,7 @@
     PyObject_HEAD_INIT(NULL)
     0,
     "weakcallableproxy",
-    sizeof(PyWeakReference) + PyGC_HEAD_SIZE,
+    sizeof(PyWeakReference),
     0,
     /* methods */
     (destructor)weakref_dealloc,/*tp_dealloc*/
@@ -478,7 +478,7 @@
     (getattrofunc)proxy_getattr,/*tp_getattro*/
     (setattrofunc)proxy_setattr,/*tp_setattro*/
     0,				/*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
     |Py_TPFLAGS_CHECKTYPES,     /*tp_flags*/
     0,                          /*tp_doc*/
     (traverseproc)gc_traverse,  /*tp_traverse*/
@@ -648,7 +648,7 @@
                     else
                         insert_after(result, prev);
                 }
-                PyObject_GC_Init((PyObject *) result);
+                PyObject_GC_Track(result);
             }
         }
     }
@@ -706,7 +706,7 @@
                     insert_head(result, list);
                 else
                     insert_after(result, prev);
-                PyObject_GC_Init((PyObject *) result);
+                PyObject_GC_Track(result);
             }
         }
     }
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 47e5174..3b87093 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -7,11 +7,11 @@
 {
 	PyCellObject *op;
 
-	op = (PyCellObject *)PyObject_New(PyCellObject, &PyCell_Type);
+	op = (PyCellObject *)PyObject_GC_New(PyCellObject, &PyCell_Type);
 	op->ob_ref = obj;
 	Py_XINCREF(obj);
 
-	PyObject_GC_Init(op);
+	_PyObject_GC_TRACK(op);
 	return (PyObject *)op;
 }
 
@@ -42,9 +42,9 @@
 static void
 cell_dealloc(PyCellObject *op)
 {
-	PyObject_GC_Fini(op);
+	_PyObject_GC_UNTRACK(op);
 	Py_XDECREF(op->ob_ref);
-	PyObject_Del(op);
+	PyObject_GC_Del(op);
 }
 
 static int
@@ -90,7 +90,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"cell",
-	sizeof(PyCellObject) + PyGC_HEAD_SIZE,
+	sizeof(PyCellObject),
 	0,
 	(destructor)cell_dealloc,               /* tp_dealloc */
 	0,                                      /* tp_print */
@@ -107,7 +107,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,	/* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
  	0,					/* tp_doc */
  	(traverseproc)cell_traverse,		/* tp_traverse */
  	(inquiry)cell_clear,			/* tp_clear */
diff --git a/Objects/classobject.c b/Objects/classobject.c
index f3f7e69..dd2a40b 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -81,7 +81,7 @@
 		}
 		Py_INCREF(bases);
 	}
-	op = PyObject_NEW(PyClassObject, &PyClass_Type);
+	op = PyObject_GC_New(PyClassObject, &PyClass_Type);
 	if (op == NULL) {
 		Py_DECREF(bases);
 		return NULL;
@@ -102,7 +102,7 @@
 	Py_XINCREF(op->cl_getattr);
 	Py_XINCREF(op->cl_setattr);
 	Py_XINCREF(op->cl_delattr);
-	PyObject_GC_Init(op);
+	_PyObject_GC_TRACK(op);
 	return (PyObject *) op;
 }
 
@@ -123,15 +123,14 @@
 static void
 class_dealloc(PyClassObject *op)
 {
-	PyObject_GC_Fini(op);
+	_PyObject_GC_UNTRACK(op);
 	Py_DECREF(op->cl_bases);
 	Py_DECREF(op->cl_dict);
 	Py_XDECREF(op->cl_name);
 	Py_XDECREF(op->cl_getattr);
 	Py_XDECREF(op->cl_setattr);
 	Py_XDECREF(op->cl_delattr);
-	op = (PyClassObject *) PyObject_AS_GC(op);
-	PyObject_DEL(op);
+	PyObject_GC_Del(op);
 }
 
 static PyObject *
@@ -394,7 +393,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"class",
-	sizeof(PyClassObject) + PyGC_HEAD_SIZE,
+	sizeof(PyClassObject),
 	0,
 	(destructor)class_dealloc,		/* tp_dealloc */
 	0,					/* tp_print */
@@ -411,7 +410,7 @@
 	(getattrofunc)class_getattr,		/* tp_getattro */
 	(setattrofunc)class_setattr,		/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,	/* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
 	0,					/* tp_doc */
 	(traverseproc)class_traverse,		/* tp_traverse */
  	0,					/* tp_clear */
@@ -474,7 +473,7 @@
 		}
 		Py_INCREF(dict);
 	}
-	inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+	inst = PyObject_GC_New(PyInstanceObject, &PyInstance_Type);
 	if (inst == NULL) {
 		Py_DECREF(dict);
 		return NULL;
@@ -483,7 +482,7 @@
 	Py_INCREF(klass);
 	inst->in_class = (PyClassObject *)klass;
 	inst->in_dict = dict;
-	PyObject_GC_Init(inst);
+	_PyObject_GC_TRACK(inst);
 	return (PyObject *)inst;
 }
 
@@ -542,7 +541,7 @@
 #ifdef Py_REF_DEBUG
 	extern long _Py_RefTotal;
 #endif
-
+	_PyObject_GC_UNTRACK(inst);
 	PyObject_ClearWeakRefs((PyObject *) inst);
 
 	/* Temporarily resurrect the object. */
@@ -592,6 +591,7 @@
 #ifdef COUNT_ALLOCS
 		inst->ob_type->tp_frees--;
 #endif
+		_PyObject_GC_TRACK(inst);
 		return; /* __del__ added a reference; don't delete now */
 	}
 #ifdef Py_TRACE_REFS
@@ -604,11 +604,9 @@
 	inst->ob_type = NULL;
 #endif
 #endif
-	PyObject_GC_Fini(inst);
 	Py_DECREF(inst->in_class);
 	Py_XDECREF(inst->in_dict);
-	inst = (PyInstanceObject *) PyObject_AS_GC(inst);
-	PyObject_DEL(inst);
+	PyObject_GC_Del(inst);
 }
 
 static PyObject *
@@ -1896,7 +1894,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"instance",
-	sizeof(PyInstanceObject) + PyGC_HEAD_SIZE,
+	sizeof(PyInstanceObject),
 	0,
 	(destructor)instance_dealloc,		/* tp_dealloc */
 	0,					/* tp_print */
@@ -1913,7 +1911,7 @@
 	(getattrofunc)instance_getattr,		/* tp_getattro */
 	(setattrofunc)instance_setattr,		/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC | Py_TPFLAGS_CHECKTYPES,/*tp_flags*/
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES,/*tp_flags*/
 	0,					/* tp_doc */
 	(traverseproc)instance_traverse,	/* tp_traverse */
 	0,					/* tp_clear */
@@ -1946,7 +1944,7 @@
 		PyObject_INIT(im, &PyMethod_Type);
 	}
 	else {
-		im = PyObject_NEW(PyMethodObject, &PyMethod_Type);
+		im = PyObject_GC_New(PyMethodObject, &PyMethod_Type);
 		if (im == NULL)
 			return NULL;
 	}
@@ -1957,7 +1955,7 @@
 	im->im_self = self;
 	Py_XINCREF(class);
 	im->im_class = class;
-	PyObject_GC_Init(im);
+	_PyObject_GC_TRACK(im);
 	return (PyObject *)im;
 }
 
@@ -2018,8 +2016,8 @@
 static void
 instancemethod_dealloc(register PyMethodObject *im)
 {
+	_PyObject_GC_UNTRACK(im);
 	PyObject_ClearWeakRefs((PyObject *)im);
-	PyObject_GC_Fini(im);
 	Py_DECREF(im->im_func);
 	Py_XDECREF(im->im_self);
 	Py_XDECREF(im->im_class);
@@ -2244,7 +2242,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"instance method",
-	sizeof(PyMethodObject) + PyGC_HEAD_SIZE,
+	sizeof(PyMethodObject),
 	0,
 	(destructor)instancemethod_dealloc,	/* tp_dealloc */
 	0,					/* tp_print */
@@ -2261,7 +2259,7 @@
 	(getattrofunc)instancemethod_getattro,	/* tp_getattro */
 	(setattrofunc)instancemethod_setattro,	/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,     /* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
 	0,					/* tp_doc */
 	(traverseproc)instancemethod_traverse,	/* tp_traverse */
 	0,					/* tp_clear */
@@ -2287,7 +2285,6 @@
 	while (free_list) {
 		PyMethodObject *im = free_list;
 		free_list = (PyMethodObject *)(im->im_self);
-		im = (PyMethodObject *) PyObject_AS_GC(im);
-		PyObject_DEL(im);
+		PyObject_GC_Del(im);
 	}
 }
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index ab5f4b5..e8a564e 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -158,7 +158,7 @@
 		Py_AtExit(show_counts);
 #endif
 	}
-	mp = PyObject_NEW(dictobject, &PyDict_Type);
+	mp = PyObject_GC_New(dictobject, &PyDict_Type);
 	if (mp == NULL)
 		return NULL;
 	EMPTY_TO_MINSIZE(mp);
@@ -166,7 +166,7 @@
 #ifdef SHOW_CONVERSION_COUNTS
 	++created;
 #endif
-	PyObject_GC_Init(mp);
+	_PyObject_GC_TRACK(mp);
 	return (PyObject *)mp;
 }
 
@@ -692,7 +692,7 @@
 	register dictentry *ep;
 	int fill = mp->ma_fill;
 	Py_TRASHCAN_SAFE_BEGIN(mp)
-	PyObject_GC_Fini(mp);
+ 	_PyObject_GC_UNTRACK(mp);
 	for (ep = mp->ma_table; fill > 0; ep++) {
 		if (ep->me_key) {
 			--fill;
@@ -702,8 +702,7 @@
 	}
 	if (mp->ma_table != mp->ma_smalltable)
 		PyMem_DEL(mp->ma_table);
-	mp = (dictobject *) PyObject_AS_GC(mp);
-	PyObject_DEL(mp);
+	PyObject_GC_Del(mp);
 	Py_TRASHCAN_SAFE_END(mp)
 }
 
@@ -1703,7 +1702,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"dictionary",
-	sizeof(dictobject) + PyGC_HEAD_SIZE,
+	sizeof(dictobject),
 	0,
 	(destructor)dict_dealloc,		/* tp_dealloc */
 	(printfunc)dict_print,			/* tp_print */
@@ -1720,7 +1719,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC |
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
 		Py_TPFLAGS_BASETYPE,		/* tp_flags */
 	"dictionary type",			/* tp_doc */
 	(traverseproc)dict_traverse,		/* tp_traverse */
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 6f56bf6..57d02fe 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -9,7 +9,7 @@
 PyObject *
 PyFunction_New(PyObject *code, PyObject *globals)
 {
-	PyFunctionObject *op = PyObject_NEW(PyFunctionObject,
+	PyFunctionObject *op = PyObject_GC_New(PyFunctionObject,
 					    &PyFunction_Type);
 	if (op != NULL) {
 		PyObject *doc;
@@ -37,7 +37,7 @@
 	}
 	else
 		return NULL;
-	PyObject_GC_Init(op);
+	_PyObject_GC_TRACK(op);
 	return (PyObject *)op;
 }
 
@@ -223,8 +223,8 @@
 static void
 func_dealloc(PyFunctionObject *op)
 {
+	_PyObject_GC_UNTRACK(op);
 	PyObject_ClearWeakRefs((PyObject *) op);
-	PyObject_GC_Fini(op);
 	Py_DECREF(op->func_code);
 	Py_DECREF(op->func_globals);
 	Py_DECREF(op->func_name);
@@ -232,8 +232,7 @@
 	Py_XDECREF(op->func_doc);
 	Py_XDECREF(op->func_dict);
 	Py_XDECREF(op->func_closure);
-	op = (PyFunctionObject *) PyObject_AS_GC(op);
-	PyObject_DEL(op);
+	PyObject_GC_Del(op);
 }
 
 static PyObject*
@@ -352,7 +351,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"function",
-	sizeof(PyFunctionObject) + PyGC_HEAD_SIZE,
+	sizeof(PyFunctionObject),
 	0,
 	(destructor)func_dealloc,		/* tp_dealloc */
 	0,					/* tp_print */
@@ -369,7 +368,7 @@
 	func_getattro,				/* tp_getattro */
 	func_setattro,				/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,	/* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
 	0,					/* tp_doc */
 	(traverseproc)func_traverse,		/* tp_traverse */
 	0,					/* tp_clear */
diff --git a/Objects/listobject.c b/Objects/listobject.c
index c45cf75..22f7e5e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -61,27 +61,23 @@
 	if (nbytes / sizeof(PyObject *) != (size_t)size) {
 		return PyErr_NoMemory();
 	}
-	/* PyObject_NewVar is inlined */
-	op = (PyListObject *) PyObject_MALLOC(sizeof(PyListObject)
-						+ PyGC_HEAD_SIZE);
+	op = PyObject_GC_New(PyListObject, &PyList_Type);
 	if (op == NULL) {
-		return PyErr_NoMemory();
+		return NULL;
 	}
-	op = (PyListObject *) PyObject_FROM_GC(op);
 	if (size <= 0) {
 		op->ob_item = NULL;
 	}
 	else {
 		op->ob_item = (PyObject **) PyMem_MALLOC(nbytes);
 		if (op->ob_item == NULL) {
-			PyObject_FREE(PyObject_AS_GC(op));
 			return PyErr_NoMemory();
 		}
 	}
-	PyObject_INIT_VAR(op, &PyList_Type, size);
+	op->ob_size = size;
 	for (i = 0; i < size; i++)
 		op->ob_item[i] = NULL;
-	PyObject_GC_Init(op);
+	_PyObject_GC_TRACK(op);
 	return (PyObject *) op;
 }
 
@@ -200,7 +196,7 @@
 {
 	int i;
 	Py_TRASHCAN_SAFE_BEGIN(op)
-	PyObject_GC_Fini(op);
+	_PyObject_GC_UNTRACK(op);
 	if (op->ob_item != NULL) {
 		/* Do it backwards, for Christian Tismer.
 		   There's a simple test case where somehow this reduces
@@ -212,8 +208,7 @@
 		}
 		PyMem_FREE(op->ob_item);
 	}
-	op = (PyListObject *) PyObject_AS_GC(op);
-	PyObject_DEL(op);
+	PyObject_GC_Del(op);
 	Py_TRASHCAN_SAFE_END(op)
 }
 
@@ -1675,7 +1670,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"list",
-	sizeof(PyListObject) + PyGC_HEAD_SIZE,
+	sizeof(PyListObject),
 	0,
 	(destructor)list_dealloc,		/* tp_dealloc */
 	(printfunc)list_print,			/* tp_print */
@@ -1692,7 +1687,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC |
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
 		Py_TPFLAGS_BASETYPE,		/* tp_flags */
  	list_doc,				/* tp_doc */
  	(traverseproc)list_traverse,		/* tp_traverse */
@@ -1762,7 +1757,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"list (immutable, during sort)",
-	sizeof(PyListObject) + PyGC_HEAD_SIZE,
+	sizeof(PyListObject),
 	0,
 	0, /* Cannot happen */			/* tp_dealloc */
 	(printfunc)list_print,			/* tp_print */
@@ -1779,7 +1774,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,	/* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
  	list_doc,				/* tp_doc */
  	(traverseproc)list_traverse,		/* tp_traverse */
 	0,					/* tp_clear */
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index ba81593..6d91ecc 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -19,12 +19,11 @@
 {
 	PyModuleObject *m;
 	PyObject *nameobj;
-	m = PyObject_NEW(PyModuleObject, &PyModule_Type);
+	m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
 	if (m == NULL)
 		return NULL;
 	nameobj = PyString_FromString(name);
 	m->md_dict = PyDict_New();
-	PyObject_GC_Init(m);
 	if (m->md_dict == NULL || nameobj == NULL)
 		goto fail;
 	if (PyDict_SetItemString(m->md_dict, "__name__", nameobj) != 0)
@@ -32,6 +31,7 @@
 	if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
 		goto fail;
 	Py_DECREF(nameobj);
+	PyObject_GC_Track(m);
 	return (PyObject *)m;
 
  fail:
@@ -146,12 +146,12 @@
 static void
 module_dealloc(PyModuleObject *m)
 {
-	PyObject_GC_Fini(m);
+	PyObject_GC_UnTrack(m);
 	if (m->md_dict != NULL) {
 		_PyModule_Clear((PyObject *)m);
 		Py_DECREF(m->md_dict);
 	}
-	PyObject_DEL(PyObject_AS_GC(m));
+	PyObject_GC_Del(m);
 }
 
 static PyObject *
@@ -188,7 +188,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,					/* ob_size */
 	"module",				/* tp_name */
-	sizeof(PyModuleObject) + PyGC_HEAD_SIZE, /* tp_size */
+	sizeof(PyModuleObject),			/* tp_size */
 	0,					/* tp_itemsize */
 	(destructor)module_dealloc,		/* tp_dealloc */
 	0,					/* tp_print */
@@ -205,7 +205,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	PyObject_GenericSetAttr,		/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC |
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
 		Py_TPFLAGS_BASETYPE,		/* tp_flags */
 	0,					/* tp_doc */
 	(traverseproc)module_traverse,		/* tp_traverse */
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 46f5714..5d01a99 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -62,18 +62,14 @@
 		int nbytes = size * sizeof(PyObject *);
 		/* Check for overflow */
 		if (nbytes / sizeof(PyObject *) != (size_t)size ||
-		    (nbytes += sizeof(PyTupleObject) - sizeof(PyObject *)
-		     		+ PyGC_HEAD_SIZE)
+		    (nbytes += sizeof(PyTupleObject) - sizeof(PyObject *))
 		    <= 0)
 		{
 			return PyErr_NoMemory();
 		}
-		/* PyObject_NewVar is inlined */
-		op = (PyTupleObject *) PyObject_MALLOC(nbytes);
+		op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
 		if (op == NULL)
-			return PyErr_NoMemory();
-		op = (PyTupleObject *) PyObject_FROM_GC(op);
-		PyObject_INIT_VAR(op, &PyTuple_Type, size);
+			return NULL;
 	}
 	for (i = 0; i < size; i++)
 		op->ob_item[i] = NULL;
@@ -84,7 +80,7 @@
 		Py_INCREF(op);	/* extra INCREF so that this is never freed */
 	}
 #endif
-	PyObject_GC_Init(op);
+	_PyObject_GC_TRACK(op);
 	return (PyObject *) op;
 }
 
@@ -144,7 +140,7 @@
 	register int i;
 	register int len =  op->ob_size;
 	Py_TRASHCAN_SAFE_BEGIN(op)
-	PyObject_GC_Fini(op);
+	_PyObject_GC_UNTRACK(op);
 	if (len > 0) {
 		i = len;
 		while (--i >= 0)
@@ -158,8 +154,7 @@
 		}
 #endif
 	}
-	op = (PyTupleObject *) PyObject_AS_GC(op);
-	PyObject_DEL(op);
+	PyObject_GC_Del(op);
 done:
 	Py_TRASHCAN_SAFE_END(op)
 }
@@ -517,7 +512,7 @@
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
 	"tuple",
-	sizeof(PyTupleObject) - sizeof(PyObject *) + PyGC_HEAD_SIZE,
+	sizeof(PyTupleObject) - sizeof(PyObject *),
 	sizeof(PyObject *),
 	(destructor)tupledealloc,		/* tp_dealloc */
 	(printfunc)tupleprint,			/* tp_print */
@@ -534,7 +529,7 @@
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC,	/* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
 	tuple_doc,				/* tp_doc */
  	(traverseproc)tupletraverse,		/* tp_traverse */
 	0,					/* tp_clear */
@@ -595,30 +590,23 @@
 #ifdef Py_REF_DEBUG
 	--_Py_RefTotal;
 #endif
+	_PyObject_GC_UNTRACK(v);
 	_Py_ForgetReference((PyObject *) v);
 	for (i = newsize; i < v->ob_size; i++) {
 		Py_XDECREF(v->ob_item[i]);
 		v->ob_item[i] = NULL;
 	}
-	PyObject_GC_Fini(v);
-	v = (PyTupleObject *) PyObject_AS_GC(v);
-	sv = (PyTupleObject *) PyObject_REALLOC((char *)v,
-						sizeof(PyTupleObject)
-						+ PyGC_HEAD_SIZE
-						+ newsize * sizeof(PyObject *));
+	sv = PyObject_GC_Resize(PyTupleObject, v, newsize);
 	if (sv == NULL) {
 		*pv = NULL;
-		PyObject_DEL(v);
-		PyErr_NoMemory();
+		PyObject_GC_Del(v);
 		return -1;
 	}
-	sv = (PyTupleObject *) PyObject_FROM_GC(sv);
 	_Py_NewReference((PyObject *) sv);
 	for (i = sv->ob_size; i < newsize; i++)
 		sv->ob_item[i] = NULL;
-	sv->ob_size = newsize;
 	*pv = (PyObject *) sv;
-	PyObject_GC_Init(sv);
+	_PyObject_GC_TRACK(sv);
 	return 0;
 }
 
@@ -638,8 +626,7 @@
 		while (p) {
 			q = p;
 			p = (PyTupleObject *)(p->ob_item[0]);
-			q = (PyTupleObject *) PyObject_AS_GC(q);
-			PyObject_DEL(q);
+			PyObject_GC_Del(q);
 		}
 	}
 #endif
