diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 12e862d..994b452 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -1740,7 +1740,6 @@
 typedef struct {
 	PyObject_HEAD
 	PyObject *pools;		/* tuple of pool tuples */
-	Py_ssize_t *maxvec;             /* size of each pool */
 	Py_ssize_t *indices;            /* one index per pool */
 	PyObject *result;               /* most recently returned result tuple */
 	int stopped;                    /* set to 1 when the product iterator is exhausted */
@@ -1754,7 +1753,6 @@
 	productobject *lz;
 	Py_ssize_t nargs, npools, repeat=1;
 	PyObject *pools = NULL;
-	Py_ssize_t *maxvec = NULL;
 	Py_ssize_t *indices = NULL;
 	Py_ssize_t i;
 
@@ -1779,9 +1777,8 @@
 	nargs = (repeat == 0) ? 0 : PyTuple_GET_SIZE(args);
 	npools = nargs * repeat;
 
-	maxvec = PyMem_Malloc(npools * sizeof(Py_ssize_t));
 	indices = PyMem_Malloc(npools * sizeof(Py_ssize_t));
-	if (maxvec == NULL || indices == NULL) {
+	if (indices == NULL) {
     		PyErr_NoMemory();
 		goto error;
 	}
@@ -1795,16 +1792,13 @@
 		PyObject *pool = PySequence_Tuple(item);
 		if (pool == NULL)
 			goto error;
-
 		PyTuple_SET_ITEM(pools, i, pool);
-		maxvec[i] = PyTuple_GET_SIZE(pool);
 		indices[i] = 0;
 	}
 	for ( ; i < npools; ++i) {
 		PyObject *pool = PyTuple_GET_ITEM(pools, i - nargs);
 		Py_INCREF(pool);
 		PyTuple_SET_ITEM(pools, i, pool);
-		maxvec[i] = maxvec[i - nargs];
 		indices[i] = 0;
 	}
 
@@ -1814,7 +1808,6 @@
 		goto error;
 
 	lz->pools = pools;
-	lz->maxvec = maxvec;
 	lz->indices = indices;
 	lz->result = NULL;
 	lz->stopped = 0;
@@ -1822,8 +1815,6 @@
 	return (PyObject *)lz;
 
 error:
-	if (maxvec != NULL)
-		PyMem_Free(maxvec);
 	if (indices != NULL)
 		PyMem_Free(indices);
 	Py_XDECREF(pools);
@@ -1836,7 +1827,6 @@
 	PyObject_GC_UnTrack(lz);
 	Py_XDECREF(lz->pools);
 	Py_XDECREF(lz->result);
-	PyMem_Free(lz->maxvec);
 	PyMem_Free(lz->indices);
 	Py_TYPE(lz)->tp_free(lz);
 }
@@ -1883,7 +1873,6 @@
 		}
 	} else {
 		Py_ssize_t *indices = lz->indices;
-		Py_ssize_t *maxvec = lz->maxvec;
 
 		/* Copy the previous result tuple or re-use it if available */
 		if (Py_REFCNT(result) > 1) {
@@ -1900,14 +1889,14 @@
 			Py_DECREF(old_result);
 		}
 		/* Now, we've got the only copy so we can update it in-place */
-		assert (Py_REFCNT(result) == 1);
+		assert (npools==0 || Py_REFCNT(result) == 1);
 
                 /* Update the pool indices right-to-left.  Only advance to the
                    next pool when the previous one rolls-over */
 		for (i=npools-1 ; i >= 0 ; i--) {
 			pool = PyTuple_GET_ITEM(pools, i);
 			indices[i]++;
-			if (indices[i] == maxvec[i]) {
+			if (indices[i] == PyTuple_GET_SIZE(pool)) {
 				/* Roll-over and advance to next pool */
 				indices[i] = 0;
 				elem = PyTuple_GET_ITEM(pool, 0);
