diff --git a/src/vte.c b/src/vte.c
index ca7fe09..0d60266 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -3083,6 +3083,7 @@ _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
 	int columns, i;
 	VteScreen *screen;
 	gboolean line_wrapped = FALSE; /* cursor moved before char inserted */
+	gboolean spacing_mark = FALSE;
 
 	screen = terminal->pvt->screen;
 	insert |= screen->insert_mode;
@@ -3106,6 +3107,8 @@ _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
 		columns = _vte_iso2022_unichar_width(terminal->pvt->iso2022, c);
 	}
 
+	if (G_UNLIKELY (g_unichar_type(c) == G_UNICODE_SPACING_MARK))
+		spacing_mark = TRUE;
 
 	/* If we're autowrapping here, do it. */
 	col = screen->cursor_current.col;
@@ -3137,7 +3140,7 @@ _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
 			(long)screen->insert_delta);
 
 
-	if (G_UNLIKELY (columns == 0)) {
+	if (G_UNLIKELY (columns == 0 || spacing_mark)) {
 
 		/* It's a combining mark */
 
@@ -3183,15 +3186,24 @@ _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
 			cell = _vte_row_data_get_writable (row, --col);
 		if (G_UNLIKELY (!cell || cell->c == '\t'))
 			goto not_inserted;
+		if (G_UNLIKELY (spacing_mark && cell->attr.columns != 1))
+			goto not_inserted;
 
 		/* Combine the new character on top of the cell string */
 		c = _vte_unistr_append_unichar (cell->c, c);
 
 		/* And set it */
-		columns = cell->attr.columns;
+		attr = cell->attr;
+		columns = attr.columns;
+		if (spacing_mark)
+			columns++;
+		attr.columns = columns;
+		_vte_row_data_fill (row, &basic_cell.cell, col + columns);
 		for (i = 0; i < columns; i++) {
 			cell = _vte_row_data_get_writable (row, col++);
 			cell->c = c;
+			cell->attr = attr;
+			cell->attr.fragment = (i != 0);
 		}
 
 		/* Always invalidate since we put the mark on the *previous* cell
@@ -3247,9 +3259,9 @@ _vte_terminal_insert_char(VteTerminal *terminal, gunichar c,
 				screen->cursor_current.row, 1);
 	}
 
+done:
 	screen->cursor_current.col = col;
 
-done:
 	/* We added text, so make a note of it. */
 	terminal->pvt->text_inserted_flag = TRUE;
 
