diff --git a/ChangeLog b/ChangeLog
index 2e4fe494eb1ad2f7af9dfbcef01aac71b750c2ce..9954e96c9dd0c411d49794ffd103546fe05a70ba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -55,6 +55,9 @@ CVS code -
 	  long instead of an unsigned int. (DLR)
   cwd_tab_completion(), browser_init()
 	- Rename variable next to nextdir to avoid confusion. (DLR)
+  input_tab()
+	- Make sure that we don't set *place to the middle of a
+	  multibyte character. (DLR)
   do_browser()
 	- Don't treat NANO_CANCEL_KEY as NANO_EXIT_KEY anymore, for
 	  consistency. (DLR)
diff --git a/src/files.c b/src/files.c
index d704f6ab22d40cf4c1ed95b0aa5342e8a8add33a..08f90903973e3e91c368a3c452e7f1ec9733fc6c 100644
--- a/src/files.c
+++ b/src/files.c
@@ -2225,7 +2225,10 @@ char *input_tab(char *buf, size_t *place, bool *lastwastab, bool *list)
 	    charmove(buf + common_len, buf + *place,
 		buflen - *place + 1);
 	    charcpy(buf, mzero, common_len);
-	    *place = common_len;
+
+	    /* Make sure that we don't advance the cursor to the middle
+	     * of a multibyte character. */
+	    *place = mbstrnlen(buf, common_len);
 	} else if (*lastwastab == FALSE || num_matches < 2)
 	    *lastwastab = TRUE;
 	else {