diff --git a/Include/ceval.h b/Include/ceval.h
index 9468451..0831173 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -40,7 +40,7 @@
 
 DL_IMPORT(int) Py_FlushLine(void);
 
-DL_IMPORT(int) Py_AddPendingCall(int (*func)(ANY *), ANY *arg);
+DL_IMPORT(int) Py_AddPendingCall(int (*func)(void *), void *arg);
 DL_IMPORT(int) Py_MakePendingCalls(void);
 
 
diff --git a/Include/mymalloc.h b/Include/mymalloc.h
index 88faf90..5bbd1e5 100644
--- a/Include/mymalloc.h
+++ b/Include/mymalloc.h
@@ -12,25 +12,7 @@
 
 /* Lowest-level memory allocation interface */
 
-#ifdef macintosh
-#define ANY void
-#endif
-
-#ifdef __STDC__
-#define ANY void
-#endif
-
-#ifdef __TURBOC__
-#define ANY void
-#endif
-
-#ifdef __GNUC__
-#define ANY void
-#endif
-
-#ifndef ANY
-#define ANY char
-#endif
+#define ANY void /* For API compatibility only. Obsolete, do not use. */
 
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
@@ -49,7 +31,7 @@
 #endif
 
 #ifndef NULL
-#define NULL ((ANY *)0)
+#define NULL ((void *)0)
 #endif
 
 #ifdef MALLOC_ZERO_RETURNS_NULL
@@ -87,13 +69,13 @@
 #undef PyCore_REALLOC_PROTO
 #undef PyCore_FREE_PROTO
 #define PyCore_MALLOC_PROTO    (size_t)
-#define PyCore_REALLOC_PROTO   (ANY *, size_t)
-#define PyCore_FREE_PROTO      (ANY *)
+#define PyCore_REALLOC_PROTO   (void *, size_t)
+#define PyCore_FREE_PROTO      (void *)
 #endif
 
 #ifdef NEED_TO_DECLARE_MALLOC_AND_FRIEND
-extern ANY *PyCore_MALLOC_FUNC PyCore_MALLOC_PROTO;
-extern ANY *PyCore_REALLOC_FUNC PyCore_REALLOC_PROTO;
+extern void *PyCore_MALLOC_FUNC PyCore_MALLOC_PROTO;
+extern void *PyCore_REALLOC_FUNC PyCore_REALLOC_PROTO;
 extern void PyCore_FREE_FUNC PyCore_FREE_PROTO;
 #endif
 
@@ -134,17 +116,17 @@
    returns a non-NULL pointer, even if the underlying malloc
    doesn't. Returned pointers must be checked for NULL explicitly.
    No action is performed on failure. */
-extern DL_IMPORT(ANY *) PyMem_Malloc(size_t);
-extern DL_IMPORT(ANY *) PyMem_Realloc(ANY *, size_t);
-extern DL_IMPORT(void) PyMem_Free(ANY *);
+extern DL_IMPORT(void *) PyMem_Malloc(size_t);
+extern DL_IMPORT(void *) PyMem_Realloc(void *, size_t);
+extern DL_IMPORT(void) PyMem_Free(void *);
 
 /* Starting from Python 1.6, the wrappers Py_{Malloc,Realloc,Free} are
    no longer supported. They used to call PyErr_NoMemory() on failure. */
 
 /* Macros */
 #define PyMem_MALLOC(n)         PyCore_MALLOC(n)
-#define PyMem_REALLOC(p, n)     PyCore_REALLOC((ANY *)(p), (n))
-#define PyMem_FREE(p)           PyCore_FREE((ANY *)(p))
+#define PyMem_REALLOC(p, n)     PyCore_REALLOC((void *)(p), (n))
+#define PyMem_FREE(p)           PyCore_FREE((void *)(p))
 
 /*
  * Type-oriented memory interface
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 76fab92..dfdbca0 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -101,8 +101,8 @@
 #endif
 
 #ifdef NEED_TO_DECLARE_OBJECT_MALLOC_AND_FRIEND
-extern ANY *PyCore_OBJECT_MALLOC_FUNC PyCore_OBJECT_MALLOC_PROTO;
-extern ANY *PyCore_OBJECT_REALLOC_FUNC PyCore_OBJECT_REALLOC_PROTO;
+extern void *PyCore_OBJECT_MALLOC_FUNC PyCore_OBJECT_MALLOC_PROTO;
+extern void *PyCore_OBJECT_REALLOC_FUNC PyCore_OBJECT_REALLOC_PROTO;
 extern void PyCore_OBJECT_FREE_FUNC PyCore_OBJECT_FREE_PROTO;
 #endif
 
@@ -137,14 +137,14 @@
    as Python. These wrappers *do not* make sure that allocating 0
    bytes returns a non-NULL pointer. Returned pointers must be checked
    for NULL explicitly; no action is performed on failure. */
-extern DL_IMPORT(ANY *) PyObject_Malloc(size_t);
-extern DL_IMPORT(ANY *) PyObject_Realloc(ANY *, size_t);
-extern DL_IMPORT(void) PyObject_Free(ANY *);
+extern DL_IMPORT(void *) PyObject_Malloc(size_t);
+extern DL_IMPORT(void *) PyObject_Realloc(void *, size_t);
+extern DL_IMPORT(void) PyObject_Free(void *);
 
 /* Macros */
 #define PyObject_MALLOC(n)           PyCore_OBJECT_MALLOC(n)
-#define PyObject_REALLOC(op, n)      PyCore_OBJECT_REALLOC((ANY *)(op), (n))
-#define PyObject_FREE(op)            PyCore_OBJECT_FREE((ANY *)(op))
+#define PyObject_REALLOC(op, n)      PyCore_OBJECT_REALLOC((void *)(op), (n))
+#define PyObject_FREE(op)            PyCore_OBJECT_FREE((void *)(op))
 
 /*
  * Generic object allocator interface
diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index 09bd9d3..18e1458 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -18,7 +18,7 @@
 #define RTLD_LAZY 1
 #endif
 
-typedef ANY *PyUnivPtr;
+typedef void *PyUnivPtr;
 typedef struct {
 	PyObject_HEAD
 	PyUnivPtr *dl_handle;
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index f200427..4829dbf 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -633,7 +633,7 @@
 {
 	is_tripped++;
 	Handlers[SIGINT].tripped = 1;
-	Py_AddPendingCall((int (*)(ANY *))PyErr_CheckSignals, NULL);
+	Py_AddPendingCall((int (*)(void *))PyErr_CheckSignals, NULL);
 }
 
 void
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index e95e339..f146e8f 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -799,7 +799,7 @@
 				      &level, &optname, &buf, &buflen))
 			return NULL;
 	}
-	res = setsockopt(s->sock_fd, level, optname, (ANY *)buf, buflen);
+	res = setsockopt(s->sock_fd, level, optname, (void *)buf, buflen);
 	if (res < 0)
 		return PySocket_Err();
 	Py_INCREF(Py_None);
@@ -841,7 +841,7 @@
 		int flag = 0;
 		socklen_t flagsize = sizeof flag;
 		res = getsockopt(s->sock_fd, level, optname,
-				 (ANY *)&flag, &flagsize);
+				 (void *)&flag, &flagsize);
 		if (res < 0)
 			return PySocket_Err();
 		return PyInt_FromLong(flag);
@@ -855,7 +855,7 @@
 	if (buf == NULL)
 		return NULL;
 	res = getsockopt(s->sock_fd, level, optname,
-			 (ANY *)PyString_AsString(buf), &buflen);
+			 (void *)PyString_AsString(buf), &buflen);
 	if (res < 0) {
 		Py_DECREF(buf);
 		return PySocket_Err();
@@ -1230,7 +1230,7 @@
 #if defined(PYOS_OS2)
 		     (struct sockaddr *)addrbuf, &addrlen
 #else
-		     (ANY *)addrbuf, &addrlen
+		     (void *)addrbuf, &addrlen
 #endif
 #else
 		     (struct sockaddr *)addrbuf, &addrlen
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 18223b2..4d2089c 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -293,7 +293,7 @@
 gettmarg(PyObject *args, struct tm *p)
 {
 	int y;
-	memset((ANY *) p, '\0', sizeof(struct tm));
+	memset((void *) p, '\0', sizeof(struct tm));
 
 	if (!PyArg_Parse(args, "(iiiiiiiii)",
 			 &y,
@@ -343,7 +343,7 @@
 	char *outbuf = 0;
 	size_t i;
 
-	memset((ANY *) &buf, '\0', sizeof(buf));
+	memset((void *) &buf, '\0', sizeof(buf));
 
 	if (!PyArg_ParseTuple(args, "sO:strftime", &fmt, &tup) 
 	    || !gettmarg(tup, &buf))
@@ -398,7 +398,7 @@
 
 	if (!PyArg_ParseTuple(args, "s|s:strptime", &buf, &fmt))
 	        return NULL;
-	memset((ANY *) &tm, '\0', sizeof(tm));
+	memset((void *) &tm, '\0', sizeof(tm));
 	s = strptime(buf, fmt, &tm);
 	if (s == NULL) {
 		PyErr_SetString(PyExc_ValueError, "format mismatch");
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 52640fb..42eedf2 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1258,8 +1258,8 @@
 	if (w == NULL)
 		return NULL;
 	p = ((PyTupleObject *)w)->ob_item;
-	memcpy((ANY *)p,
-	       (ANY *)((PyListObject *)v)->ob_item,
+	memcpy((void *)p,
+	       (void *)((PyListObject *)v)->ob_item,
 	       n*sizeof(PyObject *));
 	while (--n >= 0) {
 		Py_INCREF(*p);
diff --git a/Objects/object.c b/Objects/object.c
index ef3455e..6fe05f1 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -962,7 +962,7 @@
 
 /* Python's malloc wrappers (see mymalloc.h) */
 
-ANY *
+void *
 PyMem_Malloc(size_t nbytes)
 {
 #if _PyMem_EXTRA > 0
@@ -972,8 +972,8 @@
 	return PyMem_MALLOC(nbytes);
 }
 
-ANY *
-PyMem_Realloc(ANY *p, size_t nbytes)
+void *
+PyMem_Realloc(void *p, size_t nbytes)
 {
 #if _PyMem_EXTRA > 0
 	if (nbytes == 0)
@@ -983,7 +983,7 @@
 }
 
 void
-PyMem_Free(ANY *p)
+PyMem_Free(void *p)
 {
 	PyMem_FREE(p);
 }
@@ -991,20 +991,20 @@
 
 /* Python's object malloc wrappers (see objimpl.h) */
 
-ANY *
+void *
 PyObject_Malloc(size_t nbytes)
 {
 	return PyObject_MALLOC(nbytes);
 }
 
-ANY *
-PyObject_Realloc(ANY *p, size_t nbytes)
+void *
+PyObject_Realloc(void *p, size_t nbytes)
 {
 	return PyObject_REALLOC(p, nbytes);
 }
 
 void
-PyObject_Free(ANY *p)
+PyObject_Free(void *p)
 {
 	PyObject_FREE(p);
 }
diff --git a/Parser/intrcheck.c b/Parser/intrcheck.c
index a17041d..1b81646 100644
--- a/Parser/intrcheck.c
+++ b/Parser/intrcheck.c
@@ -18,11 +18,10 @@
 #endif
 
 #include "myproto.h"
-#include "mymalloc.h" /* For ANY */
 #include "intrcheck.h"
 
 /* Copied here from ceval.h -- can't include that file. */
-int Py_AddPendingCall(int (*func)(ANY *), ANY *arg);
+int Py_AddPendingCall(int (*func)(void *), void *arg);
 
 
 #ifdef QUICKWIN
diff --git a/Python/ceval.c b/Python/ceval.c
index db22756..5822a85 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -210,15 +210,15 @@
 
 #define NPENDINGCALLS 32
 static struct {
-	int (*func)(ANY *);
-	ANY *arg;
+	int (*func)(void *);
+	void *arg;
 } pendingcalls[NPENDINGCALLS];
 static volatile int pendingfirst = 0;
 static volatile int pendinglast = 0;
 static volatile int things_to_do = 0;
 
 int
-Py_AddPendingCall(int (*func)(ANY *), ANY *arg)
+Py_AddPendingCall(int (*func)(void *), void *arg)
 {
 	static int busy = 0;
 	int i, j;
@@ -255,8 +255,8 @@
 	things_to_do = 0;
 	for (;;) {
 		int i;
-		int (*func)(ANY *);
-		ANY *arg;
+		int (*func)(void *);
+		void *arg;
 		i = pendingfirst;
 		if (i == pendinglast)
 			break; /* Queue empty */
