Renamed.
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index 38394a4..01d8305 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -32,7 +32,7 @@
 /* Thread module */
 /* Interface to Sjoerd's portable C thread library */
 
-#include "allobjects.h"
+#include "Python.h"
 
 #ifndef WITH_THREAD
 Error!  The rest of Python is not compiled with thread support.
@@ -41,25 +41,25 @@
 
 #include "thread.h"
 
-extern int threads_started;
+extern int _PyThread_Started;
 
-static object *ThreadError;
+static PyObject *ThreadError;
 
 
 /* Lock objects */
 
 typedef struct {
-	OB_HEAD
+	PyObject_HEAD
 	type_lock lock_lock;
 } lockobject;
 
-staticforward typeobject Locktype;
+staticforward PyTypeObject Locktype;
 
 #define is_lockobject(v)		((v)->ob_type == &Locktype)
 
 type_lock
 getlocklock(lock)
-	object *lock;
+	PyObject *lock;
 {
 	if (lock == NULL || !is_lockobject(lock))
 		return NULL;
@@ -71,14 +71,14 @@
 newlockobject()
 {
 	lockobject *self;
-	self = NEWOBJ(lockobject, &Locktype);
+	self = PyObject_NEW(lockobject, &Locktype);
 	if (self == NULL)
 		return NULL;
 	self->lock_lock = allocate_lock();
 	if (self->lock_lock == NULL) {
-		DEL(self);
+		PyMem_DEL(self);
 		self = NULL;
-		err_setstr(ThreadError, "can't allocate lock");
+		PyErr_SetString(ThreadError, "can't allocate lock");
 	}
 	return self;
 }
@@ -92,90 +92,90 @@
 	release_lock(self->lock_lock);
 	
 	free_lock(self->lock_lock);
-	DEL(self);
+	PyMem_DEL(self);
 }
 
-static object *
+static PyObject *
 lock_acquire_lock(self, args)
 	lockobject *self;
-	object *args;
+	PyObject *args;
 {
 	int i;
 
 	if (args != NULL) {
-		if (!getargs(args, "i", &i))
+		if (!PyArg_Parse(args, "i", &i))
 			return NULL;
 	}
 	else
 		i = 1;
 
-	BGN_SAVE
+	Py_BEGIN_ALLOW_THREADS
 	i = acquire_lock(self->lock_lock, i);
-	END_SAVE
+	Py_END_ALLOW_THREADS
 
 	if (args == NULL) {
-		INCREF(None);
-		return None;
+		Py_INCREF(Py_None);
+		return Py_None;
 	}
 	else
-		return newintobject((long)i);
+		return PyInt_FromLong((long)i);
 }
 
-static object *
+static PyObject *
 lock_release_lock(self, args)
 	lockobject *self;
-	object *args;
+	PyObject *args;
 {
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 
 	/* Sanity check: the lock must be locked */
 	if (acquire_lock(self->lock_lock, 0)) {
 		release_lock(self->lock_lock);
-		err_setstr(ThreadError, "release unlocked lock");
+		PyErr_SetString(ThreadError, "release unlocked lock");
 		return NULL;
 	}
 
 	release_lock(self->lock_lock);
-	INCREF(None);
-	return None;
+	Py_INCREF(Py_None);
+	return Py_None;
 }
 
-static object *
+static PyObject *
 lock_locked_lock(self, args)
 	lockobject *self;
-	object *args;
+	PyObject *args;
 {
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 
 	if (acquire_lock(self->lock_lock, 0)) {
 		release_lock(self->lock_lock);
-		return newintobject(0L);
+		return PyInt_FromLong(0L);
 	}
-	return newintobject(1L);
+	return PyInt_FromLong(1L);
 }
 
-static struct methodlist lock_methods[] = {
-	{"acquire_lock",	(method)lock_acquire_lock},
-	{"acquire",		(method)lock_acquire_lock},
-	{"release_lock",	(method)lock_release_lock},
-	{"release",		(method)lock_release_lock},
-	{"locked_lock",		(method)lock_locked_lock},
-	{"locked",		(method)lock_locked_lock},
+static PyMethodDef lock_methods[] = {
+	{"acquire_lock",	(PyCFunction)lock_acquire_lock},
+	{"acquire",		(PyCFunction)lock_acquire_lock},
+	{"release_lock",	(PyCFunction)lock_release_lock},
+	{"release",		(PyCFunction)lock_release_lock},
+	{"locked_lock",		(PyCFunction)lock_locked_lock},
+	{"locked",		(PyCFunction)lock_locked_lock},
 	{NULL,			NULL}		/* sentinel */
 };
 
-static object *
+static PyObject *
 lock_getattr(self, name)
 	lockobject *self;
 	char *name;
 {
-	return findmethod(lock_methods, (object *)self, name);
+	return Py_FindMethod(lock_methods, (PyObject *)self, name);
 }
 
-static typeobject Locktype = {
-	OB_HEAD_INIT(&Typetype)
+static PyTypeObject Locktype = {
+	PyObject_HEAD_INIT(&PyType_Type)
 	0,				/*ob_size*/
 	"lock",				/*tp_name*/
 	sizeof(lockobject),		/*tp_size*/
@@ -196,113 +196,113 @@
 t_bootstrap(args_raw)
 	void *args_raw;
 {
-	object *args = (object *) args_raw;
-	object *func, *arg, *res;
+	PyObject *args = (PyObject *) args_raw;
+	PyObject *func, *arg, *res;
 
-	threads_started++;
+	_PyThread_Started++;
 
-	restore_thread((void *)NULL);
-	func = gettupleitem(args, 0);
-	arg = gettupleitem(args, 1);
-	res = call_object(func, arg);
-	DECREF(args); /* Matches the INCREF(args) in thread_start_new_thread */
+	PyEval_RestoreThread((void *)NULL);
+	func = PyTuple_GetItem(args, 0);
+	arg = PyTuple_GetItem(args, 1);
+	res = PyEval_CallObject(func, arg);
+	Py_DECREF(args); /* Matches the INCREF(args) in thread_start_new_thread */
 	if (res == NULL) {
-		if (err_occurred() == SystemExit)
-			err_clear();
+		if (PyErr_Occurred() == PyExc_SystemExit)
+			PyErr_Clear();
 		else {
 			fprintf(stderr, "Unhandled exception in thread:\n");
-			print_error(); /* From pythonmain.c */
+			PyErr_Print(); /* From pythonmain.c */
 		}
 	}
 	else
-		DECREF(res);
-	(void) save_thread(); /* Should always be NULL */
+		Py_DECREF(res);
+	(void) PyEval_SaveThread(); /* Should always be NULL */
 	exit_thread();
 }
 
-static object *
+static PyObject *
 thread_start_new_thread(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
-	object *func, *arg;
+	PyObject *func, *arg;
 
-	if (!getargs(args, "(OO)", &func, &arg))
+	if (!PyArg_Parse(args, "(OO)", &func, &arg))
 		return NULL;
-	INCREF(args);
+	Py_INCREF(args);
 	/* Initialize the interpreter's stack save/restore mechanism */
-	init_save_thread();
+	PyEval_InitThreads();
 	if (!start_new_thread(t_bootstrap, (void*) args)) {
-		DECREF(args);
-		err_setstr(ThreadError, "can't start new thread\n");
+		Py_DECREF(args);
+		PyErr_SetString(ThreadError, "can't start new thread\n");
 		return NULL;
 	}
 	/* Otherwise the DECREF(args) is done by t_bootstrap */
-	INCREF(None);
-	return None;
+	Py_INCREF(Py_None);
+	return Py_None;
 }
 
-static object *
+static PyObject *
 thread_exit_thread(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
-	err_set(SystemExit);
+	PyErr_SetNone(PyExc_SystemExit);
 	return NULL;
 }
 
 #ifndef NO_EXIT_PROG
-static object *
+static PyObject *
 thread_exit_prog(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
 	int sts;
-	if (!getargs(args, "i", &sts))
+	if (!PyArg_Parse(args, "i", &sts))
 		return NULL;
-	goaway(sts); /* Calls exit_prog(sts) or _exit_prog(sts) */
+	Py_Exit(sts); /* Calls exit_prog(sts) or _exit_prog(sts) */
 	for (;;) { } /* Should not be reached */
 }
 #endif
 
-static object *
+static PyObject *
 thread_allocate_lock(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
-	return (object *) newlockobject();
+	return (PyObject *) newlockobject();
 }
 
-static object *
+static PyObject *
 thread_get_ident(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
 	long ident;
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 	ident = get_thread_ident();
 	if (ident == -1) {
-		err_setstr(ThreadError, "no current thread ident");
+		PyErr_SetString(ThreadError, "no current thread ident");
 		return NULL;
 	}
-	return newintobject(ident);
+	return PyInt_FromLong(ident);
 }
 
-static struct methodlist thread_methods[] = {
-	{"start_new_thread",	(method)thread_start_new_thread},
-	{"start_new",		(method)thread_start_new_thread},
-	{"allocate_lock",	(method)thread_allocate_lock},
-	{"allocate",		(method)thread_allocate_lock},
-	{"exit_thread",		(method)thread_exit_thread},
-	{"exit",		(method)thread_exit_thread},
-	{"get_ident",		(method)thread_get_ident},
+static PyMethodDef thread_methods[] = {
+	{"start_new_thread",	(PyCFunction)thread_start_new_thread},
+	{"start_new",		(PyCFunction)thread_start_new_thread},
+	{"allocate_lock",	(PyCFunction)thread_allocate_lock},
+	{"allocate",		(PyCFunction)thread_allocate_lock},
+	{"exit_thread",		(PyCFunction)thread_exit_thread},
+	{"exit",		(PyCFunction)thread_exit_thread},
+	{"get_ident",		(PyCFunction)thread_get_ident},
 #ifndef NO_EXIT_PROG
-	{"exit_prog",		(method)thread_exit_prog},
+	{"exit_prog",		(PyCFunction)thread_exit_prog},
 #endif
 	{NULL,			NULL}		/* sentinel */
 };
@@ -313,20 +313,20 @@
 void
 initthread()
 {
-	object *m, *d;
+	PyObject *m, *d;
 
 	/* Create the module and add the functions */
-	m = initmodule("thread", thread_methods);
+	m = Py_InitModule("thread", thread_methods);
 
 	/* Add a symbolic constant */
-	d = getmoduledict(m);
-	ThreadError = newstringobject("thread.error");
-	INCREF(ThreadError);
-	dictinsert(d, "error", ThreadError);
+	d = PyModule_GetDict(m);
+	ThreadError = PyString_FromString("thread.error");
+	Py_INCREF(ThreadError);
+	PyDict_SetItemString(d, "error", ThreadError);
 
 	/* Check for errors */
-	if (err_occurred())
-		fatal("can't initialize module thread");
+	if (PyErr_Occurred())
+		Py_FatalError("can't initialize module thread");
 
 	/* Initialize the C thread library */
 	init_thread();