diff --git a/src/map.c b/src/map.c
index 762cce2..48196f2 100644
--- a/src/map.c
+++ b/src/map.c
@@ -31,7 +31,7 @@
  * Returns a value between 0 and 255, index in maphash.
  * Put Normal/Visual mode mappings mostly separately from Insert/Cmdline mode.
  */
-#define MAP_HASH(mode, c1) (((mode) & (NORMAL + VISUAL + SELECTMODE + OP_PENDING + TERMINAL)) ? (c1) : ((c1) ^ 0x80))
+#define MAP_HASH(mode, c1) (((mode) & (MODE_NORMAL | MODE_VISUAL | MODE_SELECT | MODE_OP_PENDING | MODE_TERMINAL)) ? (c1) : ((c1) ^ 0x80))
 
 /*
  * Get the start of the hashed map list for "state" and first character "c".
@@ -101,32 +101,33 @@
 
     ga_init2(&mapmode, 1, 7);
 
-    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+    if ((mode & (MODE_INSERT | MODE_CMDLINE)) == (MODE_INSERT | MODE_CMDLINE))
 	ga_append(&mapmode, '!');			// :map!
-    else if (mode & INSERT)
+    else if (mode & MODE_INSERT)
 	ga_append(&mapmode, 'i');			// :imap
-    else if (mode & LANGMAP)
+    else if (mode & MODE_LANGMAP)
 	ga_append(&mapmode, 'l');			// :lmap
-    else if (mode & CMDLINE)
+    else if (mode & MODE_CMDLINE)
 	ga_append(&mapmode, 'c');			// :cmap
-    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
-				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+    else if ((mode
+		 & (MODE_NORMAL | MODE_VISUAL | MODE_SELECT | MODE_OP_PENDING))
+		== (MODE_NORMAL | MODE_VISUAL | MODE_SELECT | MODE_OP_PENDING))
 	ga_append(&mapmode, ' ');			// :map
     else
     {
-	if (mode & NORMAL)
+	if (mode & MODE_NORMAL)
 	    ga_append(&mapmode, 'n');			// :nmap
-	if (mode & OP_PENDING)
+	if (mode & MODE_OP_PENDING)
 	    ga_append(&mapmode, 'o');			// :omap
-	if (mode & TERMINAL)
+	if (mode & MODE_TERMINAL)
 	    ga_append(&mapmode, 't');			// :tmap
-	if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+	if ((mode & (MODE_VISUAL | MODE_SELECT)) == (MODE_VISUAL | MODE_SELECT))
 	    ga_append(&mapmode, 'v');			// :vmap
 	else
 	{
-	    if (mode & VISUAL)
+	    if (mode & MODE_VISUAL)
 		ga_append(&mapmode, 'x');		// :xmap
-	    if (mode & SELECTMODE)
+	    if (mode & MODE_SELECT)
 		ga_append(&mapmode, 's');		// :smap
 	}
     }
@@ -297,21 +298,21 @@
  * arg is pointer to any arguments. Note: arg cannot be a read-only string,
  * it will be modified.
  *
- * for :map   mode is NORMAL + VISUAL + SELECTMODE + OP_PENDING
- * for :map!  mode is INSERT + CMDLINE
- * for :cmap  mode is CMDLINE
- * for :imap  mode is INSERT
- * for :lmap  mode is LANGMAP
- * for :nmap  mode is NORMAL
- * for :vmap  mode is VISUAL + SELECTMODE
- * for :xmap  mode is VISUAL
- * for :smap  mode is SELECTMODE
- * for :omap  mode is OP_PENDING
- * for :tmap  mode is TERMINAL
+ * for :map   mode is MODE_NORMAL | MODE_VISUAL | MODE_SELECT | MODE_OP_PENDING
+ * for :map!  mode is MODE_INSERT | MODE_CMDLINE
+ * for :cmap  mode is MODE_CMDLINE
+ * for :imap  mode is MODE_INSERT
+ * for :lmap  mode is MODE_LANGMAP
+ * for :nmap  mode is MODE_NORMAL
+ * for :vmap  mode is MODE_VISUAL | MODE_SELECT
+ * for :xmap  mode is MODE_VISUAL
+ * for :smap  mode is MODE_SELECT
+ * for :omap  mode is MODE_OP_PENDING
+ * for :tmap  mode is MODE_TERMINAL
  *
- * for :abbr  mode is INSERT + CMDLINE
- * for :iabbr mode is INSERT
- * for :cabbr mode is CMDLINE
+ * for :abbr  mode is MODE_INSERT | MODE_CMDLINE
+ * for :iabbr mode is MODE_INSERT
+ * for :cabbr mode is MODE_CMDLINE
  *
  * Return 0 for success
  *	  1 for invalid arguments
@@ -872,30 +873,31 @@
     p = *cmdp;
     modec = *p++;
     if (modec == 'i')
-	mode = INSERT;				// :imap
+	mode = MODE_INSERT;				// :imap
     else if (modec == 'l')
-	mode = LANGMAP;				// :lmap
+	mode = MODE_LANGMAP;				// :lmap
     else if (modec == 'c')
-	mode = CMDLINE;				// :cmap
+	mode = MODE_CMDLINE;				// :cmap
     else if (modec == 'n' && *p != 'o')		    // avoid :noremap
-	mode = NORMAL;				// :nmap
+	mode = MODE_NORMAL;				// :nmap
     else if (modec == 'v')
-	mode = VISUAL + SELECTMODE;		// :vmap
+	mode = MODE_VISUAL | MODE_SELECT;		// :vmap
     else if (modec == 'x')
-	mode = VISUAL;				// :xmap
+	mode = MODE_VISUAL;				// :xmap
     else if (modec == 's')
-	mode = SELECTMODE;			// :smap
+	mode = MODE_SELECT;			// :smap
     else if (modec == 'o')
-	mode = OP_PENDING;			// :omap
+	mode = MODE_OP_PENDING;			// :omap
     else if (modec == 't')
-	mode = TERMINAL;			// :tmap
+	mode = MODE_TERMINAL;			// :tmap
     else
     {
 	--p;
 	if (forceit)
-	    mode = INSERT + CMDLINE;		// :map !
+	    mode = MODE_INSERT | MODE_CMDLINE;		// :map !
 	else
-	    mode = VISUAL + SELECTMODE + NORMAL + OP_PENDING;// :map
+	    mode = MODE_VISUAL | MODE_SELECT | MODE_NORMAL | MODE_OP_PENDING;
+							// :map
     }
 
     *cmdp = p;
@@ -1002,21 +1004,21 @@
     int		mode = 0;
 
     if (vim_strchr(modechars, 'n') != NULL)
-	mode |= NORMAL;
+	mode |= MODE_NORMAL;
     if (vim_strchr(modechars, 'v') != NULL)
-	mode |= VISUAL + SELECTMODE;
+	mode |= MODE_VISUAL | MODE_SELECT;
     if (vim_strchr(modechars, 'x') != NULL)
-	mode |= VISUAL;
+	mode |= MODE_VISUAL;
     if (vim_strchr(modechars, 's') != NULL)
-	mode |= SELECTMODE;
+	mode |= MODE_SELECT;
     if (vim_strchr(modechars, 'o') != NULL)
-	mode |= OP_PENDING;
+	mode |= MODE_OP_PENDING;
     if (vim_strchr(modechars, 'i') != NULL)
-	mode |= INSERT;
+	mode |= MODE_INSERT;
     if (vim_strchr(modechars, 'l') != NULL)
-	mode |= LANGMAP;
+	mode |= MODE_LANGMAP;
     if (vim_strchr(modechars, 'c') != NULL)
-	mode |= CMDLINE;
+	mode |= MODE_CMDLINE;
 
     return mode;
 }
@@ -1192,9 +1194,10 @@
 	    expand_mapmodes = get_map_mode(&cmd, forceit || isabbrev);
 	else
 	{
-	    expand_mapmodes = INSERT + CMDLINE;
+	    expand_mapmodes = MODE_INSERT | MODE_CMDLINE;
 	    if (!isabbrev)
-		expand_mapmodes += VISUAL + SELECTMODE + NORMAL + OP_PENDING;
+		expand_mapmodes += MODE_VISUAL | MODE_SELECT | MODE_NORMAL
+							     | MODE_OP_PENDING;
 	}
 	expand_isabbrev = isabbrev;
 	xp->xp_context = EXPAND_MAPPINGS;
@@ -1864,75 +1867,76 @@
 		    cmd = "map";
 		switch (mp->m_mode)
 		{
-		    case NORMAL + VISUAL + SELECTMODE + OP_PENDING:
+		    case MODE_NORMAL | MODE_VISUAL | MODE_SELECT
+							     | MODE_OP_PENDING:
 			break;
-		    case NORMAL:
+		    case MODE_NORMAL:
 			c1 = 'n';
 			break;
-		    case VISUAL:
+		    case MODE_VISUAL:
 			c1 = 'x';
 			break;
-		    case SELECTMODE:
+		    case MODE_SELECT:
 			c1 = 's';
 			break;
-		    case OP_PENDING:
+		    case MODE_OP_PENDING:
 			c1 = 'o';
 			break;
-		    case NORMAL + VISUAL:
+		    case MODE_NORMAL | MODE_VISUAL:
 			c1 = 'n';
 			c2 = 'x';
 			break;
-		    case NORMAL + SELECTMODE:
+		    case MODE_NORMAL | MODE_SELECT:
 			c1 = 'n';
 			c2 = 's';
 			break;
-		    case NORMAL + OP_PENDING:
+		    case MODE_NORMAL | MODE_OP_PENDING:
 			c1 = 'n';
 			c2 = 'o';
 			break;
-		    case VISUAL + SELECTMODE:
+		    case MODE_VISUAL | MODE_SELECT:
 			c1 = 'v';
 			break;
-		    case VISUAL + OP_PENDING:
+		    case MODE_VISUAL | MODE_OP_PENDING:
 			c1 = 'x';
 			c2 = 'o';
 			break;
-		    case SELECTMODE + OP_PENDING:
+		    case MODE_SELECT | MODE_OP_PENDING:
 			c1 = 's';
 			c2 = 'o';
 			break;
-		    case NORMAL + VISUAL + SELECTMODE:
+		    case MODE_NORMAL | MODE_VISUAL | MODE_SELECT:
 			c1 = 'n';
 			c2 = 'v';
 			break;
-		    case NORMAL + VISUAL + OP_PENDING:
+		    case MODE_NORMAL | MODE_VISUAL | MODE_OP_PENDING:
 			c1 = 'n';
 			c2 = 'x';
 			c3 = 'o';
 			break;
-		    case NORMAL + SELECTMODE + OP_PENDING:
+		    case MODE_NORMAL | MODE_SELECT | MODE_OP_PENDING:
 			c1 = 'n';
 			c2 = 's';
 			c3 = 'o';
 			break;
-		    case VISUAL + SELECTMODE + OP_PENDING:
+		    case MODE_VISUAL | MODE_SELECT | MODE_OP_PENDING:
 			c1 = 'v';
 			c2 = 'o';
 			break;
-		    case CMDLINE + INSERT:
+		    case MODE_CMDLINE | MODE_INSERT:
 			if (!abbr)
 			    cmd = "map!";
 			break;
-		    case CMDLINE:
+		    case MODE_CMDLINE:
 			c1 = 'c';
 			break;
-		    case INSERT:
+		    case MODE_INSERT:
 			c1 = 'i';
 			break;
-		    case LANGMAP:
+		    case MODE_LANGMAP:
 			c1 = 'l';
 			break;
-		    case TERMINAL:
+		    case MODE_TERMINAL:
 			c1 = 't';
 			break;
 		    default:
@@ -2495,9 +2499,10 @@
     int		mode = 0;
     int		tmode;
     int		modec;
-    const int	MASK_V = VISUAL + SELECTMODE;
-    const int	MASK_MAP = VISUAL + SELECTMODE + NORMAL + OP_PENDING;
-    const int	MASK_BANG = INSERT + CMDLINE;
+    const int	MASK_V = MODE_VISUAL | MODE_SELECT;
+    const int	MASK_MAP = MODE_VISUAL | MODE_SELECT | MODE_NORMAL
+							     | MODE_OP_PENDING;
+    const int	MASK_BANG = MODE_INSERT | MODE_CMDLINE;
 
     if (*p == NUL)
 	p = (char_u *)" ";	// compatibility
@@ -2505,14 +2510,14 @@
     {
 	switch (modec)
 	{
-	    case 'i': tmode = INSERT;		break;
-	    case 'l': tmode = LANGMAP;		break;
-	    case 'c': tmode = CMDLINE;		break;
-	    case 'n': tmode = NORMAL;		break;
-	    case 'x': tmode = VISUAL;		break;
-	    case 's': tmode = SELECTMODE;	break;
-	    case 'o': tmode = OP_PENDING;	break;
-	    case 't': tmode = TERMINAL;		break;
+	    case 'i': tmode = MODE_INSERT;	break;
+	    case 'l': tmode = MODE_LANGMAP;	break;
+	    case 'c': tmode = MODE_CMDLINE;	break;
+	    case 'n': tmode = MODE_NORMAL;	break;
+	    case 'x': tmode = MODE_VISUAL;	break;
+	    case 's': tmode = MODE_SELECT;	break;
+	    case 'o': tmode = MODE_OP_PENDING;	break;
+	    case 't': tmode = MODE_TERMINAL;	break;
 	    case 'v': tmode = MASK_V;		break;
 	    case '!': tmode = MASK_BANG;	break;
 	    case ' ': tmode = MASK_MAP;		break;
@@ -2672,7 +2677,7 @@
 
 #if defined(MSWIN) || defined(MACOS_X)
 
-# define VIS_SEL	(VISUAL+SELECTMODE)	// abbreviation
+# define VIS_SEL	(MODE_VISUAL | MODE_SELECT)	// abbreviation
 
 /*
  * Default mappings for some often used keys.
@@ -2688,9 +2693,9 @@
 static struct initmap initmappings[] =
 {
 	// paste, copy and cut
-	{(char_u *)"<S-Insert> \"*P", NORMAL},
+	{(char_u *)"<S-Insert> \"*P", MODE_NORMAL},
 	{(char_u *)"<S-Insert> \"-d\"*P", VIS_SEL},
-	{(char_u *)"<S-Insert> <C-R><C-O>*", INSERT+CMDLINE},
+	{(char_u *)"<S-Insert> <C-R><C-O>*", MODE_INSERT | MODE_CMDLINE},
 	{(char_u *)"<C-Insert> \"*y", VIS_SEL},
 	{(char_u *)"<S-Del> \"*d", VIS_SEL},
 	{(char_u *)"<C-Del> \"*d", VIS_SEL},
@@ -2703,24 +2708,24 @@
 // Use the Windows (CUA) keybindings. (Console)
 static struct initmap cinitmappings[] =
 {
-	{(char_u *)"\316w <C-Home>", NORMAL+VIS_SEL},
-	{(char_u *)"\316w <C-Home>", INSERT+CMDLINE},
-	{(char_u *)"\316u <C-End>", NORMAL+VIS_SEL},
-	{(char_u *)"\316u <C-End>", INSERT+CMDLINE},
+	{(char_u *)"\316w <C-Home>", MODE_NORMAL | VIS_SEL},
+	{(char_u *)"\316w <C-Home>", MODE_INSERT | MODE_CMDLINE},
+	{(char_u *)"\316u <C-End>", MODE_NORMAL | VIS_SEL},
+	{(char_u *)"\316u <C-End>", MODE_INSERT | MODE_CMDLINE},
 
 	// paste, copy and cut
 #  ifdef FEAT_CLIPBOARD
-	{(char_u *)"\316\324 \"*P", NORMAL},	    // SHIFT-Insert is "*P
+	{(char_u *)"\316\324 \"*P", MODE_NORMAL},   // SHIFT-Insert is "*P
 	{(char_u *)"\316\324 \"-d\"*P", VIS_SEL},   // SHIFT-Insert is "-d"*P
-	{(char_u *)"\316\324 \022\017*", INSERT},  // SHIFT-Insert is ^R^O*
+	{(char_u *)"\316\324 \022\017*", MODE_INSERT},  // SHIFT-Insert is ^R^O*
 	{(char_u *)"\316\325 \"*y", VIS_SEL},	    // CTRL-Insert is "*y
 	{(char_u *)"\316\327 \"*d", VIS_SEL},	    // SHIFT-Del is "*d
 	{(char_u *)"\316\330 \"*d", VIS_SEL},	    // CTRL-Del is "*d
 	{(char_u *)"\030 \"*d", VIS_SEL},	    // CTRL-X is "*d
 #  else
-	{(char_u *)"\316\324 P", NORMAL},	    // SHIFT-Insert is P
+	{(char_u *)"\316\324 P", MODE_NORMAL},	    // SHIFT-Insert is P
 	{(char_u *)"\316\324 \"-dP", VIS_SEL},	    // SHIFT-Insert is "-dP
-	{(char_u *)"\316\324 \022\017\"", INSERT}, // SHIFT-Insert is ^R^O"
+	{(char_u *)"\316\324 \022\017\"", MODE_INSERT}, // SHIFT-Insert is ^R^O"
 	{(char_u *)"\316\325 y", VIS_SEL},	    // CTRL-Insert is y
 	{(char_u *)"\316\327 d", VIS_SEL},	    // SHIFT-Del is d
 	{(char_u *)"\316\330 d", VIS_SEL},	    // CTRL-Del is d
@@ -2733,9 +2738,9 @@
 {
 	// Use the Standard MacOS binding.
 	// paste, copy and cut
-	{(char_u *)"<D-v> \"*P", NORMAL},
+	{(char_u *)"<D-v> \"*P", MODE_NORMAL},
 	{(char_u *)"<D-v> \"-d\"*P", VIS_SEL},
-	{(char_u *)"<D-v> <C-R>*", INSERT+CMDLINE},
+	{(char_u *)"<D-v> <C-R>*", MODE_INSERT | MODE_CMDLINE},
 	{(char_u *)"<D-c> \"*y", VIS_SEL},
 	{(char_u *)"<D-x> \"*d", VIS_SEL},
 	{(char_u *)"<Backspace> \"-d", VIS_SEL},
