diff --git a/src/menu.c b/src/menu.c
index b1b4ec7..07cf57e 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -167,9 +167,9 @@
     for (p = arg; *p; ++p)
 	if (!VIM_ISDIGIT(*p) && *p != '.')
 	    break;
-    if (vim_iswhite(*p))
+    if (VIM_ISWHITE(*p))
     {
-	for (i = 0; i < MENUDEPTH && !vim_iswhite(*arg); ++i)
+	for (i = 0; i < MENUDEPTH && !VIM_ISWHITE(*arg); ++i)
 	{
 	    pri_tab[i] = getdigits(&arg);
 	    if (pri_tab[i] == 0)
@@ -193,12 +193,12 @@
     /*
      * Check for "disable" or "enable" argument.
      */
-    if (STRNCMP(arg, "enable", 6) == 0 && vim_iswhite(arg[6]))
+    if (STRNCMP(arg, "enable", 6) == 0 && VIM_ISWHITE(arg[6]))
     {
 	enable = TRUE;
 	arg = skipwhite(arg + 6);
     }
-    else if (STRNCMP(arg, "disable", 7) == 0 && vim_iswhite(arg[7]))
+    else if (STRNCMP(arg, "disable", 7) == 0 && VIM_ISWHITE(arg[7]))
     {
 	enable = FALSE;
 	arg = skipwhite(arg + 7);
@@ -1219,24 +1219,24 @@
 	if (!VIM_ISDIGIT(*p) && *p != '.')
 	    break;
 
-    if (!vim_iswhite(*p))
+    if (!VIM_ISWHITE(*p))
     {
 	if (STRNCMP(arg, "enable", 6) == 0
-		&& (arg[6] == NUL ||  vim_iswhite(arg[6])))
+		&& (arg[6] == NUL ||  VIM_ISWHITE(arg[6])))
 	    p = arg + 6;
 	else if (STRNCMP(arg, "disable", 7) == 0
-		&& (arg[7] == NUL || vim_iswhite(arg[7])))
+		&& (arg[7] == NUL || VIM_ISWHITE(arg[7])))
 	    p = arg + 7;
 	else
 	    p = arg;
     }
 
-    while (*p != NUL && vim_iswhite(*p))
+    while (*p != NUL && VIM_ISWHITE(*p))
 	++p;
 
     arg = after_dot = p;
 
-    for (; *p && !vim_iswhite(*p); ++p)
+    for (; *p && !VIM_ISWHITE(*p); ++p)
     {
 	if ((*p == '\\' || *p == Ctrl_V) && p[1] != NUL)
 	    p++;
@@ -1247,7 +1247,7 @@
     /* ":tearoff" and ":popup" only use menus, not entries */
     expand_menus = !((*cmd == 't' && cmd[1] == 'e') || *cmd == 'p');
     expand_emenu = (*cmd == 'e');
-    if (expand_menus && vim_iswhite(*p))
+    if (expand_menus && VIM_ISWHITE(*p))
 	return NULL;	/* TODO: check for next command? */
     if (*p == NUL)		/* Complete the menu name */
     {
@@ -2432,7 +2432,7 @@
     static char_u *
 menu_skip_part(char_u *p)
 {
-    while (*p != NUL && *p != '.' && !vim_iswhite(*p))
+    while (*p != NUL && *p != '.' && !VIM_ISWHITE(*p))
     {
 	if ((*p == '\\' || *p == Ctrl_V) && p[1] != NUL)
 	    ++p;
@@ -2500,7 +2500,7 @@
 {
     char_u	*arg = arg_start;
 
-    while (*arg && !vim_iswhite(*arg))
+    while (*arg && !VIM_ISWHITE(*arg))
     {
 	if ((*arg == '\\' || *arg == Ctrl_V) && arg[1] != NUL)
 	    arg++;
