diff --git a/src/map.c b/src/map.c
index 31c2882..948b32c 100644
--- a/src/map.c
+++ b/src/map.c
@@ -1057,6 +1057,81 @@
 static int	expand_buffer = FALSE;
 
 /*
+ * Translate an internal mapping/abbreviation representation into the
+ * corresponding external one recognized by :map/:abbrev commands.
+ * Respects the current B/k/< settings of 'cpoption'.
+ *
+ * This function is called when expanding mappings/abbreviations on the
+ * command-line.
+ *
+ * It uses a growarray to build the translation string since the latter can be
+ * wider than the original description. The caller has to free the string
+ * afterwards.
+ *
+ * Returns NULL when there is a problem.
+ */
+    static char_u *
+translate_mapping(char_u *str)
+{
+    garray_T	ga;
+    int		c;
+    int		modifiers;
+    int		cpo_bslash;
+    int		cpo_special;
+
+    ga_init(&ga);
+    ga.ga_itemsize = 1;
+    ga.ga_growsize = 40;
+
+    cpo_bslash = (vim_strchr(p_cpo, CPO_BSLASH) != NULL);
+    cpo_special = (vim_strchr(p_cpo, CPO_SPECI) != NULL);
+
+    for (; *str; ++str)
+    {
+	c = *str;
+	if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
+	{
+	    modifiers = 0;
+	    if (str[1] == KS_MODIFIER)
+	    {
+		str++;
+		modifiers = *++str;
+		c = *++str;
+	    }
+	    if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
+	    {
+		if (cpo_special)
+		{
+		    ga_clear(&ga);
+		    return NULL;
+		}
+		c = TO_SPECIAL(str[1], str[2]);
+		if (c == K_ZERO)	// display <Nul> as ^@
+		    c = NUL;
+		str += 2;
+	    }
+	    if (IS_SPECIAL(c) || modifiers)	// special key
+	    {
+		if (cpo_special)
+		{
+		    ga_clear(&ga);
+		    return NULL;
+		}
+		ga_concat(&ga, get_special_key_name(c, modifiers));
+		continue; // for (str)
+	    }
+	}
+	if (c == ' ' || c == '\t' || c == Ctrl_J || c == Ctrl_V
+	    || (c == '<' && !cpo_special) || (c == '\\' && !cpo_bslash))
+	    ga_append(&ga, cpo_bslash ? Ctrl_V : '\\');
+	if (c)
+	    ga_append(&ga, c);
+    }
+    ga_append(&ga, NUL);
+    return (char_u *)(ga.ga_data);
+}
+
+/*
  * Work out what to complete when doing command line completion of mapping
  * or abbreviation names.
  */
diff --git a/src/proto/term.pro b/src/proto/term.pro
index 8f1d33c..4b9ee9c 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -72,7 +72,6 @@
 char_u *replace_termcodes(char_u *from, char_u **bufp, int flags, int *did_simplify);
 void show_termcodes(void);
 int show_one_termcode(char_u *name, char_u *code, int printit);
-char_u *translate_mapping(char_u *str);
 void update_tcap(int attr);
 void swap_tcap(void);
 guicolor_T gui_get_color_cmn(char_u *name);
diff --git a/src/term.c b/src/term.c
index 389b06f..c74c5ba 100644
--- a/src/term.c
+++ b/src/term.c
@@ -5936,81 +5936,6 @@
 }
 #endif
 
-/*
- * Translate an internal mapping/abbreviation representation into the
- * corresponding external one recognized by :map/:abbrev commands.
- * Respects the current B/k/< settings of 'cpoption'.
- *
- * This function is called when expanding mappings/abbreviations on the
- * command-line.
- *
- * It uses a growarray to build the translation string since the latter can be
- * wider than the original description. The caller has to free the string
- * afterwards.
- *
- * Returns NULL when there is a problem.
- */
-    char_u *
-translate_mapping(char_u *str)
-{
-    garray_T	ga;
-    int		c;
-    int		modifiers;
-    int		cpo_bslash;
-    int		cpo_special;
-
-    ga_init(&ga);
-    ga.ga_itemsize = 1;
-    ga.ga_growsize = 40;
-
-    cpo_bslash = (vim_strchr(p_cpo, CPO_BSLASH) != NULL);
-    cpo_special = (vim_strchr(p_cpo, CPO_SPECI) != NULL);
-
-    for (; *str; ++str)
-    {
-	c = *str;
-	if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
-	{
-	    modifiers = 0;
-	    if (str[1] == KS_MODIFIER)
-	    {
-		str++;
-		modifiers = *++str;
-		c = *++str;
-	    }
-	    if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
-	    {
-		if (cpo_special)
-		{
-		    ga_clear(&ga);
-		    return NULL;
-		}
-		c = TO_SPECIAL(str[1], str[2]);
-		if (c == K_ZERO)	// display <Nul> as ^@
-		    c = NUL;
-		str += 2;
-	    }
-	    if (IS_SPECIAL(c) || modifiers)	// special key
-	    {
-		if (cpo_special)
-		{
-		    ga_clear(&ga);
-		    return NULL;
-		}
-		ga_concat(&ga, get_special_key_name(c, modifiers));
-		continue; // for (str)
-	    }
-	}
-	if (c == ' ' || c == '\t' || c == Ctrl_J || c == Ctrl_V
-	    || (c == '<' && !cpo_special) || (c == '\\' && !cpo_bslash))
-	    ga_append(&ga, cpo_bslash ? Ctrl_V : '\\');
-	if (c)
-	    ga_append(&ga, c);
-    }
-    ga_append(&ga, NUL);
-    return (char_u *)(ga.ga_data);
-}
-
 #if (defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
 static char ksme_str[20];
 static char ksmr_str[20];
diff --git a/src/testdir/test_mapping.vim b/src/testdir/test_mapping.vim
index 92ffc53..7aeb23c 100644
--- a/src/testdir/test_mapping.vim
+++ b/src/testdir/test_mapping.vim
@@ -476,6 +476,15 @@
   call assert_equal(['n  ,n            <Nop>'],
         \ execute('nmap ,n')->trim()->split("\n"))
 
+  " verbose map
+  call assert_match("\tLast set from .*/test_mapping.vim line \\d\\+$",
+        \ execute('verbose map ,n')->trim()->split("\n")[1])
+
+  " map to CTRL-V
+  exe "nmap ,k \<C-V>"
+  call assert_equal(['n  ,k            <Nop>'],
+        \ execute('nmap ,k')->trim()->split("\n"))
+
   nmapclear
 endfunc
 
@@ -812,4 +821,36 @@
   call assert_equal({}, maparg('foo', 'i', 1, 1))
 endfunc
 
+" Trigger an abbreviation using a special key
+func Test_abbr_trigger_special()
+  new
+  iabbr teh the
+  call feedkeys("iteh\<F2>\<Esc>", 'xt')
+  call assert_equal('the<F2>', getline(1))
+  iunab teh
+  close!
+endfunc
+
+" Test for '<' in 'cpoptions'
+func Test_map_cpo_special_keycode()
+  set cpo-=<
+  imap x<Bslash>k Test
+  let d = maparg('x<Bslash>k', 'i', 0, 1)
+  call assert_equal(['x\k', 'Test', 'i'], [d.lhs, d.rhs, d.mode])
+  call feedkeys(":imap x\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"imap x\k', @:)
+  iunmap x<Bslash>k
+  set cpo+=<
+  imap x<Bslash>k Test
+  let d = maparg('x<Bslash>k', 'i', 0, 1)
+  call assert_equal(['x<Bslash>k', 'Test', 'i'], [d.lhs, d.rhs, d.mode])
+  call feedkeys(":imap x\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"imap x<Bslash>k', @:)
+  iunmap x<Bslash>k
+  set cpo-=<
+  " Modifying 'cpo' above adds some default mappings, remove them
+  mapclear
+  mapclear!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 80c9642..6dfc66d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    148,
+/**/
     147,
 /**/
     146,
