diff --git a/Modules/bsddbmodule.c b/Modules/bsddbmodule.c
index d767626..78f8576 100644
--- a/Modules/bsddbmodule.c
+++ b/Modules/bsddbmodule.c
@@ -470,18 +470,16 @@
 	recno_t recno;
 
 	if (dp->di_type == DB_RECNO) {
-		if (!PyArg_Parse(args, "i", &recno)) {
-			PyErr_SetString(PyExc_TypeError,
-					"key type must be integer");
+		if (!PyArg_ParseTuple(args, "i;key type must be integer",
+				      &recno)) {
 			return NULL;
 		}
 		krec.data = &recno;
 		krec.size = sizeof(recno);
 	}
 	else {
-		if (!PyArg_Parse(args, "s#", &data, &size)) {
-			PyErr_SetString(PyExc_TypeError,
-					"key type must be string");
+		if (!PyArg_ParseTuple(args, "s#;key type must be string",
+				      &data, &size)) {
 			return NULL;
 		}
 		krec.data = data;
@@ -511,18 +509,16 @@
 	recno_t recno;
 
 	if (dp->di_type == DB_RECNO) {
-		if (!PyArg_Parse(key, "i", &recno)) {
-			PyErr_SetString(PyExc_TypeError,
-					"key type must be integer");
+		if (!PyArg_ParseTuple(key, "i;key type must be integer",
+				      &recno)) {
 			return NULL;
 		}
 		krec.data = &recno;
 		krec.size = sizeof(recno);
 	}
 	else {
-		if (!PyArg_Parse(key, "s#", &data, &size)) {
-			PyErr_SetString(PyExc_TypeError,
-					"key type must be string");
+		if (!PyArg_ParseTuple(key, "s#;key type must be string",
+				      &data, &size)) {
 			return NULL;
 		}
 		krec.data = data;
@@ -644,8 +640,8 @@
 static PyMethodDef bsddb_methods[] = {
 	{"close",		(PyCFunction)bsddb_close, METH_NOARGS},
 	{"keys",		(PyCFunction)bsddb_keys, METH_NOARGS},
-	{"has_key",		(PyCFunction)bsddb_has_key, METH_OLDARGS},
-	{"set_location",	(PyCFunction)bsddb_set_location, METH_OLDARGS},
+	{"has_key",		(PyCFunction)bsddb_has_key, METH_VARARGS},
+	{"set_location",	(PyCFunction)bsddb_set_location, METH_VARARGS},
 	{"next",		(PyCFunction)bsddb_next, METH_NOARGS},
 	{"previous",	(PyCFunction)bsddb_previous, METH_NOARGS},
 	{"first",		(PyCFunction)bsddb_first, METH_NOARGS},
diff --git a/Modules/dlmodule.c b/Modules/dlmodule.c
index d2364d4..4606ea8 100644
--- a/Modules/dlmodule.c
+++ b/Modules/dlmodule.c
@@ -39,10 +39,8 @@
 }
 
 static PyObject *
-dl_close(dlobject *xp, PyObject *args)
+dl_close(dlobject *xp)
 {
-	if (!PyArg_Parse(args, ""))
-		return NULL;
 	if (xp->dl_handle != NULL) {
 		dlclose(xp->dl_handle);
 		xp->dl_handle = NULL;
@@ -56,8 +54,13 @@
 {
 	char *name;
 	PyUnivPtr *func;
-	if (!PyArg_Parse(args, "s", &name))
+	if (PyString_Check(args)) {
+		name = PyString_AS_STRING(args);
+	} else {
+		PyErr_Format(PyExc_TypeError, "expected string, found %.200s",
+			     args->ob_type->tp_name);
 		return NULL;
+	}
 	func = dlsym(xp->dl_handle, name);
 	if (func == NULL) {
 		Py_INCREF(Py_None);
@@ -121,8 +124,8 @@
 
 static PyMethodDef dlobject_methods[] = {
 	{"call",	(PyCFunction)dl_call, METH_VARARGS},
-	{"sym", 	(PyCFunction)dl_sym, METH_OLDARGS},
-	{"close",	(PyCFunction)dl_close, METH_OLDARGS},
+	{"sym", 	(PyCFunction)dl_sym, METH_O},
+	{"close",	(PyCFunction)dl_close, METH_NOARGS},
 	{NULL,  	NULL}			 /* Sentinel */
 };
 
@@ -165,11 +168,11 @@
 		return NULL;
 	}
 
-	if (PyArg_Parse(args, "z", &name))
+	if (PyArg_ParseTuple(args, "z:open", &name))
 		mode = RTLD_LAZY;
 	else {
 		PyErr_Clear();
-		if (!PyArg_Parse(args, "(zi)", &name, &mode))
+		if (!PyArg_ParseTuple(args, "zi:open", &name, &mode))
 			return NULL;
 #ifndef RTLD_NOW
 		if (mode != RTLD_LAZY) {
@@ -187,7 +190,7 @@
 }
 
 static PyMethodDef dl_methods[] = {
-	{"open",	dl_open, METH_OLDARGS},
+	{"open",	dl_open, METH_VARARGS},
 	{NULL,		NULL}		/* sentinel */
 };
 
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index 1cab62d..f9fa25b 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -75,7 +75,7 @@
 	int newval;
 	PyObject *rv;
     
-	if (!PyArg_Parse(args, "i", &newval))
+	if (!PyArg_ParseTuple(args, "i:ttob", &newval))
 		return NULL;
 	rv = PyInt_FromLong(top_to_bottom);
 	top_to_bottom = newval;
@@ -95,7 +95,7 @@
 	IMAGE *image;
 	int yfirst, ylast, ystep;
 
-	if ( !PyArg_Parse(args, "s", &fname) )
+	if ( !PyArg_ParseTuple(args, "s:read", &fname) )
 		return NULL;
     
 	if ( (image = imgfile_open(fname)) == NULL )
@@ -250,10 +250,9 @@
 	int x, y;
 	int xwtd, ywtd, xorig, yorig;
 	float xfac, yfac;
-	int cnt;
 	IMAGE *image;
 	char *filter;
-	double blur;
+	double blur = 1.0;
 	int extended;
 	int fmode = 0;
 	int yfirst, ylast, ystep;
@@ -263,20 +262,9 @@
 	** (filter name and blur factor). Also, 4 or 5 arguments indicates
 	** extended scale algorithm in stead of simple-minded pixel drop/dup.
 	*/
-	extended = 0;
-	cnt = PyTuple_Size(args);
-	if ( cnt == 5 ) {
-		extended = 1;
-		if ( !PyArg_Parse(args, "(siisd)",
-				  &fname, &xwtd, &ywtd, &filter, &blur) )
-			return NULL;
-	} else if ( cnt == 4 ) {
-		extended = 1;
-		if ( !PyArg_Parse(args, "(siis)",
-				  &fname, &xwtd, &ywtd, &filter) )
-			return NULL;
-		blur = 1.0;
-	} else if ( !PyArg_Parse(args, "(sii)", &fname, &xwtd, &ywtd) )
+	extended = PyTuple_Size(args) >= 4;
+	if ( !PyArg_ParseTuple(args, "sii|sd",
+			       &fname, &xwtd, &ywtd, &filter, &blur) )
 		return NULL;
 
 	/*
@@ -391,7 +379,7 @@
 	PyObject *rv;
 	IMAGE *image;
     
-	if ( !PyArg_Parse(args, "s", &fname) )
+	if ( !PyArg_ParseTuple(args, "s:getsizes", &fname) )
 		return NULL;
     
 	if ( (image = imgfile_open(fname)) == NULL )
@@ -416,7 +404,7 @@
 	int yfirst, ylast, ystep;
 
 
-	if ( !PyArg_Parse(args, "(ss#iii)",
+	if ( !PyArg_ParseTuple(args, "ss#iii:write",
 			  &fname, &cdatap, &len, &xsize, &ysize, &zsize) )
 		return NULL;
     
@@ -490,11 +478,11 @@
 
 
 static PyMethodDef imgfile_methods[] = {
-	{ "getsizes",	imgfile_getsizes, METH_OLDARGS },
-	{ "read",	imgfile_read, METH_OLDARGS },
+	{ "getsizes",	imgfile_getsizes, METH_VARARGS },
+	{ "read",	imgfile_read, METH_VARARGS },
 	{ "readscaled",	imgfile_readscaled, METH_VARARGS},
-	{ "write",	imgfile_write, METH_OLDARGS },
-	{ "ttob",	imgfile_ttob, METH_OLDARGS },
+	{ "write",	imgfile_write, METH_VARARGS },
+	{ "ttob",	imgfile_ttob, METH_VARARGS },
 	{ NULL,		NULL } /* Sentinel */
 };
 
