diff --git a/src/Makefile b/src/Makefile
index f609466..6ca8a6b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1259,7 +1259,7 @@
 
 ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
 
-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) -Dinline= -D__extension__= -Dalloca=alloca
+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) -Dinline= -D__extension__= -Dalloca=alloca -D"__attribute__(x)="
 
 DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
 
diff --git a/src/configure.in b/src/configure.in
index af18d88..2782885 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -1075,11 +1075,11 @@
   fi
 fi
 
-test "x$with_x" = xno -a "x$BEOS" != "xyes" -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
+test "x$with_x" = xno -a "x$MACOSX" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
 
 AC_MSG_CHECKING(--enable-gui argument)
 AC_ARG_ENABLE(gui,
- [  --enable-gui[=OPTS]     X11 GUI [default=auto] [OPTS=auto/no/gtk/gtk2/gnome/gnome2/kde/motif/athena/neXtaw/beos/photon/carbon]], , enable_gui="auto")
+ [  --enable-gui[=OPTS]     X11 GUI [default=auto] [OPTS=auto/no/gtk/gtk2/gnome/gnome2/kde/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto")
 
 dnl Canonicalize the --enable-gui= argument so that it can be easily compared.
 dnl Do not use character classes for portability with old tools.
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index 45271de..b237925 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1209,7 +1209,11 @@
 /*
  * Implementation of the file selector related stuff
  */
+#if defined(HAVE_GTK2) && GTK_CHECK_VERSION(2,4,0)
+# define USE_FILE_CHOOSER
+#endif
 
+#ifndef USE_FILE_CHOOSER
 /*ARGSUSED*/
     static void
 browse_ok_cb(GtkWidget *widget, gpointer cbdata)
@@ -1258,6 +1262,7 @@
 
     return FALSE;
 }
+#endif
 
 /*
  * Put up a file requester.
@@ -1278,7 +1283,9 @@
 	       char_u *initdir,
 	       char_u *filter)
 {
-    GtkFileSelection	*fs;	/* shortcut */
+#ifdef USE_FILE_CHOOSER
+    GtkWidget		*fc;
+#endif
     char_u		dirbuf[MAXPATHL];
     char_u		*p;
 
@@ -1286,12 +1293,56 @@
     title = CONVERT_TO_UTF8(title);
 # endif
 
-    if (!gui.filedlg)
+    /* Concatenate "initdir" and "dflt". */
+    if (initdir == NULL || *initdir == NUL)
+	mch_dirname(dirbuf, MAXPATHL);
+    else if (STRLEN(initdir) + 2 < MAXPATHL)
+	STRCPY(dirbuf, initdir);
+    else
+	dirbuf[0] = NUL;
+    /* Always need a trailing slash for a directory. */
+    add_pathsep(dirbuf);
+    if (dflt != NULL && *dflt != NUL
+			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
+	STRCAT(dirbuf, dflt);
+
+    /* If our pointer is currently hidden, then we should show it. */
+    gui_mch_mousehide(FALSE);
+
+#ifdef USE_FILE_CHOOSER
+    /* We create the dialog each time, so that the button text can be "Open"
+     * or "Save" according to the action. */
+    fc = gtk_file_chooser_dialog_new((const gchar *)title,
+	    GTK_WINDOW(gui.mainwin),
+	    saving ? GTK_FILE_CHOOSER_ACTION_SAVE
+					   : GTK_FILE_CHOOSER_ACTION_OPEN,
+	    saving ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+	    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+	    NULL);
+    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+						       (const gchar *)dirbuf);
+
+    gui.browse_fname = NULL;
+    if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT)
     {
+        char *filename;
+
+        filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+        gui.browse_fname = (char_u *)g_strdup(filename);
+        g_free(filename);
+    }
+    gtk_widget_destroy(GTK_WIDGET(fc));
+
+#else
+
+    if (gui.filedlg == NULL)
+    {
+	GtkFileSelection	*fs;	/* shortcut */
+
 	gui.filedlg = gtk_file_selection_new((const gchar *)title);
 	gtk_window_set_modal(GTK_WINDOW(gui.filedlg), TRUE);
 	gtk_window_set_transient_for(GTK_WINDOW(gui.filedlg),
-		GTK_WINDOW(gui.mainwin));
+						     GTK_WINDOW(gui.mainwin));
 	fs = GTK_FILE_SELECTION(gui.filedlg);
 
 	gtk_container_border_width(GTK_CONTAINER(fs), 4);
@@ -1308,26 +1359,6 @@
     else
 	gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title);
 
-# ifdef HAVE_GTK2
-    CONVERT_TO_UTF8_FREE(title);
-# endif
-
-    /* if our pointer is currently hidden, then we should show it. */
-    gui_mch_mousehide(FALSE);
-
-    /* Concatenate "initdir" and "dflt". */
-    if (initdir == NULL || *initdir == NUL)
-	mch_dirname(dirbuf, MAXPATHL);
-    else if (STRLEN(initdir) + 2 < MAXPATHL)
-	STRCPY(dirbuf, initdir);
-    else
-	dirbuf[0] = NUL;
-    /* Always need a trailing slash for a directory. */
-    add_pathsep(dirbuf);
-    if (dflt != NULL && *dflt != NUL
-			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
-	STRCAT(dirbuf, dflt);
-
     gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg),
 						      (const gchar *)dirbuf);
 # ifndef HAVE_GTK2
@@ -1338,7 +1369,11 @@
     gtk_widget_show(gui.filedlg);
     while (gui.filedlg && GTK_WIDGET_DRAWABLE(gui.filedlg))
 	gtk_main_iteration_do(TRUE);
+#endif
 
+# ifdef HAVE_GTK2
+    CONVERT_TO_UTF8_FREE(title);
+# endif
     if (gui.browse_fname == NULL)
 	return NULL;
 
@@ -1422,6 +1457,7 @@
 }
 #endif
 
+
 #endif	/* FEAT_BROWSE */
 
 #if defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2)
@@ -3104,7 +3140,6 @@
 	pos_x = xP + wP - c_size.width - 2;
     /* Assume 'guiheadroom' indicates the title bar height... */
     if ((pos_y + c_size.height + p_ghr / 2) > (hP + yP))
-	pos_y = yP + hP - c_size.height - 2 - p_ghr / 2;
 
     gtk_widget_set_uposition(child, pos_x, pos_y);
 }
diff --git a/src/regexp.c b/src/regexp.c
index 8a2643d..d18198c 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -3073,6 +3073,81 @@
 static linenr_T		reg_maxline;
 static int		reg_line_lbr;	    /* "\n" in string is line break */
 
+/* Values for rs_state in regitem_T. */
+typedef enum regstate_E
+{
+    RS_NOPEN = 0	/* NOPEN and NCLOSE */
+    , RS_MOPEN		/* MOPEN + [0-9] */
+    , RS_MCLOSE		/* MCLOSE + [0-9] */
+#ifdef FEAT_SYN_HL
+    , RS_ZOPEN		/* ZOPEN + [0-9] */
+    , RS_ZCLOSE		/* ZCLOSE + [0-9] */
+#endif
+    , RS_BRANCH		/* BRANCH */
+    , RS_BRCPLX_MORE	/* BRACE_COMPLEX and trying one more match */
+    , RS_BRCPLX_LONG	/* BRACE_COMPLEX and trying longest match */
+    , RS_BRCPLX_SHORT	/* BRACE_COMPLEX and trying shortest match */
+    , RS_NOMATCH	/* NOMATCH */
+    , RS_BEHIND1	/* BEHIND / NOBEHIND matching rest */
+    , RS_BEHIND2	/* BEHIND / NOBEHIND matching behind part */
+    , RS_STAR_LONG	/* STAR/PLUS/BRACE_SIMPLE longest match */
+    , RS_STAR_SHORT	/* STAR/PLUS/BRACE_SIMPLE shortest match */
+} regstate_T;
+
+/*
+ * When there are alternatives a regstate_T is put on the regstack to remember
+ * what we are doing.
+ * Before it may be another type of item, depending on rs_state, to remember
+ * more things.
+ */
+typedef struct regitem_S
+{
+    regstate_T	rs_state;	/* what we are doing, one of RS_ above */
+    char_u	*rs_scan;	/* current node in program */
+    union
+    {
+	save_se_T  sesave;
+	regsave_T  regsave;
+    } rs_un;			/* room for saving reginput */
+    short	rs_no;		/* submatch nr */
+} regitem_T;
+
+static regitem_T *regstack_push __ARGS((regstate_T state, char_u *scan));
+static void regstack_pop __ARGS((char_u **scan));
+
+/* used for BEHIND and NOBEHIND matching */
+typedef struct regbehind_S
+{
+    regsave_T	save_after;
+    regsave_T	save_behind;
+} regbehind_T;
+
+/* used for STAR, PLUS and BRACE_SIMPLE matching */
+typedef struct regstar_S
+{
+    int		nextb;		/* next byte */
+    int		nextb_ic;	/* next byte reverse case */
+    long	count;
+    long	minval;
+    long	maxval;
+} regstar_T;
+
+/* used to store input position when a BACK was encountered, so that we now if
+ * we made any progress since the last time. */
+typedef struct backpos_S
+{
+    char_u	*bp_scan;	/* "scan" where BACK was encountered */
+    regsave_T	bp_pos;		/* last input position */
+} backpos_T;
+
+/*
+ * regstack and backpos are used by regmatch().  They are kept over calls to
+ * avoid invoking malloc() and free() often.
+ */
+static garray_T	regstack;	/* stack with regitem_T items, sometimes
+				   preceded by regstar_T or regbehind_T. */
+static garray_T	backpos;	/* table with backpos_T for BACK */
+
 /*
  * Get pointer to the line "lnum", which is relative to "reg_firstlnum".
  */
@@ -3202,6 +3277,14 @@
 
     reg_tofree = NULL;
 
+    /* Init the regstack empty.  Use an item size of 1 byte, since we push
+     * different things onto it.  Use a large grow size to avoid reallocating
+     * it too often. */
+    ga_init2(&regstack, 1, 10000);
+
+    /* Init the backpos table empty. */
+    ga_init2(&backpos, sizeof(backpos_T), 10);
+
     if (REG_MULTI)
     {
 	prog = reg_mmatch->regprog;
@@ -3360,8 +3443,10 @@
     }
 
 theend:
-    /* Didn't find a match. */
     vim_free(reg_tofree);
+    ga_clear(&regstack);
+    ga_clear(&backpos);
+
     return retval;
 }
 
@@ -3519,73 +3604,6 @@
 static long	bl_minval;
 static long	bl_maxval;
 
-/* Values for rs_state in regitem_T. */
-typedef enum regstate_E
-{
-    RS_NOPEN = 0	/* NOPEN and NCLOSE */
-    , RS_MOPEN		/* MOPEN + [0-9] */
-    , RS_MCLOSE		/* MCLOSE + [0-9] */
-#ifdef FEAT_SYN_HL
-    , RS_ZOPEN		/* ZOPEN + [0-9] */
-    , RS_ZCLOSE		/* ZCLOSE + [0-9] */
-#endif
-    , RS_BRANCH		/* BRANCH */
-    , RS_BRCPLX_MORE	/* BRACE_COMPLEX and trying one more match */
-    , RS_BRCPLX_LONG	/* BRACE_COMPLEX and trying longest match */
-    , RS_BRCPLX_SHORT	/* BRACE_COMPLEX and trying shortest match */
-    , RS_NOMATCH	/* NOMATCH */
-    , RS_BEHIND1	/* BEHIND / NOBEHIND matching rest */
-    , RS_BEHIND2	/* BEHIND / NOBEHIND matching behind part */
-    , RS_STAR_LONG	/* STAR/PLUS/BRACE_SIMPLE longest match */
-    , RS_STAR_SHORT	/* STAR/PLUS/BRACE_SIMPLE shortest match */
-} regstate_T;
-
-/*
- * When there are alternatives a regstate_T is put on the regstack to remember
- * what we are doing.
- * Before it may be another type of item, depending on rs_state, to remember
- * more things.
- */
-typedef struct regitem_S
-{
-    regstate_T	rs_state;	/* what we are doing, one of RS_ above */
-    char_u	*rs_scan;	/* current node in program */
-    union
-    {
-	save_se_T  sesave;
-	regsave_T  regsave;
-    } rs_un;			/* room for saving reginput */
-    short	rs_no;		/* submatch nr */
-} regitem_T;
-
-static regitem_T *regstack_push __ARGS((garray_T *regstack, regstate_T state, char_u *scan));
-static void regstack_pop __ARGS((garray_T *regstack, char_u **scan));
-
-/* used for BEHIND and NOBEHIND matching */
-typedef struct regbehind_S
-{
-    regsave_T	save_after;
-    regsave_T	save_behind;
-} regbehind_T;
-
-/* used for STAR, PLUS and BRACE_SIMPLE matching */
-typedef struct regstar_S
-{
-    int		nextb;		/* next byte */
-    int		nextb_ic;	/* next byte reverse case */
-    long	count;
-    long	minval;
-    long	maxval;
-} regstar_T;
-
-/* used to store input position when a BACK was encountered, so that we now if
- * we made any progress since the last time. */
-typedef struct backpos_S
-{
-    char_u	*bp_scan;	/* "scan" where BACK was encountered */
-    regsave_T	bp_pos;		/* last input position */
-} backpos_T;
-
 /*
  * regmatch - main matching routine
  *
@@ -3608,8 +3626,6 @@
   char_u	*next;		/* Next node. */
   int		op;
   int		c;
-  garray_T	regstack;	/* stack with regitem_T items, sometimes
-				   preceded by regstar_T or regbehind_T. */
   regitem_T	*rp;
   int		no;
   int		status;		/* one of the RA_ values: */
@@ -3618,14 +3634,11 @@
 #define RA_BREAK	3	/* break inner loop */
 #define RA_MATCH	4	/* successful match */
 #define RA_NOMATCH	5	/* didn't match */
-  garray_T	backpos;	/* table with backpos_T for BACK */
 
-  /* Init the regstack empty.  Use an item size of 1 byte, since we push
-   * different things onto it.  Use a large grow size to avoid reallocating
-   * it too often. */
-  ga_init2(&regstack, 1, 10000);
-
-  ga_init2(&backpos, sizeof(backpos_T), 10);
+  /* Init the regstack and backpos table empty.  They are initialized and
+   * freed in vim_regexec_both() to reduce malloc()/free() calls. */
+  regstack.ga_len = 0;
+  backpos.ga_len = 0;
 
   /*
    * Repeat until "regstack" is empty.
@@ -4133,7 +4146,7 @@
 	    {
 		no = op - MOPEN;
 		cleanup_subexpr();
-		rp = regstack_push(&regstack, RS_MOPEN, scan);
+		rp = regstack_push(RS_MOPEN, scan);
 		if (rp == NULL)
 		    status = RA_FAIL;
 		else
@@ -4148,7 +4161,7 @@
 
 	  case NOPEN:	    /* \%( */
 	  case NCLOSE:	    /* \) after \%( */
-		if (regstack_push(&regstack, RS_NOPEN, scan) == NULL)
+		if (regstack_push(RS_NOPEN, scan) == NULL)
 		    status = RA_FAIL;
 		/* We simply continue and handle the result when done. */
 		break;
@@ -4166,7 +4179,7 @@
 	    {
 		no = op - ZOPEN;
 		cleanup_zsubexpr();
-		rp = regstack_push(&regstack, RS_ZOPEN, scan);
+		rp = regstack_push(RS_ZOPEN, scan);
 		if (rp == NULL)
 		    status = RA_FAIL;
 		else
@@ -4193,7 +4206,7 @@
 	    {
 		no = op - MCLOSE;
 		cleanup_subexpr();
-		rp = regstack_push(&regstack, RS_MCLOSE, scan);
+		rp = regstack_push(RS_MCLOSE, scan);
 		if (rp == NULL)
 		    status = RA_FAIL;
 		else
@@ -4218,7 +4231,7 @@
 	    {
 		no = op - ZCLOSE;
 		cleanup_zsubexpr();
-		rp = regstack_push(&regstack, RS_ZCLOSE, scan);
+		rp = regstack_push(RS_ZCLOSE, scan);
 		if (rp == NULL)
 		    status = RA_FAIL;
 		else
@@ -4396,7 +4409,7 @@
 		    next = OPERAND(scan);	/* Avoid recursion. */
 		else
 		{
-		    rp = regstack_push(&regstack, RS_BRANCH, scan);
+		    rp = regstack_push(RS_BRANCH, scan);
 		    if (rp == NULL)
 			status = RA_FAIL;
 		    else
@@ -4446,7 +4459,7 @@
 		if (brace_count[no] <= (brace_min[no] <= brace_max[no]
 					     ? brace_min[no] : brace_max[no]))
 		{
-		    rp = regstack_push(&regstack, RS_BRCPLX_MORE, scan);
+		    rp = regstack_push(RS_BRCPLX_MORE, scan);
 		    if (rp == NULL)
 			status = RA_FAIL;
 		    else
@@ -4465,7 +4478,7 @@
 		    /* Range is the normal way around, use longest match */
 		    if (brace_count[no] <= brace_max[no])
 		    {
-			rp = regstack_push(&regstack, RS_BRCPLX_LONG, scan);
+			rp = regstack_push(RS_BRCPLX_LONG, scan);
 			if (rp == NULL)
 			    status = RA_FAIL;
 			else
@@ -4482,7 +4495,7 @@
 		    /* Range is backwards, use shortest match first */
 		    if (brace_count[no] <= brace_min[no])
 		    {
-			rp = regstack_push(&regstack, RS_BRCPLX_SHORT, scan);
+			rp = regstack_push(RS_BRCPLX_SHORT, scan);
 			if (rp == NULL)
 			    status = RA_FAIL;
 			else
@@ -4562,7 +4575,7 @@
 		    else
 		    {
 			regstack.ga_len += sizeof(regstar_T);
-			rp = regstack_push(&regstack, rst.minval <= rst.maxval
+			rp = regstack_push(rst.minval <= rst.maxval
 					? RS_STAR_LONG : RS_STAR_SHORT, scan);
 			if (rp == NULL)
 			    status = RA_FAIL;
@@ -4582,7 +4595,7 @@
 	  case NOMATCH:
 	  case MATCH:
 	  case SUBPAT:
-	    rp = regstack_push(&regstack, RS_NOMATCH, scan);
+	    rp = regstack_push(RS_NOMATCH, scan);
 	    if (rp == NULL)
 		status = RA_FAIL;
 	    else
@@ -4607,7 +4620,7 @@
 	    else
 	    {
 		regstack.ga_len += sizeof(regbehind_T);
-		rp = regstack_push(&regstack, RS_BEHIND1, scan);
+		rp = regstack_push(RS_BEHIND1, scan);
 		if (rp == NULL)
 		    status = RA_FAIL;
 		else
@@ -4675,7 +4688,7 @@
 	{
 	  case RS_NOPEN:
 	    /* Result is passed on as-is, simply pop the state. */
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 
 	  case RS_MOPEN:
@@ -4683,7 +4696,7 @@
 	    if (status == RA_NOMATCH)
 		restore_se(&rp->rs_un.sesave, &reg_startpos[rp->rs_no],
 						  &reg_startp[rp->rs_no]);
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 
 #ifdef FEAT_SYN_HL
@@ -4692,7 +4705,7 @@
 	    if (status == RA_NOMATCH)
 		restore_se(&rp->rs_un.sesave, &reg_startzpos[rp->rs_no],
 						 &reg_startzp[rp->rs_no]);
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 #endif
 
@@ -4701,7 +4714,7 @@
 	    if (status == RA_NOMATCH)
 		restore_se(&rp->rs_un.sesave, &reg_endpos[rp->rs_no],
 						    &reg_endp[rp->rs_no]);
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 
 #ifdef FEAT_SYN_HL
@@ -4710,14 +4723,14 @@
 	    if (status == RA_NOMATCH)
 		restore_se(&rp->rs_un.sesave, &reg_endzpos[rp->rs_no],
 						   &reg_endzp[rp->rs_no]);
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 #endif
 
 	  case RS_BRANCH:
 	    if (status == RA_MATCH)
 		/* this branch matched, use it */
-		regstack_pop(&regstack, &scan);
+		regstack_pop(&scan);
 	    else
 	    {
 		if (status != RA_BREAK)
@@ -4730,7 +4743,7 @@
 		{
 		    /* no more branches, didn't find a match */
 		    status = RA_NOMATCH;
-		    regstack_pop(&regstack, &scan);
+		    regstack_pop(&scan);
 		}
 		else
 		{
@@ -4749,7 +4762,7 @@
 		reg_restore(&rp->rs_un.regsave, &backpos);
 		--brace_count[rp->rs_no];	/* decrement match count */
 	    }
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    break;
 
 	  case RS_BRCPLX_LONG:
@@ -4762,7 +4775,7 @@
 		/* continue with the items after "\{}" */
 		status = RA_CONT;
 	    }
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    if (status == RA_CONT)
 		scan = regnext(scan);
 	    break;
@@ -4772,7 +4785,7 @@
 	    if (status == RA_NOMATCH)
 		/* There was no match, try to match one more item. */
 		reg_restore(&rp->rs_un.regsave, &backpos);
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    if (status == RA_NOMATCH)
 	    {
 		scan = OPERAND(scan);
@@ -4792,7 +4805,7 @@
 		if (rp->rs_no != SUBPAT)	/* zero-width */
 		    reg_restore(&rp->rs_un.regsave, &backpos);
 	    }
-	    regstack_pop(&regstack, &scan);
+	    regstack_pop(&scan);
 	    if (status == RA_CONT)
 		scan = regnext(scan);
 	    break;
@@ -4800,7 +4813,7 @@
 	  case RS_BEHIND1:
 	    if (status == RA_NOMATCH)
 	    {
-		regstack_pop(&regstack, &scan);
+		regstack_pop(&scan);
 		regstack.ga_len -= sizeof(regbehind_T);
 	    }
 	    else
@@ -4844,7 +4857,7 @@
 		else
 		    /* But we didn't want a match. */
 		    status = RA_NOMATCH;
-		regstack_pop(&regstack, &scan);
+		regstack_pop(&scan);
 		regstack.ga_len -= sizeof(regbehind_T);
 	    }
 	    else
@@ -4897,7 +4910,7 @@
 		    }
 		    else
 			status = RA_NOMATCH;
-		    regstack_pop(&regstack, &scan);
+		    regstack_pop(&scan);
 		    regstack.ga_len -= sizeof(regbehind_T);
 		}
 	    }
@@ -4910,7 +4923,7 @@
 
 		if (status == RA_MATCH)
 		{
-		    regstack_pop(&regstack, &scan);
+		    regstack_pop(&scan);
 		    regstack.ga_len -= sizeof(regstar_T);
 		    break;
 		}
@@ -4976,7 +4989,7 @@
 		if (status != RA_CONT)
 		{
 		    /* Failed. */
-		    regstack_pop(&regstack, &scan);
+		    regstack_pop(&scan);
 		    regstack.ga_len -= sizeof(regstar_T);
 		    status = RA_NOMATCH;
 		}
@@ -5000,7 +5013,6 @@
      */
     if (regstack.ga_len == 0 || status == RA_FAIL)
     {
-	ga_clear(&regstack);
 	if (scan == NULL)
 	{
 	    /*
@@ -5027,26 +5039,25 @@
  * Returns pointer to new item.  Returns NULL when out of memory.
  */
     static regitem_T *
-regstack_push(regstack, state, scan)
-    garray_T	*regstack;
+regstack_push(state, scan)
     regstate_T	state;
     char_u	*scan;
 {
     regitem_T	*rp;
 
-    if ((long)((unsigned)regstack->ga_len >> 10) >= p_mmp)
+    if ((long)((unsigned)regstack.ga_len >> 10) >= p_mmp)
     {
 	EMSG(_(e_maxmempat));
 	return NULL;
     }
-    if (ga_grow(regstack, sizeof(regitem_T)) == FAIL)
+    if (ga_grow(&regstack, sizeof(regitem_T)) == FAIL)
 	return NULL;
 
-    rp = (regitem_T *)((char *)regstack->ga_data + regstack->ga_len);
+    rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len);
     rp->rs_state = state;
     rp->rs_scan = scan;
 
-    regstack->ga_len += sizeof(regitem_T);
+    regstack.ga_len += sizeof(regitem_T);
     return rp;
 }
 
@@ -5054,16 +5065,15 @@
  * Pop an item from the regstack.
  */
     static void
-regstack_pop(regstack, scan)
-    garray_T	*regstack;
+regstack_pop(scan)
     char_u	**scan;
 {
     regitem_T	*rp;
 
-    rp = (regitem_T *)((char *)regstack->ga_data + regstack->ga_len) - 1;
+    rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len) - 1;
     *scan = rp->rs_scan;
 
-    regstack->ga_len -= sizeof(regitem_T);
+    regstack.ga_len -= sizeof(regitem_T);
 }
 
 /*
diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak
index 5b14739..b6d9350 100644
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -23,7 +23,8 @@
 		test33.out test34.out test35.out test36.out test37.out \
 		test38.out test39.out test40.out test41.out test42.out \
 		test43.out test44.out test45.out test46.out test47.out \
-		test48.out test51.out test53.out test54.out test55.out
+		test48.out test51.out test53.out test54.out test55.out \
+		test56.out
 
 .SUFFIXES: .in .out
 
@@ -98,3 +99,4 @@
 test53.out: test53.in
 test54.out: test54.in
 test55.out: test55.in
+test56.out: test56.in
diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak
index d961e0a..f8816ec 100644
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -17,7 +17,8 @@
 		test23.out test24.out test28.out test29.out \
 		test35.out test36.out test43.out \
 		test44.out test45.out test46.out test47.out \
-		test48.out test51.out test53.out test54.out test55.out
+		test48.out test51.out test53.out test54.out \
+		test55.out test56.out
 
 SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
 		test8.out test9.out test11.out test13.out test14.out \
diff --git a/src/testdir/test49.vim b/src/testdir/test49.vim
index 46a29ff..1b336de 100644
--- a/src/testdir/test49.vim
+++ b/src/testdir/test49.vim
@@ -1,6 +1,6 @@
 " Vim script language tests
 " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
-" Last Change:	2005 Feb 03
+" Last Change:	2005 May 18
 
 "-------------------------------------------------------------------------------
 " Test environment							    {{{1
diff --git a/src/version.h b/src/version.h
index 2915546..487e09f 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 Apr 24)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 24, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 May 18)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 May 18, compiled "
