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;
