diff --git a/src/vte.c b/src/vte.c
index 8bee98f..bc7a005 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -6849,17 +6849,18 @@ vte_terminal_extend_selection_expand (VteTerminal *terminal)
 				break;
 		}
 		/* If the end point is to its right, then extend the
-		 * endpoint as far right as we can expect. */
+		 * endpoint to the beginning of the next row. */
 		if (ec->col >= i) {
-			ec->col = MAX(ec->col,
-				    MAX(terminal->column_count,
-					(long) _vte_row_data_length (rowdata)));
+			ec->col = -1;
+			ec->row++;
 		}
 	} else {
-		/* Snap to the rightmost column, only if selecting anything of
-		 * this row. */
-		if (ec->col >= 0)
-			ec->col = MAX(ec->col, terminal->column_count);
+		/* Snap to the beginning of the next line, only if
+		 * selecting anything of this row. */
+		if (ec->col >= 0) {
+			ec->col = -1;
+			ec->row++;
+		}
 	}
 	ec->col = find_end_column (terminal, ec->col, ec->row);
 
@@ -6980,14 +6981,10 @@ vte_terminal_extend_selection_expand (VteTerminal *terminal)
 			j++;
 			ec->row = j;
 		}
-		/* Make sure we include all of the last line. */
-		ec->col = terminal->column_count;
-		if (_vte_ring_contains (screen->row_data, ec->row)) {
-			rowdata = _vte_ring_index(screen->row_data, ec->row);
-			if (rowdata != NULL) {
-				ec->col = MAX(ec->col, (long) _vte_row_data_length (rowdata));
-			}
-		}
+		/* Make sure we include all of the last line by extending
+		 * to the beginning of the next line. */
+		ec->row++;
+		ec->col = -1;
 		break;
 	}
 }
@@ -8117,7 +8114,7 @@ vte_terminal_screen_set_size(VteTerminal *terminal, VteScreen *screen, glong old
 	VteVisualPosition cursor_saved_absolute;
 	VteVisualPosition below_viewport;
 	VteVisualPosition below_current_paragraph;
-	VteVisualPosition *markers[5];
+	VteVisualPosition *markers[7];
 	gboolean was_scrolled_to_top = (screen->scroll_delta == _vte_ring_delta(ring));
 	gboolean was_scrolled_to_bottom = (screen->scroll_delta == screen->insert_delta);
 	glong old_top_lines;
@@ -8149,7 +8146,15 @@ vte_terminal_screen_set_size(VteTerminal *terminal, VteScreen *screen, glong old
 	markers[1] = &cursor_saved_absolute;
 	markers[2] = &below_viewport;
 	markers[3] = &below_current_paragraph;
-	markers[4] = NULL;
+	if (screen == terminal->pvt->screen && terminal->pvt->has_selection) {
+		/* selection_end is inclusive, make it non-inclusive, see bug 722635. */
+		terminal->pvt->selection_end.col++;
+		markers[4] = &terminal->pvt->selection_start;
+		markers[5] = &terminal->pvt->selection_end;
+		markers[6] = NULL;
+	} else {
+		markers[4] = NULL;
+	}
 
 	old_top_lines = below_current_paragraph.row - screen->insert_delta;
 
@@ -8176,6 +8181,11 @@ vte_terminal_screen_set_size(VteTerminal *terminal, VteScreen *screen, glong old
 		}
 	}
 
+	if (screen == terminal->pvt->screen && terminal->pvt->has_selection) {
+		/* Make selection_end inclusive again, see above. */
+		terminal->pvt->selection_end.col--;
+	}
+
 	/* Figure out new insert and scroll deltas */
 	if (_vte_ring_length(ring) <= terminal->row_count) {
 		/* Everything fits without scrollbars. Align at top. */
