diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index 0466b7e..f9eb6b5 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -31,10 +31,9 @@
 
 /* struct module -- pack values into and (out of) strings */
 
-#include "allobjects.h"
-#include "modsupport.h"
+#include "Python.h"
 
-static object *StructError;
+static PyObject *StructError;
 
 
 /* Define various structs to figure out the alignments of types */
@@ -105,8 +104,8 @@
 			while ('0' <= (c = *s++) && c <= '9') {
 				x = num*10 + (c - '0');
 				if (x/10 != num) {
-					err_setstr(StructError,
-						   "int overflow in fmt");
+					PyErr_SetString(StructError,
+                                                        "int overflow in fmt");
 					return -1;
 				}
 				num = x;
@@ -148,7 +147,7 @@
 			break;
 
 		default:
-			err_setstr(StructError, "bad char in fmt");
+			PyErr_SetString(StructError, "bad char in fmt");
 			return -1;
 
 		}
@@ -156,7 +155,8 @@
 		x = num * itemsize;
 		size += x;
 		if (x/itemsize != num || size < 0) {
-			err_setstr(StructError, "total struct size too long");
+			PyErr_SetString(StructError,
+                                        "total struct size too long");
 			return -1;
 		}
 			
@@ -168,31 +168,31 @@
 
 /* pack(fmt, v1, v2, ...) --> string */
 
-static object *
+static PyObject *
 struct_calcsize(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
 	char *fmt;
 	int size;
 
-	if (!getargs(args, "s", &fmt))
+	if (!PyArg_Parse(args, "s", &fmt))
 		return NULL;
 	size = calcsize(fmt);
 	if (size < 0)
 		return NULL;
-	return newintobject((long)size);
+	return PyInt_FromLong((long)size);
 }
 
 
 /* pack(fmt, v1, v2, ...) --> string */
 
-static object *
+static PyObject *
 struct_pack(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
-	object *format, *result, *v;
+	PyObject *format, *result, *v;
 	char *fmt;
 	int size, num;
 	int i, n;
@@ -201,24 +201,25 @@
 	long ival;
 	double fval;
 
-	if (args == NULL || !is_tupleobject(args) ||
-	    (n = gettuplesize(args)) < 1) {
-		err_badarg();
+	if (args == NULL || !PyTuple_Check(args) ||
+	    (n = PyTuple_Size(args)) < 1)
+        {
+		PyErr_BadArgument();
 		return NULL;
 	}
-	format = gettupleitem(args, 0);
-	if (!getargs(format, "s", &fmt))
+	format = PyTuple_GetItem(args, 0);
+	if (!PyArg_Parse(format, "s", &fmt))
 		return NULL;
 	size = calcsize(fmt);
 	if (size < 0)
 		return NULL;
-	result = newsizedstringobject((char *)NULL, size);
+	result = PyString_FromStringAndSize((char *)NULL, size);
 	if (result == NULL)
 		return NULL;
 
 	s = fmt;
 	i = 1;
-	res = restart = getstringvalue(result);
+	res = restart = PyString_AsString(result);
 
 	while ((c = *s++) != '\0') {
 		if ('0' <= c && c <= '9') {
@@ -245,17 +246,17 @@
 			case 'h':
 			case 'b':
 				if (i >= n) {
-					err_setstr(StructError,
-					   "insufficient arguments to pack");
+					PyErr_SetString(StructError,
+					     "insufficient arguments to pack");
 					goto fail;
 				}
-				v = gettupleitem(args, i++);
-				if (!is_intobject(v)) {
-					err_setstr(StructError,
-					   "bad argument type to pack");
+				v = PyTuple_GetItem(args, i++);
+				if (!PyInt_Check(v)) {
+					PyErr_SetString(StructError,
+					          "bad argument type to pack");
 					goto fail;
 				}
-				ival = getintvalue(v);
+				ival = PyInt_AsLong(v);
 				switch (c) {
 				case 'b':
 					*res++ = ival;
@@ -277,34 +278,35 @@
 
 			case 'c':
 				if (i >= n) {
-					err_setstr(StructError,
-					   "insufficient arguments to pack");
+					PyErr_SetString(StructError,
+					     "insufficient arguments to pack");
 					goto fail;
 				}
-				v = gettupleitem(args, i++);
-				if (!is_stringobject(v) ||
-				    getstringsize(v) != 1) {
-					err_setstr(StructError,
-					   "bad argument type to pack");
+				v = PyTuple_GetItem(args, i++);
+				if (!PyString_Check(v) ||
+				    PyString_Size(v) != 1)
+				{
+					PyErr_SetString(StructError,
+					          "bad argument type to pack");
 					goto fail;
 				}
-				*res++ = getstringvalue(v)[0];
+				*res++ = PyString_AsString(v)[0];
 				break;
 
 			case 'd':
 			case 'f':
 				if (i >= n) {
-					err_setstr(StructError,
-					   "insufficient arguments to pack");
+					PyErr_SetString(StructError,
+					     "insufficient arguments to pack");
 					goto fail;
 				}
-				v = gettupleitem(args, i++);
-				if (!is_floatobject(v)) {
-					err_setstr(StructError,
-					   "bad argument type to pack");
+				v = PyTuple_GetItem(args, i++);
+				if (!PyFloat_Check(v)) {
+					PyErr_SetString(StructError,
+					          "bad argument type to pack");
 					goto fail;
 				}
-				fval = getfloatvalue(v);
+				fval = PyFloat_AsDouble(v);
 				switch (c) {
 				case 'f':
 					*(float*)res = (float)fval;
@@ -318,7 +320,8 @@
 				break;
 
 			default:
-				err_setstr(StructError, "bad char in fmt");
+				PyErr_SetString(StructError,
+						"bad char in fmt");
 				goto fail;
 
 			}
@@ -326,59 +329,61 @@
 	}
 
 	if (i < n) {
-		err_setstr(StructError, "too many arguments for pack fmt");
+		PyErr_SetString(StructError,
+				"too many arguments for pack fmt");
 		goto fail;
 	}
 
 	return result;
 
  fail:
-	DECREF(result);
+	Py_DECREF(result);
 	return NULL;
 }
 
 
 /* Helper to convert a list to a tuple */
 
-static object *
+static PyObject *
 totuple(list)
-	object *list;
+	PyObject *list;
 {
-	int len = getlistsize(list);
-	object *tuple = newtupleobject(len);
+	int len = PyList_Size(list);
+	PyObject *tuple = PyTuple_New(len);
 	if (tuple != NULL) {
 		int i;
 		for (i = 0; i < len; i++) {
-			object *v = getlistitem(list, i);
-			INCREF(v);
-			settupleitem(tuple, i, v);
+			PyObject *v = PyList_GetItem(list, i);
+			Py_INCREF(v);
+			PyTuple_SetItem(tuple, i, v);
 		}
 	}
-	DECREF(list);
+	Py_DECREF(list);
 	return tuple;
 }
 
 
 /* unpack(fmt, string) --> (v1, v2, ...) */
 
-static object *
+static PyObject *
 struct_unpack(self, args)
-	object *self; /* Not used */
-	object *args;
+	PyObject *self; /* Not used */
+	PyObject *args;
 {
 	char *str, *start, *fmt, *s;
 	char c;
 	int len, size, num, x;
-	object *res, *v;
+	PyObject *res, *v;
 
-	if (!getargs(args, "(ss#)", &fmt, &start, &len))
+	if (!PyArg_Parse(args, "(ss#)", &fmt, &start, &len))
 		return NULL;
 	size = calcsize(fmt);
 	if (size != len) {
-		err_setstr(StructError, "unpack str size does not match fmt");
+		PyErr_SetString(StructError,
+				"unpack str size does not match fmt");
 		return NULL;
 	}
-	res = newlistobject(0);
+	res = PyList_New(0);
 	if (res == NULL)
 		return NULL;
 	str = start;
@@ -407,31 +412,31 @@
 				x = *str++;
 				if (x >= 128)
 					x -= 256;
-				v = newintobject((long)x);
+				v = PyInt_FromLong((long)x);
 				break;
 
 			case 'c':
-				v = newsizedstringobject(str, 1);
+				v = PyString_FromStringAndSize(str, 1);
 				str++;
 				break;
 
 			case 'h':
-				v = newintobject((long)*(short*)str);
+				v = PyInt_FromLong((long)*(short*)str);
 				str += sizeof(short);
 				break;
 
 			case 'i':
-				v = newintobject((long)*(int*)str);
+				v = PyInt_FromLong((long)*(int*)str);
 				str += sizeof(int);
 				break;
 
 			case 'l':
-				v = newintobject(*(long*)str);
+				v = PyInt_FromLong(*(long*)str);
 				str += sizeof(long);
 				break;
 
 			case 'f':
-				v = newfloatobject((double)*(float*)str);
+				v = PyFloat_FromDouble((double)*(float*)str);
 				str += sizeof(float);
 				break;
 
@@ -439,33 +444,34 @@
 			    {
 				double d;
 				memcpy((char *)&d, str, sizeof d);
-				v = newfloatobject(d);
+				v = PyFloat_FromDouble(d);
 				str += sizeof(double);
 				break;
 			    }
 
 			default:
-				err_setstr(StructError, "bad char in fmt");
+				PyErr_SetString(StructError,
+						"bad char in fmt");
 				goto fail;
 
 			}
-			if (v == NULL || addlistitem(res, v) < 0)
+			if (v == NULL || PyList_Append(res, v) < 0)
 				goto fail;
-			DECREF(v);
+			Py_DECREF(v);
 		}
 	}
 
 	return totuple(res);
 
  fail:
-	DECREF(res);
+	Py_DECREF(res);
 	return NULL;
 }
 
 
 /* List of functions */
 
-static struct methodlist struct_methods[] = {
+static PyMethodDef struct_methods[] = {
 	{"calcsize",	struct_calcsize},
 	{"pack",	struct_pack,	1/*varargs*/},
 	{"unpack",	struct_unpack},
@@ -478,17 +484,17 @@
 void
 initstruct()
 {
-	object *m, *d;
+	PyObject *m, *d;
 
 	/* Create the module and add the functions */
-	m = initmodule("struct", struct_methods);
+	m = Py_InitModule("struct", struct_methods);
 
 	/* Add some symbolic constants to the module */
-	d = getmoduledict(m);
-	StructError = newstringobject("struct.error");
-	dictinsert(d, "error", StructError);
+	d = PyModule_GetDict(m);
+	StructError = PyString_FromString("struct.error");
+	PyDict_SetItemString(d, "error", StructError);
 
 	/* Check for errors */
-	if (err_occurred())
-		fatal("can't initialize module struct");
+	if (PyErr_Occurred())
+		Py_FatalError("can't initialize module struct");
 }
