diff --git a/src/getchar.c b/src/getchar.c
index dea8c49..2ece91a 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -4522,14 +4522,16 @@
  * NULL otherwise
  */
     char_u *
-check_map(keys, mode, exact)
+check_map(keys, mode, exact, ign_mod)
     char_u	*keys;
     int		mode;
     int		exact;		/* require exact match */
+    int		ign_mod;	/* ignore preceding modifier */
 {
     int		hash;
     int		len, minlen;
     mapblock_T	*mp;
+    char_u	*s;
 #ifdef FEAT_LOCALMAP
     int		local;
 #endif
@@ -4553,14 +4555,23 @@
 	    {
 		/* skip entries with wrong mode, wrong length and not matching
 		 * ones */
-		if (mp->m_keylen < len)
-		    minlen = mp->m_keylen;
-		else
-		    minlen = len;
-		if ((mp->m_mode & mode)
-			&& (!exact || mp->m_keylen == len)
-			&& STRNCMP(mp->m_keys, keys, minlen) == 0)
-		    return mp->m_str;
+		if ((mp->m_mode & mode) && (!exact || mp->m_keylen == len))
+		{
+		    if (len > mp->m_keylen)
+			minlen = mp->m_keylen;
+		    else
+			minlen = len;
+		    s = mp->m_keys;
+		    if (ign_mod && s[0] == K_SPECIAL && s[1] == KS_MODIFIER
+							       && s[2] != NUL)
+		    {
+			s += 3;
+			if (len > mp->m_keylen - 3)
+			    minlen = mp->m_keylen - 3;
+		    }
+		    if (STRNCMP(s, keys, minlen) == 0)
+			return mp->m_str;
+		}
 	    }
 	}
 
diff --git a/src/message.c b/src/message.c
index 7efe28c..7f9a22c 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3785,18 +3785,18 @@
 	    if (!justify_left)
 	    {
 		/* left padding with blank or zero */
-		int n = min_field_width - (str_arg_l + number_of_zeros_to_pad);
+		int pn = min_field_width - (str_arg_l + number_of_zeros_to_pad);
 
-		if (n > 0)
+		if (pn > 0)
 		{
 		    if (str_l < str_m)
 		    {
 			size_t avail = str_m - str_l;
 
 			vim_memset(str + str_l, zero_padding ? '0' : ' ',
-						       n > avail ? avail : n);
+					     (size_t)pn > avail ? avail : pn);
 		    }
-		    str_l += n;
+		    str_l += pn;
 		}
 	    }
 
@@ -3812,41 +3812,42 @@
 	    {
 		/* insert first part of numerics (sign or '0x') before zero
 		 * padding */
-		int n = zero_padding_insertion_ind;
+		int zn = zero_padding_insertion_ind;
 
-		if (n > 0)
+		if (zn > 0)
 		{
 		    if (str_l < str_m)
 		    {
 			size_t avail = str_m - str_l;
 
 			mch_memmove(str + str_l, str_arg,
-						       n > avail ? avail : n);
+					     (size_t)zn > avail ? avail : zn);
 		    }
-		    str_l += n;
+		    str_l += zn;
 		}
 
 		/* insert zero padding as requested by the precision or min
 		 * field width */
-		n = number_of_zeros_to_pad;
-		if (n > 0)
+		zn = number_of_zeros_to_pad;
+		if (zn > 0)
 		{
 		    if (str_l < str_m)
 		    {
 			size_t avail = str_m-str_l;
 
-			vim_memset(str + str_l, '0', n > avail ? avail : n);
+			vim_memset(str + str_l, '0',
+					     (size_t)zn > avail ? avail : zn);
 		    }
-		    str_l += n;
+		    str_l += zn;
 		}
 	    }
 
 	    /* insert formatted string
 	     * (or as-is conversion specifier for unknown conversions) */
 	    {
-		int n = str_arg_l - zero_padding_insertion_ind;
+		int sn = str_arg_l - zero_padding_insertion_ind;
 
-		if (n > 0)
+		if (sn > 0)
 		{
 		    if (str_l < str_m)
 		    {
@@ -3854,9 +3855,9 @@
 
 			mch_memmove(str + str_l,
 				str_arg + zero_padding_insertion_ind,
-				n > avail ? avail : n);
+				(size_t)sn > avail ? avail : sn);
 		    }
-		    str_l += n;
+		    str_l += sn;
 		}
 	    }
 
@@ -3864,17 +3865,18 @@
 	    if (justify_left)
 	    {
 		/* right blank padding to the field width */
-		int n = min_field_width - (str_arg_l + number_of_zeros_to_pad);
+		int pn = min_field_width - (str_arg_l + number_of_zeros_to_pad);
 
-		if (n > 0)
+		if (pn > 0)
 		{
 		    if (str_l < str_m)
 		    {
 			size_t avail = str_m - str_l;
 
-			vim_memset(str + str_l, ' ', n > avail ? avail : n);
+			vim_memset(str + str_l, ' ',
+					     (size_t)pn > avail ? avail : pn);
 		    }
-		    str_l += n;
+		    str_l += pn;
 		}
 	    }
 	}
diff --git a/src/normal.c b/src/normal.c
index ec38db2..2075766 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -651,12 +651,17 @@
 	buf[0] = c;
 	buf[1] = NUL;
 # endif
-	/* Fake a "c"hange command.
+	/* Fake a "c"hange command.  When "restart_edit" is set (e.g., because
+	 * 'insertmode' is set) fake a "d"elete command, Insert mode will
+	 * restart automatically.
 	 * Insert the typed character in the typeahead buffer, so that it will
 	 * be mapped in Insert mode.  Required for ":lmap" to work.  May cause
 	 * mapping a character from ":vnoremap"... */
 	(void)ins_typebuf(buf, REMAP_YES, 0, !KeyTyped, FALSE);
-	c = 'c';
+	if (restart_edit != 0)
+	    c = 'd';
+	else
+	    c = 'c';
     }
 #endif
 
