diff --git a/7.3.1003 b/7.3.1003
new file mode 100644
index 0000000..cd84406
--- /dev/null
+++ b/7.3.1003
@@ -0,0 +1,381 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.1003
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.1003
+Problem:    Python interface does not compile with Python 2.2
+Solution:   Fix thread issues and True/False. (ZyX)
+Files:	    src/if_py_both.h, src/if_python3.c, src/if_python.c,
+	    src/testdir/test86.in, src/testdir/test86.ok,
+	    src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.3.1002/src/if_py_both.h	2013-05-21 22:13:36.000000000 +0200
+--- src/if_py_both.h	2013-05-21 22:16:58.000000000 +0200
+***************
+*** 31,37 ****
+  #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
+  
+  typedef void (*rangeinitializer)(void *);
+! typedef void (*runner)(const char *, void *, PyGILState_STATE *);
+  
+  static int ConvertFromPyObject(PyObject *, typval_T *);
+  static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
+--- 31,41 ----
+  #define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
+  
+  typedef void (*rangeinitializer)(void *);
+! 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,3495 ****
+  }
+  
+      static void
+! run_cmd(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate UNUSED)
+  {
+      PyRun_SimpleString((char *) cmd);
+  }
+--- 3493,3503 ----
+  }
+  
+      static void
+! run_cmd(const char *cmd, void *arg UNUSED
+! #ifdef PY_CAN_RECURSE
+! 	, PyGILState_STATE *pygilstate UNUSED
+! #endif
+! 	)
+  {
+      PyRun_SimpleString((char *) cmd);
+  }
+***************
+*** 3498,3504 ****
+  static int		code_hdr_len = 30;
+  
+      static void
+! run_do(const char *cmd, void *arg UNUSED, PyGILState_STATE *pygilstate)
+  {
+      PyInt	lnum;
+      size_t	len;
+--- 3506,3516 ----
+  static int		code_hdr_len = 30;
+  
+      static void
+! run_do(const char *cmd, void *arg UNUSED
+! #ifdef PY_CAN_RECURSE
+! 	, PyGILState_STATE *pygilstate
+! #endif
+! 	)
+  {
+      PyInt	lnum;
+      size_t	len;
+***************
+*** 3528,3540 ****
+--- 3540,3556 ----
+      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,3570 ****
+--- 3570,3592 ----
+  
+  	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,3580 ****
+  }
+  
+      static void
+! run_eval(const char *cmd, typval_T *rettv, PyGILState_STATE *pygilstate UNUSED)
+  {
+      PyObject	*r;
+  
+--- 3596,3606 ----
+  }
+  
+      static void
+! run_eval(const char *cmd, typval_T *rettv
+! #ifdef PY_CAN_RECURSE
+! 	, PyGILState_STATE *pygilstate UNUSED
+! #endif
+! 	)
+  {
+      PyObject	*r;
+  
+*** ../vim-7.3.1002/src/if_python3.c	2013-05-21 20:51:55.000000000 +0200
+--- src/if_python3.c	2013-05-21 22:16:58.000000000 +0200
+***************
+*** 693,698 ****
+--- 693,700 ----
+  
+  static struct PyModuleDef vimmodule;
+  
++ #define PY_CAN_RECURSE
++ 
+  /*
+   * Include the code shared with if_python.c
+   */
+*** ../vim-7.3.1002/src/if_python.c	2013-05-21 20:51:55.000000000 +0200
+--- src/if_python.c	2013-05-21 22:16:58.000000000 +0200
+***************
+*** 641,647 ****
+  #define DICTKEY_UNREF
+  #define DICTKEY_DECL
+  
+! #define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self);
+  
+  #define WIN_PYTHON_REF(win) win->w_python_ref
+  #define BUF_PYTHON_REF(buf) buf->b_python_ref
+--- 641,647 ----
+  #define DICTKEY_UNREF
+  #define DICTKEY_DECL
+  
+! #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,661 ****
+--- 656,670 ----
+  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,887 ****
+      Python_RestoreThread();	    /* enter python */
+  #endif
+  
+!     run((char *) cmd, arg, &pygilstate);
+  
+  #ifdef PY_CAN_RECURSE
+      PyGILState_Release(pygilstate);
+--- 890,900 ----
+      Python_RestoreThread();	    /* enter python */
+  #endif
+  
+!     run((char *) cmd, arg
+! #ifdef PY_CAN_RECURSE
+! 	    , &pygilstate
+! #endif
+! 	    );
+  
+  #ifdef PY_CAN_RECURSE
+      PyGILState_Release(pygilstate);
+*** ../vim-7.3.1002/src/testdir/test86.in	2013-05-21 20:40:35.000000000 +0200
+--- src/testdir/test86.in	2013-05-21 22:16:58.000000000 +0200
+***************
+*** 518,523 ****
+--- 518,527 ----
+  :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,591 ****
+  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)
+  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))
+          # Other values depend on the size of the terminal, so they are checked partly:
+          for attr in ('height', 'row', 'width', 'col'):
+              try:
+--- 581,602 ----
+  cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+  cb.append('Current tab pages:')
+  def W(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 ' + Cursor(w))
+          # Other values depend on the size of the terminal, so they are checked partly:
+          for attr in ('height', 'row', 'width', 'col'):
+              try:
+*** ../vim-7.3.1002/src/testdir/test86.ok	2013-05-21 20:40:35.000000000 +0200
+--- src/testdir/test86.ok	2013-05-21 22:18:02.000000000 +0200
+***************
+*** 333,339 ****
+  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)
+    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+    Windows:
+      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+--- 333,339 ----
+  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 (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)
+*** ../vim-7.3.1002/src/testdir/test87.in	2013-05-21 20:40:35.000000000 +0200
+--- src/testdir/test87.in	2013-05-21 22:16:58.000000000 +0200
+***************
+*** 561,578 ****
+  :vnew b.2
+  :vnew c.2
+  py3 << EOF
+  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:')
+  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))
+          # Other values depend on the size of the terminal, so they are checked partly:
+          for attr in ('height', 'row', 'width', 'col'):
+              try:
+--- 561,586 ----
+  :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)
+! 
+! 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 ' + Cursor(w))
+          # Other values depend on the size of the terminal, so they are checked partly:
+          for attr in ('height', 'row', 'width', 'col'):
+              try:
+*** ../vim-7.3.1002/src/testdir/test87.ok	2013-05-21 20:40:35.000000000 +0200
+--- src/testdir/test87.ok	2013-05-21 22:18:31.000000000 +0200
+***************
+*** 322,328 ****
+  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)
+    <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+    Windows:
+      <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+--- 322,328 ----
+  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 (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)
+*** ../vim-7.3.1002/src/version.c	2013-05-21 22:13:36.000000000 +0200
+--- src/version.c	2013-05-21 22:19:01.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     1003,
+  /**/
+
+-- 
+./configure
+Checking whether build environment is sane ...
+build environment is grinning and holding a spatula.  Guess not.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///