diff --git a/Doc/api/utilities.tex b/Doc/api/utilities.tex
index 9cc7a19..0d71cd9 100644
--- a/Doc/api/utilities.tex
+++ b/Doc/api/utilities.tex
@@ -145,7 +145,7 @@
 
 \begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
   Return the module object corresponding to a module name.  The
-  \var{name} argument may be of the form \code{package.module}).
+  \var{name} argument may be of the form \code{package.module}.
   First check the modules dictionary if there's one there, and if not,
   create a new one and insert it in the modules dictionary.
   Return \NULL{} with an exception set on failure.
@@ -675,6 +675,12 @@
   failure, it returns false and raises the appropriate exception.
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{int}{PyArg_VaParse}{PyObject *args, char *format,
+                                         va_list vargs}
+  Identical to \cfunction{PyArg_ParseTuple()}, except that it accepts a
+  va_list rather than a variable number of arguments.
+\end{cfuncdesc}
+
 \begin{cfuncdesc}{int}{PyArg_ParseTupleAndKeywords}{PyObject *args,
                        PyObject *kw, char *format, char *keywords[],
                        \moreargs}
@@ -683,6 +689,13 @@
   on failure, it returns false and raises the appropriate exception.
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{int}{PyArg_VaParseTupleAndKeywords}{PyObject *args,
+                       PyObject *kw, char *format, char *keywords[],
+                       va_list vargs}
+  Identical to \cfunction{PyArg_ParseTupleAndKeywords()}, except that it
+  accepts a va_list rather than a variable number of arguments.
+\end{cfuncdesc}
+
 \begin{cfuncdesc}{int}{PyArg_Parse}{PyObject *args, char *format,
                                     \moreargs}
   Function used to deconstruct the argument lists of ``old-style''
diff --git a/Include/modsupport.h b/Include/modsupport.h
index 7e69921..2d67f3e 100644
--- a/Include/modsupport.h
+++ b/Include/modsupport.h
@@ -17,6 +17,8 @@
 PyAPI_FUNC(PyObject *) Py_BuildValue(char *, ...);
 
 PyAPI_FUNC(int) PyArg_VaParse(PyObject *, char *, va_list);
+PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
+                                                  char *, char **, va_list);
 PyAPI_FUNC(PyObject *) Py_VaBuildValue(char *, va_list);
 
 PyAPI_FUNC(int) PyModule_AddObject(PyObject *, char *, PyObject *);
diff --git a/Misc/NEWS b/Misc/NEWS
index af94bdd..4005297 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Patch #550732: Add PyArg_VaParseTupleAndKeywords().  Analogous to
+PyArg_VaParse().  Both are now documented.  Thanks Greg Chapman.
+
 - Allow string and unicode return types from .encode()/.decode()
   methods on string and unicode objects. Added unicode.decode()
   which was missing for no apparent reason.
diff --git a/Python/getargs.c b/Python/getargs.c
index 72194a8..cd7633c 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -12,6 +12,9 @@
 
 int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
 				char *, char **, ...);
+int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
+				char *, char **, va_list);
+
 
 /* Forward */
 static int vgetargs1(PyObject *, char *, va_list *, int);
@@ -1153,6 +1156,39 @@
 }
 
 
+int
+PyArg_VaParseTupleAndKeywords(PyObject *args,
+			    PyObject *keywords,
+			    char *format, 
+			    char **kwlist, va_list va)
+{
+	int retval;
+	va_list lva;
+
+	if ((args == NULL || !PyTuple_Check(args)) ||
+	    (keywords != NULL && !PyDict_Check(keywords)) ||
+	    format == NULL ||
+	    kwlist == NULL)
+	{
+		PyErr_BadInternalCall();
+		return 0;
+	}
+
+#ifdef VA_LIST_IS_ARRAY
+	memcpy(lva, va, sizeof(va_list));
+#else
+#ifdef __va_copy
+	__va_copy(lva, va);
+#else
+	lva = va;
+#endif
+#endif
+
+	retval = vgetargskeywords(args, keywords, format, kwlist, &lva);	
+	return retval;
+}
+
+
 static int
 vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
 	         char **kwlist, va_list *p_va)
