diff --git a/src/if_py_both.h b/src/if_py_both.h
index 384aea9..b658ce3 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -31,7 +31,11 @@
 #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
 
 typedef void (*rangeinitializer)(void *);
-typedef void (*runner)(const char *, void *, PyGILState_STATE *);
+typedef void (*runner)(const char *, void *
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *
+#endif
+	);
 
 static int ConvertFromPyObject(PyObject *, typval_T *);
 static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
@@ -3489,7 +3493,11 @@
 }
 
     static void
-run_cmd(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate UNUSED)
+run_cmd(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate UNUSED
+#endif
+	)
 {
     PyRun_SimpleString((char *) cmd);
 }
@@ -3498,7 +3506,11 @@
 static int		code_hdr_len = 30;
 
     static void
-run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate)
+run_do(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate
+#endif
+	)
 {
     PyInt	lnum;
     size_t	len;
@@ -3528,13 +3540,17 @@
     status = 0;
     pymain = PyImport_AddModule("__main__");
     pyfunc = PyObject_GetAttrString(pymain, DOPY_FUNC);
+#ifdef PY_CAN_RECURSE
     PyGILState_Release(*pygilstate);
+#endif
 
     for (lnum = RangeStart; lnum <= RangeEnd; ++lnum)
     {
 	PyObject	*line, *linenr, *ret;
 
+#ifdef PY_CAN_RECURSE
 	*pygilstate = PyGILState_Ensure();
+#endif
 	if (!(line = GetBufferLine(curbuf, lnum)))
 	    goto err;
 	if (!(linenr = PyInt_FromLong((long) lnum)))
@@ -3554,17 +3570,23 @@
 
 	Py_XDECREF(ret);
 	PythonIO_Flush();
+#ifdef PY_CAN_RECURSE
 	PyGILState_Release(*pygilstate);
+#endif
     }
     goto out;
 err:
+#ifdef PY_CAN_RECURSE
     *pygilstate = PyGILState_Ensure();
+#endif
     PyErr_PrintEx(0);
     PythonIO_Flush();
     status = 1;
 out:
+#ifdef PY_CAN_RECURSE
     if (!status)
 	*pygilstate = PyGILState_Ensure();
+#endif
     Py_DECREF(pyfunc);
     PyObject_SetAttrString(pymain, DOPY_FUNC, NULL);
     if (status)
@@ -3574,7 +3596,11 @@
 }
 
     static void
-run_eval(const char *cmd, typval_T *rettv, PyGILState_STATE *pygilstate UNUSED)
+run_eval(const char *cmd, typval_T *rettv
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate UNUSED
+#endif
+	)
 {
     PyObject	*r;
 
diff --git a/src/if_python.c b/src/if_python.c
index 633481a..8cc50c3 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -641,7 +641,7 @@
 #define DICTKEY_UNREF
 #define DICTKEY_DECL
 
-#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self);
+#define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self);
 
 #define WIN_PYTHON_REF(win) win->w_python_ref
 #define BUF_PYTHON_REF(buf) buf->b_python_ref
@@ -656,6 +656,15 @@
 static PyObject *ListGetattr(PyObject *, char *);
 static PyObject *FunctionGetattr(PyObject *, char *);
 
+#ifndef Py_VISIT
+# define Py_VISIT(obj) visit(obj, arg)
+#endif
+#ifndef Py_CLEAR
+# define Py_CLEAR(obj) \
+    Py_XDECREF(obj); \
+    obj = NULL;
+#endif
+
 /*
  * Include the code shared with if_python3.c
  */
@@ -881,7 +890,11 @@
     Python_RestoreThread();	    /* enter python */
 #endif
 
-    run((char *) cmd, arg, &pygilstate);
+    run((char *) cmd, arg
+#ifdef PY_CAN_RECURSE
+	    , &pygilstate
+#endif
+	    );
 
 #ifdef PY_CAN_RECURSE
     PyGILState_Release(pygilstate);
diff --git a/src/if_python3.c b/src/if_python3.c
index b6507bb..2ae876e 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -693,6 +693,8 @@
 
 static struct PyModuleDef vimmodule;
 
+#define PY_CAN_RECURSE
+
 /*
  * Include the code shared with if_python.c
  */
diff --git a/src/testdir/test86.in b/src/testdir/test86.in
index fac315e..d138a8d 100644
--- a/src/testdir/test86.in
+++ b/src/testdir/test86.in
@@ -518,6 +518,10 @@
 :edit c
 :buffer #
 py << EOF
+try:
+    from __builtin__ import next
+except ImportError:
+    next = lambda o: o.next()
 # Check GCing iterator that was not fully exhausted
 i = iter(vim.buffers)
 cb.append('i:' + str(next(i)))
@@ -577,15 +581,22 @@
 cb.append('Number of tabs: ' + str(len(vim.tabpages)))
 cb.append('Current tab pages:')
 def W(w):
-    if '(unknown)' in repr(w):
+    if repr(w).find('(unknown)') != -1:
         return '<window object (unknown)>'
     else:
         return repr(w)
+
+def Cursor(w, start=len(cb)):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
 for t in vim.tabpages:
     cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
     cb.append('  Windows:')
     for w in t.windows:
-        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + repr(w.cursor))
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
         # Other values depend on the size of the terminal, so they are checked partly:
         for attr in ('height', 'row', 'width', 'col'):
             try:
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index 5602b2f..d64fa7c 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -333,7 +333,7 @@
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (990, 0)
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (27, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
diff --git a/src/testdir/test87.in b/src/testdir/test87.in
index 69af02e..95ae027 100644
--- a/src/testdir/test87.in
+++ b/src/testdir/test87.in
@@ -561,18 +561,26 @@
 :vnew b.2
 :vnew c.2
 py3 << EOF
+cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+cb.append('Current tab pages:')
+
 def W(w):
     if '(unknown)' in repr(w):
         return '<window object (unknown)>'
     else:
         return repr(w)
-cb.append('Number of tabs: ' + str(len(vim.tabpages)))
-cb.append('Current tab pages:')
+
+def Cursor(w, start=len(cb)):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
 for t in vim.tabpages:
     cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
     cb.append('  Windows:')
     for w in t.windows:
-        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + repr(w.cursor))
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
         # Other values depend on the size of the terminal, so they are checked partly:
         for attr in ('height', 'row', 'width', 'col'):
             try:
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index 64ef57d..77548d5 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -322,7 +322,7 @@
 Current tab pages:
   <tabpage 0>(1): 1 windows, current is <window object (unknown)>
   Windows:
-    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (966, 0)
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (27, 0)
   <tabpage 1>(2): 1 windows, current is <window object (unknown)>
   Windows:
     <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
diff --git a/src/version.c b/src/version.c
index c913385..b3c3bff 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1003,
+/**/
     1002,
 /**/
     1001,
