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
