diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 1d13123..28719a9 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -217,23 +217,21 @@
 reversed_next(reversedobject *ro)
 {
 	PyObject *item;
+	long index = ro->index;
 
-	if (ro->index < 0)
-		return NULL;
-
-	assert(PySequence_Check(ro->seq));
-	item = PySequence_GetItem(ro->seq, ro->index);
-	if (item == NULL)
-		return NULL;
-
-	ro->index--;
-	return item;
-}
-
-static int
-reversed_len(reversedobject *ro)
-{
-	return PyObject_Size(ro->seq);
+	if (index >= 0) {
+		item = PySequence_GetItem(ro->seq, index);
+		if (item != NULL) {
+			ro->index--;
+			return item;
+		}
+	}
+	ro->index = -1;
+	if (ro->seq != NULL) {
+		Py_DECREF(ro->seq);
+		ro->seq = NULL;
+	}
+	return NULL;
 }
 
 PyDoc_STRVAR(reversed_doc,
@@ -241,6 +239,12 @@
 "\n"
 "Return a reverse iterator");
 
+static int
+reversed_len(reversedobject *ro)
+{
+	return ro->index + 1;
+}
+
 static PySequenceMethods reversed_as_sequence = {
 	(inquiry)reversed_len,		/* sq_length */
 	0,				/* sq_concat */
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 47f4a37..500f823 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2793,21 +2793,35 @@
 static PyObject *
 listreviter_next(listreviterobject *it)
 {
-	PyObject *item = NULL;
+	PyObject *item;
+	long index = it->it_index;
+	PyListObject *seq = it->it_seq;
 
-	assert(PyList_Check(it->it_seq));
-	if (it->it_index >= 0) {
-		assert(it->it_index < PyList_GET_SIZE(it->it_seq));
-		item = PyList_GET_ITEM(it->it_seq, it->it_index);
+	if (index>=0 && index < PyList_GET_SIZE(seq)) {
+		item = PyList_GET_ITEM(seq, index);
 		it->it_index--;
 		Py_INCREF(item);
-	} else if (it->it_seq != NULL) {
-		Py_DECREF(it->it_seq);
-		it->it_seq = NULL;
+		return item;
 	}
-	return item;
+	it->it_index = -1;
+	if (seq != NULL) {
+		it->it_seq = NULL;
+		Py_DECREF(seq);
+	}
+	return NULL;
 }
 
+static int
+listreviter_len(listreviterobject *it)
+{
+	return it->it_index + 1;
+}
+
+static PySequenceMethods listreviter_as_sequence = {
+	(inquiry)listreviter_len,	/* sq_length */
+	0,				/* sq_concat */
+};
+
 PyTypeObject PyListRevIter_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,					/* ob_size */
@@ -2822,7 +2836,7 @@
 	0,					/* tp_compare */
 	0,					/* tp_repr */
 	0,					/* tp_as_number */
-	0,					/* tp_as_sequence */
+	&listreviter_as_sequence,		/* tp_as_sequence */
 	0,					/* tp_as_mapping */
 	0,					/* tp_hash */
 	0,					/* tp_call */
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 1f56728..a6d1611 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -288,6 +288,18 @@
 	return NULL;
 }
 
+static int
+rangeiter_len(rangeiterobject *r)
+{
+	return r->len - r->index;
+}
+
+static PySequenceMethods rangeiter_as_sequence = {
+	(inquiry)rangeiter_len,		/* sq_length */
+	0,				/* sq_concat */
+};
+
+
 static PyTypeObject Pyrangeiter_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,                                      /* ob_size */
@@ -302,7 +314,7 @@
 	0,                                      /* tp_compare */
 	0,                                      /* tp_repr */
 	0,                                      /* tp_as_number */
-	0,                                      /* tp_as_sequence */
+	&rangeiter_as_sequence,			/* tp_as_sequence */
 	0,                                      /* tp_as_mapping */
 	0,                                      /* tp_hash */
 	0,                                      /* tp_call */
