diff --git a/src/charset.c b/src/charset.c
index 6ad8ae587656c895a8a857616b0883541a8b5ff1..5436bb40b0fe0fc506fab4985d822552add2d470 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -317,7 +317,8 @@ trans_characters(buf, bufsize)
     }
 }
 
-#if defined(FEAT_EVAL) || defined(FEAT_TITLE) || defined(PROTO)
+#if defined(FEAT_EVAL) || defined(FEAT_TITLE) || defined(FEAT_INS_EXPAND) \
+	|| defined(PROTO)
 /*
  * Translate a string into allocated memory, replacing special chars with
  * printable chars.  Returns NULL when out of memory.
diff --git a/src/popupmnu.c b/src/popupmnu.c
index f280ff25d8ad79a4968dbc5193c2db338e725047..7d2e1379507564ec0bc477a4687dba66a695f45f 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -280,8 +280,20 @@ pum_redraw()
 		    w = ptr2cells(p);
 		    if (*p == NUL || *p == TAB || totwidth + w > pum_width)
 		    {
-			/* Display the text that fits or comes before a Tab. */
-			screen_puts_len(s, (int)(p - s), row, col, attr);
+			/* Display the text that fits or comes before a Tab.
+			 * First convert it to printable characters. */
+			char_u *st;
+			int  saved = *p;
+
+			*p = NUL;
+			st = transstr(s);
+			*p = saved;
+			if (st != NULL)
+			{
+			    screen_puts_len(st, (int)STRLEN(st), row, col,
+									attr);
+			    vim_free(st);
+			}
 			col += width;
 
 			if (*p != TAB)
diff --git a/src/version.c b/src/version.c
index 338edba4b4b65728d0a0493806aa5d1e56c76e0b..81b8f49930d80aca30a0e1ea83e9929547f96aec 100644
--- a/src/version.c
+++ b/src/version.c
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    223,
 /**/
     222,
 /**/