Add keyword arg support to itertools.compress().
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index c34b915..94159b5 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -310,6 +310,7 @@
                 self.assertEqual(comb, sorted(set(cwr) & set(perm)))            # comb: both a cwr and a perm
 
     def test_compress(self):
+        self.assertEqual(list(compress(data='ABCDEF', selectors=[1,0,1,0,1,1])), list('ACEF'))
         self.assertEqual(list(compress('ABCDEF', [1,0,1,0,1,1])), list('ACEF'))
         self.assertEqual(list(compress('ABCDEF', [0,0,0,0,0,0])), list(''))
         self.assertEqual(list(compress('ABCDEF', [1,1,1,1,1,1])), list('ABCDEF'))
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 3eb760b..e2ca9c7 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -2607,11 +2607,9 @@
 	PyObject *seq1, *seq2;
 	PyObject *data=NULL, *selectors=NULL;
 	compressobject *lz;
-
-	if (type == &compress_type && !_PyArg_NoKeywords("compress()", kwds))
-		return NULL;
-
-	if (!PyArg_UnpackTuple(args, "compress", 2, 2, &seq1, &seq2))
+	static char *kwargs[] = {"data", "selectors", NULL};
+ 
+ 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO:compress", kwargs, &seq1, &seq2))
 		return NULL;
 
 	data = PyObject_GetIter(seq1);
@@ -2689,7 +2687,7 @@
 }
 
 PyDoc_STRVAR(compress_doc,
-"compress(data sequence, selector sequence) --> iterator over selected data\n\
+"compress(data, selectors) --> iterator over selected data\n\
 \n\
 Return data elements corresponding to true selector elements.\n\
 Forms a shorter iterator from selected data elements using the\n\