diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index 6a0a113..169f49c 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -29,8 +29,7 @@
 static PyObject *Dlerror;
 
 static PyObject *
-newdlobject(handle)
-	PyUnivPtr *handle;
+newdlobject(PyUnivPtr *handle)
 {
 	dlobject *xp;
 	xp = PyObject_New(dlobject, &Dltype);
@@ -41,8 +40,7 @@
 }
 
 static void
-dl_dealloc(xp)
-	dlobject *xp;
+dl_dealloc(dlobject *xp)
 {
 	if (xp->dl_handle != NULL)
 		dlclose(xp->dl_handle);
@@ -50,9 +48,7 @@
 }
 
 static PyObject *
-dl_close(xp, args)
-	dlobject *xp;
-	PyObject *args;
+dl_close(dlobject *xp, PyObject *args)
 {
 	if (!PyArg_Parse(args, ""))
 		return NULL;
@@ -65,9 +61,7 @@
 }
 
 static PyObject *
-dl_sym(xp, args)
-	dlobject *xp;
-	PyObject *args;
+dl_sym(dlobject *xp, PyObject *args)
 {
 	char *name;
 	PyUnivPtr *func;
@@ -82,9 +76,7 @@
 }
 
 static PyObject *
-dl_call(xp, args)
-	dlobject *xp;
-	PyObject *args; /* (varargs) */
+dl_call(dlobject *xp, PyObject *args)
 {
 	PyObject *name;
 	long (*func)();
@@ -141,9 +133,7 @@
 };
 
 static PyObject *
-dl_getattr(xp, name)
-	dlobject *xp;
-	char *name;
+dl_getattr(dlobject *xp, char *name)
 {
 	return Py_FindMethod(dlobject_methods, (PyObject *)xp, name);
 }
@@ -169,9 +159,7 @@
 };
 
 static PyObject *
-dl_open(self, args)
-	PyObject *self;
-	PyObject *args;
+dl_open(PyObject *self, PyObject *args)
 {
 	char *name;
 	int mode;
diff --git a/Modules/newmodule.c b/Modules/newmodule.c
index 0a0760a..e8c758c 100644
--- a/Modules/newmodule.c
+++ b/Modules/newmodule.c
@@ -17,9 +17,7 @@
 "Create an instance object from (CLASS, DICT) without calling its __init__().";
 
 static PyObject *
-new_instance(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_instance(PyObject* unused, PyObject* args)
 {
 	PyObject* klass;
 	PyObject *dict;
@@ -43,9 +41,7 @@
 "Create a instance method object from (FUNCTION, INSTANCE, CLASS).";
 
 static PyObject *
-new_instancemethod(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_instancemethod(PyObject* unused, PyObject* args)
 {
 	PyObject* func;
 	PyObject* self;
@@ -75,9 +71,7 @@
 "Create a function object from (CODE, GLOBALS, [NAME, ARGDEFS]).";
 
 static PyObject *
-new_function(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_function(PyObject* unused, PyObject* args)
 {
 	PyObject* code;
 	PyObject* globals;
@@ -114,9 +108,7 @@
 "Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING, CONSTANTS, NAMES, VARNAMES, FILENAME, NAME, FIRSTLINENO, LNOTAB).";
 
 static PyObject *
-new_code(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_code(PyObject* unused, PyObject* args)
 {
 	int argcount;
 	int nlocals;
@@ -162,9 +154,7 @@
 "Create a module object from (NAME).";
 
 static PyObject *
-new_module(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_module(PyObject* unused, PyObject* args)
 {
 	char *name;
   
@@ -177,9 +167,7 @@
 "Create a class object from (NAME, BASE_CLASSES, DICT).";
 
 static PyObject *
-new_class(unused, args)
-	PyObject* unused;
-	PyObject* args;
+new_class(PyObject* unused, PyObject* args)
 {
 	PyObject * name;
 	PyObject * classes;
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index c9d96f7..0477919 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -37,8 +37,7 @@
 #define XxoObject_Check(v)	((v)->ob_type == &Xxo_Type)
 
 static XxoObject *
-newXxoObject(arg)
-	PyObject *arg;
+newXxoObject(PyObject *arg)
 {
 	XxoObject *self;
 	self = PyObject_New(XxoObject, &Xxo_Type);
@@ -51,17 +50,14 @@
 /* Xxo methods */
 
 static void
-Xxo_dealloc(self)
-	XxoObject *self;
+Xxo_dealloc(XxoObject *self)
 {
 	Py_XDECREF(self->x_attr);
 	PyObject_Del(self);
 }
 
 static PyObject *
-Xxo_demo(self, args)
-	XxoObject *self;
-	PyObject *args;
+Xxo_demo(XxoObject *self, PyObject *args)
 {
 	if (!PyArg_ParseTuple(args, ":demo"))
 		return NULL;
@@ -75,9 +71,7 @@
 };
 
 static PyObject *
-Xxo_getattr(self, name)
-	XxoObject *self;
-	char *name;
+Xxo_getattr(XxoObject *self, char *name)
 {
 	if (self->x_attr != NULL) {
 		PyObject *v = PyDict_GetItemString(self->x_attr, name);
@@ -90,10 +84,7 @@
 }
 
 static int
-Xxo_setattr(self, name, v)
-	XxoObject *self;
-	char *name;
-	PyObject *v;
+Xxo_setattr(XxoObject *self, char *name, PyObject *v)
 {
 	if (self->x_attr == NULL) {
 		self->x_attr = PyDict_New();
@@ -136,9 +127,7 @@
 /* Function of two integers returning integer */
 
 static PyObject *
-xx_foo(self, args)
-	PyObject *self; /* Not used */
-	PyObject *args;
+xx_foo(PyObject *self, PyObject *args)
 {
 	long i, j;
 	long res;
@@ -152,9 +141,7 @@
 /* Function of no arguments returning new Xxo object */
 
 static PyObject *
-xx_new(self, args)
-	PyObject *self; /* Not used */
-	PyObject *args;
+xx_new(PyObject *self, PyObject *args)
 {
 	XxoObject *rv;
 	
@@ -169,9 +156,7 @@
 /* Example with subtle bug from extensions manual ("Thin Ice"). */
 
 static PyObject *
-xx_bug(self, args)
-    PyObject *self;
-    PyObject *args;
+xx_bug(PyObject *self, PyObject *args)
 {
 	PyObject *list, *item;
 	
@@ -192,9 +177,7 @@
 /* Test bad format character */
 
 static PyObject *
-xx_roj(self, args)
-	PyObject *self; /* Not used */
-	PyObject *args;
+xx_roj(PyObject *self, PyObject *args)
 {
 	PyObject *a;
 	long b;
