diff --git a/src/vte.c b/src/vte.c
index f13e604..28536d5 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -10095,9 +10095,10 @@ vte_terminal_paint_cursor(VteTerminal *terminal)
 	if (focus && !blink)
 		return;
 
-	/* Find the character "under" the cursor. */
+        /* Find the first cell of the character "under" the cursor.
+         * This is for CJK.  For TAB, paint the cursor where it really is. */
 	cell = vte_terminal_find_charcell(terminal, col, drow);
-	while ((cell != NULL) && (cell->attr.fragment) && (col > 0)) {
+        while (cell != NULL && cell->attr.fragment && cell->c != '\t' && col > 0) {
 		col--;
 		cell = vte_terminal_find_charcell(terminal, col, drow);
 	}
