* Increase test coverage.
* Have groupby() be careful about decreffing structure members.
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index bf2c493..3da0258 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -75,7 +75,7 @@
 static PyObject *
 groupby_next(groupbyobject *gbo)
 {
-	PyObject *newvalue, *newkey, *r, *grouper;
+	PyObject *newvalue, *newkey, *r, *grouper, *tmp;
 
 	/* skip to next iteration group */
 	for (;;) {
@@ -110,15 +110,19 @@
 			}
 		}
 
-		Py_XDECREF(gbo->currkey);
+		tmp = gbo->currkey;
 		gbo->currkey = newkey;
-		Py_XDECREF(gbo->currvalue);
+		Py_XDECREF(tmp);
+
+		tmp = gbo->currvalue;
 		gbo->currvalue = newvalue;
+		Py_XDECREF(tmp);
 	}
 
-	Py_XDECREF(gbo->tgtkey);
-	gbo->tgtkey = gbo->currkey;
 	Py_INCREF(gbo->currkey);
+	tmp = gbo->tgtkey;
+	gbo->tgtkey = gbo->currkey;
+	Py_XDECREF(tmp);
 
 	grouper = _grouper_create(gbo, gbo->tgtkey);
 	if (grouper == NULL)