diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index a011d30..43bafcd 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -801,14 +801,14 @@
         
 	if (!is_arrayobject(bb)) {
 		PyErr_Format(PyExc_TypeError,
-			     "can only append array (not \"%.200s\") to array",
+			     "can only extend array with array (not \"%.200s\")",
 			     bb->ob_type->tp_name);
 		return NULL;
 	}
 #define b ((arrayobject *)bb)
 	if (self->ob_descr != b->ob_descr) {
 		PyErr_SetString(PyExc_TypeError,
-			     "can only append arrays of same kind");
+			     "can only extend with array of same kind");
 		return NULL;
 	}
 	size = self->ob_size + b->ob_size;
@@ -835,7 +835,7 @@
 {
 	int i;
 	PyObject *v;
-	if (!PyArg_Parse(args, "(iO)", &i, &v))
+        if (!PyArg_ParseTuple(args, "iO:insert", &i, &v))
 		return NULL;
 	return ins(self, i, v);
 }
@@ -869,7 +869,7 @@
 array_append(arrayobject *self, PyObject *args)
 {
 	PyObject *v;
-	if (!PyArg_Parse(args, "O", &v))
+        if (!PyArg_ParseTuple(args, "O:append", &v))
 		return NULL;
 	return ins(self, (int) self->ob_size, v);
 }
@@ -979,7 +979,7 @@
 	PyObject *f;
 	int n;
 	FILE *fp;
-	if (!PyArg_Parse(args, "(Oi)", &f, &n))
+        if (!PyArg_ParseTuple(args, "Oi:fromfile", &f, &n))
 		return NULL;
 	fp = PyFile_AsFile(f);
 	if (fp == NULL) {
@@ -1032,7 +1032,7 @@
 {
 	PyObject *f;
 	FILE *fp;
-	if (!PyArg_Parse(args, "O", &f))
+        if (!PyArg_ParseTuple(args, "O:tofile", &f))
 		return NULL;
 	fp = PyFile_AsFile(f);
 	if (fp == NULL) {
@@ -1064,7 +1064,7 @@
 	int n;
 	PyObject *list;
 	int itemsize = self->ob_descr->itemsize;
-	if (!PyArg_Parse(args, "O", &list))
+        if (!PyArg_ParseTuple(args, "O:fromlist", &list))
 		return NULL;
 	if (!PyList_Check(list)) {
 		PyErr_SetString(PyExc_TypeError, "arg must be list");
@@ -1108,6 +1108,8 @@
 {
 	PyObject *list = PyList_New(self->ob_size);
 	int i;
+        if (!PyArg_ParseTuple(args, ":tolist"))
+                return NULL;
 	if (list == NULL)
 		return NULL;
 	for (i = 0; i < self->ob_size; i++) {
@@ -1133,7 +1135,7 @@
 	char *str;
 	int n;
 	int itemsize = self->ob_descr->itemsize;
-	if (!PyArg_Parse(args, "s#", &str, &n))
+        if (!PyArg_ParseTuple(args, "s#:fromstring", &str, &n))
 		return NULL;
 	if (n % itemsize != 0) {
 		PyErr_SetString(PyExc_ValueError,
@@ -1167,7 +1169,7 @@
 static PyObject *
 array_tostring(arrayobject *self, PyObject *args)
 {
-	if (!PyArg_Parse(args, ""))
+	if (!PyArg_ParseTuple(args, ":tostring"))
 		return NULL;
 	return PyString_FromStringAndSize(self->ob_item,
 				    self->ob_size * self->ob_descr->itemsize);
@@ -1180,26 +1182,25 @@
 representation.";
 
 PyMethodDef array_methods[] = {
-	{"append",	(PyCFunction)array_append, 0, append_doc},
-	{"buffer_info", (PyCFunction)array_buffer_info, 0, buffer_info_doc},
-	{"byteswap",	(PyCFunction)array_byteswap, METH_VARARGS,
-         byteswap_doc},
-	{"count",	(PyCFunction)array_count, 1, count_doc},
-	{"extend",      (PyCFunction)array_extend, 1, extend_doc},
-	{"fromfile",	(PyCFunction)array_fromfile, 0, fromfile_doc},
-	{"fromlist",	(PyCFunction)array_fromlist, 0, fromlist_doc},
-	{"fromstring",	(PyCFunction)array_fromstring, 0, fromstring_doc},
-	{"index",	(PyCFunction)array_index, 1, index_doc},
-	{"insert",	(PyCFunction)array_insert, 0, insert_doc},
-	{"pop",		(PyCFunction)array_pop, 1, pop_doc},
-	{"read",	(PyCFunction)array_fromfile, 0, fromfile_doc},
-	{"remove",	(PyCFunction)array_remove, 1, remove_doc},
-	{"reverse",	(PyCFunction)array_reverse, 0, reverse_doc},
-/*	{"sort",	(PyCFunction)array_sort, 0, sort_doc},*/
-	{"tofile",	(PyCFunction)array_tofile, 0, tofile_doc},
-	{"tolist",	(PyCFunction)array_tolist, 0, tolist_doc},
-	{"tostring",	(PyCFunction)array_tostring, 0, tostring_doc},
-	{"write",	(PyCFunction)array_tofile, 0, tofile_doc},
+	{"append",	(PyCFunction)array_append, METH_VARARGS, append_doc},
+	{"buffer_info", (PyCFunction)array_buffer_info, METH_VARARGS, buffer_info_doc},
+	{"byteswap",	(PyCFunction)array_byteswap, METH_VARARGS, byteswap_doc},
+	{"count",	(PyCFunction)array_count, METH_VARARGS, count_doc},
+	{"extend",      (PyCFunction)array_extend, METH_VARARGS, extend_doc},
+	{"fromfile",	(PyCFunction)array_fromfile, METH_VARARGS, fromfile_doc},
+	{"fromlist",	(PyCFunction)array_fromlist, METH_VARARGS, fromlist_doc},
+	{"fromstring",	(PyCFunction)array_fromstring, METH_VARARGS, fromstring_doc},
+	{"index",	(PyCFunction)array_index, METH_VARARGS, index_doc},
+	{"insert",	(PyCFunction)array_insert, METH_VARARGS, insert_doc},
+	{"pop",		(PyCFunction)array_pop, METH_VARARGS, pop_doc},
+	{"read",	(PyCFunction)array_fromfile, METH_VARARGS, fromfile_doc},
+	{"remove",	(PyCFunction)array_remove, METH_VARARGS, remove_doc},
+	{"reverse",	(PyCFunction)array_reverse, METH_VARARGS, reverse_doc},
+/*	{"sort",	(PyCFunction)array_sort, METH_VARARGS, sort_doc},*/
+	{"tofile",	(PyCFunction)array_tofile, METH_VARARGS, tofile_doc},
+	{"tolist",	(PyCFunction)array_tolist, METH_VARARGS, tolist_doc},
+	{"tostring",	(PyCFunction)array_tostring, METH_VARARGS, tostring_doc},
+	{"write",	(PyCFunction)array_tofile, METH_VARARGS, tofile_doc},
 	{NULL,		NULL}		/* sentinel */
 };
 
@@ -1235,6 +1236,7 @@
 {
 	int ok = 0;
 	int i, len;
+	PyObject *t_empty = PyTuple_New(0);
 	PyObject *v;
 	len = a->ob_size;
 	if (len == 0) {
@@ -1243,7 +1245,8 @@
 	}
 	if (a->ob_descr->typecode == 'c') {
 		fprintf(fp, "array('c', ");
-		v = array_tostring(a, (PyObject *)NULL);
+		v = array_tostring(a, t_empty);
+		Py_DECREF(t_empty);;
 		ok = PyObject_Print(v, fp, 0);
 		Py_XDECREF(v);
 		fprintf(fp, ")");
@@ -1355,9 +1358,9 @@
 	char c;
 	PyObject *initial = NULL;
 	struct arraydescr *descr;
-	if (!PyArg_Parse(args, "c", &c)) {
+        if (!PyArg_ParseTuple(args, "c:array", &c)) {
 		PyErr_Clear();
-		if (!PyArg_Parse(args, "(cO)", &c, &initial))
+                if (!PyArg_ParseTuple(args, "cO:array", &c, &initial))
 			return NULL;
 		if (!PyList_Check(initial) && !PyString_Check(initial)) {
 			PyErr_SetString(PyExc_TypeError,
@@ -1388,8 +1391,10 @@
 				}
 			}
 			if (initial != NULL && PyString_Check(initial)) {
+				PyObject *t_initial = Py_BuildValue("(O)", initial);
 				PyObject *v =
-				  array_fromstring((arrayobject *)a, initial);
+					array_fromstring((arrayobject *)a, t_initial);
+                                Py_DECREF(t_initial);
 				if (v == NULL) {
 					Py_DECREF(a);
 					return NULL;
@@ -1412,7 +1417,7 @@
 or a string.";
 
 static PyMethodDef a_methods[] = {
-	{"array",	a_array, 0, a_array_doc},
+	{"array",	a_array, METH_VARARGS, a_array_doc},
 	{NULL,		NULL}		/* sentinel */
 };
 
