diff --git a/src/vte.cc b/src/vte.cc
index 9bbade88..9ea0b031 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -2773,7 +2773,7 @@ VteTerminalPrivate::cleanup_fragments(long start,
 
 /* Cursor down, with scrolling. */
 void
-VteTerminalPrivate::cursor_down()
+VteTerminalPrivate::cursor_down(bool explicit_sequence)
 {
 	long start, end;
 
@@ -2822,13 +2822,14 @@ VteTerminalPrivate::cursor_down()
 			update_insert_delta();
 		}
 
-		/* Match xterm and fill the new row when scrolling. */
-#if 0           /* Disable for now: see bug 754596. */
-                if (m_fill_defaults.attr.back != VTE_DEFAULT_BG) {
+                /* Handle bce (background color erase), however, diverge from xterm:
+                 * only fill the new row with the background color if scrolling
+                 * happens due to an explicit escape sequence, not due to autowrapping.
+                 * See bug 754596 for details. */
+                if (explicit_sequence && m_fill_defaults.attr.back != VTE_DEFAULT_BG) {
 			VteRowData *rowdata = ensure_row();
                         _vte_row_data_fill (rowdata, &m_fill_defaults, m_column_count);
 		}
-#endif
 	} else {
 		/* Otherwise, just move the cursor down. */
                 m_screen->cursor.row++;
@@ -2965,7 +2966,7 @@ VteTerminalPrivate::insert_char(gunichar c,
 			/* Mark this line as soft-wrapped. */
 			row = ensure_row();
 			row->attr.soft_wrapped = 1;
-			cursor_down();
+                        cursor_down(false);
 		} else {
 			/* Don't wrap, stay at the rightmost column. */
                         col = m_screen->cursor.col =
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index a43455e8..61dcb956 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -560,7 +560,7 @@ public:
         void cleanup_fragments(long start,
                                long end);
 
-        void cursor_down();
+        void cursor_down(bool explicit_sequence);
         void drop_scrollback();
 
         void restore_cursor(VteScreen *screen__);
diff --git a/src/vteseq.cc b/src/vteseq.cc
index 2d97170f..be2868f0 100644
--- a/src/vteseq.cc
+++ b/src/vteseq.cc
@@ -1661,7 +1661,7 @@ static void
 vte_sequence_handler_next_line (VteTerminalPrivate *that, GValueArray *params)
 {
         that->set_cursor_column(0);
-	that->cursor_down();
+        that->cursor_down(true);
 }
 
 /* No-op. */
@@ -1818,7 +1818,7 @@ vte_sequence_handler_line_feed (VteTerminalPrivate *that, GValueArray *params)
 {
         that->ensure_cursor_is_onscreen();
 
-	that->cursor_down();
+        that->cursor_down(true);
 }
 
 /* Cursor up 1 line, with scrolling. */
