diff --git a/runtime/doc/debugger.txt b/runtime/doc/debugger.txt
index 5bea42a..4e4f1c0 100644
--- a/runtime/doc/debugger.txt
+++ b/runtime/doc/debugger.txt
@@ -1,4 +1,4 @@
-*debugger.txt*  For Vim version 7.0aa.  Last change: 2005 Feb 23
+*debugger.txt*  For Vim version 7.0aa.  Last change: 2005 Mar 07
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -98,12 +98,15 @@
 The 'ballooneval' option needs to be set to switch it on.
 
 Balloon evaluation is only available when compiled with the |+balloon_eval|
-and |+sun_workshop| features.
+feature.
 
 The Balloon evaluation functions are also used to show a tooltip for the
 toolbar.  The 'ballooneval' option does not need to be set for this.  But the
 other settings apply.
 
+Another way to use the balloon is with the 'balloonexpr' option.  This is
+completely user definable.
+
 ==============================================================================
 2. Vim Compile Options					*debugger-compilation*
 
diff --git a/src/Make_ming.mak b/src/Make_ming.mak
index 7cbceb8..1633b65 100644
--- a/src/Make_ming.mak
+++ b/src/Make_ming.mak
@@ -355,7 +355,7 @@
 endif
 
 LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32
-GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/os_w32exe.o
+GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
 OBJ = \
 	$(OUTDIR)/buffer.o \
 	$(OUTDIR)/charset.o \
@@ -423,7 +423,7 @@
 ifeq ($(NETBEANS),yes)
 # Only allow NETBEANS for a GUI build.
 ifeq (yes, $(GUI))
-OBJ += $(OUTDIR)/netbeans.o $(OUTDIR)/gui_beval.o
+OBJ += $(OUTDIR)/netbeans.o
 LIB += -lwsock32
 endif
 endif
diff --git a/src/feature.h b/src/feature.h
index fa874ed..0dac4ab 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -1179,7 +1179,7 @@
 	&& (   (defined(FEAT_TOOLBAR) \
 		&& !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)) \
 	    || defined(FEAT_SUN_WORKSHOP) \
-	    || defined(FEAT_NETBEANS_INTG))
+	    || defined(FEAT_NETBEANS_INTG) || defined(FEAT_EVAL))
 # define FEAT_BEVAL
 # if !defined(FEAT_XFONTSET) && !defined(FEAT_GUI_GTK) \
 	&& !defined(FEAT_GUI_KDE) && !defined(FEAT_GUI_W32)
diff --git a/src/fileio.c b/src/fileio.c
index 1edf0ae..a3ac1ae 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5905,7 +5905,7 @@
     char_u	*path;
     char_u	*tbuf;
     char	*mesg = NULL;
-    char	*mesg2;
+    char	*mesg2 = "";
     int		helpmesg = FALSE;
     int		reload = FALSE;
 #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG)
diff --git a/src/os_mswin.c b/src/os_mswin.c
index a5e10be..c833113 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -1411,6 +1411,7 @@
     MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
     if (widestr != NULL)
     {
+	++*outlen;	/* Include the 0 after the string */
 	*out = ucs2_to_enc((short_u *)widestr, outlen);
 	vim_free(widestr);
     }
diff --git a/src/os_unix.c b/src/os_unix.c
index 5df0d35..c23d88b 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -841,7 +841,10 @@
 }
 #endif
 
-#if defined(HAVE_SETJMP_H) || defined(PROTO)
+#if (defined(HAVE_SETJMP_H) \
+	&& ((defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)) \
+	    || defined(FEAT_LIBCALL))) \
+    || defined(PROTO)
 /*
  * A simplistic version of setjmp() that only allows one level of using.
  * Don't call twice before calling mch_endjmp()!.
diff --git a/src/tag.c b/src/tag.c
index e2c5238..0822875 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3551,12 +3551,15 @@
     char_u  *end;
 {
     char_u	buf[MAXPATHL];
-    int		len;
+    int		len = 0;
 
-    len = end - start;
-    if (len > sizeof(buf) - 1)
-	len = sizeof(buf) - 1;
-    STRNCPY(buf, start, len);
+    if (start != NULL)
+    {
+	len = end - start;
+	if (len > sizeof(buf) - 1)
+	    len = sizeof(buf) - 1;
+	STRNCPY(buf, start, len);
+    }
     buf[len] = NUL;
     return dict_add_nr_str(dict, field_name, 0L, buf);
 }
@@ -3575,8 +3578,6 @@
     dict_T	*dict;
     tagptrs_T	tp;
     long	is_static;
-    char_u	buf[200];
-    char_u	*bp;
 
     ret = find_tags(pat, &num_matches, &matches,
 				    TAG_REGEXP | TAG_NOIC, (int)MAXCOL, NULL);
@@ -3584,14 +3585,18 @@
     {
 	for (i = 0; i < num_matches; ++i)
 	{
+	    parse_match(matches[i], &tp);
+	    is_static = test_for_static(&tp);
+
+	    /* Skip pseudo-tag lines. */
+	    if (STRNCMP(tp.tagname, "!_TAG_", 6) == 0)
+		continue;
+
 	    if ((dict = dict_alloc()) == NULL)
 		ret = FAIL;
 	    if (list_append_dict(list, dict) == FAIL)
 		ret = FAIL;
 
-	    parse_match(matches[i], &tp);
-	    is_static = test_for_static(&tp);
-
 	    if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
 		    || add_tag_field(dict, "filename", tp.fname,
 							 tp.fname_end) == FAIL
@@ -3602,8 +3607,6 @@
 		    || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
 		ret = FAIL;
 
-	    bp = buf;
-
 	    if (tp.command_end != NULL)
 	    {
 		for (p = tp.command_end + 3;
@@ -3616,41 +3619,28 @@
 		    else if (STRNCMP(p, "file:", 5) == 0)
 			/* skip "file:" (static tag) */
 			p += 4;
-		    else if (STRNCMP(p, "struct:", 7) == 0
-			    || STRNCMP(p, "enum:", 5) == 0
-			    || STRNCMP(p, "class:", 6) == 0)
+		    else if (!vim_iswhite(*p))
 		    {
 			char_u	*s, *n;
+			int	len;
 
-			/* Field we recognize, add as a dict entry. */
+			/* Add extra field as a dict entry. */
 			n = p;
-			if (*n == 's')
-			    p += 7;
-			else if (*n == 'e')
-			    p += 5;
-			else
-			    p += 6;
-			s = p;
-			while (*p != NUL && *p != '\n' && *p != '\r')
+			while (*p != NUL && *p > ' ' && *p < 127 && *p != ':')
 			    ++p;
-			if (add_tag_field(dict,
-				    *n == 's' ? "struct"
-					       : *n == 'e' ? "enum" : "class",
-								s, p) == FAIL)
-			    ret = FAIL;
+			len = p - n;
+			if (*p == ':' && len > 0)
+			{
+			    s = ++p;
+			    while (*p != NUL && *p > ' ' && *p < 127)
+				++p;
+			    n[len] = NUL;
+			    if (add_tag_field(dict, (char *)n, s, p) == FAIL)
+				ret = FAIL;
+			    n[len] = ':';
+			}
 			--p;
 		    }
-		    else if ((bp - buf) < sizeof(buf) - 1
-					    && (bp > buf || !vim_iswhite(*p)))
-			/* Field not recognized, add to "extra" dict entry. */
-			*bp++ = *p;
-		}
-
-		if (bp > buf)
-		{
-		    *bp = NUL;
-		    if (dict_add_nr_str(dict, "extra", 0L, buf) == FAIL)
-			ret = FAIL;
 		}
 	    }
 
