diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 021670a..b059080 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -383,6 +383,24 @@
     return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
 }
 
+/* iterator slots */
+
+static PyObject *
+proxy_iter(PyWeakReference *proxy)
+{
+    if (!proxy_checkref(proxy))
+        return NULL;
+    return PyObject_GetIter(PyWeakref_GET_OBJECT(proxy));
+}
+
+static PyObject *
+proxy_iternext(PyWeakReference *proxy)
+{
+    if (!proxy_checkref(proxy))
+        return NULL;
+    return PyIter_Next(PyWeakref_GET_OBJECT(proxy));
+}
+
 
 static PyNumberMethods proxy_as_number = {
     (binaryfunc)proxy_add,      /*nb_add*/
@@ -447,26 +465,30 @@
     sizeof(PyWeakReference),
     0,
     /* methods */
-    (destructor)weakref_dealloc,/*tp_dealloc*/
-    (printfunc)proxy_print,     /*tp_print*/
-    0,				/*tp_getattr*/
-    0, 				/*tp_setattr*/
-    proxy_compare,		/*tp_compare*/
-    (unaryfunc)proxy_repr,	/*tp_repr*/
-    &proxy_as_number,		/*tp_as_number*/
-    &proxy_as_sequence,		/*tp_as_sequence*/
-    &proxy_as_mapping,		/*tp_as_mapping*/
-    0,	                        /*tp_hash*/
-    (ternaryfunc)0,	        /*tp_call*/
-    (unaryfunc)proxy_str,	/*tp_str*/
-    (getattrofunc)proxy_getattr,/*tp_getattro*/
-    (setattrofunc)proxy_setattr,/*tp_setattro*/
-    0,				/*tp_as_buffer*/
+    (destructor)weakref_dealloc,        /* tp_dealloc */
+    (printfunc)proxy_print,             /* tp_print */
+    0,				        /* tp_getattr */
+    0, 				        /* tp_setattr */
+    proxy_compare,		        /* tp_compare */
+    (unaryfunc)proxy_repr,	        /* tp_repr */
+    &proxy_as_number,		        /* tp_as_number */
+    &proxy_as_sequence,		        /* tp_as_sequence */
+    &proxy_as_mapping,		        /* tp_as_mapping */
+    0,	                                /* tp_hash */
+    (ternaryfunc)0,	                /* tp_call */
+    (unaryfunc)proxy_str,	        /* tp_str */
+    (getattrofunc)proxy_getattr,        /* tp_getattro */
+    (setattrofunc)proxy_setattr,        /* tp_setattro */
+    0,				        /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
-    |Py_TPFLAGS_CHECKTYPES,     /*tp_flags*/
-    0,                          /*tp_doc*/
-    (traverseproc)gc_traverse,  /*tp_traverse*/
-    (inquiry)gc_clear,          /*tp_clear*/
+    | Py_TPFLAGS_CHECKTYPES,            /* tp_flags */
+    0,                                  /* tp_doc */
+    (traverseproc)gc_traverse,          /* tp_traverse */
+    (inquiry)gc_clear,                  /* tp_clear */
+    0,                                  /* tp_richcompare */
+    0,                                  /* tp_weaklistoffset */
+    (getiterfunc)proxy_iter,            /* tp_iter */
+    (iternextfunc)proxy_iternext,       /* tp_iternext */
 };
 
 
@@ -478,26 +500,30 @@
     sizeof(PyWeakReference),
     0,
     /* methods */
-    (destructor)weakref_dealloc,/*tp_dealloc*/
-    (printfunc)proxy_print,     /*tp_print*/
-    0,				/*tp_getattr*/
-    0, 				/*tp_setattr*/
-    proxy_compare,		/*tp_compare*/
-    (unaryfunc)proxy_repr,	/*tp_repr*/
-    &proxy_as_number,		/*tp_as_number*/
-    &proxy_as_sequence,		/*tp_as_sequence*/
-    &proxy_as_mapping,		/*tp_as_mapping*/
-    0,	                        /*tp_hash*/
-    (ternaryfunc)proxy_call,	/*tp_call*/
-    (unaryfunc)proxy_str,	/*tp_str*/
-    (getattrofunc)proxy_getattr,/*tp_getattro*/
-    (setattrofunc)proxy_setattr,/*tp_setattro*/
-    0,				/*tp_as_buffer*/
+    (destructor)weakref_dealloc,        /* tp_dealloc */
+    (printfunc)proxy_print,             /* tp_print */
+    0,				        /* tp_getattr */
+    0, 				        /* tp_setattr */
+    proxy_compare,		        /* tp_compare */
+    (unaryfunc)proxy_repr,	        /* tp_repr */
+    &proxy_as_number,		        /* tp_as_number */
+    &proxy_as_sequence,		        /* tp_as_sequence */
+    &proxy_as_mapping,		        /* tp_as_mapping */
+    0,	                                /* tp_hash */
+    (ternaryfunc)proxy_call,	        /* tp_call */
+    (unaryfunc)proxy_str,	        /* tp_str */
+    (getattrofunc)proxy_getattr,        /* tp_getattro */
+    (setattrofunc)proxy_setattr,        /* tp_setattro */
+    0,				        /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
-    |Py_TPFLAGS_CHECKTYPES,     /*tp_flags*/
-    0,                          /*tp_doc*/
-    (traverseproc)gc_traverse,  /*tp_traverse*/
-    (inquiry)gc_clear,          /*tp_clear*/
+    | Py_TPFLAGS_CHECKTYPES,            /* tp_flags */
+    0,                                  /* tp_doc */
+    (traverseproc)gc_traverse,          /* tp_traverse */
+    (inquiry)gc_clear,                  /* tp_clear */
+    0,                                  /* tp_richcompare */
+    0,                                  /* tp_weaklistoffset */
+    (getiterfunc)proxy_iter,            /* tp_iter */
+    (iternextfunc)proxy_iternext,       /* tp_iternext */
 };
 
 
