diff --git a/Parser/acceler.c b/Parser/acceler.c
index 6ed12c3..63919c5 100644
--- a/Parser/acceler.c
+++ b/Parser/acceler.c
@@ -44,7 +44,7 @@
 		s = d->d_state;
 		for (j = 0; j < d->d_nstates; j++, s++) {
 			if (s->s_accel)
-				PyMem_DEL(s->s_accel);
+				PyObject_FREE(s->s_accel);
 			s->s_accel = NULL;
 		}
 	}
@@ -68,7 +68,7 @@
 	int *accel;
 	int nl = g->g_ll.ll_nlabels;
 	s->s_accept = 0;
-	accel = PyMem_NEW(int, nl);
+	accel = (int *) PyObject_MALLOC(nl * sizeof(int));
 	for (k = 0; k < nl; k++)
 		accel[k] = -1;
 	a = s->s_arc;
@@ -124,7 +124,7 @@
 		k++;
 	if (k < nl) {
 		int i;
-		s->s_accel = PyMem_NEW(int, nl-k);
+		s->s_accel = (int *) PyObject_MALLOC((nl-k) * sizeof(int));
 		if (s->s_accel == NULL) {
 			fprintf(stderr, "no mem to add parser accelerators\n");
 			exit(1);
@@ -134,5 +134,5 @@
 		for (i = 0; k < nl; i++, k++)
 			s->s_accel[i] = accel[k];
 	}
-	PyMem_DEL(accel);
+	PyObject_FREE(accel);
 }
diff --git a/Parser/node.c b/Parser/node.c
index 780c230..75900ce 100644
--- a/Parser/node.c
+++ b/Parser/node.c
@@ -7,7 +7,7 @@
 node *
 PyNode_New(int type)
 {
-	node *n = PyMem_NEW(node, 1);
+	node *n = (node *) PyObject_MALLOC(1 * sizeof(node));
 	if (n == NULL)
 		return NULL;
 	n->n_type = type;
@@ -92,7 +92,8 @@
 		return E_OVERFLOW;
 	if (current_capacity < required_capacity) {
 		n = n1->n_child;
-		PyMem_RESIZE(n, node, required_capacity);
+		n = (node *) PyObject_REALLOC(n,
+					      required_capacity * sizeof(node));
 		if (n == NULL)
 			return E_NOMEM;
 		n1->n_child = n;
@@ -116,7 +117,7 @@
 {
 	if (n != NULL) {
 		freechildren(n);
-		PyMem_DEL(n);
+		PyObject_FREE(n);
 	}
 }
 
@@ -127,7 +128,7 @@
 	for (i = NCH(n); --i >= 0; )
 		freechildren(CHILD(n, i));
 	if (n->n_child != NULL)
-		PyMem_DEL(n->n_child);
+		PyObject_FREE(n->n_child);
 	if (STR(n) != NULL)
-		PyMem_DEL(STR(n));
+		PyObject_FREE(STR(n));
 }
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index cd3887d..5758fa7 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -133,7 +133,7 @@
 		else
 			started = 1;
 		len = b - a; /* XXX this may compute NULL - NULL */
-		str = PyMem_NEW(char, len + 1);
+		str = (char *) PyObject_MALLOC(len + 1);
 		if (str == NULL) {
 			fprintf(stderr, "no mem for next token\n");
 			err_ret->error = E_NOMEM;
@@ -157,7 +157,7 @@
 		     PyParser_AddToken(ps, (int)type, str, tok->lineno,
 				       &(err_ret->expected))) != E_OK) {
 			if (err_ret->error != E_DONE)
-				PyMem_DEL(str);
+				PyObject_FREE(str);
 			break;
 		}
 	}
@@ -178,7 +178,7 @@
 		err_ret->offset = tok->cur - tok->buf;
 		if (tok->buf != NULL) {
 			size_t len = tok->inp - tok->buf;
-			err_ret->text = PyMem_NEW(char, len + 1);
+			err_ret->text = (char *) PyObject_MALLOC(len + 1);
 			if (err_ret->text != NULL) {
 				if (len > 0)
 					strncpy(err_ret->text, tok->buf, len);
diff --git a/Python/compile.c b/Python/compile.c
index 2966532..3a0948e 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -719,7 +719,7 @@
 	Py_XDECREF(c->c_cellvars);
 	Py_XDECREF(c->c_lnotab);
 	if (c->c_future)
-		PyMem_Free((void *)c->c_future);
+		PyObject_FREE((void *)c->c_future);
 }
 
 static void
@@ -2020,7 +2020,7 @@
 			return;
 		}
 		if (childtype == MINUS) {
-			char *s = PyMem_Malloc(strlen(STR(pnum)) + 2);
+			char *s = PyObject_MALLOC(strlen(STR(pnum)) + 2);
 			if (s == NULL) {
 				com_error(c, PyExc_MemoryError, "");
 				com_addbyte(c, 255);
@@ -2028,7 +2028,7 @@
 			}
 			s[0] = '-';
 			strcpy(s + 1, STR(pnum));
-			PyMem_Free(STR(pnum));
+			PyObject_FREE(STR(pnum));
 			STR(pnum) = s;
 		}
 		com_atom(c, patom);
@@ -4116,7 +4116,7 @@
 
 	st = symtable_init();
 	if (st == NULL) {
-		PyMem_Free((void *)ff);
+		PyObject_FREE((void *)ff);
 		return NULL;
 	}
 	st->st_future = ff;
@@ -4129,7 +4129,7 @@
 	
 	return st;
  fail:
-	PyMem_Free((void *)ff);
+	PyObject_FREE((void *)ff);
 	st->st_future = NULL;
 	PySymtable_Free(st);
 	return NULL;
@@ -4722,7 +4722,7 @@
 {
 	struct symtable *st;
 
-	st = (struct symtable *)PyMem_Malloc(sizeof(struct symtable));
+	st = (struct symtable *)PyObject_MALLOC(sizeof(struct symtable));
 	if (st == NULL)
 		return NULL;
 	st->st_pass = 1;
@@ -4749,7 +4749,7 @@
 	Py_XDECREF(st->st_symbols);
 	Py_XDECREF(st->st_stack);
 	Py_XDECREF(st->st_cur);
-	PyMem_Free((void *)st);
+	PyObject_FREE((void *)st);
 }
 
 /* When the compiler exits a scope, it must should update the scope's
