updated for version 7.0112
diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak
index 51e3618..c7f8337 100644
--- a/src/Make_cyg.mak
+++ b/src/Make_cyg.mak
@@ -353,7 +353,7 @@
 OUTDIR = gobj$(DEBUG_SUFFIX)
 DEFINES += -DFEAT_GUI_W32 -DFEAT_CLIPBOARD
 EXTRA_OBJS += $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
-EXTRA_LIBS += -mwindows -lcomctl32
+EXTRA_LIBS += -mwindows -lcomctl32 -lversion
 else
 EXE = vim$(DEBUG_SUFFIX).exe
 OUTDIR = obj$(DEBUG_SUFFIX)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index c96f114..a876508 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -92,6 +92,7 @@
 static void	cursorcmd __ARGS((void));
 static int	ccheck_abbr __ARGS((int));
 static int	nextwild __ARGS((expand_T *xp, int type, int options));
+static void	escape_fname __ARGS((char_u **pp));
 static int	showmatches __ARGS((expand_T *xp, int wildmenu));
 static void	set_expand_context __ARGS((expand_T *xp));
 static int	ExpandFromContext __ARGS((expand_T *xp, char_u *, int *, char_u ***, int));
@@ -3365,18 +3366,14 @@
 		/* If 'str' starts with "\~", replace "~" at start of
 		 * files[i] with "\~". */
 		if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~')
-		{
-		    p = alloc((unsigned)(STRLEN(files[i]) + 2));
-		    if (p != NULL)
-		    {
-			p[0] = '\\';
-			STRCPY(p + 1, files[i]);
-			vim_free(files[i]);
-			files[i] = p;
-		    }
-		}
+		    escape_fname(&files[i]);
 	    }
 	    xp->xp_backslash = XP_BS_NONE;
+
+	    /* If the first file starts with a '+' escape it.  Otherwise it
+	     * could be seen as "+cmd". */
+	    if (*files[0] == '+')
+		escape_fname(&files[0]);
 	}
 	else if (xp->xp_context == EXPAND_TAGS)
 	{
@@ -3398,6 +3395,25 @@
 }
 
 /*
+ * Put a backslash before the file name in "pp", which is in allocated memory.
+ */
+    static void
+escape_fname(pp)
+    char_u **pp;
+{
+    char_u	*p;
+
+    p = alloc((unsigned)(STRLEN(*pp) + 2));
+    if (p != NULL)
+    {
+	p[0] = '\\';
+	STRCPY(p + 1, *pp);
+	vim_free(*pp);
+	*pp = p;
+    }
+}
+
+/*
  * For each file name in files[num_files]:
  * If 'orig_pat' starts with "~/", replace the home directory with "~".
  */
diff --git a/src/gui_w32.c b/src/gui_w32.c
index f0b4717..52c8abe 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -188,8 +188,61 @@
 static BalloonEval  *cur_beval = NULL;
 static UINT	    BevalTimerId = 0;
 static DWORD	    LastActivity = 0;
+
+/*
+ * excerpts from headers since this may not be presented
+ * in the extremelly old compilers
+ */
+#include <pshpack1.h>
+
+typedef struct _DllVersionInfo
+{
+    DWORD cbSize;
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+    DWORD dwBuildNumber;
+    DWORD dwPlatformID;
+} DLLVERSIONINFO;
+
+typedef struct tagTOOLINFOA_NEW
+{
+	UINT cbSize;
+	UINT uFlags;
+	HWND hwnd;
+	UINT uId;
+	RECT rect;
+	HINSTANCE hinst;
+	LPSTR lpszText;
+	LPARAM lParam;
+} TOOLINFO_NEW;
+
+typedef struct tagNMTTDISPINFO_NEW
+{
+    NMHDR      hdr;
+    LPTSTR     lpszText;
+    char       szText[80];
+    HINSTANCE  hinst;
+    UINT       uFlags;
+    LPARAM     lParam;
+} NMTTDISPINFO_NEW;
+
+#include <poppack.h>
+
+typedef HRESULT (WINAPI* DLLGETVERSIONPROC)(DLLVERSIONINFO *);
+#ifndef TTM_SETMAXTIPWIDTH
+# define TTM_SETMAXTIPWIDTH	 (WM_USER+24)
 #endif
 
+#ifndef TTF_DI_SETITEM
+# define TTF_DI_SETITEM          0x8000
+#endif
+
+#ifndef TTN_GETDISPINFO
+# define TTN_GETDISPINFO        (TTN_FIRST - 0)
+#endif
+
+#endif /* defined(FEAT_BEVAL) */
+
 /* Local variables: */
 
 #ifdef FEAT_MENU
@@ -4021,13 +4074,93 @@
  * 5) WM_NOTOFY:TTN_POP destroys created tooltip
  */
 
+/*
+ * determine whether installed Common Controls support multiline tooltips
+ * (i.e. their version is >= 4.70
+ */
+    int
+multiline_balloon_available(void)
+{
+    HINSTANCE hDll;
+    static char comctl_dll[] = "comctl32.dll";
+    static int multiline_tip = MAYBE;
+
+    if (multiline_tip != MAYBE)
+	return multiline_tip;
+
+    hDll = GetModuleHandle(comctl_dll);
+    if (hDll != NULL)
+    {
+        DLLGETVERSIONPROC pGetVer;
+        pGetVer = (DLLGETVERSIONPROC)GetProcAddress(hDll, "DllGetVersion");
+
+        if (pGetVer != NULL)
+        {
+            DLLVERSIONINFO dvi;
+            HRESULT hr;
+
+            ZeroMemory(&dvi, sizeof(dvi));
+            dvi.cbSize = sizeof(dvi);
+
+            hr = (*pGetVer)(&dvi);
+
+            if (SUCCEEDED(hr)
+		    && (dvi.dwMajorVersion > 4
+		    || (dvi.dwMajorVersion == 4 && dvi.dwMinorVersion >= 70)))
+	    {
+		multiline_tip = TRUE;
+		return multiline_tip;
+	    }
+        }
+	else
+	{
+	    /* there is chance we have ancient CommCtl 4.70
+	       which doesn't export DllGetVersion */
+	    DWORD dwHandle = 0;
+	    DWORD len = GetFileVersionInfoSize(comctl_dll, &dwHandle);
+	    if (len > 0)
+	    {
+		VS_FIXEDFILEINFO *ver;
+		UINT vlen = 0;
+		void *data = alloc(len);
+
+		if (data != NULL
+			&& GetFileVersionInfo(comctl_dll, 0, len, data)
+			&& VerQueryValue(data, "\\", (void **)&ver, &vlen)
+			&& vlen
+			&& HIWORD(ver->dwFileVersionMS) > 4
+			|| (HIWORD(ver->dwFileVersionMS) == 4
+			    && LOWORD(ver->dwFileVersionMS) >= 70))
+		{
+		    vim_free(data);
+		    multiline_tip = TRUE;
+		    return multiline_tip;
+		}
+		vim_free(data);
+	    }
+	}
+    }
+    multiline_tip = FALSE;
+    return multiline_tip;
+}
+
     static void
 make_tooltip(beval, text, pt)
     BalloonEval *beval;
     char *text;
     POINT pt;
 {
-    TOOLINFO	ti;
+    TOOLINFO	*pti;
+    int		ToolInfoSize;
+
+    if (multiline_balloon_available() == TRUE)
+	ToolInfoSize = sizeof(TOOLINFO_NEW);
+    else
+	ToolInfoSize = sizeof(TOOLINFO);
+
+    pti = (TOOLINFO *)alloc(ToolInfoSize);
+    if (pti == NULL)
+	return;
 
     beval->balloon = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS,
 	    NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
@@ -4037,20 +4170,32 @@
     SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0,
 	    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
 
-    ti.cbSize = sizeof(TOOLINFO);
-    ti.uFlags = TTF_SUBCLASS;
-    ti.hwnd = beval->target;
-    ti.hinst = 0; /* Don't use string resources */
-    ti.uId = ID_BEVAL_TOOLTIP;
-    ti.lpszText = text;
+    pti->cbSize = ToolInfoSize;
+    pti->uFlags = TTF_SUBCLASS;
+    pti->hwnd = beval->target;
+    pti->hinst = 0; /* Don't use string resources */
+    pti->uId = ID_BEVAL_TOOLTIP;
+
+    if (multiline_balloon_available() == TRUE)
+    {
+	RECT rect;
+	TOOLINFO_NEW *ptin = (TOOLINFO_NEW *)pti;
+	pti->lpszText = LPSTR_TEXTCALLBACK;
+	ptin->lParam = (LPARAM)text;
+	if (GetClientRect(s_textArea, &rect)) /* switch multiline tooltips on */
+	    SendMessage(beval->balloon, TTM_SETMAXTIPWIDTH, 0,
+		    (LPARAM)rect.right);
+    }
+    else
+	pti->lpszText = text; /* do this old way */
 
     /* Limit ballooneval bounding rect to CursorPos neighbourhood */
-    ti.rect.left = pt.x - 3;
-    ti.rect.top = pt.y - 3;
-    ti.rect.right = pt.x + 3;
-    ti.rect.bottom = pt.y + 3;
+    pti->rect.left = pt.x - 3;
+    pti->rect.top = pt.y - 3;
+    pti->rect.right = pt.x + 3;
+    pti->rect.bottom = pt.y + 3;
 
-    SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)&ti);
+    SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
     /* Make tooltip appear sooner */
     SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
     /*
@@ -4059,6 +4204,7 @@
      */
     mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
     mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
+    vim_free(pti);
 }
 
     static void
@@ -4187,7 +4333,6 @@
 	beval->clientData = clientData;
 
 	InitCommonControls();
-
 	cur_beval = beval;
 
 	if (p_beval)
@@ -4208,19 +4353,28 @@
 
     if (cur_beval != NULL)
     {
-	if (pnmh->code == TTN_SHOW)
+	switch (pnmh->code)
 	{
+	case TTN_SHOW:
 	    // TRACE0("TTN_SHOW {{{");
 	    // TRACE0("TTN_SHOW }}}");
-	}
-	else if (pnmh->code == TTN_POP) /* Before tooltip disappear */
-	{
+	    break;
+	case TTN_POP: /* Before tooltip disappear */
 	    // TRACE0("TTN_POP {{{");
 	    delete_tooltip(cur_beval);
 	    gui_mch_enable_beval_area(cur_beval);
 	    // TRACE0("TTN_POP }}}");
 
 	    cur_beval->showState = ShS_NEUTRAL;
+	    break;
+	case TTN_GETDISPINFO:
+	{
+	    /* if you get there then we have new common controls */
+	    NMTTDISPINFO_NEW *info = (NMTTDISPINFO_NEW *)pnmh;
+	    info->lpszText = (LPSTR)info->lParam;
+	    info->uFlags |= TTF_DI_SETITEM;
+	}
+	    break;
 	}
     }
 }
diff --git a/src/po/Make_mvc.mak b/src/po/Make_mvc.mak
index 607cf5e..5448bee 100644
--- a/src/po/Make_mvc.mak
+++ b/src/po/Make_mvc.mak
@@ -6,11 +6,53 @@
 # Please read README_mvc.txt before using this file.
 #
 
-LANGUAGES =	af ca cs de en_GB es fr ga it ja ko no pl ru sk sv uk vi zh_TW \
-		zh_TW.UTF-8 zh_CN zh_CN.UTF-8
-MOFILES =	af.mo ca.mo cs.mo de.mo en_GB.mo es.mo fr.mo ga.mo it.mo ja.mo \
-		ko.mo no.mo pl.mo ru.mo sk.mo sv.mo uk.mo vi.mo \
-		zh_TW.mo zh_TW.UTF-8.mo zh_CN.mo zh_CN.UTF-8.mo
+LANGUAGES = \
+		af \
+		ca \
+		cs \
+		de \
+		en_GB \
+		es \
+		fr \
+		ga \
+		it \
+		ja \
+		ko \
+		no \
+		pl \
+		ru \
+		sk \
+		sv \
+		uk \
+		vi \
+		zh_CN \
+		zh_CN.UTF-8 \
+		zh_TW \
+		zh_TW.UTF-8 \
+
+MOFILES = \
+		af.mo \
+		ca.mo \
+		cs.mo \
+		de.mo \
+		en_GB.mo \
+		es.mo \
+		fr.mo \
+		ga.mo \
+		it.mo \
+		ja.mo \
+		ko.mo \
+		no.mo \
+		pl.mo \
+		ru.mo \
+		sk.mo \
+		sv.mo \
+		uk.mo \
+		vi.mo \
+		zh_CN.UTF-8.mo \
+		zh_CN.mo \
+		zh_TW.UTF-8.mo \
+		zh_TW.mo \
 
 PACKAGE = vim
 
diff --git a/src/search.c b/src/search.c
index b2de027..288197c 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3666,7 +3666,7 @@
     old_start = old_end;
 
     /*
-     * If we start on "<aaa>" use the whole block inclusive.
+     * If we start on "<aaa>" select that block.
      */
 #ifdef FEAT_VISUAL
     if (!VIsual_active || equalpos(VIsual, curwin->w_cursor))
@@ -3713,7 +3713,7 @@
      */
     for (n = 0; n < count; ++n)
     {
-	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|>\\)",
+	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
 		    (char_u *)"",
 		    (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0) <= 0)
 	{
@@ -3791,9 +3791,9 @@
 	    }
 	curwin->w_cursor = end_pos;
 
-	/* If we now have the same start as before reset "do_include" and try
+	/* If we now have the same text as before reset "do_include" and try
 	 * again. */
-	if (equalpos(start_pos, old_start))
+	if (equalpos(start_pos, old_start) && equalpos(end_pos, old_end))
 	{
 	    do_include = TRUE;
 	    curwin->w_cursor = old_start;
diff --git a/src/version.h b/src/version.h
index 7df4ee1..0352cd3 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 20)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 20, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 21)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 21, compiled "