diff --git a/src/diff.c b/src/diff.c
index bc0364c..4896c04 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -839,7 +839,13 @@
 		    (diff_flags & DIFF_ICASE) ? "-i " : "",
 		    tmp_orig, tmp_new);
 	    append_redir(cmd, p_srr, tmp_diff);
+#ifdef FEAT_AUTOCMD
+	    ++autocmd_block;	/* Avoid ShellCmdPost stuff */
+#endif
 	    (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
+#ifdef FEAT_AUTOCMD
+	    --autocmd_block;
+#endif
 	    vim_free(cmd);
 	}
     }
@@ -942,7 +948,13 @@
 		fullname != NULL ? fullname :
 # endif
 		eap->arg);
+#ifdef FEAT_AUTOCMD
+	++autocmd_block;	/* Avoid ShellCmdPost stuff */
+#endif
 	(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED);
+#ifdef FEAT_AUTOCMD
+	--autocmd_block;
+#endif
     }
 
 #ifdef UNIX
diff --git a/src/edit.c b/src/edit.c
index f2a5cda..a57787a 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -8494,6 +8494,16 @@
     pos_T	tpos;
 
     undisplay_dollar();
+
+#ifdef FEAT_WINDOWS
+    if (mod_mask & MOD_MASK_CTRL)
+    {
+	/* <C-PageUp>: tab page back */
+	goto_tabpage(-1);
+	return;
+    }
+#endif
+
     tpos = curwin->w_cursor;
     if (onepage(BACKWARD, 1L) == OK)
     {
@@ -8543,6 +8553,16 @@
     pos_T	tpos;
 
     undisplay_dollar();
+
+#ifdef FEAT_WINDOWS
+    if (mod_mask & MOD_MASK_CTRL)
+    {
+	/* <C-PageDown>: tab page forward */
+	goto_tabpage(0);
+	return;
+    }
+#endif
+
     tpos = curwin->w_cursor;
     if (onepage(FORWARD, 1L) == OK)
     {
diff --git a/src/ex_getln.c b/src/ex_getln.c
index e4a1c99..11069f2 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4444,8 +4444,9 @@
 	}
     }
 
-    /* Sort the results. */
-    sort_strings(*file, *num_file);
+    /* Sort the results.  Keep menu's in the specified order. */
+    if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+	sort_strings(*file, *num_file);
 
     return OK;
 }
diff --git a/src/misc1.c b/src/misc1.c
index c8d0000..905df15 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3085,6 +3085,7 @@
 		    mch_memmove(buf, buf + 3, (size_t)len);
 		continue;
 	    }
+	    break;
 	}
 #ifdef FEAT_MBYTE
 	if (has_mbyte)
@@ -4771,6 +4772,7 @@
 static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
 static int	cin_isbreak __ARGS((char_u *));
 static int	cin_is_cpp_baseclass __ARGS((char_u *line, colnr_T *col));
+static int	get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
 static int	cin_ends_in __ARGS((char_u *, char_u *, char_u *));
 static int	cin_skip2pos __ARGS((pos_T *trypos));
 static pos_T	*find_start_brace __ARGS((int));
@@ -5447,7 +5449,8 @@
     return (STRNCMP(p, "break", 5) == 0 && !vim_isIDc(p[5]));
 }
 
-/* Find the position of a C++ base-class declaration or
+/*
+ * Find the position of a C++ base-class declaration or
  * constructor-initialization. eg:
  *
  * class MyClass :
@@ -5462,10 +5465,11 @@
     static int
 cin_is_cpp_baseclass(line, col)
     char_u	*line;
-    colnr_T	*col;
+    colnr_T	*col;	    /* return: column to align with */
 {
     char_u	*s;
     int		class_or_struct, lookfor_ctor_init, cpp_base_class;
+    linenr_T	lnum = curwin->w_cursor.lnum;
 
     *col = 0;
 
@@ -5478,8 +5482,49 @@
 
     cpp_base_class = lookfor_ctor_init = class_or_struct = FALSE;
 
-    while(*s != NUL)
+    /* Search for a line starting with '#', empty, ending in ';' or containing
+     * '{' or '}' and start below it.  This handles the following situations:
+     *	a = cond ?
+     *	      func() :
+     *	           asdf;
+     *	func::foo()
+     *	      : something
+     *	{}
+     *	Foo::Foo (int one, int two)
+     *		: something(4),
+     *		somethingelse(3)
+     *	{}
+     */
+    while (lnum > 1)
     {
+	s = skipwhite(ml_get(lnum - 1));
+	if (*s == '#' || *s == NUL)
+	    break;
+	while (*s != NUL)
+	{
+	    s = cin_skipcomment(s);
+	    if (*s == '{' || *s == '}'
+		    || (*s == ';' && cin_nocode(s + 1)))
+		break;
+	    if (*s != NUL)
+		++s;
+	}
+	if (*s != NUL)
+	    break;
+	--lnum;
+    }
+
+    s = cin_skipcomment(ml_get(lnum));
+    for (;;)
+    {
+	if (*s == NUL)
+	{
+	    if (lnum == curwin->w_cursor.lnum)
+		break;
+	    /* Continue in the cursor line. */
+	    s = cin_skipcomment(ml_get(++lnum));
+	}
+
 	if (s[0] == ':')
 	{
 	    if (s[1] == ':')
@@ -5542,43 +5587,53 @@
 		lookfor_ctor_init = FALSE;
 
 		/* the first statement starts here: lineup with this one... */
-		if (cpp_base_class && *col == 0)
+		if (cpp_base_class)
 		    *col = (colnr_T)(s - line);
 	    }
 
+	    /* When the line ends in a comma don't align with it. */
+	    if (lnum == curwin->w_cursor.lnum && *s == ',' && cin_nocode(s + 1))
+		*col = 0;
+
 	    s = cin_skipcomment(s + 1);
 	}
     }
 
-    if (cpp_base_class && curwin->w_cursor.lnum > 1)
-    {
-	/* Check that there is no '?' in the previous line to catch:
-	 *	a = cond ?
-	 *	      func() :
-	 *	           asdf;
-	 */
-	s = ml_get(curwin->w_cursor.lnum - 1);
-	if (!cin_ispreproc(s))
-	    while (*s != NUL)
-	    {
-		s = cin_skipcomment(s);
-		if (*s == '?')
-		    /* Disable when finding a '?'... */
-		    cpp_base_class = FALSE;
-		else if (*s == ';' && cin_nocode(s + 1))
-		{
-		    /* ...but re-enable when the line ends in ';'. */
-		    cpp_base_class = TRUE;
-		    break;
-		}
-		if (*s != NUL)
-		    ++s;
-	    }
-    }
-
     return cpp_base_class;
 }
 
+    static int
+get_baseclass_amount(col, ind_maxparen, ind_maxcomment, ind_cpp_baseclass)
+    int		col;
+    int		ind_maxparen;
+    int		ind_maxcomment;
+    int		ind_cpp_baseclass;
+{
+    int		amount;
+    colnr_T	vcol;
+    pos_T	*trypos;
+
+    if (col == 0)
+    {
+	amount = get_indent();
+	if (find_last_paren(ml_get_curline(), '(', ')')
+		&& (trypos = find_match_paren(ind_maxparen,
+						     ind_maxcomment)) != NULL)
+	    amount = get_indent_lnum(trypos->lnum); /* XXX */
+	if (!cin_ends_in(ml_get_curline(), (char_u *)",", NULL))
+	    amount += ind_cpp_baseclass;
+    }
+    else
+    {
+	curwin->w_cursor.col = col;
+	getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
+	amount = (int)vcol;
+    }
+    if (amount < ind_cpp_baseclass)
+	amount = ind_cpp_baseclass;
+    return amount;
+}
+
 /*
  * Return TRUE if string "s" ends with the string "find", possibly followed by
  * white space and comments.  Skip strings and comments.
@@ -6902,22 +6957,17 @@
 			else
 			    amount += ind_continuation;
 		    }
-		    else if (col == 0 || theline[0] == '{')
+		    else if (theline[0] == '{')
 		    {
-			amount = get_indent();
-			if (find_last_paren(l, '(', ')')
-				&& (trypos = find_match_paren(ind_maxparen,
-					ind_maxcomment)) != NULL)
-			    amount = get_indent_lnum(trypos->lnum); /* XXX */
-			if (theline[0] != '{')
-			    amount += ind_cpp_baseclass;
+			/* Need to find start of the declaration. */
+			lookfor = LOOKFOR_UNTERM;
+			ind_continuation = 0;
+			continue;
 		    }
 		    else
-		    {
-			curwin->w_cursor.col = col;
-			getvcol(curwin, &curwin->w_cursor, &col, NULL, NULL);
-			amount = (int)col;
-		    }
+								     /* XXX */
+			amount = get_baseclass_amount(col, ind_maxparen,
+					   ind_maxcomment, ind_cpp_baseclass);
 		    break;
 		}
 		else if (lookfor == LOOKFOR_CPP_BASECLASS)
@@ -6967,7 +7017,8 @@
 		     * If we are looking for ',', we also look for matching
 		     * braces.
 		     */
-		    if (trypos == NULL && find_last_paren(l, '{', '}'))
+		    if (trypos == NULL && terminated == ','
+					      && find_last_paren(l, '{', '}'))
 			trypos = find_start_brace(ind_maxcomment);
 
 		    if (trypos != NULL)
@@ -7490,21 +7541,9 @@
 		}
 		if (n)
 		{
-		    if (col == 0)
-		    {
-			amount = get_indent() + ind_cpp_baseclass;  /* XXX */
-			if (find_last_paren(l, '(', ')')
-				&& (trypos = find_match_paren(ind_maxparen,
-					ind_maxcomment)) != NULL)
-			    amount = get_indent_lnum(trypos->lnum)
-					   + ind_cpp_baseclass;	    /* XXX */
-		    }
-		    else
-		    {
-			curwin->w_cursor.col = col;
-			getvcol(curwin, &curwin->w_cursor, &col, NULL, NULL);
-			amount = (int)col;
-		    }
+								     /* XXX */
+		    amount = get_baseclass_amount(col, ind_maxparen,
+					   ind_maxcomment, ind_cpp_baseclass);
 		    break;
 		}
 
@@ -7604,7 +7643,7 @@
 		 *     bar;
 		 * indent_to_0 here;
 		 */
-		if (cin_ends_in(l, (char_u*)";", NULL))
+		if (cin_ends_in(l, (char_u *)";", NULL))
 		{
 		    l = ml_get(curwin->w_cursor.lnum - 1);
 		    if (cin_ends_in(l, (char_u *)",", NULL)
diff --git a/src/option.c b/src/option.c
index 36cfe03..70f686a 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2066,7 +2066,7 @@
     {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
 #ifdef FEAT_SESSION
 			    (char_u *)&p_ssop, PV_NONE,
-	 {(char_u *)"blank,buffers,curdir,folds,help,options,tabpage,winsize",
+	 {(char_u *)"blank,buffers,curdir,folds,help,options,tabpages,winsize",
 							       (char_u *)0L}
 #else
 			    (char_u *)NULL, PV_NONE,
@@ -6458,6 +6458,12 @@
 	if (check_opt_strings(p_fcl, p_fcl_values, TRUE) != OK)
 	    errmsg = e_invarg;
     }
+    /* 'foldignore' */
+    else if (gvarp == &curwin->w_allbuf_opt.wo_fdi)
+    {
+	if (foldmethodIsIndent(curwin))
+	    foldUpdateAll(curwin);
+    }
 #endif
 
 #ifdef FEAT_VIRTUALEDIT
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 50a03a5..d196c86 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -584,20 +584,6 @@
 	for (p = (char *)error_ga.ga_data; *p; ++p)
 	    if (!isspace(*p))
 	    {
-#if 0
-		/* Truncate a very long message, it will go off-screen. */
-		if (STRLEN(p) > 2000)
-		{
-		    char_u	*s = p + 2000 - 14;
-
-#ifdef FEAT_MBYTE
-		    if (has_mbyte)
-			s -= (*mb_head_off)(p, s);
-#endif
-		    STRCPY(s, _("...(truncated)"));
-		}
-#endif
-
 		(void)gui_mch_dialog(
 #ifdef FEAT_GUI
 				     gui.starting ? VIM_INFO :
@@ -608,13 +594,6 @@
 #endif
 					     (char_u *)_("Error"),
 				     p, (char_u *)_("&Ok"), 1, NULL);
-#if 0
-#ifdef WIN3264
-		MessageBox(NULL, p, "Vim", MB_TASKMODAL|MB_SETFOREGROUND);
-#else
-		MessageBox(NULL, p, "Vim", MB_TASKMODAL);
-#endif
-#endif
 		break;
 	    }
 	ga_clear(&error_ga);
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index 51ad720..8983118 100644
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
Binary files differ
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index b197a28..2c7fd17 100644
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -618,7 +618,7 @@
 
 Constructor::Constructor(int a,
 		int b ) /*x*/ : /*x*/ BaseClass(a),
-							  member(b)
+	member(b)
 {
 }
 
@@ -651,7 +651,7 @@
 };
 
 class CAbc : public BaseClass1,
-			 protected BaseClass2
+	protected BaseClass2
 {
 };
 
@@ -730,6 +730,31 @@
 	next_line_of_code();
 }
 
+barry()
+{
+	Foo::Foo (int one,
+			int two)
+		: something(4)
+	{}
+}
+
+barry()
+{
+	Foo::Foo (int one, int two)
+		: something(4)
+	{}
+}
+
+Constructor::Constructor(int a,
+		int b 
+		)  : 
+	BaseClass(a,
+			b,
+			c),
+	mMember(b)
+{
+}
+
 /* end of AUTO */
 
 
@@ -1070,6 +1095,16 @@
 };
 
 
+	void
+foo()
+{
+	if (a)
+	{
+	} else
+		asdf;
+}
+
+
 {
 	averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
 			asdasdf,
diff --git a/src/version.h b/src/version.h
index 980a85c..11f5d83 100644
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70d"
 #define VIM_VERSION_SHORT	"7.0d"
-#define VIM_VERSION_MEDIUM	"7.0d02 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0d02 BETA (2006 Apr 12)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0d02 BETA (2006 Apr 12, compiled "
+#define VIM_VERSION_MEDIUM	"7.0d03 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0d03 BETA (2006 Apr 13)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0d03 BETA (2006 Apr 13, compiled "
