diff --git a/src/chars.c b/src/chars.c
index bf0a26892e2c24ac047fe2b89e4e3de09384a7ce..0eff611c49a9d9b8da589a72d3f0aba42e936f05 100644
--- a/src/chars.c
+++ b/src/chars.c
@@ -383,8 +383,20 @@ size_t move_mbleft(const char *buf, size_t pos)
      * possible point. */
     if (pos < 4)
 	before = 0;
-    else
-	before = pos - 4;
+    else {
+	const char *ptr = buf + pos;
+
+       if ((signed char)*(--ptr) > -65)
+	    before = pos - 1;
+       else if ((signed char)*(--ptr) > -65)
+	    before = pos - 2;
+       else if ((signed char)*(--ptr) > -65)
+	    before = pos - 3;
+       else if ((signed char)*(--ptr) > -65)
+	    before = pos - 4;
+	else
+	    before = pos - 1;
+    }
 
     while (before < pos) {
 	char_len = parse_mbchar(buf + before, NULL, NULL);