diff -ur vte-0.34.7.orig/src/vte.c vte-0.34.7/src/vte.c
--- vte-0.34.7.orig/src/vte.c	2013-06-28 16:44:33.000000000 +0200
+++ vte-0.34.7/src/vte.c	2013-09-05 00:50:41.842183648 +0200
@@ -8009,6 +8009,36 @@
 	}
 }
 
+void ring_rewrap(VteRing *ring, gint column_count)
+{
+	int old_row_index, old_col_index, new_col;
+        VteRing ring_old;
+	memcpy(&ring_old, ring, sizeof(VteRing));
+	_vte_ring_init(ring, ring_old.max);
+
+	VteRowData *new_row = NULL;
+	for (old_row_index = 0; old_row_index < _vte_ring_length(&ring_old); old_row_index++) {
+		VteRowData *old_row = _vte_ring_index(&ring_old, old_row_index);
+		for (old_col_index = 0; old_col_index < old_row->len; old_col_index++) {
+			VteCell *cell = _vte_row_data_get(old_row, old_col_index);
+			if (new_row != NULL && !cell->attr.fragment && new_col + cell->attr.columns > column_count) {
+				new_row->attr.soft_wrapped = 1;
+				new_row = NULL;
+			}
+			if (new_row == NULL) {
+				new_row = _vte_ring_append(ring);
+				new_col = 0;
+			}
+			_vte_row_data_append(new_row, cell);
+			new_col++;
+		}
+		if (!old_row->attr.soft_wrapped) {
+			new_row = NULL;
+		}
+	}
+	_vte_ring_fini(&ring_old);
+}
+
 /**
  * vte_terminal_set_size:
  * @terminal: a #VteTerminal
@@ -8061,6 +8091,10 @@
 		/* Our visible text changed. */
 		vte_terminal_emit_text_modified(terminal);
 	}
+	if (old_columns != terminal->column_count) {
+		ring_rewrap(terminal->pvt->normal_screen.row_data, terminal->column_count);
+		ring_rewrap(terminal->pvt->alternate_screen.row_data, terminal->column_count);
+	}
 }
 
 /* Redraw the widget. */
