diff --git a/src/if_py_both.h b/src/if_py_both.h
index 9539943..f78391c 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -31,6 +31,9 @@
 
 static int ConvertFromPyObject(PyObject *, typval_T *);
 static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
+static PyObject *WindowNew(win_T *, tabpage_T *);
+static PyObject *BufferNew (buf_T *);
+static PyObject *LineToString(const char *);
 
 static PyInt RangeStart;
 static PyInt RangeEnd;
@@ -1670,9 +1673,9 @@
 	/* For current tab window.c does not bother to set or update tp_curwin
 	 */
 	if (this->tab == curtab)
-	    return WindowNew(curwin);
+	    return WindowNew(curwin, curtab);
 	else
-	    return WindowNew(this->tab->tp_curwin);
+	    return WindowNew(this->tab->tp_curwin, this->tab);
     }
     return NULL;
 }
@@ -1754,6 +1757,7 @@
 {
     PyObject_HEAD
     win_T	*win;
+    TabPageObject	*tabObject;
 } WindowObject;
 
 static PyTypeObject WindowType;
@@ -1771,7 +1775,7 @@
 }
 
     static PyObject *
-WindowNew(win_T *win)
+WindowNew(win_T *win, tabpage_T *tab)
 {
     /* We need to handle deletion of windows underneath us.
      * If we add a "w_python*_ref" field to the win_T structure,
@@ -1804,6 +1808,8 @@
 	WIN_PYTHON_REF(win) = self;
     }
 
+    self->tabObject = ((TabPageObject *)(TabPageNew(tab)));
+
     return (PyObject *)(self);
 }
 
@@ -1815,9 +1821,29 @@
     if (this->win && this->win != INVALID_WINDOW_VALUE)
 	WIN_PYTHON_REF(this->win) = NULL;
 
+    Py_DECREF(((PyObject *)(this->tabObject)));
+
     DESTRUCTOR_FINISH(self);
 }
 
+    static win_T *
+get_firstwin(TabPageObject *tabObject)
+{
+    if (tabObject)
+    {
+	if (CheckTabPage(tabObject))
+	    return NULL;
+	/* For current tab window.c does not bother to set or update tp_firstwin
+	 */
+	else if (tabObject->tab == curtab)
+	    return firstwin;
+	else
+	    return tabObject->tab->tp_firstwin;
+    }
+    else
+	return firstwin;
+}
+
     static PyObject *
 WindowAttr(WindowObject *this, char *name)
 {
@@ -1847,10 +1873,20 @@
 	return OptionsNew(SREQ_WIN, this->win, (checkfun) CheckWindow,
 			(PyObject *) this);
     else if (strcmp(name, "number") == 0)
-	return PyLong_FromLong((long) get_win_number(this->win, firstwin));
+    {
+	if (CheckTabPage(this->tabObject))
+	    return NULL;
+	return PyLong_FromLong((long)
+		get_win_number(this->win, get_firstwin(this->tabObject)));
+    }
+    else if (strcmp(name, "tabpage") == 0)
+    {
+	Py_INCREF(this->tabObject);
+	return (PyObject *)(this->tabObject);
+    }
     else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ssssssss]", "buffer", "cursor", "height", "vars",
-		"options", "number", "row", "col");
+	return Py_BuildValue("[sssssssss]", "buffer", "cursor", "height",
+		"vars", "options", "number", "row", "col", "tabpage");
     else
 	return NULL;
 }
@@ -2016,31 +2052,13 @@
     DESTRUCTOR_FINISH(self);
 }
 
-    static win_T *
-get_firstwin(WinListObject *this)
-{
-    if (this->tabObject)
-    {
-	if (CheckTabPage(this->tabObject))
-	    return NULL;
-	/* For current tab window.c does not bother to set or update tp_firstwin
-	 */
-	else if (this->tabObject->tab == curtab)
-	    return firstwin;
-	else
-	    return this->tabObject->tab->tp_firstwin;
-    }
-    else
-	return firstwin;
-}
-
     static PyInt
 WinListLength(PyObject *self)
 {
     win_T	*w;
     PyInt	n = 0;
 
-    if (!(w = get_firstwin((WinListObject *)(self))))
+    if (!(w = get_firstwin(((WinListObject *)(self))->tabObject)))
 	return -1;
 
     while (w != NULL)
@@ -2055,14 +2073,15 @@
     static PyObject *
 WinListItem(PyObject *self, PyInt n)
 {
+    WinListObject	*this = ((WinListObject *)(self));
     win_T *w;
 
-    if (!(w = get_firstwin((WinListObject *)(self))))
+    if (!(w = get_firstwin(this->tabObject)))
 	return NULL;
 
     for (; w != NULL; w = W_NEXT(w), --n)
 	if (n == 0)
-	    return WindowNew(w);
+	    return WindowNew(w, this->tabObject? this->tabObject->tab: curtab);
 
     PyErr_SetString(PyExc_IndexError, _("no such window"));
     return NULL;
@@ -3227,7 +3246,7 @@
     if (strcmp(name, "buffer") == 0)
 	return (PyObject *)BufferNew(curbuf);
     else if (strcmp(name, "window") == 0)
-	return (PyObject *)WindowNew(curwin);
+	return (PyObject *)WindowNew(curwin, curtab);
     else if (strcmp(name, "tabpage") == 0)
 	return (PyObject *)TabPageNew(curtab);
     else if (strcmp(name, "line") == 0)
diff --git a/src/if_python.c b/src/if_python.c
index 134e7f9..baa8cab 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -610,11 +610,6 @@
 }
 #endif /* DYNAMIC_PYTHON */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *DictionaryNew(dict_T *);
-static PyObject *LineToString(const char *);
-
 static int initialised = 0;
 #define PYINITIALISED initialised
 
diff --git a/src/if_python3.c b/src/if_python3.c
index 18987b7..7ceb13d 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -611,9 +611,6 @@
 }
 #endif /* DYNAMIC_PYTHON3 */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *LineToString(const char *);
 static PyObject *BufferDir(PyObject *, PyObject *);
 
 static int py3initialised = 0;
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index 2f0d496..8defc5a 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -333,14 +333,14 @@
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer test86.in>; cursor is at (954, 0)
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (954, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer 0>; cursor is at (1, 0)
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
   <tabpage 2>(3): 2 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer a.1>; cursor is at (1, 0)
-    <window object (unknown)>(0): displays buffer <buffer 1>; cursor is at (1, 0)
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
   <tabpage 3>(4): 4 windows, current is <window 0>
   Windows:
     <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index 6997b7a..ccf4a6c 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -322,14 +322,14 @@
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer test87.in>; cursor is at (930, 0)
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (930, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer 0>; cursor is at (1, 0)
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
   <tabpage 2>(3): 2 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(0): displays buffer <buffer a.1>; cursor is at (1, 0)
-    <window object (unknown)>(0): displays buffer <buffer 1>; cursor is at (1, 0)
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
   <tabpage 3>(4): 4 windows, current is <window 0>
   Windows:
     <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
diff --git a/src/version.c b/src/version.c
index b20a4f5..4fc77b2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    964,
+/**/
     963,
 /**/
     962,
