Renamed, ungrandly.  We don't have the GNU MP library here so we can't
really test this module, or even compile it without a lot of work.

I'll make a note of it that this has not been tested!
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c
index 6ebac1c..2239871 100644
--- a/Modules/mpzmodule.c
+++ b/Modules/mpzmodule.c
@@ -40,7 +40,7 @@
 
 /* MPZ objects */
 
-#include "allobjects.h"
+#include "Python.h"
 
 #include <assert.h>
 #include <sys/types.h>		/* For size_t */
@@ -101,11 +101,11 @@
 #endif
 
 typedef struct {
-	OB_HEAD
+	PyObject_HEAD
         MP_INT	mpz;		/* the actual number */
 } mpzobject;
 
-staticforward typeobject MPZtype;
+staticforward PyTypeObject MPZtype;
 
 #define is_mpzobject(v)		((v)->ob_type == &MPZtype)
 
@@ -122,7 +122,7 @@
 #ifdef MPZ_DEBUG
 	fputs( "mpz_object() called...\n", stderr );
 #endif /* def MPZ_DEBUG */
-	mpzp = NEWOBJ(mpzobject, &MPZtype);
+	mpzp = PyObject_NEW(mpzobject, &MPZtype);
 	if (mpzp == NULL)
 		return NULL;
 
@@ -134,14 +134,14 @@
 #include "longlong.h"
 #endif /* def MPZ_GET_STR_BUG */
 
-static object *
+static PyObject *
 mpz_format(objp, base, withname)
-	object *objp;
+	PyObject *objp;
 	int base;
 	unsigned char withname;
 {
 	mpzobject *mpzp = (mpzobject *)objp;
-	stringobject *strobjp;
+	PyStringObject *strobjp;
 	int i;
 	int cmpres;
 	int taglong;
@@ -152,7 +152,7 @@
 	tcp = &prefix[0];
 
 	if (mpzp == NULL || !is_mpzobject(mpzp)) {
-		err_badcall();
+		PyErr_BadInternalCall();
 		return NULL;
 	}
 
@@ -221,12 +221,13 @@
 #ifdef MPZ_DEBUG
 	fprintf(stderr, "mpz_format: requesting string size %d\n", i);
 #endif /* def MPZ_DEBUG */	
-	if ((strobjp = (stringobject *)newsizedstringobject((char *)0, i))
+	if ((strobjp =
+	     (PyStringObject *)PyString_FromStringAndSize((char *)0, i))
 	    == NULL)
 		return NULL;
 
 	/* get the beginning of the string memory and start copying things */
-	cp = GETSTRINGVALUE(strobjp);
+	cp = PyString_AS_STRING(strobjp);
 	if (withname) {
 		strcpy(cp, initialiser_name);
 		cp += strlen(initialiser_name);
@@ -239,7 +240,7 @@
 	cp += tcp - prefix;
 
 	/* since' we have the sign already, let the lib think it's a positive
-		number */
+	   number */
 	if (cmpres < 0)
 		mpz_neg(&mpzp->mpz,&mpzp->mpz);	/* hack Hack HAck HACk HACK */
 	(void)mpz_get_str(cp, base, &mpzp->mpz);
@@ -261,15 +262,16 @@
 #ifdef MPZ_DEBUG
 	fprintf(stderr,
 		"mpz_format: cp (str end) 0x%x, begin 0x%x, diff %d, i %d\n",
-		cp, GETSTRINGVALUE(strobjp), cp - GETSTRINGVALUE(strobjp), i);
+		cp, PyString_AS_STRING(strobjp),
+		cp - PyString_AS_STRING(strobjp), i);
 #endif /* def MPZ_DEBUG */	
-	assert(cp - GETSTRINGVALUE(strobjp) <= i);
+	assert(cp - PyString_AS_STRING(strobjp) <= i);
 
-	if (cp - GETSTRINGVALUE(strobjp) != i) {
-		strobjp->ob_size -= i - (cp - GETSTRINGVALUE(strobjp));
+	if (cp - PyString_AS_STRING(strobjp) != i) {
+		strobjp->ob_size -= i - (cp - PyString_AS_STRING(strobjp));
 	}
 
-	return (object *)strobjp;
+	return (PyObject *)strobjp;
 } /* mpz_format() */
 
 /* MPZ methods */
@@ -282,7 +284,7 @@
 	fputs( "mpz_dealloc() called...\n", stderr );
 #endif /* def MPZ_DEBUG */
 	mpz_clear(&mpzp->mpz);
-	DEL(mpzp);
+	PyMem_DEL(mpzp);
 } /* mpz_dealloc() */
 
 
@@ -301,7 +303,7 @@
 		: cmpres > 0 ? 1 : -1;
 } /* mpz_compare() */
 
-static object *
+static PyObject *
 mpz_addition(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -311,13 +313,13 @@
 	
 #ifdef MPZ_SPARE_MALLOC
 	if (mpz_cmp_ui(&a->mpz, (unsigned long int)0) == 0) {
-		INCREF(b);
-		return (object *)b;
+		Py_INCREF(b);
+		return (PyObject *)b;
 	}
 
 	if (mpz_cmp_ui(&b->mpz, (unsigned long int)0) == 0) {
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 #endif /* def MPZ_SPARE_MALLOC */
 
@@ -325,10 +327,10 @@
 		return NULL;
 	
 	mpz_add(&z->mpz, &a->mpz, &b->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_addition() */
 
-static object *
+static PyObject *
 mpz_substract(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -338,8 +340,8 @@
 	
 #ifdef MPZ_SPARE_MALLOC
 	if (mpz_cmp_ui(&b->mpz, (unsigned long int)0) == 0) {
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 #endif /* MPZ_SPARE_MALLOC */	
 
@@ -347,10 +349,10 @@
 		return NULL;
 
 	mpz_sub(&z->mpz, &a->mpz, &b->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_substract() */
 
-static object *
+static PyObject *
 mpz_multiply(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -363,21 +365,21 @@
 
 #ifdef MPZ_SPARE_MALLOC
 	if ((cmpres = mpz_cmp_ui(&a->mpz, (unsigned long int)0)) == 0) {
-		INCREF(mpz_value_zero);
-		return (object *)mpz_value_zero;
+		Py_INCREF(mpz_value_zero);
+		return (PyObject *)mpz_value_zero;
 	}
 	if (cmpres > 0 && mpz_cmp_ui(&a->mpz, (unsigned long int)1) == 0) {
-		INCREF(b);
-		return (object *)b;
+		Py_INCREF(b);
+		return (PyObject *)b;
 	}
 
 	if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long_int)0)) == 0) {
-		INCREF(mpz_value_zero);
-		return (object *)mpz_value_zero;
+		Py_INCREF(mpz_value_zero);
+		return (PyObject *)mpz_value_zero;
 	}
 	if (cmpres > 0 && mpz_cmp_ui(&b->mpz, (unsigned long int)1) == 0) {
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 #endif /* MPZ_SPARE_MALLOC */
 
@@ -385,11 +387,11 @@
 		return NULL;
 
 	mpz_mul( &z->mpz, &a->mpz, &b->mpz );
-	return (object *)z;
+	return (PyObject *)z;
 	
 } /* mpz_multiply() */
 
-static object *
+static PyObject *
 mpz_divide(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -405,13 +407,13 @@
 	     cmpres =
 #endif /* def MPZ_SPARE_MALLOC */
 	     mpz_cmp_ui(&b->mpz, (unsigned long int)0)) == 0) {
-		err_setstr(ZeroDivisionError, "mpz./ by zero");
+		PyErr_SetString(PyExc_ZeroDivisionError, "mpz./ by zero");
 		return NULL;
 	}
 #ifdef MPZ_SPARE_MALLOC
 	if (cmpres > 0 && mpz_cmp_ui(&b->mpz(unsigned long int)1) == 0) {
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 #endif /* def MPZ_SPARE_MALLOC */
 
@@ -456,11 +458,11 @@
 	mpz_out_str(stderr, 10, &z->mpz);
 	putc('\n', stderr);
 #endif /* def MPZ_TEST_DIV */
-	return (object *)z;
+	return (PyObject *)z;
 	
 } /* mpz_divide() */
 
-static object *
+static PyObject *
 mpz_remainder(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -476,19 +478,20 @@
 	     cmpres =
 #endif /* def MPZ_SPARE_MALLOC */	
 	     mpz_cmp_ui(&b->mpz, (unsigned long int)0)) == 0) {
-		err_setstr(ZeroDivisionError, "mpz.% by zero");
+		PyErr_SetString(PyExc_ZeroDivisionError, "mpz.% by zero");
 		return NULL;
 	}
 #ifdef MPZ_SPARE_MALLOC
 	if (cmpres > 0) {
-		if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long int)2)) == 0) {
-			INCREF(mpz_value_one);
-			return (object *)mpz_value_one;
+		if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long int)2)) == 0)
+		{
+			Py_INCREF(mpz_value_one);
+			return (PyObject *)mpz_value_one;
 		}
 		if (cmpres < 0) {
 			/* b must be 1 now */
-			INCREF(mpz_value_zero);
-			return (object *)mpz_value_zero;
+			Py_INCREF(mpz_value_zero);
+			return (PyObject *)mpz_value_zero;
 		}
 	}
 #endif /* def MPZ_SPARE_MALLOC */	
@@ -526,30 +529,30 @@
 	mpz_out_str(stderr, 10, &z->mpz);
 	putc('\n', stderr);
 #endif /* def MPZ_TEST_DIV */
-	return (object *)z;
+	return (PyObject *)z;
 	
 } /* mpz_remainder() */
 
-static object *
+static PyObject *
 mpz_div_and_mod(a, b)
 	mpzobject *a;
 	mpzobject *b;
 {
-	object *z = NULL;
+	PyObject *z = NULL;
 	mpzobject *x = NULL, *y = NULL;
 
 
 	if (mpz_cmp_ui(&b->mpz, (unsigned long int)0) == 0) {
-		err_setstr(ZeroDivisionError, "mpz.divmod by zero");
+		PyErr_SetString(PyExc_ZeroDivisionError, "mpz.divmod by zero");
 		return NULL;
 	}
 
-	if ((z = newtupleobject(2)) == NULL
+	if ((z = PyTuple_New(2)) == NULL
 	    || (x = newmpzobject()) == NULL
 	    || (y = newmpzobject()) == NULL) {
-		XDECREF(z);
-		XDECREF(x);
-		XDECREF(y);
+		Py_XDECREF(z);
+		Py_XDECREF(x);
+		Py_XDECREF(y);
 		return NULL;
 	}
 
@@ -584,13 +587,13 @@
 	putc('\n', stderr);
 #endif /* def MPZ_TEST_DIV */
 
-	(void)settupleitem(z, 0, (object *)x);
-	(void)settupleitem(z, 1, (object *)y);
+	(void)PyTuple_SetItem(z, 0, (PyObject *)x);
+	(void)PyTuple_SetItem(z, 1, (PyObject *)y);
 	
 	return z;
 } /* mpz_div_and_mod() */
 
-static object *
+static PyObject *
 mpz_power(a, b, m)
 	mpzobject *a;
 	mpzobject *b;
@@ -599,42 +602,42 @@
 	mpzobject *z;
 	int cmpres;
 
- 	if ((object *)m!=Py_None)
- 	  {
- 	    mpzobject *z2;
-	    INCREF(Py_None);
- 	    z=(mpzobject *)mpz_power(a, b, (mpzobject *)Py_None);
-	    DECREF(Py_None);
- 	    if (z==NULL) return((object *)z);
- 	    z2=(mpzobject *)mpz_remainder(z, m);
- 	    DECREF(z);
- 	    return((object *)z2);
- 	  }	    
+ 	if ((PyObject *)m != Py_None) {
+		mpzobject *z2;
+		Py_INCREF(Py_None);
+		z=(mpzobject *)mpz_power(a, b, (mpzobject *)Py_None);
+		Py_DECREF(Py_None);
+		if (z==NULL) return((PyObject *)z);
+		z2=(mpzobject *)mpz_remainder(z, m);
+		Py_DECREF(z);
+		return((PyObject *)z2);
+	}	    
 
 	if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long int)0)) == 0) {
 		/* the gnu-mp lib sets pow(0,0) to 0, we to 1 */
 
-		INCREF(mpz_value_one);
-		return (object *)mpz_value_one;
+		Py_INCREF(mpz_value_one);
+		return (PyObject *)mpz_value_one;
 	}
 		
 	if (cmpres < 0) {
-		err_setstr(ValueError, "mpz.pow to negative exponent");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.pow to negative exponent");
 		return NULL;
 	}
 
 	if ((cmpres = mpz_cmp_ui(&a->mpz, (unsigned long int)0)) == 0) {
 		/* the base is 0 */
 
-		INCREF(mpz_value_zero);
-		return (object *)mpz_value_zero;
+		Py_INCREF(mpz_value_zero);
+		return (PyObject *)mpz_value_zero;
 	}
 	else if (cmpres > 0
 		 && mpz_cmp_ui(&a->mpz, (unsigned long int)1) == 0) {
 		/* the base is 1 */
 
-		INCREF(mpz_value_one);
-		return (object *)mpz_value_one;
+		Py_INCREF(mpz_value_one);
+		return (PyObject *)mpz_value_one;
 	}
 	else if (cmpres < 0
 		 && mpz_cmp_si(&a->mpz, (long int)-1) == 0) {
@@ -653,23 +656,24 @@
 
 		if (mpz_cmp_ui(&tmpmpz, (unsigned int)0) == 0) {
 			mpz_clear(&tmpmpz);
-			INCREF(mpz_value_one);
-			return (object *)mpz_value_one;
+			Py_INCREF(mpz_value_one);
+			return (PyObject *)mpz_value_one;
 		}
 		mpz_clear(&tmpmpz);
-		INCREF(mpz_value_mone);
-		return (object *)mpz_value_mone;
+		Py_INCREF(mpz_value_mone);
+		return (PyObject *)mpz_value_mone;
 	}
 
 #ifdef MPZ_LIB_DOES_CHECKING
 	/* check if it's doable: sizeof(exp) > sizeof(long) &&
 	   abs(base) > 1 ?? --> No Way */
 	if (mpz_size(&b->mpz) > 1)
-		return (object *)err_nomem();
+		return (PyObject *)PyErr_NoMemory();
 #else /* def MPZ_LIB_DOES_CHECKING */
 	/* wet finger method */
 	if (mpz_cmp_ui(&b->mpz, (unsigned long int)0x10000) >= 0) {
-		err_setstr(ValueError, "mpz.pow outrageous exponent");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.pow outrageous exponent");
 		return NULL;
 	}
 #endif /* def MPZ_LIB_DOES_CHECKING else */
@@ -679,11 +683,11 @@
 	
 	mpz_pow_ui(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
 	
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_power() */
 
 
-static object *
+static PyObject *
 mpz_negative(v)
 	mpzobject *v;
 {
@@ -693,8 +697,8 @@
 #ifdef MPZ_SPARE_MALLOC
 	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) == 0) {
 		/* -0 == 0 */
-		INCREF(v);
-		return (object *)v;
+		Py_INCREF(v);
+		return (PyObject *)v;
 	}
 #endif /* def MPZ_SPARE_MALLOC */
 
@@ -702,20 +706,20 @@
 		return NULL;
 
 	mpz_neg(&z->mpz, &v->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_negative() */
 
 
-static object *
+static PyObject *
 mpz_positive(v)
 	mpzobject *v;
 {
-	INCREF(v);
-	return (object *)v;
+	Py_INCREF(v);
+	return (PyObject *)v;
 } /* mpz_positive() */
 
 
-static object *
+static PyObject *
 mpz_absolute(v)
 	mpzobject *v;
 {
@@ -723,15 +727,15 @@
 
 	
 	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) >= 0) {
-		INCREF(v);
-		return (object *)v;
+		Py_INCREF(v);
+		return (PyObject *)v;
 	}
 
 	if ((z = newmpzobject()) == NULL)
 		return NULL;
 
 	mpz_neg(&z->mpz, &v->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_absolute() */
 
 static int
@@ -741,7 +745,7 @@
 	return mpz_cmp_ui(&v->mpz, (unsigned long int)0) != 0;
 } /* mpz_nonzero() */
 		
-static object *
+static PyObject *
 py_mpz_invert(v)
 	mpzobject *v;
 {
@@ -753,10 +757,10 @@
 		return NULL;
 
 	mpz_com(&z->mpz, &v->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* py_mpz_invert() */
 
-static object *
+static PyObject *
 mpz_lshift(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -767,22 +771,24 @@
 
 	if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long int)0)) == 0) {
 		/* a << 0 == a */
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 
 	if (cmpres < 0) {
-		err_setstr(ValueError, "mpz.<< negative shift count");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.<< negative shift count");
 		return NULL;
 	}
 
 #ifdef MPZ_LIB_DOES_CHECKING
 	if (mpz_size(&b->mpz) > 1)
-		return (object *)err_nomem();
+		return (PyObject *)PyErr_NoMemory();
 #else /* def MPZ_LIB_DOES_CHECKING */
 	/* wet finger method */
 	if (mpz_cmp_ui(&b->mpz, (unsigned long int)0x10000) >= 0) {
-		err_setstr(ValueError, "mpz.<< outrageous shift count");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.<< outrageous shift count");
 		return NULL;
 	}
 #endif /* def MPZ_LIB_DOES_CHECKING else */
@@ -791,10 +797,10 @@
 		return NULL;
 
 	mpz_mul_2exp(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_lshift() */
 
-static object *
+static PyObject *
 mpz_rshift(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -805,26 +811,27 @@
 
 	if ((cmpres = mpz_cmp_ui(&b->mpz, (unsigned long int)0)) == 0) {
 		/* a >> 0 == a */
-		INCREF(a);
-		return (object *)a;
+		Py_INCREF(a);
+		return (PyObject *)a;
 	}
 
 	if (cmpres < 0) {
-		err_setstr(ValueError, "mpz.>> negative shift count");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.>> negative shift count");
 		return NULL;
 	}
 
 	if (mpz_size(&b->mpz) > 1)
-		return (object *)err_nomem();
+		return (PyObject *)PyErr_NoMemory();
 
 	if ((z = newmpzobject()) == NULL)
 		return NULL;
 
 	mpz_div_2exp(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_rshift() */
 
-static object *
+static PyObject *
 mpz_andfunc(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -836,7 +843,7 @@
 		return NULL;
 
 	mpz_and(&z->mpz, &a->mpz, &b->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_andfunc() */
 
 /* hack Hack HAck HACk HACK, XXX this code is dead slow */
@@ -858,7 +865,7 @@
 	mpz_clear(&tmpmpz);
 } /* mpz_xor() HACK */
 
-static object *
+static PyObject *
 mpz_xorfunc(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -870,10 +877,10 @@
 		return NULL;
 
 	mpz_xor(&z->mpz, &a->mpz, &b->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_xorfunc() */
 
-static object *
+static PyObject *
 mpz_orfunc(a, b)
 	mpzobject *a;
 	mpzobject *b;
@@ -885,51 +892,51 @@
 		return NULL;
 
 	mpz_ior(&z->mpz, &a->mpz, &b->mpz);
-	return (object *)z;
+	return (PyObject *)z;
 } /* mpz_orfunc() */
 
 /* MPZ initialisation */
 
 #include "longintrepr.h"
 
-static object *
+static PyObject *
 MPZ_mpz(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
 	mpzobject *mpzp;
-	object *objp;
+	PyObject *objp;
 
 
 #ifdef MPZ_DEBUG
 	fputs("MPZ_mpz() called...\n", stderr);
 #endif /* def MPZ_DEBUG */
 
-	if (!getargs(args, "O", &objp))
+	if (!PyArg_Parse(args, "O", &objp))
 		return NULL;
 
 	/* at least we know it's some object */
 	/* note DON't DECREF args NEITHER objp */
 
-	if (is_intobject(objp)) {
+	if (PyInt_Check(objp)) {
 		long lval;
 
-		if (!getargs(objp, "l", &lval))
+		if (!PyArg_Parse(objp, "l", &lval))
 			return NULL;
 		
 		if (lval == (long)0) {
-			INCREF(mpz_value_zero);
+			Py_INCREF(mpz_value_zero);
 			mpzp = mpz_value_zero;
 		}
 		else if (lval == (long)1) {
-			INCREF(mpz_value_one);
+			Py_INCREF(mpz_value_one);
 			mpzp = mpz_value_one;
 		}			
 		else if ((mpzp = newmpzobject()) == NULL)
 			return NULL;
 		else mpz_set_si(&mpzp->mpz, lval);
 	}
-	else if (is_longobject(objp)) {
+	else if (PyLong_Check(objp)) {
 		MP_INT mplongdigit;
 		int i;
 		unsigned char isnegative;
@@ -942,13 +949,14 @@
 		mpz_init(&mplongdigit);
 		
 		/* how we're gonna handle this? */
-		if ((isnegative = ((i = ((longobject *)objp)->ob_size) < 0) ))
+		if ((isnegative =
+		     ((i = ((PyLongObject *)objp)->ob_size) < 0) ))
 			i = -i;
 
 		while (i--) {
 			mpz_set_ui(&mplongdigit,
 				   (unsigned long)
-				   ((longobject *)objp)->ob_digit[i]);
+				   ((PyLongObject *)objp)->ob_digit[i]);
 			mpz_mul_2exp(&mplongdigit,&mplongdigit,
 				     (unsigned long int)i * SHIFT);
 			mpz_ior(&mpzp->mpz, &mpzp->mpz, &mplongdigit);
@@ -960,12 +968,12 @@
 		/* get rid of allocation for tmp variable */
 		mpz_clear(&mplongdigit);
 	}
-	else if (is_stringobject(objp)) {
+	else if (PyString_Check(objp)) {
 		char *cp;
 		int len;
 		MP_INT mplongdigit;
 		
-		if (!getargs(objp, "s#", &cp, &len))
+		if (!PyArg_Parse(objp, "s#", &cp, &len))
 			return NULL;
 
 		if ((mpzp = newmpzobject()) == NULL)
@@ -989,12 +997,12 @@
 		mpz_clear(&mplongdigit);
 	}
 	else if (is_mpzobject(objp)) {
-		INCREF(objp);
+		Py_INCREF(objp);
 		mpzp = (mpzobject *)objp;
 	}
 	else {
-		err_setstr(TypeError,
-			   "mpz.mpz() expects integer, long, string or mpz object argument");
+		PyErr_SetString(PyExc_TypeError,
+"mpz.mpz() expects integer, long, string or mpz object argument");
 		return NULL;
 	}
 
@@ -1004,58 +1012,59 @@
 	mpz_out_str(stderr, 10, &mpzp->mpz);
 	putc('\n', stderr);
 #endif /* def MPZ_DEBUG */
-	return (object *)mpzp;
+	return (PyObject *)mpzp;
 } /* MPZ_mpz() */
 
 static mpzobject *
 mpz_mpzcoerce(z)
-	object *z;
+	PyObject *z;
 {
 	/* shortcut: 9 out of 10 times the type is already ok */
 	if (is_mpzobject(z)) {
-		INCREF(z);
+		Py_INCREF(z);
 		return (mpzobject *)z;	/* coercion succeeded */
 	}
 
 	/* what types do we accept?: intobjects and longobjects */
-	if (is_intobject(z) || is_longobject(z))
-		return (mpzobject *)MPZ_mpz((object *)NULL, z);
+	if (PyInt_Check(z) || PyLong_Check(z))
+		return (mpzobject *)MPZ_mpz((PyObject *)NULL, z);
 
-	err_setstr(TypeError, "number coercion (to mpzobject) failed");
+	PyErr_SetString(PyExc_TypeError,
+			"number coercion (to mpzobject) failed");
 	return NULL;
 } /* mpz_mpzcoerce() */
 	
 /* Forward */
-static void mpz_divm PROTO((MP_INT *res, const MP_INT *num,
-			    const MP_INT *den, const MP_INT *mod));
+static void mpz_divm Py_PROTO((MP_INT *res, const MP_INT *num,
+			       const MP_INT *den, const MP_INT *mod));
 
-static object *
+static PyObject *
 MPZ_powm(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *base, *exp, *mod;
+	PyObject *base, *exp, *mod;
 	mpzobject *mpzbase = NULL, *mpzexp = NULL, *mpzmod = NULL;
 	mpzobject *z;
 	int tstres;
 
 	
-	if (!getargs(args, "(OOO)", &base, &exp, &mod))
+	if (!PyArg_Parse(args, "(OOO)", &base, &exp, &mod))
 		return NULL;
 
 	if ((mpzbase = mpz_mpzcoerce(base)) == NULL
 	    || (mpzexp = mpz_mpzcoerce(exp)) == NULL
 	    || (mpzmod = mpz_mpzcoerce(mod)) == NULL
 	    || (z = newmpzobject()) == NULL) {
-		XDECREF(mpzbase);
-		XDECREF(mpzexp);
-		XDECREF(mpzmod);
+		Py_XDECREF(mpzbase);
+		Py_XDECREF(mpzexp);
+		Py_XDECREF(mpzmod);
 		return NULL;
 	}
 
 	if ((tstres=mpz_cmp_ui(&mpzexp->mpz, (unsigned long int)0)) == 0) {
-		INCREF(mpz_value_one);
-		return (object *)mpz_value_one;
+		Py_INCREF(mpz_value_one);
+		return (PyObject *)mpz_value_one;
 	}
 
 	if (tstres < 0) {
@@ -1074,145 +1083,145 @@
 		mpz_powm(&z->mpz, &mpzbase->mpz, &mpzexp->mpz, &mpzmod->mpz);
 	}
 		
-	DECREF(mpzbase);
-	DECREF(mpzexp);
-	DECREF(mpzmod);
+	Py_DECREF(mpzbase);
+	Py_DECREF(mpzexp);
+	Py_DECREF(mpzmod);
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_powm() */
 
 
-static object *
+static PyObject *
 MPZ_gcd(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *op1, *op2;
+	PyObject *op1, *op2;
 	mpzobject *mpzop1 = NULL, *mpzop2 = NULL;
 	mpzobject *z;
 
 	
-	if (!getargs(args, "(OO)", &op1, &op2))
+	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
 		return NULL;
 
 	if ((mpzop1 = mpz_mpzcoerce(op1)) == NULL
 	    || (mpzop2 = mpz_mpzcoerce(op2)) == NULL
 	    || (z = newmpzobject()) == NULL) {
-		XDECREF(mpzop1);
-		XDECREF(mpzop2);
+		Py_XDECREF(mpzop1);
+		Py_XDECREF(mpzop2);
 		return NULL;
 	}
 
 	/* ok, we have three mpzobjects, and an initialised result holder */
 	mpz_gcd(&z->mpz, &mpzop1->mpz, &mpzop2->mpz);
 
-	DECREF(mpzop1);
-	DECREF(mpzop2);
+	Py_DECREF(mpzop1);
+	Py_DECREF(mpzop2);
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_gcd() */
 
 
-static object *
+static PyObject *
 MPZ_gcdext(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *op1, *op2, *z = NULL;
+	PyObject *op1, *op2, *z = NULL;
 	mpzobject *mpzop1 = NULL, *mpzop2 = NULL;
 	mpzobject *g = NULL, *s = NULL, *t = NULL;
 
 	
-	if (!getargs(args, "(OO)", &op1, &op2))
+	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
 		return NULL;
 
 	if ((mpzop1 = mpz_mpzcoerce(op1)) == NULL
 	    || (mpzop2 = mpz_mpzcoerce(op2)) == NULL
-	    || (z = newtupleobject(3)) == NULL
+	    || (z = PyTuple_New(3)) == NULL
 	    || (g = newmpzobject()) == NULL
 	    || (s = newmpzobject()) == NULL
 	    || (t = newmpzobject()) == NULL) {
-		XDECREF(mpzop1);
-		XDECREF(mpzop2);
-		XDECREF(z);
-		XDECREF(g);
-		XDECREF(s);
+		Py_XDECREF(mpzop1);
+		Py_XDECREF(mpzop2);
+		Py_XDECREF(z);
+		Py_XDECREF(g);
+		Py_XDECREF(s);
 		/*XDECREF(t);*/
 		return NULL;
 	}
 
 	mpz_gcdext(&g->mpz, &s->mpz, &t->mpz, &mpzop1->mpz, &mpzop2->mpz);
 
-	DECREF(mpzop1);
-	DECREF(mpzop2);
+	Py_DECREF(mpzop1);
+	Py_DECREF(mpzop2);
 
-	(void)settupleitem(z, 0, (object *)g);
-	(void)settupleitem(z, 1, (object *)s);
-	(void)settupleitem(z, 2, (object *)t);
+	(void)PyTuple_SetItem(z, 0, (PyObject *)g);
+	(void)PyTuple_SetItem(z, 1, (PyObject *)s);
+	(void)PyTuple_SetItem(z, 2, (PyObject *)t);
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_gcdext() */
 
 
-static object *
+static PyObject *
 MPZ_sqrt(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *op;
+	PyObject *op;
 	mpzobject *mpzop = NULL;
 	mpzobject *z;
 
 	
-	if (!getargs(args, "O", &op))
+	if (!PyArg_Parse(args, "O", &op))
 		return NULL;
 
 	if ((mpzop = mpz_mpzcoerce(op)) == NULL
 	    || (z = newmpzobject()) == NULL) {
-		XDECREF(mpzop);
+		Py_XDECREF(mpzop);
 		return NULL;
 	}
 
 	mpz_sqrt(&z->mpz, &mpzop->mpz);
 
-	DECREF(mpzop);
+	Py_DECREF(mpzop);
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_sqrt() */
 
 
-static object *
+static PyObject *
 MPZ_sqrtrem(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *op, *z = NULL;
+	PyObject *op, *z = NULL;
 	mpzobject *mpzop = NULL;
 	mpzobject *root = NULL, *rem = NULL;
 
 	
-	if (!getargs(args, "O", &op))
+	if (!PyArg_Parse(args, "O", &op))
 		return NULL;
 
 	if ((mpzop = mpz_mpzcoerce(op)) == NULL
-	    || (z = newtupleobject(2)) == NULL
+	    || (z = PyTuple_New(2)) == NULL
 	    || (root = newmpzobject()) == NULL
 	    || (rem = newmpzobject()) == NULL) {
-		XDECREF(mpzop);
-		XDECREF(z);
-		XDECREF(root);
+		Py_XDECREF(mpzop);
+		Py_XDECREF(z);
+		Py_XDECREF(root);
 		/*XDECREF(rem);*/
 		return NULL;
 	}
 
 	mpz_sqrtrem(&root->mpz, &rem->mpz, &mpzop->mpz);
 
-	DECREF(mpzop);
+	Py_DECREF(mpzop);
 
-	(void)settupleitem(z, 0, (object *)root);
-	(void)settupleitem(z, 1, (object *)rem);
+	(void)PyTuple_SetItem(z, 0, (PyObject *)root);
+	(void)PyTuple_SetItem(z, 1, (PyObject *)rem);
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_sqrtrem() */
 
 
@@ -1287,53 +1296,54 @@
 } /* mpz_divm() */
 
 
-static object *
+static PyObject *
 MPZ_divm(self, args)
-	object *self;
-	object *args;
+	PyObject *self;
+	PyObject *args;
 {
-	object *num, *den, *mod;
+	PyObject *num, *den, *mod;
 	mpzobject *mpznum, *mpzden, *mpzmod = NULL;
 	mpzobject *z = NULL;
 
 	
-	if (!getargs(args, "(OOO)", &num, &den, &mod))
+	if (!PyArg_Parse(args, "(OOO)", &num, &den, &mod))
 		return NULL;
 
 	if ((mpznum = mpz_mpzcoerce(num)) == NULL
 	    || (mpzden = mpz_mpzcoerce(den)) == NULL
 	    || (mpzmod = mpz_mpzcoerce(mod)) == NULL
 	    || (z = newmpzobject()) == NULL ) {
-		XDECREF(mpznum);
-		XDECREF(mpzden);
-		XDECREF(mpzmod);
+		Py_XDECREF(mpznum);
+		Py_XDECREF(mpzden);
+		Py_XDECREF(mpzmod);
 		return NULL;
 	}
 	
 	mpz_divm(&z->mpz, &mpznum->mpz, &mpzden->mpz, &mpzmod->mpz);
 
-	DECREF(mpznum);
-	DECREF(mpzden);
-	DECREF(mpzmod);
+	Py_DECREF(mpznum);
+	Py_DECREF(mpzden);
+	Py_DECREF(mpzmod);
 
 	if (mpz_cmp_ui(&z->mpz, (unsigned long int)0) == 0) {
-		DECREF(z);
-		err_setstr(ValueError, "gcd(den, mod) != 1 or num == 0");
+		Py_DECREF(z);
+		PyErr_SetString(PyExc_ValueError,
+				"gcd(den, mod) != 1 or num == 0");
 		return NULL;
 	}
 
-	return (object *)z;
+	return (PyObject *)z;
 } /* MPZ_divm() */
 
 
 /* MPZ methods-as-attributes */
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-static object *
+static PyObject *
 mpz_int(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 #else /* def MPZ_CONVERSIONS_AS_METHODS */
-static object *
+static PyObject *
 mpz_int(self)
 	mpzobject *self;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS else */
@@ -1342,27 +1352,28 @@
 
 
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
 
 	if (mpz_size(&self->mpz) > 1
 	    || (sli = (long)mpz_get_ui(&self->mpz)) < (long)0 ) {
-		err_setstr(ValueError, "mpz.int() arg too long to convert");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.int() arg too long to convert");
 		return NULL;
 	}
 
 	if (mpz_cmp_ui(&self->mpz, (unsigned long)0) < 0)
 		sli = -sli;
 
-	return newintobject(sli);
+	return PyInt_FromLong(sli);
 } /* mpz_int() */
 	
-static object *
+static PyObject *
 #ifdef MPZ_CONVERSIONS_AS_METHODS
 mpz_long(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 #else /* def MPZ_CONVERSIONS_AS_METHODS */
 mpz_long(self)
 	mpzobject *self;
@@ -1370,19 +1381,19 @@
 {
 	int i, isnegative;
 	unsigned long int uli;
-	longobject *longobjp;
+	PyLongObject *longobjp;
 	int ldcount;
 	int bitpointer, newbitpointer;
 	MP_INT mpzscratch;
 
 
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
 
 	/* determine length of python-long to be allocated */
-	if ((longobjp = alloclongobject(i = (int)
+	if ((longobjp = _PyLong_New(i = (int)
 			    ((mpz_size(&self->mpz) * BITS_PER_MP_LIMB
 			      + SHIFT - 1) /
 			     SHIFT))) == NULL)
@@ -1433,7 +1444,7 @@
 	if (isnegative)
 		longobjp->ob_size = -longobjp->ob_size;
 
-	return (object *)longobjp;
+	return (PyObject *)longobjp;
 	
 } /* mpz_long() */
 
@@ -1442,12 +1453,12 @@
 static const double multiplier = 256.0 * 256.0 * 256.0 * 256.0;
 	
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-static object *
+static PyObject *
 mpz_float(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 #else /* def MPZ_CONVERSIONS_AS_METHODS */
-static object *
+static PyObject *
 mpz_float(self)
 	mpzobject *self;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS else */
@@ -1459,14 +1470,15 @@
 
 
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
 
 	i = (int)mpz_size(&self->mpz);
 	
 	/* determine sign, and copy abs(self) to scratch var */
-	if ((isnegative = (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0))) {
+	if ((isnegative = (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0)))
+	{
 		mpz_init(&mpzscratch);
 		mpz_neg(&mpzscratch, &self->mpz);
 	}
@@ -1490,23 +1502,23 @@
 	if (isnegative)
 		x = -x;
 
-	return newfloatobject(x);
+	return PyFloat_FromDouble(x);
 	
 } /* mpz_float() */
 
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-static object *
+static PyObject *
 mpz_hex(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 #else /* def MPZ_CONVERSIONS_AS_METHODS */
-static object *
+static PyObject *
 mpz_hex(self)
 	mpzobject *self;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS else */
 {
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
 	
@@ -1514,53 +1526,54 @@
 } /* mpz_hex() */
 	
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-static object *
+static PyObject *
 mpz_oct(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 #else /* def MPZ_CONVERSIONS_AS_METHODS */
-static object *
+static PyObject *
 mpz_oct(self)
 	mpzobject *self;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS else */
 {
 #ifdef MPZ_CONVERSIONS_AS_METHODS
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
 	
 	return mpz_format(self, 8, (unsigned char)1);
 } /* mpz_oct() */
 	
-static object *
+static PyObject *
 mpz_binary(self, args)
 	mpzobject *self;
-	object *args;
+	PyObject *args;
 {
 	int size;
-	stringobject *strobjp;
+	PyStringObject *strobjp;
 	char *cp;
 	MP_INT mp;
 	unsigned long ldigit;
 	
-	if (!getnoarg(args))
+	if (!PyArg_NoArgs(args))
 		return NULL;
 
 	if (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0) {
-		err_setstr(ValueError, "mpz.binary() arg must be >= 0");
+		PyErr_SetString(PyExc_ValueError,
+				"mpz.binary() arg must be >= 0");
 		return NULL;
 	}
 
 	mpz_init_set(&mp, &self->mpz);
 	size = (int)mpz_size(&mp);
 
-	if ((strobjp = (stringobject *)
-	     newsizedstringobject((char *)0,
-				  size * sizeof (unsigned long int))) == NULL)
+	if ((strobjp = (PyStringObject *)
+	     PyString_FromStringAndSize(
+		     (char *)0, size * sizeof (unsigned long int))) == NULL)
 		return NULL;
 
 	/* get the beginning of the string memory and start copying things */
-	cp = GETSTRINGVALUE(strobjp);
+	cp = PyString_AS_STRING(strobjp);
 
 	/* this has been programmed using a (fairly) decent lib-i/f it could
 	   be must faster if we looked into the GMP lib */
@@ -1576,11 +1589,11 @@
 	while (strobjp->ob_size && !*--cp)
 		strobjp->ob_size--;
 
-	return (object *)strobjp;
+	return (PyObject *)strobjp;
 } /* mpz_binary() */
 	
 
-static struct methodlist mpz_methods[] = {
+static PyMethodDef mpz_methods[] = {
 #ifdef MPZ_CONVERSIONS_AS_METHODS
 	{"int",			mpz_int},
 	{"long",		mpz_long},
@@ -1588,25 +1601,25 @@
 	{"hex",			mpz_hex},
 	{"oct",			mpz_oct},
 #endif /* def MPZ_CONVERSIONS_AS_METHODS */
-	{"binary",		(object *(*)(object *, object *))mpz_binary},
+	{"binary",		(PyCFunction)mpz_binary},
 	{NULL,			NULL}		/* sentinel */
 };
 
-static object *
+static PyObject *
 mpz_getattr(self, name)
 	mpzobject *self;
 	char *name;
 {
-	return findmethod(mpz_methods, (object *)self, name);
+	return Py_FindMethod(mpz_methods, (PyObject *)self, name);
 } /* mpz_getattr() */
 
 
 static int
 mpz_coerce(pv, pw)
-	object **pv;
-	object **pw;
+	PyObject **pv;
+	PyObject **pw;
 {
-	object *z;
+	PyObject *z;
 
 #ifdef MPZ_DEBUG
 	fputs("mpz_coerce() called...\n", stderr);
@@ -1615,18 +1628,18 @@
 	assert(is_mpzobject(*pv));
 
 	/* always convert other arg to mpz value, except for floats */
-	if (!is_floatobject(*pw)) {
-		if ((z = (object *)mpz_mpzcoerce(*pw)) == NULL)
+	if (!PyFloat_Check(*pw)) {
+		if ((z = (PyObject *)mpz_mpzcoerce(*pw)) == NULL)
 			return -1;	/* -1: an error always has been set */
 		
-		INCREF(*pv);
+		Py_INCREF(*pv);
 		*pw = z;
 	}
 	else {
 		if ((z = mpz_float(*pv, NULL)) == NULL)
 			return -1;
 
-		INCREF(*pw);
+		Py_INCREF(*pw);
 		*pv = z;
 	}
 	return 0;		/* coercion succeeded */
@@ -1634,9 +1647,9 @@
 } /* mpz_coerce() */
 
 
-static object *
+static PyObject *
 mpz_repr(v)
-	object *v;
+	PyObject *v;
 {
 	return mpz_format(v, 10, (unsigned char)1);
 } /* mpz_repr() */
@@ -1649,7 +1662,7 @@
 #define IF (inquiry)
 #define CF (coercion)
 
-static number_methods mpz_as_number = {
+static PyNumberMethods mpz_as_number = {
 	BF mpz_addition,	/*nb_add*/
 	BF mpz_substract,	/*nb_subtract*/
 	BF mpz_multiply,	/*nb_multiply*/
@@ -1677,8 +1690,8 @@
 #endif /* ndef MPZ_CONVERSIONS_AS_METHODS */
 };
 
-static typeobject MPZtype = {
-	OB_HEAD_INIT(&Typetype)
+static PyTypeObject MPZtype = {
+	PyObject_HEAD_INIT(&PyType_Type)
 	0,			/*ob_size*/
 	"mpz",			/*tp_name*/
 	sizeof(mpzobject),	/*tp_size*/
@@ -1695,7 +1708,7 @@
 
 /* List of functions exported by this module */
 
-static struct methodlist mpz_functions[] = {
+static PyMethodDef mpz_functions[] = {
 #if 0
 	{initialiser_name,	MPZ_mpz},
 #else /* 0 */
@@ -1723,7 +1736,7 @@
 	/* assumptions: *alloc returns address dividable by 4,
 	mpz_* routines allocate in chunks dividable by four */
 	fprintf(stderr, "MP_TEST_ERROR: location holds 0x%08d\n", *location );
-	fatal("MP_TEST_ERROR");
+	Py_FatalError("MP_TEST_ERROR");
 } /* static mp_test_error() */
 #define MP_EXTRA_ALLOC(size)	((size) + MP_TEST_SIZE)
 #define MP_SET_TEST(basep,size)	(void)memcpy( ((char *)(basep))+(size), mp_test_magic, MP_TEST_SIZE)
@@ -1748,7 +1761,7 @@
 #endif /* def MPZ_DEBUG */	
 
 	if ( (res = malloc(MP_EXTRA_ALLOC(alloc_size))) == NULL )
-		fatal("mp_allocate failure");
+		Py_FatalError("mp_allocate failure");
 
 #ifdef MPZ_DEBUG
 	fprintf(stderr, "mp_allocate  :     address 0x%08x\n", res);
@@ -1775,7 +1788,7 @@
 	MP_DO_TEST(ptr, old_size);
 	
 	if ( (res = realloc(ptr, MP_EXTRA_ALLOC(new_size))) == NULL )
-		fatal("mp_reallocate failure");
+		Py_FatalError("mp_reallocate failure");
 
 #ifdef MPZ_DEBUG
 	fprintf(stderr, "mp_reallocate: new address 0x%08x, new size %ld\n",
@@ -1814,19 +1827,19 @@
 #endif /* def MPZ_DEBUG */
 
 	mp_set_memory_functions( mp_allocate, mp_reallocate, mp_free );
-	(void)initmodule("mpz", mpz_functions);
+	(void)Py_InitModule("mpz", mpz_functions);
 
 	/* create some frequently used constants */
 	if ((mpz_value_zero = newmpzobject()) == NULL)
-		fatal("initmpz: can't initialize mpz constants");
+		Py_FatalError("initmpz: can't initialize mpz constants");
 	mpz_set_ui(&mpz_value_zero->mpz, (unsigned long int)0);
 
 	if ((mpz_value_one = newmpzobject()) == NULL)
-		fatal("initmpz: can't initialize mpz constants");
+		Py_FatalError("initmpz: can't initialize mpz constants");
 	mpz_set_ui(&mpz_value_one->mpz, (unsigned long int)1);
 
 	if ((mpz_value_mone = newmpzobject()) == NULL)
-		fatal("initmpz: can't initialize mpz constants");
+		Py_FatalError("initmpz: can't initialize mpz constants");
 	mpz_set_si(&mpz_value_mone->mpz, (long)-1);
 
 } /* initmpz() */