diff --git a/Objects/listobject.c b/Objects/listobject.c
index 4caa6df..1731814 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -557,7 +557,7 @@
 {
 	int i;
 	PyObject *v;
-	if (!PyArg_Parse(args, "(iO)", &i, &v))
+	if (!PyArg_ParseTuple(args, "iO", &i, &v))
 		return NULL;
 	return ins(self, i, v);
 }
@@ -568,7 +568,7 @@
 	PyObject *args;
 {
 	PyObject *v;
-	if (!PyArg_Parse(args, "O", &v))
+	if (!PyArg_ParseTuple(args, "O", &v))
 		return NULL;
 	return ins(self, (int) self->ob_size, v);
 }
@@ -1216,12 +1216,17 @@
 staticforward PyTypeObject immutable_list_type;
 
 static PyObject *
-listsort(self, compare)
+listsort(self, args)
 	PyListObject *self;
-	PyObject *compare;
+	PyObject *args;
 {
 	int err;
+	PyObject *compare = NULL;
 
+	if (args != NULL) {
+		if (!PyArg_ParseTuple(args, "|O", &compare))
+			return NULL;
+	}
 	self->ob_type = &immutable_list_type;
 	err = samplesortslice(self->ob_item,
 			      self->ob_item + self->ob_size,
@@ -1256,10 +1261,8 @@
 	register PyObject **p, **q;
 	register PyObject *tmp;
 	
-	if (args != NULL) {
-		PyErr_BadArgument();
+	if (!PyArg_ParseTuple(args, ""))
 		return NULL;
-	}
 
 	if (self->ob_size > 1) {
 		for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
@@ -1321,13 +1324,12 @@
 	PyObject *args;
 {
 	int i;
-	
-	if (args == NULL) {
-		PyErr_BadArgument();
+	PyObject *v;
+
+	if (!PyArg_ParseTuple(args, "O", &v))
 		return NULL;
-	}
 	for (i = 0; i < self->ob_size; i++) {
-		if (PyObject_Compare(self->ob_item[i], args) == 0)
+		if (PyObject_Compare(self->ob_item[i], v) == 0)
 			return PyInt_FromLong((long)i);
 		if (PyErr_Occurred())
 			return NULL;
@@ -1343,14 +1345,12 @@
 {
 	int count = 0;
 	int i;
-	
-	if (args == NULL) {
-		PyErr_SetString(PyExc_TypeError,
-				"list.count(x): argument missing");
+	PyObject *v;
+
+	if (!PyArg_ParseTuple(args, "O", &v))
 		return NULL;
-	}
 	for (i = 0; i < self->ob_size; i++) {
-		if (PyObject_Compare(self->ob_item[i], args) == 0)
+		if (PyObject_Compare(self->ob_item[i], v) == 0)
 			count++;
 		if (PyErr_Occurred())
 			return NULL;
@@ -1364,13 +1364,12 @@
 	PyObject *args;
 {
 	int i;
-	
-	if (args == NULL) {
-		PyErr_BadArgument();
+	PyObject *v;
+
+	if (!PyArg_ParseTuple(args, "O", &v))
 		return NULL;
-	}
 	for (i = 0; i < self->ob_size; i++) {
-		if (PyObject_Compare(self->ob_item[i], args) == 0) {
+		if (PyObject_Compare(self->ob_item[i], v) == 0) {
 			if (list_ass_slice(self, i, i+1,
 					   (PyObject *)NULL) != 0)
 				return NULL;
@@ -1404,15 +1403,15 @@
 "L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1";
 
 static PyMethodDef list_methods[] = {
-	{"append",	(PyCFunction)listappend, 0, append_doc},
-	{"insert",	(PyCFunction)listinsert, 0, insert_doc},
+	{"append",	(PyCFunction)listappend, 1, append_doc},
+	{"insert",	(PyCFunction)listinsert, 1, insert_doc},
 	{"extend",      (PyCFunction)listextend, 1, extend_doc},
 	{"pop",		(PyCFunction)listpop, 1, pop_doc},
-	{"remove",	(PyCFunction)listremove, 0, remove_doc},
-	{"index",	(PyCFunction)listindex, 0, index_doc},
-	{"count",	(PyCFunction)listcount, 0, count_doc},
-	{"reverse",	(PyCFunction)listreverse, 0, reverse_doc},
-	{"sort",	(PyCFunction)listsort, 0, sort_doc},
+	{"remove",	(PyCFunction)listremove, 1, remove_doc},
+	{"index",	(PyCFunction)listindex, 1, index_doc},
+	{"count",	(PyCFunction)listcount, 1, count_doc},
+	{"reverse",	(PyCFunction)listreverse, 1, reverse_doc},
+	{"sort",	(PyCFunction)listsort, 1, sort_doc},
 	{NULL,		NULL}		/* sentinel */
 };
 
