diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index d883b91..23a137e 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -829,7 +829,7 @@
 	const size_t basicsize = _PyObject_VAR_SIZE(tp, nitems);
 #ifdef WITH_CYCLE_GC
 	const size_t nbytes = sizeof(PyGC_Head) + basicsize;
-	PyGC_Head *g = PyObject_MALLOC(nbytes);
+	PyGC_Head *g = _PyMalloc_MALLOC(nbytes);
 	if (g == NULL)
 		return (PyObject *)PyErr_NoMemory();
 	g->gc.gc_next = NULL;
@@ -845,7 +845,7 @@
 	}
 	op = FROM_GC(g);
 #else
-	op = PyObject_MALLOC(basicsize);
+	op = _PyMalloc_MALLOC(basicsize);
 	if (op == NULL)
 		return (PyObject *)PyErr_NoMemory();
 
@@ -896,9 +896,9 @@
 	if (allocated > 0) {
 		allocated--;
 	}
-	PyObject_FREE(g);
+	_PyMalloc_FREE(g);
 #else
-	PyObject_FREE(op);
+	_PyMalloc_FREE(op);
 #endif
 }
 
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index e843e76..5803c57 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1914,7 +1914,7 @@
 dictiter_new(dictobject *dict, binaryfunc select)
 {
 	dictiterobject *di;
-	di = PyObject_NEW(dictiterobject, &PyDictIter_Type);
+	di = PyMalloc_New(dictiterobject, &PyDictIter_Type);
 	if (di == NULL)
 		return NULL;
 	Py_INCREF(dict);
@@ -1929,7 +1929,7 @@
 dictiter_dealloc(dictiterobject *di)
 {
 	Py_DECREF(di->di_dict);
-	PyObject_DEL(di);
+	PyMalloc_Del(di);
 }
 
 static PyObject *
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index da791fa..fa7e660 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -60,7 +60,7 @@
 PyRange_New(long start, long len, long step, int reps)
 {
 	long totlen = -1;
-	rangeobject *obj = PyObject_NEW(rangeobject, &PyRange_Type);
+	rangeobject *obj = PyMalloc_New(rangeobject, &PyRange_Type);
 
 	if (obj == NULL)
 		return NULL;
@@ -104,7 +104,7 @@
 static void
 range_dealloc(rangeobject *r)
 {
-	PyObject_DEL(r);
+	PyMalloc_Del(r);
 }
 
 static PyObject *
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 42cbf24..108ab27 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -60,7 +60,7 @@
 PyObject *
 PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
 {
-	PySliceObject *obj = PyObject_NEW(PySliceObject, &PySlice_Type);
+	PySliceObject *obj = PyMalloc_New(PySliceObject, &PySlice_Type);
 
 	if (obj == NULL)
 		return NULL;
@@ -115,7 +115,7 @@
 	Py_DECREF(r->step);
 	Py_DECREF(r->start);
 	Py_DECREF(r->stop);
-	PyObject_DEL(r);
+	PyMalloc_Del(r);
 }
 
 static PyObject *
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 4fb5e93..b39d9e5 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -68,7 +68,7 @@
 
 	/* PyObject_NewVar is inlined */
 	op = (PyStringObject *)
-		PyObject_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
+		_PyMalloc_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
 	if (op == NULL)
 		return PyErr_NoMemory();
 	PyObject_INIT_VAR(op, &PyString_Type, size);
@@ -131,7 +131,7 @@
 
 	/* PyObject_NewVar is inlined */
 	op = (PyStringObject *)
-		PyObject_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
+		_PyMalloc_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
 	if (op == NULL)
 		return PyErr_NoMemory();
 	PyObject_INIT_VAR(op, &PyString_Type, size);
@@ -733,7 +733,7 @@
 	size = a->ob_size + b->ob_size;
 	/* PyObject_NewVar is inlined */
 	op = (PyStringObject *)
-		PyObject_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
+		_PyMalloc_MALLOC(sizeof(PyStringObject) + size * sizeof(char));
 	if (op == NULL)
 		return PyErr_NoMemory();
 	PyObject_INIT_VAR(op, &PyString_Type, size);
@@ -780,7 +780,7 @@
 		return NULL;
 	}
 	op = (PyStringObject *)
-		PyObject_MALLOC(sizeof(PyStringObject) + nbytes);
+		_PyMalloc_MALLOC(sizeof(PyStringObject) + nbytes);
 	if (op == NULL)
 		return PyErr_NoMemory();
 	PyObject_INIT_VAR(op, &PyString_Type, size);
@@ -2789,7 +2789,7 @@
 	0,					/* tp_init */
 	0,					/* tp_alloc */
 	string_new,				/* tp_new */
-	_PyObject_Del,				/* tp_free */
+	_PyMalloc_Del,				/* tp_free */
 };
 
 void
@@ -2841,10 +2841,10 @@
 #endif
 	_Py_ForgetReference(v);
 	*pv = (PyObject *)
-		PyObject_REALLOC((char *)v,
+		_PyMalloc_REALLOC((char *)v,
 			sizeof(PyStringObject) + newsize * sizeof(char));
 	if (*pv == NULL) {
-		PyObject_DEL(v);
+		PyMalloc_Del(v);
 		PyErr_NoMemory();
 		return -1;
 	}
diff --git a/Objects/structseq.c b/Objects/structseq.c
index 377dfeb..7231ce1 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -22,7 +22,7 @@
 {
 	PyStructSequence *obj;
        
-	obj = PyObject_New(PyStructSequence, type);
+	obj = PyMalloc_New(PyStructSequence, type);
 	obj->ob_size = VISIBLE_SIZE_TP(type);
 
 	return (PyObject*) obj;
@@ -37,7 +37,7 @@
 	for (i = 0; i < size; ++i) {
 		Py_XDECREF(obj->ob_item[i]);
 	}
-	PyObject_FREE(obj);
+	PyMalloc_Del(obj);
 }
 
 static int
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 978ac54..73d5d9d 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -201,7 +201,7 @@
         PyObject_INIT(unicode, &PyUnicode_Type);
     }
     else {
-        unicode = PyObject_NEW(PyUnicodeObject, &PyUnicode_Type);
+        unicode = PyMalloc_New(PyUnicodeObject, &PyUnicode_Type);
         if (unicode == NULL)
             return NULL;
 	unicode->str = PyMem_NEW(Py_UNICODE, length + 1);
@@ -219,7 +219,7 @@
 
  onError:
     _Py_ForgetReference((PyObject *)unicode);
-    PyObject_DEL(unicode);
+    PyMalloc_Del(unicode);
     return NULL;
 }
 
@@ -5711,7 +5711,7 @@
 	pnew->str = PyMem_NEW(Py_UNICODE, n+1);
 	if (pnew->str == NULL) {
 		_Py_ForgetReference((PyObject *)pnew);
-		PyObject_DEL(pnew);
+		PyMalloc_Del(pnew);
 		return NULL;
 	}
 	Py_UNICODE_COPY(pnew->str, tmp->str, n+1);
@@ -5769,7 +5769,7 @@
     0,					/* tp_init */
     0,					/* tp_alloc */
     unicode_new,			/* tp_new */
-    _PyObject_Del,			/* tp_free */
+    _PyMalloc_Del,			/* tp_free */
 };
 
 /* Initialize the Unicode implementation */
@@ -5811,7 +5811,7 @@
 	if (v->str)
 	    PyMem_DEL(v->str);
 	Py_XDECREF(v->defenc);
-	PyObject_DEL(v);
+	PyMalloc_Del(v);
     }
     unicode_freelist = NULL;
     unicode_freelist_size = 0;
