diff --git a/src/charset.c b/src/charset.c
index 3ce95c7..a8c20f9 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -523,20 +523,29 @@
 
 /*
  * Like transchar(), but called with a byte instead of a character.  Checks
- * for an illegal UTF-8 byte.
+ * for an illegal UTF-8 byte.  Uses 'fileformat' of the current buffer.
  */
     char_u *
 transchar_byte(int c)
 {
-    if (enc_utf8 && c >= 0x80)
-    {
-	transchar_nonprint(curbuf, transchar_charbuf, c);
-	return transchar_charbuf;
-    }
-    return transchar(c);
+    return transchar_byte_buf(curbuf, c);
 }
 
 /*
+ * Like transchar_buf(), but called with a byte instead of a character.  Checks
+ * for an illegal UTF-8 byte.  Uses 'fileformat' of "buf", unless it is NULL.
+ */
+    char_u *
+transchar_byte_buf(buf_T *buf, int c)
+{
+    if (enc_utf8 && c >= 0x80)
+    {
+	transchar_nonprint(buf, transchar_charbuf, c);
+	return transchar_charbuf;
+    }
+    return transchar_buf(buf, c);
+}
+/*
  * Convert non-printable character to two or more printable characters in
  * "charbuf[]".  "charbuf" needs to be able to hold five bytes.
  * Does NOT work for multi-byte characters, c must be <= 255.
@@ -546,7 +555,7 @@
 {
     if (c == NL)
 	c = NUL;		// we use newline in place of a NUL
-    else if (c == CAR && get_fileformat(buf) == EOL_MAC)
+    else if (buf != NULL && c == CAR && get_fileformat(buf) == EOL_MAC)
 	c = NL;			// we use CR in place of  NL in this case
 
     if (dy_flags & DY_UHEX)		// 'display' has "uhex"
diff --git a/src/message.c b/src/message.c
index b8e5eb9..18f3013 100644
--- a/src/message.c
+++ b/src/message.c
@@ -902,7 +902,7 @@
     void
 emsg_invreg(int name)
 {
-    semsg(_(e_invalid_register_name_str), transchar(name));
+    semsg(_(e_invalid_register_name_str), transchar_buf(NULL, name));
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -1601,7 +1601,7 @@
 	msg_outtrans_len_attr(p, l, attr);
 	return p + l;
     }
-    msg_puts_attr((char *)transchar_byte(*p), attr);
+    msg_puts_attr((char *)transchar_byte_buf(NULL, *p), attr);
     return p + 1;
 }
 
@@ -1658,7 +1658,7 @@
 		    msg_puts_attr_len((char *)plain_start,
 					       (int)(str - plain_start), attr);
 		plain_start = str + mb_l;
-		msg_puts_attr((char *)transchar(c),
+		msg_puts_attr((char *)transchar_buf(NULL, c),
 					    attr == 0 ? HL_ATTR(HLF_8) : attr);
 		retval += char2cells(c);
 	    }
@@ -1667,7 +1667,7 @@
 	}
 	else
 	{
-	    s = transchar_byte(*str);
+	    s = transchar_byte_buf(NULL, *str);
 	    if (s[1] != NUL)
 	    {
 		// unprintable char: print the printable chars so far and the
@@ -1753,7 +1753,7 @@
 	    text = (char *)str2special(&str, from, FALSE);
 	if (text[0] != NUL && text[1] == NUL)
 	    // single-byte character or illegal byte
-	    text = (char *)transchar_byte((char_u)text[0]);
+	    text = (char *)transchar_byte_buf(NULL, (char_u)text[0]);
 	len = vim_strsize((char_u *)text);
 	if (maxlen > 0 && retval + len >= maxlen)
 	    break;
@@ -2021,7 +2021,7 @@
 	    else if (c != NUL && (n = byte2cells(c)) > 1)
 	    {
 		n_extra = n - 1;
-		p_extra = transchar_byte(c);
+		p_extra = transchar_byte_buf(NULL, c);
 		c_extra = NUL;
 		c_final = NUL;
 		c = *p_extra++;
diff --git a/src/proto/charset.pro b/src/proto/charset.pro
index 0277483..7e515be 100644
--- a/src/proto/charset.pro
+++ b/src/proto/charset.pro
@@ -7,6 +7,7 @@
 char_u *transchar(int c);
 char_u *transchar_buf(buf_T *buf, int c);
 char_u *transchar_byte(int c);
+char_u *transchar_byte_buf(buf_T *buf, int c);
 void transchar_nonprint(buf_T *buf, char_u *charbuf, int c);
 void transchar_hex(char_u *buf, int c);
 int byte2cells(int b);
diff --git a/src/version.c b/src/version.c
index 57b35d7..c9a488b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1314,
+/**/
     1313,
 /**/
     1312,
