Let reversed() work with itself.
diff --git a/Include/listobject.h b/Include/listobject.h
index 14ed72e..6221b80 100644
--- a/Include/listobject.h
+++ b/Include/listobject.h
@@ -22,6 +22,7 @@
 typedef struct {
     PyObject_VAR_HEAD
     PyObject **ob_item;
+    int allocated;
 } PyListObject;
 
 PyAPI_DATA(PyTypeObject) PyList_Type;
diff --git a/Lib/test/test_enumerate.py b/Lib/test/test_enumerate.py
index 636f883..ab1a60d 100644
--- a/Lib/test/test_enumerate.py
+++ b/Lib/test/test_enumerate.py
@@ -141,6 +141,10 @@
         x = xrange(1)
         self.assertEqual(type(reversed(x)), type(iter(x)))
 
+    def test_double_reverse(self):
+        s = 'hello'
+        self.assertEqual(list(reversed(reversed(s))), list(s))
+
 def test_main(verbose=None):
     testclasses = (EnumerateTestCase, SubclassTestCase, TestEmpty, TestBig,
                    TestReversed)
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 7ed58da..3aac680 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -230,11 +230,22 @@
 	return item;
 }
 
+static PyObject *
+reversed_reverse(reversedobject *ro, PyObject *unused)
+{
+	return PyObject_GetIter(ro->seq);
+}
+
 PyDoc_STRVAR(reversed_doc,
 "reverse(sequence) -> reverse iterator over values of the sequence\n"
 "\n"
 "Return a reverse iterator");
 
+static PyMethodDef reversed_methods[] = {
+	{"__reversed__",	(PyCFunction)reversed_reverse,	
+		METH_NOARGS,	 reversed_doc},
+};
+
 PyTypeObject PyReversed_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,                              /* ob_size */
@@ -266,7 +277,7 @@
 	0,                              /* tp_weaklistoffset */
 	PyObject_SelfIter,		/* tp_iter */
 	(iternextfunc)reversed_next,    /* tp_iternext */
-	0,                              /* tp_methods */
+	reversed_methods,               /* tp_methods */
 	0,                              /* tp_members */
 	0,                              /* tp_getset */
 	0,                              /* tp_base */