diff --git a/src/charset.c b/src/charset.c
index 1e1b8b1..18a6935 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -870,7 +870,7 @@
     char_u	*s;
 
     for (s = line; *s != NUL && (len == MAXCOL || s < line + len);
-								mb_ptr_adv(s))
+								MB_PTR_ADV(s))
 	col += win_lbr_chartabsize(wp, line, s, col, NULL);
     return (int)col;
 }
@@ -1026,7 +1026,7 @@
     int		retval;
 
     retval = lbr_chartabsize(line, *s, col);
-    mb_ptr_adv(*s);
+    MB_PTR_ADV(*s);
     return retval;
 }
 
@@ -1089,8 +1089,8 @@
      * needs a break here
      */
     if (wp->w_p_lbr
-	    && vim_isbreak(c)
-	    && !vim_isbreak(s[1])
+	    && VIM_ISBREAK(c)
+	    && !VIM_ISBREAK(s[1])
 	    && wp->w_p_wrap
 # ifdef FEAT_WINDOWS
 	    && wp->w_width != 0
@@ -1115,12 +1115,12 @@
 	for (;;)
 	{
 	    ps = s;
-	    mb_ptr_adv(s);
+	    MB_PTR_ADV(s);
 	    c = *s;
 	    if (!(c != NUL
-		    && (vim_isbreak(c)
-			|| (!vim_isbreak(c)
-			    && (col2 == col || !vim_isbreak(*ps))))))
+		    && (VIM_ISBREAK(c)
+			|| (!VIM_ISBREAK(c)
+			    && (col2 == col || !VIM_ISBREAK(*ps))))))
 		break;
 
 	    col2 += win_chartabsize(wp, s, col2);
@@ -1369,7 +1369,7 @@
 		break;
 
 	    vcol += incr;
-	    mb_ptr_adv(ptr);
+	    MB_PTR_ADV(ptr);
 	}
     }
     else
@@ -1390,7 +1390,7 @@
 		break;
 
 	    vcol += incr;
-	    mb_ptr_adv(ptr);
+	    MB_PTR_ADV(ptr);
 	}
     }
     if (start != NULL)
diff --git a/src/edit.c b/src/edit.c
index 7082b9a..45eaf0f 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -857,7 +857,7 @@
 
 		    if (str != NULL)
 		    {
-			for (p = str; *p != NUL; mb_ptr_adv(p))
+			for (p = str; *p != NUL; MB_PTR_ADV(p))
 			    ins_compl_addleader(PTR2CHAR(p));
 			vim_free(str);
 		    }
@@ -1492,7 +1492,7 @@
 		    if (*str != NUL && stop_arrow() != FAIL)
 		    {
 			/* Insert the new value of v:char literally. */
-			for (p = str; *p != NUL; mb_ptr_adv(p))
+			for (p = str; *p != NUL; MB_PTR_ADV(p))
 			{
 			    c = PTR2CHAR(p);
 			    if (c == CAR || c == K_KENTER || c == NL)
@@ -2403,7 +2403,7 @@
 	    actual_len = 0;
 	    while (*p != NUL)
 	    {
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 		++actual_len;
 	    }
 	}
@@ -2419,7 +2419,7 @@
 	    actual_compl_length = 0;
 	    while (*p != NUL)
 	    {
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 		++actual_compl_length;
 	    }
 	}
@@ -2722,8 +2722,8 @@
 #ifdef FEAT_MBYTE
 	    if (has_mbyte)
 	    {
-		mb_ptr_adv(p);
-		mb_ptr_adv(s);
+		MB_PTR_ADV(p);
+		MB_PTR_ADV(s);
 	    }
 	    else
 #endif
@@ -3474,7 +3474,7 @@
 
     line = ml_get_curline();
     p = line + curwin->w_cursor.col;
-    mb_ptr_back(line, p);
+    MB_PTR_BACK(line, p);
 
     /* Stop completion when the whole word was deleted.  For Omni completion
      * allow the word to be deleted, we won't match everything.
@@ -4023,7 +4023,7 @@
 	if (len > 0)
 	    len -= (*mb_head_off)(p, p + len);
 #endif
-	for (p += len; *p != NUL; mb_ptr_adv(p))
+	for (p += len; *p != NUL; MB_PTR_ADV(p))
 	    AppendCharToRedobuff(K_BS);
     }
     else
@@ -5336,9 +5336,9 @@
 	    {
 		char_u	*p = line + startcol;
 
-		mb_ptr_back(line, p);
+		MB_PTR_BACK(line, p);
 		while (p > line && vim_isfilec(PTR2CHAR(p)))
-		    mb_ptr_back(line, p);
+		    MB_PTR_BACK(line, p);
 		if (p == line && vim_isfilec(PTR2CHAR(p)))
 		    startcol = 0;
 		else
diff --git a/src/eval.c b/src/eval.c
index 61843bc..f52de72 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2551,7 +2551,7 @@
 	    for (p = arg + STRLEN(arg); p >= arg; )
 	    {
 		xp->xp_pattern = p;
-		mb_ptr_back(arg, p);
+		MB_PTR_BACK(arg, p);
 		if (vim_iswhite(*p))
 		    break;
 	    }
@@ -4814,7 +4814,7 @@
     /*
      * Find the end of the string, skipping backslashed characters.
      */
-    for (p = *arg + 1; *p != NUL && *p != '"'; mb_ptr_adv(p))
+    for (p = *arg + 1; *p != NUL && *p != '"'; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	{
@@ -4952,7 +4952,7 @@
     /*
      * Find the end of the string, skipping ''.
      */
-    for (p = *arg + 1; *p != NUL; mb_ptr_adv(p))
+    for (p = *arg + 1; *p != NUL; MB_PTR_ADV(p))
     {
 	if (*p == '\'')
 	{
@@ -5910,7 +5910,7 @@
     if (str != NULL)
     {
 	len += (unsigned)STRLEN(str);
-	for (p = str; *p != NUL; mb_ptr_adv(p))
+	for (p = str; *p != NUL; MB_PTR_ADV(p))
 	    if (*p == '\'')
 		++len;
     }
@@ -6369,12 +6369,12 @@
 			|| *p == '{'
 			|| ((flags & FNE_INCL_BR) && (*p == '[' || *p == '.'))
 			|| mb_nest != 0
-			|| br_nest != 0); mb_ptr_adv(p))
+			|| br_nest != 0); MB_PTR_ADV(p))
     {
 	if (*p == '\'')
 	{
 	    /* skip over 'string' to avoid counting [ and ] inside it. */
-	    for (p = p + 1; *p != NUL && *p != '\''; mb_ptr_adv(p))
+	    for (p = p + 1; *p != NUL && *p != '\''; MB_PTR_ADV(p))
 		;
 	    if (*p == NUL)
 		break;
@@ -6382,7 +6382,7 @@
 	else if (*p == '"')
 	{
 	    /* skip over "str\"ing" to avoid counting [ and ] inside it. */
-	    for (p = p + 1; *p != NUL && *p != '"'; mb_ptr_adv(p))
+	    for (p = p + 1; *p != NUL && *p != '"'; MB_PTR_ADV(p))
 		if (*p == '\\' && p[1] != NUL)
 		    ++p;
 	    if (*p == NUL)
@@ -9410,7 +9410,7 @@
     /* Count up the path separators from the RHS.. so we know which part
      * of the path to return. */
     sepcount = 0;
-    for (p = *fnamep; p < *fnamep + *fnamelen; mb_ptr_adv(p))
+    for (p = *fnamep; p < *fnamep + *fnamelen; MB_PTR_ADV(p))
 	if (vim_ispathsep(*p))
 	    ++sepcount;
 
@@ -9528,7 +9528,7 @@
 	}
 
 	/* When "/." or "/.." is used: force expansion to get rid of it. */
-	for (p = *fnamep; *p != NUL; mb_ptr_adv(p))
+	for (p = *fnamep; *p != NUL; MB_PTR_ADV(p))
 	{
 	    if (vim_ispathsep(*p)
 		    && p[1] == '.'
@@ -9658,7 +9658,7 @@
 	*usedlen += 2;
 	s = get_past_head(*fnamep);
 	while (tail > s && after_pathsep(s, tail))
-	    mb_ptr_back(*fnamep, tail);
+	    MB_PTR_BACK(*fnamep, tail);
 	*fnamelen = (int)(tail - *fnamep);
 #ifdef VMS
 	if (*fnamelen > 0)
@@ -9677,7 +9677,7 @@
 	else
 	{
 	    while (tail > s && !after_pathsep(s, tail))
-		mb_ptr_back(*fnamep, tail);
+		MB_PTR_BACK(*fnamep, tail);
 	}
     }
 
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 386183d..898ad41 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4863,7 +4863,7 @@
 	    }
 	    if (cmd[0] == '\\' && cmd[1] != 0)	/* skip escaped characters */
 		++cmd;
-	    mb_ptr_adv(cmd);
+	    MB_PTR_ADV(cmd);
 	}
 
 	if (!eap->skip)
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index f8d35dc..2da38b7 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3526,7 +3526,7 @@
     {
 	/* directory is not yet in 'runtimepath', add it */
 	p4 = p3 = p2 = p1 = get_past_head(ffname);
-	for (p = p1; *p; mb_ptr_adv(p))
+	for (p = p1; *p; MB_PTR_ADV(p))
 	    if (vim_ispathsep_nocolon(*p))
 	    {
 		p4 = p3; p3 = p2; p2 = p1; p1 = p;
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 0bf940f..f107ee7 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3696,7 +3696,7 @@
 		    return NULL;    /* It's a comment */
 		}
 	    }
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 	}
     }
 
@@ -3720,7 +3720,7 @@
 	{
 	    if (*p == '\\' && *(p + 1) != NUL)
 		++p; /* skip over escaped character */
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 	}
     }
 
@@ -3780,7 +3780,7 @@
 		    else
 #endif
 			len = 1;
-		    mb_ptr_adv(p);
+		    MB_PTR_ADV(p);
 		}
 		if (in_quote)
 		    bow = p;
@@ -3788,7 +3788,7 @@
 		    xp->xp_pattern = p;
 		p -= len;
 	    }
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 	}
 
 	/*
@@ -4204,7 +4204,7 @@
 			    arg = p + 1;
 			else if (*p == '\\' && *(p + 1) != NUL)
 			    ++p; /* skip over escaped character */
-			mb_ptr_adv(p);
+			MB_PTR_ADV(p);
 		    }
 		    xp->xp_pattern = arg;
 		}
@@ -5280,7 +5280,7 @@
     p = eap->arg;
 #endif
 
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == Ctrl_V)
 	{
@@ -5380,7 +5380,7 @@
 	    else
 		++p;
 	}
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     }
     return p;
 }
@@ -11861,7 +11861,7 @@
     if (*flagp & SSOP_SLASH)
     {
 	/* change all backslashes to forward slashes */
-	for (p = sname; *p != NUL; mb_ptr_adv(p))
+	for (p = sname; *p != NUL; MB_PTR_ADV(p))
 	    if (*p == '\\')
 		*p = '/';
     }
diff --git a/src/ex_getln.c b/src/ex_getln.c
index d3fda24..01286ac 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4296,7 +4296,7 @@
 	    t = p;
 	    had_sep = FALSE;
 	}
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     }
     return t;
 }
@@ -5370,7 +5370,7 @@
 	if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
 	{
 	    e -= 4;
-	    for (s = e; s > match; mb_ptr_back(match, s))
+	    for (s = e; s > match; MB_PTR_BACK(match, s))
 		if (s < match || vim_ispathsep(*s))
 		    break;
 	    ++s;
diff --git a/src/fileio.c b/src/fileio.c
index 48955e0..25706cc 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -6247,7 +6247,7 @@
      * Then truncate what is after the '/', '\' or ':' to 8 characters for
      * MSDOS and 26 characters for AMIGA, a lot more for UNIX.
      */
-    for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+    for (ptr = retval + fnamelen; ptr > retval; MB_PTR_BACK(retval, ptr))
     {
 	if (*ext == '.'
 #ifdef USE_LONG_FNAME
diff --git a/src/fold.c b/src/fold.c
index db8da63..9597ab8 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -2064,7 +2064,7 @@
 	}
 	else
 	{
-	    mb_ptr_adv(s);
+	    MB_PTR_ADV(s);
 	}
     }
 }
@@ -3249,7 +3249,7 @@
 		--flp->lvl_next;
 	}
 	else
-	    mb_ptr_adv(s);
+	    MB_PTR_ADV(s);
     }
 
     /* The level can't go negative, must be missing a start marker. */
diff --git a/src/gui.c b/src/gui.c
index 36d6975..34f9f20 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -4500,7 +4500,7 @@
 	for (;;)
 	{
 	    w = chartabsize(p, col);
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 	    if (*p == NUL)		/* don't count the last character */
 		break;
 	    col += w;
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index c015d7e..d22a3ce 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1522,7 +1522,7 @@
 	    else if (*p == DLG_HOTKEY_CHAR)
 		*p++ = '_';
 	    else
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 	}
 	array[count] = NULL; /* currently not relied upon, but doesn't hurt */
     }
diff --git a/src/macros.h b/src/macros.h
index 559a4be..97e7e83 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -8,6 +8,9 @@
 
 /*
  * macros.h: macro definitions for often used code
+ *
+ * Macros should be ALL_CAPS.  An exception is for where a function is
+ * replaced and an argument is not used more than once.
  */
 
 /*
@@ -161,10 +164,10 @@
 #endif
 
 /*
- * vim_isbreak() is used very often if 'linebreak' is set, use a macro to make
- * it work fast.
+ * VIM_ISBREAK() is used very often if 'linebreak' is set, use a macro to make
+ * it work fast.  Only works for single byte characters!
  */
-#define vim_isbreak(c) (breakat_flags[(char_u)(c)])
+#define VIM_ISBREAK(c) ((c) < 256 && breakat_flags[(char_u)(c)])
 
 /*
  * On VMS file names are different and require a translation.
@@ -190,9 +193,7 @@
 #  define mch_stat(n, p)	vim_stat((n), (p))
 # else
 #  ifdef STAT_IGNORES_SLASH
-    /* On Solaris stat() accepts "file/" as if it was "file".  Return -1 if
-     * the name ends in "/" and it's not a directory. */
-#   define mch_stat(n, p)	(illegal_slash(n) ? -1 : stat((n), (p)))
+#   define mch_stat(n, p)	vim_stat((n), (p))
 #  else
 #   define mch_stat(n, p)	stat((n), (p))
 #  endif
@@ -258,22 +259,22 @@
 #endif
 
 /*
- * mb_ptr_adv(): advance a pointer to the next character, taking care of
+ * MB_PTR_ADV(): advance a pointer to the next character, taking care of
  * multi-byte characters if needed.
- * mb_ptr_back(): backup a pointer to the previous character, taking care of
+ * MB_PTR_BACK(): backup a pointer to the previous character, taking care of
  * multi-byte characters if needed.
  * MB_COPY_CHAR(f, t): copy one char from "f" to "t" and advance the pointers.
  * PTR2CHAR(): get character from pointer.
  */
 #ifdef FEAT_MBYTE
 /* Get the length of the character p points to */
-# define MB_PTR2LEN(p)		(has_mbyte ? (*mb_ptr2len)(p) : 1)
+# define MB_PTR2LEN(p)	    (has_mbyte ? (*mb_ptr2len)(p) : 1)
 /* Advance multi-byte pointer, skip over composing chars. */
-# define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
+# define MB_PTR_ADV(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
 /* Advance multi-byte pointer, do not skip over composing chars. */
-# define mb_cptr_adv(p)	    p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1
+# define MB_CPTR_ADV(p)	    p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1
 /* Backup multi-byte pointer. Only use with "p" > "s" ! */
-# define mb_ptr_back(s, p)  p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
+# define MB_PTR_BACK(s, p)  p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
 /* get length of multi-byte char, not including composing chars */
 # define MB_CPTR2LEN(p)	    (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
 
@@ -284,9 +285,9 @@
 #else
 # define MB_PTR2LEN(p)		1
 # define MB_CPTR2LEN(p)		1
-# define mb_ptr_adv(p)		++p
-# define mb_cptr_adv(p)		++p
-# define mb_ptr_back(s, p)	--p
+# define MB_PTR_ADV(p)		++p
+# define MB_CPTR_ADV(p)		++p
+# define MB_PTR_BACK(s, p)	--p
 # define MB_COPY_CHAR(f, t)	*t++ = *f++
 # define MB_CHARLEN(p)		STRLEN(p)
 # define MB_CHAR2LEN(c)		1
diff --git a/src/mark.c b/src/mark.c
index 0265160..194125e 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -695,7 +695,7 @@
 	return NULL;
     /* Truncate the line to fit it in the window */
     len = 0;
-    for (p = s; *p != NUL; mb_ptr_adv(p))
+    for (p = s; *p != NUL; MB_PTR_ADV(p))
     {
 	len += ptr2cells(p);
 	if (len >= Columns - lead_len)
diff --git a/src/mbyte.c b/src/mbyte.c
index 11dc0fb..d9bca6b 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4047,7 +4047,7 @@
     char_u *p)
 {
     if (p > line)
-	mb_ptr_back(line, p);
+	MB_PTR_BACK(line, p);
     return p;
 }
 
@@ -5708,7 +5708,6 @@
 
 
 #ifdef USE_X11R6_XIM
-static void xim_instantiate_cb(Display *display, XPointer client_data, XPointer	call_data);
 static void xim_destroy_cb(XIM im, XPointer client_data, XPointer call_data);
 
     static void
diff --git a/src/memline.c b/src/memline.c
index f9852e5..723bcd4 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -2028,7 +2028,7 @@
 	if (s != NULL)
 	{
 	    STRCPY(s, f);
-	    for (d = s; *d != NUL; mb_ptr_adv(d))
+	    for (d = s; *d != NUL; MB_PTR_ADV(d))
 		if (vim_ispathsep(*d))
 		    *d = '%';
 	    d = concat_fnames(dir, s, TRUE);
@@ -4015,7 +4015,7 @@
 
 #ifdef WIN3264
     if (retval != NULL)
-	for (t = gettail(retval); *t != NUL; mb_ptr_adv(t))
+	for (t = gettail(retval); *t != NUL; MB_PTR_ADV(t))
 	    if (*t == ':')
 		*t = '%';
 #endif
@@ -4154,7 +4154,7 @@
 	if (buf_fname == NULL)
 	    buf_fname = buf->b_fname;
 	else
-	    for (t = gettail(buf_fname); *t != NUL; mb_ptr_adv(t))
+	    for (t = gettail(buf_fname); *t != NUL; MB_PTR_ADV(t))
 		if (*t == ':')
 		    *t = '%';
     }
diff --git a/src/menu.c b/src/menu.c
index 05a229b..b1b4ec7 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -152,7 +152,7 @@
 	{
 	    if (*arg == '\\')
 		STRMOVE(arg, arg + 1);
-	    mb_ptr_adv(arg);
+	    MB_PTR_ADV(arg);
 	}
 	if (*arg != NUL)
 	{
@@ -661,7 +661,7 @@
 
 		    STRCPY(tearpath, menu_path);
 		    idx = (int)(next_name - path_name - 1);
-		    for (s = tearpath; *s && s < tearpath + idx; mb_ptr_adv(s))
+		    for (s = tearpath; *s && s < tearpath + idx; MB_PTR_ADV(s))
 		    {
 			if ((*s == '\\' || *s == Ctrl_V) && s[1])
 			{
@@ -1472,7 +1472,7 @@
 {
     char_u  *p;
 
-    for (p = name; *p && *p != '.'; mb_ptr_adv(p))
+    for (p = name; *p && *p != '.'; MB_PTR_ADV(p))
     {
 	if (*p == '\\' || *p == Ctrl_V)
 	{
@@ -2485,7 +2485,7 @@
 {
     char_u  *p;
 
-    for (p = name; *p && *p != '.'; mb_ptr_adv(p))
+    for (p = name; *p && *p != '.'; MB_PTR_ADV(p))
 	if (*p == '\\')
 	    STRMOVE(p, p + 1);
 }
diff --git a/src/message.c b/src/message.c
index a4d2cc8..06f8cb9 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3746,7 +3746,7 @@
 	    }
 
 	    /* advance to the next character */
-	    mb_ptr_adv(r);
+	    MB_PTR_ADV(r);
 	}
 
 	if (copy)
diff --git a/src/misc1.c b/src/misc1.c
index e862219..97c333a 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -1140,7 +1140,7 @@
 
 			    while (old_size < repl_size && p > leader)
 			    {
-				mb_ptr_back(leader, p);
+				MB_PTR_BACK(leader, p);
 				old_size += ptr2cells(p);
 			    }
 			    l = lead_repl_len - (int)(endp - p);
@@ -2070,7 +2070,7 @@
     while (*s != NUL && --column >= 0)
     {
 	col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL);
-	mb_ptr_adv(s);
+	MB_PTR_ADV(s);
     }
 
     /*
@@ -4837,7 +4837,7 @@
     {
 	if (vim_ispathsep_nocolon(*p2))
 	    p1 = p2 + 1;
-	mb_ptr_adv(p2);
+	MB_PTR_ADV(p2);
     }
     return p1;
 }
@@ -4875,7 +4875,7 @@
 		dir_end = next_dir_end;
 	    look_for_sep = TRUE;
 	}
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     }
     return dir_end;
 }
@@ -4910,7 +4910,7 @@
 getnextcomp(char_u *fname)
 {
     while (*fname && !vim_ispathsep(*fname))
-	mb_ptr_adv(fname);
+	MB_PTR_ADV(fname);
     if (*fname)
 	++fname;
     return fname;
@@ -10378,7 +10378,7 @@
     {
 	if (vim_ispathsep(**psep))
 	    return OK;
-	mb_ptr_back(path, *psep);
+	MB_PTR_BACK(path, *psep);
     }
 
     return FAIL;
@@ -10533,7 +10533,7 @@
     /* skip to the file or directory name */
     if (cutoff != NULL)
 	while (vim_ispathsep(*cutoff))
-	    mb_ptr_adv(cutoff);
+	    MB_PTR_ADV(cutoff);
 
     return cutoff;
 }
@@ -10790,7 +10790,7 @@
     static int
 has_env_var(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	    ++p;
@@ -10816,7 +10816,7 @@
     static int
 has_special_wildchar(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	/* Allow for escaping. */
 	if (*p == '\\' && p[1] != NUL)
@@ -11293,7 +11293,7 @@
 
 	/* Find the last path separator before the space. */
 	p1 = p_sh;
-	for (p2 = p_sh; p2 < p; mb_ptr_adv(p2))
+	for (p2 = p_sh; p2 < p; MB_PTR_ADV(p2))
 	    if (vim_ispathsep(*p2))
 		p1 = p2 + 1;
 	p = vim_strnsave(p1, (int)(p - p1));
diff --git a/src/misc2.c b/src/misc2.c
index cfdfc4c..a6f3c1e 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -196,7 +196,7 @@
 	    /* Count a tab for what it's worth (if list mode not on) */
 #ifdef FEAT_LINEBREAK
 	    csize = win_lbr_chartabsize(curwin, line, ptr, col, &head);
-	    mb_ptr_adv(ptr);
+	    MB_PTR_ADV(ptr);
 #else
 	    csize = lbr_chartabsize_adv(line, &ptr, col);
 #endif
@@ -1418,7 +1418,7 @@
 
     /* First count the number of extra bytes required. */
     length = (unsigned)STRLEN(string) + 3;  /* two quotes and a trailing NUL */
-    for (p = string; *p != NUL; mb_ptr_adv(p))
+    for (p = string; *p != NUL; MB_PTR_ADV(p))
     {
 # ifdef WIN32
 	if (!p_ssl)
@@ -1950,7 +1950,7 @@
     {
 	if (*p == c)
 	    retval = p;
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     }
     return retval;
 }
@@ -1971,7 +1971,7 @@
     {
 	if (vim_strchr(charset, *s) != NULL)
 	    return s;
-	mb_ptr_adv(s);
+	MB_PTR_ADV(s);
     }
     return NULL;
 }
@@ -3364,7 +3364,7 @@
  * Used for systems where stat() ignores a trailing slash on a file name.
  * The Vim code assumes a trailing slash is only ignored for a directory.
  */
-    int
+    static int
 illegal_slash(char *name)
 {
     if (name[0] == NUL)
@@ -3375,6 +3375,17 @@
 	return FALSE;	    /* trailing slash for a directory */
     return TRUE;
 }
+
+/*
+ * Special implementation of mch_stat() for Solaris.
+ */
+    int
+vim_stat(const char *name, stat_T *stp)
+{
+    /* On Solaris stat() accepts "file/" as if it was "file".  Return -1 if
+     * the name ends in "/" and it's not a directory. */
+    return illegal_slash(n) ? -1 : stat(n, p);
+}
 #endif
 
 #if defined(CURSOR_SHAPE) || defined(PROTO)
diff --git a/src/ops.c b/src/ops.c
index 8b883aa..23856c8 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -486,7 +486,7 @@
 	 * the part of which is displayed at the block's beginning. Let's start
 	 * searching from the next character. */
 	if (bd.startspaces)
-	    mb_ptr_adv(non_white);
+	    MB_PTR_ADV(non_white);
 
 	/* The character's column is in "bd.start_vcol".  */
 	non_white_col = bd.start_vcol;
@@ -526,7 +526,7 @@
 	    if (verbatim_copy_width + incr > destination_col)
 		break;
 	    verbatim_copy_width += incr;
-	    mb_ptr_adv(verbatim_copy_end);
+	    MB_PTR_ADV(verbatim_copy_end);
 	}
 
 	/* If "destination_col" is different from the width of the initial
@@ -3458,7 +3458,7 @@
 		goto end;
 	    p = ml_get_cursor();
 	    if (dir == FORWARD && *p != NUL)
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 	    ptr = vim_strsave(p);
 	    if (ptr == NULL)
 		goto end;
@@ -3468,7 +3468,7 @@
 	    oldp = ml_get_curline();
 	    p = oldp + curwin->w_cursor.col;
 	    if (dir == FORWARD && *p != NUL)
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 	    ptr = vim_strnsave(oldp, p - oldp);
 	    if (ptr == NULL)
 		goto end;
@@ -4489,11 +4489,11 @@
 	    if (has_mbyte)
 	    {
 		cend = curr + currsize;
-		mb_ptr_back(curr, cend);
+		MB_PTR_BACK(curr, cend);
 		endcurr1 = (*mb_ptr2char)(cend);
 		if (cend > curr)
 		{
-		    mb_ptr_back(curr, cend);
+		    MB_PTR_BACK(curr, cend);
 		    endcurr2 = (*mb_ptr2char)(cend);
 		}
 	    }
@@ -5262,7 +5262,7 @@
 	}
 #endif
 	prev_pstart = pstart;
-	mb_ptr_adv(pstart);
+	MB_PTR_ADV(pstart);
     }
     bdp->start_char_vcols = incr;
     if (bdp->start_vcol < oap->start_vcol)	/* line too short */
diff --git a/src/option.c b/src/option.c
index 2c4b1c2..e6c05ec 100644
--- a/src/option.c
+++ b/src/option.c
@@ -6785,7 +6785,7 @@
 	{
 	    if (ptr2cells(s) != 1)
 		errmsg = (char_u *)N_("E595: contains unprintable or wide character");
-	    mb_ptr_adv(s);
+	    MB_PTR_ADV(s);
 	}
     }
 #endif
@@ -11666,7 +11666,7 @@
 #ifdef BACKSLASH_IN_FILENAME
     /* For MS-Windows et al. we don't double backslashes at the start and
      * before a file name character. */
-    for (var = buf; *var != NUL; mb_ptr_adv(var))
+    for (var = buf; *var != NUL; MB_PTR_ADV(var))
 	if (var[0] == '\\' && var[1] == '\\'
 		&& expand_option_idx >= 0
 		&& (options[expand_option_idx].flags & P_EXPAND)
@@ -11866,7 +11866,7 @@
     for (p = p_langmap; p[0] != NUL; )
     {
 	for (p2 = p; p2[0] != NUL && p2[0] != ',' && p2[0] != ';';
-							       mb_ptr_adv(p2))
+							       MB_PTR_ADV(p2))
 	{
 	    if (p2[0] == '\\' && p2[1] != NUL)
 		++p2;
@@ -11892,7 +11892,7 @@
 	    to = NUL;
 	    if (p2 == NULL)
 	    {
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 		if (p[0] != ',')
 		{
 		    if (p[0] == '\\')
@@ -11932,10 +11932,10 @@
 		langmap_mapchar[from & 255] = to;
 
 	    /* Advance to next pair */
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 	    if (p2 != NULL)
 	    {
-		mb_ptr_adv(p2);
+		MB_PTR_ADV(p2);
 		if (*p == ';')
 		{
 		    p = p2;
diff --git a/src/os_amiga.c b/src/os_amiga.c
index 87fcca9..85e0c4e 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -1567,7 +1567,7 @@
     int
 mch_has_exp_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	    ++p;
@@ -1580,7 +1580,7 @@
     int
 mch_has_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	    ++p;
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 5f6e11d..a713ea1 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -454,7 +454,7 @@
     {
 	if (*p == psepcN)
 	    *p = psepc;
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     }
 }
 
@@ -600,7 +600,7 @@
     vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1);
     p = buf + STRLEN(buf);
     if (p > buf)
-	mb_ptr_back(buf, p);
+	MB_PTR_BACK(buf, p);
 
     /* Remove trailing '\\' except root path. */
     if (p > buf && (*p == '\\' || *p == '/') && p[-1] != ':')
@@ -720,7 +720,7 @@
     int
 mch_has_exp_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (vim_strchr((char_u *)"?*[", *p) != NULL
 		|| (*p == '~' && p[1] != NUL))
@@ -736,7 +736,7 @@
     int
 mch_has_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (vim_strchr((char_u *)
 #  ifdef VIM_BACKTICK
diff --git a/src/os_unix.c b/src/os_unix.c
index 9dd5c34..69868ac 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -6522,7 +6522,7 @@
     int
 mch_has_exp_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	    ++p;
@@ -6546,7 +6546,7 @@
     int
 mch_has_wildcard(char_u *p)
 {
-    for ( ; *p; mb_ptr_adv(p))
+    for ( ; *p; MB_PTR_ADV(p))
     {
 	if (*p == '\\' && p[1] != NUL)
 	    ++p;
diff --git a/src/os_win32.c b/src/os_win32.c
index ed15920..6016f86 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5741,7 +5741,7 @@
 	{
 	    char_u *p = pchBuf;
 	    for (n = 0; n < cchwritten; n++)
-		mb_cptr_adv(p);
+		MB_CPTR_ADV(p);
 	    written = p - pchBuf;
 	    g_coord.X += (SHORT)mb_string2cells(pchBuf, written);
 	}
diff --git a/src/popupmnu.c b/src/popupmnu.c
index fc5e1c3..58e3817 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -335,7 +335,7 @@
 		case 3: p = pum_array[idx].pum_extra; break;
 	    }
 	    if (p != NULL)
-		for ( ; ; mb_ptr_adv(p))
+		for ( ; ; MB_PTR_ADV(p))
 		{
 		    if (s == NULL)
 			s = p;
@@ -369,7 +369,7 @@
 					{
 					    size -= has_mbyte
 						    ? (*mb_ptr2cells)(rt) : 1;
-					    mb_ptr_adv(rt);
+					    MB_PTR_ADV(rt);
 					} while (size > pum_width);
 
 					if (size < pum_width)
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 83384c0..68c40da 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -83,7 +83,7 @@
 int after_pathsep(char_u *b, char_u *p);
 int same_directory(char_u *f1, char_u *f2);
 int vim_chdirfile(char_u *fname);
-int illegal_slash(char *name);
+int vim_stat(const char *name, stat_T *stp);
 char_u *parse_shape_opt(int what);
 int get_shape_idx(int mouse);
 void update_mouseshape(int shape_idx);
diff --git a/src/regexp.c b/src/regexp.c
index b33c08b..57f3423 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1205,7 +1205,7 @@
 	    {
 		++p;
 		if (*p != ']' && *p != NUL)
-		    mb_ptr_adv(p);
+		    MB_PTR_ADV(p);
 	    }
 	else if (*p == '\\'
 		&& !reg_cpo_bsl
@@ -1252,7 +1252,7 @@
 	mymagic = MAGIC_OFF;
     get_cpo_flags();
 
-    for (; p[0] != NUL; mb_ptr_adv(p))
+    for (; p[0] != NUL; MB_PTR_ADV(p))
     {
 	if (p[0] == dirc)	/* found end of regexp */
 	    break;
@@ -3864,7 +3864,7 @@
 	    {
 		if (cstrncmp(s, prog->regmust, &prog->regmlen) == 0)
 		    break;		/* Found it. */
-		mb_ptr_adv(s);
+		MB_PTR_ADV(s);
 	    }
 #endif
 	else
@@ -3872,7 +3872,7 @@
 	    {
 		if (cstrncmp(s, prog->regmust, &prog->regmlen) == 0)
 		    break;		/* Found it. */
-		mb_ptr_adv(s);
+		MB_PTR_ADV(s);
 	    }
 	if (s == NULL)		/* Not present. */
 	    goto theend;
@@ -4204,7 +4204,7 @@
     return TRUE;
 }
 
-#define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
+#define ADVANCE_REGINPUT() MB_PTR_ADV(reginput)
 
 /*
  * The arguments from BRACE_LIMITS are stored here.  They are actually local
@@ -4775,7 +4775,7 @@
 	    {
 		/* Skip composing characters. */
 		while (utf_iscomposing(utf_ptr2char(reginput)))
-		    mb_cptr_adv(reginput);
+		    MB_CPTR_ADV(reginput);
 	    }
 #endif
 	    break;
@@ -5557,7 +5557,7 @@
 			no = FAIL;
 		    else
 		    {
-			mb_ptr_back(regline, rp->rs_un.regsave.rs_u.ptr);
+			MB_PTR_BACK(regline, rp->rs_un.regsave.rs_u.ptr);
 			if (limit > 0 && (long)(behind_pos.rs_u.ptr
 				     - rp->rs_un.regsave.rs_u.ptr) > limit)
 			    no = FAIL;
@@ -5644,7 +5644,7 @@
 				fast_breakcheck();
 			    }
 			    else
-				mb_ptr_back(regline, reginput);
+				MB_PTR_BACK(regline, reginput);
 			}
 			else
 			{
@@ -5788,7 +5788,7 @@
 	    while (*scan != NUL && count < maxcount)
 	    {
 		++count;
-		mb_ptr_adv(scan);
+		MB_PTR_ADV(scan);
 	    }
 	    if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
 				      || rex.reg_line_lbr || count == maxcount)
@@ -5811,7 +5811,7 @@
 	{
 	    if (vim_isIDc(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
-		mb_ptr_adv(scan);
+		MB_PTR_ADV(scan);
 	    }
 	    else if (*scan == NUL)
 	    {
@@ -5842,7 +5842,7 @@
 	    if (vim_iswordp_buf(scan, rex.reg_buf)
 					  && (testval || !VIM_ISDIGIT(*scan)))
 	    {
-		mb_ptr_adv(scan);
+		MB_PTR_ADV(scan);
 	    }
 	    else if (*scan == NUL)
 	    {
@@ -5872,7 +5872,7 @@
 	{
 	    if (vim_isfilec(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
-		mb_ptr_adv(scan);
+		MB_PTR_ADV(scan);
 	    }
 	    else if (*scan == NUL)
 	    {
@@ -5913,7 +5913,7 @@
 	    else if (vim_isprintc(PTR2CHAR(scan)) == 1
 					  && (testval || !VIM_ISDIGIT(*scan)))
 	    {
-		mb_ptr_adv(scan);
+		MB_PTR_ADV(scan);
 	    }
 	    else if (rex.reg_line_lbr && *scan == '\n' && WITH_NL(OP(p)))
 		++scan;
@@ -7546,7 +7546,7 @@
 	    {
 		int had_backslash = FALSE;
 
-		for (s = eval_result; *s != NUL; mb_ptr_adv(s))
+		for (s = eval_result; *s != NUL; MB_PTR_ADV(s))
 		{
 		    /* Change NL to CR, so that it becomes a line break,
 		     * unless called from vim_regexec_nl().
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index de22dcb..13f5065 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1425,7 +1425,7 @@
 		    EMSG(_(e_nopresub));
 		    return FAIL;
 		}
-		for (lp = reg_prev_sub; *lp != NUL; mb_cptr_adv(lp))
+		for (lp = reg_prev_sub; *lp != NUL; MB_CPTR_ADV(lp))
 		{
 		    EMIT(PTR2CHAR(lp));
 		    if (lp != reg_prev_sub)
@@ -1672,7 +1672,7 @@
 		    else
 			EMIT(result);
 		    regparse = endp;
-		    mb_ptr_adv(regparse);
+		    MB_PTR_ADV(regparse);
 		    return OK;
 		}
 		/*
@@ -1684,7 +1684,7 @@
 		if (*regparse == '^')			/* negated range */
 		{
 		    negated = TRUE;
-		    mb_ptr_adv(regparse);
+		    MB_PTR_ADV(regparse);
 		    EMIT(NFA_START_NEG_COLL);
 		}
 		else
@@ -1694,7 +1694,7 @@
 		    startc = '-';
 		    EMIT(startc);
 		    EMIT(NFA_CONCAT);
-		    mb_ptr_adv(regparse);
+		    MB_PTR_ADV(regparse);
 		}
 		/* Emit the OR branches for each character in the [] */
 		emit_range = FALSE;
@@ -1797,7 +1797,7 @@
 		    {
 			emit_range = TRUE;
 			startc = oldstartc;
-			mb_ptr_adv(regparse);
+			MB_PTR_ADV(regparse);
 			continue;	    /* reading the end of the range */
 		    }
 
@@ -1817,7 +1817,7 @@
 			    )
 			)
 		    {
-			mb_ptr_adv(regparse);
+			MB_PTR_ADV(regparse);
 
 			if (*regparse == 'n')
 			    startc = reg_string ? NL : NFA_NEWL;
@@ -1832,7 +1832,7 @@
 				/* TODO(RE) This needs more testing */
 				startc = coll_get_char();
 				got_coll_char = TRUE;
-				mb_ptr_back(old_regparse, regparse);
+				MB_PTR_BACK(old_regparse, regparse);
 			    }
 			    else
 			    {
@@ -1932,10 +1932,10 @@
 			}
 		    }
 
-		    mb_ptr_adv(regparse);
+		    MB_PTR_ADV(regparse);
 		} /* while (p < endp) */
 
-		mb_ptr_back(old_regparse, regparse);
+		MB_PTR_BACK(old_regparse, regparse);
 		if (*regparse == '-')	    /* if last, '-' is just a char */
 		{
 		    EMIT('-');
@@ -1944,7 +1944,7 @@
 
 		/* skip the trailing ] */
 		regparse = endp;
-		mb_ptr_adv(regparse);
+		MB_PTR_ADV(regparse);
 
 		/* Mark end of the collection. */
 		if (negated == TRUE)
diff --git a/src/screen.c b/src/screen.c
index 306308b..a609076 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3397,7 +3397,7 @@
 #ifdef FEAT_MBYTE
 	    prev_ptr = ptr;
 #endif
-	    mb_ptr_adv(ptr);
+	    MB_PTR_ADV(ptr);
 	}
 
 	/* When:
@@ -4554,7 +4554,7 @@
 		 * Found last space before word: check for line break.
 		 */
 		if (wp->w_p_lbr && c0 == c
-				      && vim_isbreak(c) && !vim_isbreak(*ptr))
+				      && VIM_ISBREAK(c) && !VIM_ISBREAK(*ptr))
 		{
 # ifdef FEAT_MBYTE
 		    int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1) : 0;
@@ -6408,7 +6408,7 @@
     {
 	s += skip_status_match_char(xp, s);
 	len += ptr2cells(s);
-	mb_ptr_adv(s);
+	MB_PTR_ADV(s);
     }
 
     return len;
@@ -10469,7 +10469,7 @@
 		    while (len > room)
 		    {
 			len -= ptr2cells(p);
-			mb_ptr_adv(p);
+			MB_PTR_ADV(p);
 		    }
 		else
 #endif
diff --git a/src/search.c b/src/search.c
index 101bcff..51d8760 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3828,7 +3828,7 @@
 
 	/* We search forward until the cursor, because searching backwards is
 	 * very slow for DBCS encodings. */
-	for (p = line; p < line + curwin->w_cursor.col; mb_ptr_adv(p))
+	for (p = line; p < line + curwin->w_cursor.col; MB_PTR_ADV(p))
 	    if (*p == '>' || *p == '<')
 	    {
 		lc = *p;
@@ -3848,7 +3848,7 @@
 	{
 	    if (*p == '<')	/* find '<' under/before cursor */
 		break;
-	    mb_ptr_back(line, p);
+	    MB_PTR_BACK(line, p);
 	    if (*p == '>')	/* find '>' before cursor */
 		break;
 	}
@@ -3859,7 +3859,7 @@
     pos.lnum = curwin->w_cursor.lnum;
     pos.col = (colnr_T)(p - line);
 
-    mb_ptr_adv(p);
+    MB_PTR_ADV(p);
     if (end_tag)
 	/* check that there is a '/' after the '<' */
 	return *p == '/';
@@ -3974,7 +3974,7 @@
      */
     inc_cursor();
     p = ml_get_cursor();
-    for (cp = p; *cp != NUL && *cp != '>' && !vim_iswhite(*cp); mb_ptr_adv(cp))
+    for (cp = p; *cp != NUL && *cp != '>' && !vim_iswhite(*cp); MB_PTR_ADV(cp))
 	;
     len = (int)(cp - p);
     if (len == 0)
diff --git a/src/spell.c b/src/spell.c
index 1e1f03f..62299dc 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -468,7 +468,7 @@
     {
 	do
 	{
-	    mb_ptr_adv(mi.mi_fend);
+	    MB_PTR_ADV(mi.mi_fend);
 	} while (*mi.mi_fend != NUL && spell_iswordp(mi.mi_fend, wp));
 
 	if (capcol != NULL && *capcol == 0 && wp->w_s->b_cap_prog != NULL)
@@ -494,7 +494,7 @@
     /* case-fold the word with one non-word character, so that we can check
      * for the word end. */
     if (*mi.mi_fend != NUL)
-	mb_ptr_adv(mi.mi_fend);
+	MB_PTR_ADV(mi.mi_fend);
 
     (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword,
 							     MAXWLEN + 1);
@@ -582,7 +582,7 @@
 	else if (mi.mi_end == ptr)
 	    /* Always include at least one character.  Required for when there
 	     * is a mixup in "midword". */
-	    mb_ptr_adv(mi.mi_end);
+	    MB_PTR_ADV(mi.mi_end);
 	else if (mi.mi_result == SP_BAD
 		&& LANGP_ENTRY(wp->w_s->b_langp, 0)->lp_slang->sl_nobreak)
 	{
@@ -598,8 +598,8 @@
 		fp = mi.mi_fword;
 		for (;;)
 		{
-		    mb_ptr_adv(p);
-		    mb_ptr_adv(fp);
+		    MB_PTR_ADV(p);
+		    MB_PTR_ADV(fp);
 		    if (p >= mi.mi_end)
 			break;
 		    mi.mi_compoff = (int)(fp - mi.mi_fword);
@@ -827,8 +827,8 @@
 	    p = mip->mi_word;
 	    if (STRNCMP(ptr, p, wlen) != 0)
 	    {
-		for (s = ptr; s < ptr + wlen; mb_ptr_adv(s))
-		    mb_ptr_adv(p);
+		for (s = ptr; s < ptr + wlen; MB_PTR_ADV(s))
+		    MB_PTR_ADV(p);
 		wlen = (int)(p - mip->mi_word);
 	    }
 	}
@@ -952,8 +952,8 @@
 		    {
 			/* case folding may have changed the length */
 			p = mip->mi_word;
-			for (s = ptr; s < ptr + mip->mi_compoff; mb_ptr_adv(s))
-			    mb_ptr_adv(p);
+			for (s = ptr; s < ptr + mip->mi_compoff; MB_PTR_ADV(s))
+			    MB_PTR_ADV(p);
 		    }
 		    else
 #endif
@@ -969,7 +969,7 @@
 			 * character we do not accept a Onecap word.  We do
 			 * accept a no-caps word, even when the dictionary
 			 * word specifies ONECAP. */
-			mb_ptr_back(mip->mi_word, p);
+			MB_PTR_BACK(mip->mi_word, p);
 			if (spell_iswordp_nmw(p, mip->mi_win)
 				? capflags == WF_ONECAP
 				: (flags & WF_ONECAP) != 0
@@ -1038,8 +1038,8 @@
 		    p = mip->mi_fword;
 		    if (STRNCMP(ptr, p, wlen) != 0)
 		    {
-			for (s = ptr; s < ptr + wlen; mb_ptr_adv(s))
-			    mb_ptr_adv(p);
+			for (s = ptr; s < ptr + wlen; MB_PTR_ADV(s))
+			    MB_PTR_ADV(p);
 			mip->mi_compoff = (int)(p - mip->mi_fword);
 		    }
 		}
@@ -1506,12 +1506,12 @@
     p = mip->mi_fend;
     do
     {
-	mb_ptr_adv(mip->mi_fend);
+	MB_PTR_ADV(mip->mi_fend);
     } while (*mip->mi_fend != NUL && spell_iswordp(mip->mi_fend, mip->mi_win));
 
     /* Include the non-word character so that we can check for the word end. */
     if (*mip->mi_fend != NUL)
-	mb_ptr_adv(mip->mi_fend);
+	MB_PTR_ADV(mip->mi_fend);
 
     (void)spell_casefold(p, (int)(mip->mi_fend - p),
 			     mip->mi_fword + mip->mi_fwordlen,
@@ -2760,7 +2760,7 @@
     int		past_second = FALSE;	/* past second word char */
 
     /* find first letter */
-    for (p = word; !spell_iswordp_nmw(p, curwin); mb_ptr_adv(p))
+    for (p = word; !spell_iswordp_nmw(p, curwin); MB_PTR_ADV(p))
 	if (end == NULL ? *p == NUL : p >= end)
 	    return 0;	    /* only non-word characters, illegal word */
 #ifdef FEAT_MBYTE
@@ -2775,7 +2775,7 @@
      * Need to check all letters to find a word with mixed upper/lower.
      * But a word with an upper char only at start is a ONECAP.
      */
-    for ( ; end == NULL ? *p != NUL : p < end; mb_ptr_adv(p))
+    for ( ; end == NULL ? *p != NUL : p < end; MB_PTR_ADV(p))
 	if (spell_iswordp_nmw(p, curwin))
 	{
 	    c = PTR2CHAR(p);
@@ -2818,7 +2818,7 @@
 	/* Count the number of UPPER and lower case letters. */
 	l = u = 0;
 	first = FALSE;
-	for (p = word; p < end; mb_ptr_adv(p))
+	for (p = word; p < end; MB_PTR_ADV(p))
 	{
 	    c = PTR2CHAR(p);
 	    if (SPELL_ISUPPER(c))
@@ -3385,10 +3385,10 @@
 	p = line + curwin->w_cursor.col;
 	/* Backup to before start of word. */
 	while (p > line && spell_iswordp_nmw(p, curwin))
-	    mb_ptr_back(line, p);
+	    MB_PTR_BACK(line, p);
 	/* Forward to start of word. */
 	while (*p != NUL && !spell_iswordp_nmw(p, curwin))
-	    mb_ptr_adv(p);
+	    MB_PTR_ADV(p);
 
 	if (!spell_iswordp_nmw(p, curwin))		/* No word found. */
 	{
@@ -3624,7 +3624,7 @@
 	p = line + endcol;
 	for (;;)
 	{
-	    mb_ptr_back(line, p);
+	    MB_PTR_BACK(line, p);
 	    if (p == line || spell_iswordp_nmw(p, curwin))
 		break;
 	    if (vim_regexec(&regmatch, p, 0)
@@ -4644,7 +4644,7 @@
 
 		    /* Get pointer to last char of previous word. */
 		    p = preword + sp->ts_prewordlen;
-		    mb_ptr_back(preword, p);
+		    MB_PTR_BACK(preword, p);
 		}
 	    }
 
@@ -4746,11 +4746,11 @@
 		    /* Give a penalty when changing non-word char to word
 		     * char, e.g., "thes," -> "these". */
 		    p = fword + sp->ts_fidx;
-		    mb_ptr_back(fword, p);
+		    MB_PTR_BACK(fword, p);
 		    if (!spell_iswordp(p, curwin))
 		    {
 			p = preword + STRLEN(preword);
-			mb_ptr_back(preword, p);
+			MB_PTR_BACK(preword, p);
 			if (spell_iswordp(p, curwin))
 			    newscore += SCORE_NONWORD;
 		    }
@@ -5157,7 +5157,7 @@
 				     * to the score.  Also for the soundfold
 				     * tree (might seem illogical but does
 				     * give better scores). */
-				    mb_ptr_back(tword, p);
+				    MB_PTR_BACK(tword, p);
 				    if (c == mb_ptr2char(p))
 					sp->ts_score -= SCORE_INS
 							       - SCORE_INSDUP;
@@ -5867,9 +5867,9 @@
     char_u	*p;
     int		i = 0;
 
-    for (p = fword; p < fword + flen; mb_ptr_adv(p))
+    for (p = fword; p < fword + flen; MB_PTR_ADV(p))
 	++i;
-    for (p = word; i > 0; mb_ptr_adv(p))
+    for (p = word; i > 0; MB_PTR_ADV(p))
 	--i;
     return (int)(p - word);
 }
@@ -6745,8 +6745,8 @@
 	badlen = (int)(pbad - su->su_badptr);
 	if (goodlen <= 0 || badlen <= 0)
 	    break;
-	mb_ptr_back(goodword, pgood);
-	mb_ptr_back(su->su_badptr, pbad);
+	MB_PTR_BACK(goodword, pgood);
+	MB_PTR_BACK(su->su_badptr, pbad);
 #ifdef FEAT_MBYTE
 	if (has_mbyte)
 	{
@@ -8976,7 +8976,7 @@
     char_u  *p = start;
 
     while (*p != NUL && spell_iswordp(p, win))
-	mb_ptr_adv(p);
+	MB_PTR_ADV(p);
     return p;
 }
 
@@ -9002,7 +9002,7 @@
     line = ml_get_curline();
     for (p = line + startcol; p > line; )
     {
-	mb_ptr_back(line, p);
+	MB_PTR_BACK(line, p);
 	if (spell_iswordp_nmw(p, curwin))
 	    break;
     }
@@ -9011,7 +9011,7 @@
     while (p > line)
     {
 	col = (int)(p - line);
-	mb_ptr_back(line, p);
+	MB_PTR_BACK(line, p);
 	if (!spell_iswordp(p, curwin))
 	    break;
 	col = 0;
diff --git a/src/spellfile.c b/src/spellfile.c
index 00ef019..6188aaf 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -1429,7 +1429,7 @@
 	for (p = from, s = to; *p != NUL && *s != NUL; )
 	{
 	    c = mb_cptr2char_adv(&p);
-	    mb_cptr_adv(s);
+	    MB_CPTR_ADV(s);
 	    if (c >= 256)
 		++lp->sl_sal_first[c & 0xff];
 	}
@@ -2802,7 +2802,7 @@
 			    {
 				p = aff_entry->ae_add
 						  + STRLEN(aff_entry->ae_add);
-				mb_ptr_back(aff_entry->ae_add, p);
+				MB_PTR_BACK(aff_entry->ae_add, p);
 				if (PTR2CHAR(p) == c_up)
 				{
 				    upper = TRUE;
@@ -2930,10 +2930,10 @@
 		{
 		    /* Replace underscore with space (can't include a space
 		     * directly). */
-		    for (p = items[1]; *p != NUL; mb_ptr_adv(p))
+		    for (p = items[1]; *p != NUL; MB_PTR_ADV(p))
 			if (*p == '_')
 			    *p = ' ';
-		    for (p = items[2]; *p != NUL; mb_ptr_adv(p))
+		    for (p = items[2]; *p != NUL; MB_PTR_ADV(p))
 			if (*p == '_')
 			    *p = ' ';
 		    add_fromto(spin, items[0][3] == 'S'
@@ -3624,7 +3624,7 @@
 	/* Truncate the word at the "/", set "afflist" to what follows.
 	 * Replace "\/" by "/" and "\\" by "\". */
 	afflist = NULL;
-	for (p = w; *p != NUL; mb_ptr_adv(p))
+	for (p = w; *p != NUL; MB_PTR_ADV(p))
 	{
 	    if (*p == '\\' && (p[1] == '\\' || p[1] == '/'))
 		STRMOVE(p, p + 1);
@@ -3947,7 +3947,7 @@
 				{
 				    i = mb_charlen(ae->ae_chop);
 				    for ( ; i > 0; --i)
-					mb_ptr_adv(p);
+					MB_PTR_ADV(p);
 				}
 				else
 #endif
@@ -3965,7 +3965,7 @@
 				p = newword + STRLEN(newword);
 				i = (int)MB_CHARLEN(ae->ae_chop);
 				for ( ; i > 0; --i)
-				    mb_ptr_back(newword, p);
+				    MB_PTR_BACK(newword, p);
 				*p = NUL;
 			    }
 			    if (ae->ae_add != NULL)
diff --git a/src/syntax.c b/src/syntax.c
index b13bd93..12de244 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -3211,12 +3211,12 @@
 	if (off > 0)
 	{
 	    while (off-- > 0 && *p != NUL)
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 	}
 	else if (off < 0)
 	{
 	    while (off++ < 0 && base < p)
-		mb_ptr_back(base, p);
+		MB_PTR_BACK(base, p);
 	}
 	col = (int)(p - base);
     }
@@ -3265,12 +3265,12 @@
 	if (off > 0)
 	{
 	    while (off-- && *p != NUL)
-		mb_ptr_adv(p);
+		MB_PTR_ADV(p);
 	}
 	else if (off < 0)
 	{
 	    while (off++ && base < p)
-		mb_ptr_back(base, p);
+		MB_PTR_BACK(base, p);
 	}
 	col = (int)(p - base);
     }
diff --git a/src/tag.c b/src/tag.c
index 1dfe0a1..b92ab93 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3544,7 +3544,7 @@
 		tail = p + 1;
 		if (p[1] != NUL)
 		    while (vim_ispathsep(*tail))
-			mb_ptr_adv(tail);
+			MB_PTR_ADV(tail);
 		else if (p > start)
 		    --p;		/* strip preceding path separator */
 		STRMOVE(p, tail);
@@ -3556,7 +3556,7 @@
 	    /* Skip to after ".." or "../" or "..///". */
 	    tail = p + 2;
 	    while (vim_ispathsep(*tail))
-		mb_ptr_adv(tail);
+		MB_PTR_ADV(tail);
 
 	    if (components > 0)		/* strip one preceding component */
 	    {
@@ -3583,7 +3583,7 @@
 		    --p;
 		    /* Skip back to after previous '/'. */
 		    while (p > start && !after_pathsep(start, p))
-			mb_ptr_back(start, p);
+			MB_PTR_BACK(start, p);
 
 		    if (!do_strip)
 		    {
diff --git a/src/ui.c b/src/ui.c
index d89c500..cc1ef18 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -3192,7 +3192,7 @@
     while (count < vcol && *ptr != NUL)
     {
 	count += win_lbr_chartabsize(wp, line, ptr, count, NULL);
-	mb_ptr_adv(ptr);
+	MB_PTR_ADV(ptr);
     }
     return (int)(ptr - line);
 }
diff --git a/src/undo.c b/src/undo.c
index 833deca..039321c 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -833,7 +833,7 @@
 		    munged_name = vim_strsave(ffname);
 		    if (munged_name == NULL)
 			return NULL;
-		    for (p = munged_name; *p != NUL; mb_ptr_adv(p))
+		    for (p = munged_name; *p != NUL; MB_PTR_ADV(p))
 			if (vim_ispathsep(*p))
 			    *p = '%';
 		}
diff --git a/src/version.c b/src/version.c
index 257cba1..2c40f30 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    451,
+/**/
     450,
 /**/
     449,
diff --git a/src/window.c b/src/window.c
index c9771af..43c9ed2 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6127,7 +6127,7 @@
      */
     ptr = line + col;
     while (*ptr != NUL && !vim_isfilec(*ptr))
-	mb_ptr_adv(ptr);
+	MB_PTR_ADV(ptr);
     if (*ptr == NUL)		/* nothing found */
     {
 	if (options & FNAME_MESS)
