diff --git a/src/if_py_both.h b/src/if_py_both.h
index d6a5b11..a13a5e3 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -652,7 +652,7 @@
     }
     else if (!did_throw)
 	return (PyErr_Occurred() ? -1 : 0);
-    // Python exception is preferred over vim one; unlikely to occur though
+    // Python exception is preferred over Vim one; unlikely to occur though
     else if (PyErr_Occurred())
     {
 	discard_current_exception();
@@ -1406,7 +1406,7 @@
     // name,	    function,			calling,			documentation
     {"command",	    VimCommand,			METH_O,				"Execute a Vim ex-mode command" },
     {"eval",	    VimEval,			METH_VARARGS,			"Evaluate an expression using Vim evaluator" },
-    {"bindeval",    VimEvalPy,			METH_O,				"Like eval(), but returns objects attached to vim ones"},
+    {"bindeval",    VimEvalPy,			METH_O,				"Like eval(), but returns objects attached to Vim ones"},
     {"strwidth",    VimStrwidth,		METH_O,				"Screen string width, counts <Tab> as having width 1"},
     {"chdir",	    (PyCFunction)VimChdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
     {"fchdir",	    (PyCFunction)VimFchdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
@@ -2393,7 +2393,7 @@
     if (li == NULL)
     {
 	// No more suitable format specifications in python-2.3
-	PyErr_VIM_FORMAT(N_("internal error: failed to get vim list item %d"),
+	PyErr_VIM_FORMAT(N_("internal error: failed to get Vim list item %d"),
 		(int) index);
 	return NULL;
     }
@@ -2555,7 +2555,7 @@
 	li = list_find(l, (long) first);
 	if (li == NULL)
 	{
-	    PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
+	    PyErr_VIM_FORMAT(N_("internal error: no Vim list item %d"),
 		    (int)first);
 	    if (obj != NULL)
 		PyMem_Free(lis);
@@ -4267,7 +4267,7 @@
 
     /*
      * Create a copy of the string, with internal nulls replaced by
-     * newline characters, as is the vim convention.
+     * newline characters, as is the Vim convention.
      */
     save = alloc(len+1);
     if (save == NULL)
@@ -4614,7 +4614,7 @@
 
 	// Now we may need to insert the remaining new old_len. If we do, we
 	// must free the strings as we finish with them (we can't pass the
-	// responsibility to vim in this case).
+	// responsibility to Vim in this case).
 	if (!PyErr_Occurred())
 	{
 	    while (i < new_len)
@@ -5825,7 +5825,7 @@
     else
     {
 	if (ConvertFromPyObject(run_ret, rettv) == -1)
-	    emsg(_("E859: Failed to convert returned python object to vim value"));
+	    emsg(_("E859: Failed to convert returned python object to a Vim value"));
 	Py_DECREF(run_ret);
     }
     PyErr_Clear();
@@ -6159,7 +6159,7 @@
     else
     {
 	PyErr_FORMAT(PyExc_TypeError,
-		N_("unable to convert %s to vim dictionary"),
+		N_("unable to convert %s to a Vim dictionary"),
 		Py_TYPE_NAME(obj));
 	ret = -1;
     }
@@ -6188,7 +6188,7 @@
     else
     {
 	PyErr_FORMAT(PyExc_TypeError,
-		N_("unable to convert %s to vim list"),
+		N_("unable to convert %s to a Vim list"),
 		Py_TYPE_NAME(obj));
 	ret = -1;
     }
@@ -6333,7 +6333,7 @@
     else
     {
 	PyErr_FORMAT(PyExc_TypeError,
-		N_("unable to convert %s to vim structure"),
+		N_("unable to convert %s to a Vim structure"),
 		Py_TYPE_NAME(obj));
 	return -1;
     }
@@ -6575,7 +6575,7 @@
     DictionaryType.tp_as_sequence = &DictionaryAsSeq;
     DictionaryType.tp_as_mapping = &DictionaryAsMapping;
     DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
-    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
+    DictionaryType.tp_doc = "dictionary pushing modifications to Vim structure";
     DictionaryType.tp_methods = DictionaryMethods;
     DictionaryType.tp_iter = (getiterfunc)DictionaryIter;
     DictionaryType.tp_new = (newfunc)DictionaryConstructor;
@@ -6595,7 +6595,7 @@
     ListType.tp_as_sequence = &ListAsSeq;
     ListType.tp_as_mapping = &ListAsMapping;
     ListType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
-    ListType.tp_doc = "list pushing modifications to vim structure";
+    ListType.tp_doc = "list pushing modifications to Vim structure";
     ListType.tp_methods = ListMethods;
     ListType.tp_iter = (getiterfunc)ListIter;
     ListType.tp_new = (newfunc)ListConstructor;
@@ -6614,7 +6614,7 @@
     FunctionType.tp_dealloc = (destructor)FunctionDestructor;
     FunctionType.tp_call = (ternaryfunc)FunctionCall;
     FunctionType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
-    FunctionType.tp_doc = "object that calls vim function";
+    FunctionType.tp_doc = "object that calls Vim function";
     FunctionType.tp_methods = FunctionMethods;
     FunctionType.tp_repr = (reprfunc)FunctionRepr;
     FunctionType.tp_new = (newfunc)FunctionConstructor;
diff --git a/src/if_tcl.c b/src/if_tcl.c
index 45d880b..17e20ee 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -1403,7 +1403,7 @@
     }
     else if (did_emsg)
     {
-	Tcl_SetResult(interp, _("vim error"), TCL_STATIC);
+	Tcl_SetResult(interp, _("Vim error"), TCL_STATIC);
 	return TCL_ERROR;
     }
     return TCL_OK;
diff --git a/src/main.c b/src/main.c
index a65392f..a1e933c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3562,7 +3562,7 @@
 #endif
 #if (defined(UNIX) || defined(VMS)) && defined(FEAT_X11)
 # if defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)
-    main_msg(_("-display <display>\tConnect vim to this particular X-server"));
+    main_msg(_("-display <display>\tConnect Vim to this particular X-server"));
 # endif
     main_msg(_("-X\t\t\tDo not connect to X server"));
 #endif
@@ -3599,7 +3599,7 @@
 #   endif
 #  endif
 # endif
-    main_msg(_("-display <display>\tRun vim on <display>"));
+    main_msg(_("-display <display>\tRun Vim on <display>"));
     main_msg(_("-iconic\t\tStart vim iconified"));
     main_msg(_("-background <color>\tUse <color> for the background (also: -bg)"));
     main_msg(_("-foreground <color>\tUse <color> for normal text (also: -fg)"));
@@ -3621,7 +3621,7 @@
     main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
     main_msg(_("-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"));
     main_msg(_("-reverse\t\tUse reverse video (also: -rv)"));
-    main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
+    main_msg(_("-display <display>\tRun Vim on <display> (also: --display)"));
     main_msg(_("--role <role>\tSet a unique role to identify the main window"));
     main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
     main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
diff --git a/src/version.c b/src/version.c
index 799e846..a31cdab 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    740,
+/**/
     739,
 /**/
     738,
