updated for version 7.3.786
Problem:    Python threads don't run in the background (issue 103).
Solution:   Move the statements to manipulate thread state.
diff --git a/src/if_python.c b/src/if_python.c
index 5e792b1..1bf737f 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -740,12 +740,11 @@
 #else
 	PyMac_Initialize();
 #endif
-	/* Initialise threads, and save the state using PyGILState_Ensure.
-	 * Without the call to PyGILState_Ensure, thread specific state (such
-	 * as the system trace hook), will be lost between invocations of
-	 * Python code. */
+	/* Initialise threads, and below save the state using
+	 * PyGILState_Ensure.  Without the call to PyGILState_Ensure, thread
+	 * specific state (such as the system trace hook), will be lost
+	 * between invocations of Python code. */
 	PyEval_InitThreads();
-	pygilstate = PyGILState_Ensure();
 #ifdef DYNAMIC_PYTHON
 	get_exceptions();
 #endif
@@ -756,6 +755,10 @@
 	if (PythonMod_Init())
 	    goto fail;
 
+	/* The first python thread is vim's, release the lock. */
+	Python_SaveThread();
+	pygilstate = PyGILState_Ensure();
+
 	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
 
 	/* Remove the element from sys.path that was added because of our
@@ -764,8 +767,7 @@
 	 * the current directory in sys.path. */
 	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
 
-	/* the first python thread is vim's, release the lock */
-	Python_SaveThread();
+	PyGILState_Release(pygilstate);
 
 	initialised = 1;
     }
diff --git a/src/version.c b/src/version.c
index 0f77ad2..8115020 100644
--- a/src/version.c
+++ b/src/version.c
@@ -726,6 +726,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    786,
+/**/
     785,
 /**/
     784,