diff --git a/ChangeLog b/ChangeLog
index a6b455be27aa5f699b159e4e0aec251f64548d3f..863c1fbfbc8c56ca7820ec7dccbcf2549dc49a70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2009-11-26 Chris Allegretta <chrisa@asty.org>
+	* winio.c (edit_scroll): Adjust for long lines when scrolling.
+
 2009-11-26 Jordi Mallach <jordi@gnu.org>
 	* doc/man/*: Update all man pages to escape unescapred hyphens.
 
diff --git a/src/move.c b/src/move.c
index 14afc70f56d64b5a8793d6e1c2adba41c25f18b4..578e3ef41bc479bcef11248a1e7ef4684d916ea0 100644
--- a/src/move.c
+++ b/src/move.c
@@ -133,7 +133,7 @@ void do_page_down(void)
 	openfile->placewewant);
 
     /* Scroll the edit window down a page. */
-    edit_scroll(DOWN_DIR, maxrows - 2);
+    edit_scroll(DOWN_DIR, editwinrows - 2);
 }
 
 #ifndef DISABLE_JUSTIFY
diff --git a/src/winio.c b/src/winio.c
index c617fc8bf000ecd41ff150f7f3aebc38d7b8d7eb..9f93ab1d975629e1411bec2c679d1ff1924874d6 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3038,6 +3038,9 @@ void edit_scroll(scroll_dir direction, ssize_t nlines)
 		break;
 	    openfile->edittop = openfile->edittop->next;
 	}
+	/* Don't over-scroll on long lines */
+	if (ISSET(SOFTWRAP))
+	    i -= strlenpt(openfile->edittop->data) / COLS;
     }
 
     compute_maxrows();