diff --git a/ChangeLog b/ChangeLog
index eeab326dbafee1d02240c00e8ff0eaf4555eef70..e60754c257472f075e485652caeef0747595592b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -33,6 +33,9 @@ CVS Code -
   do_replace_loop()
 	- Fix various bugs having to do with replace string length
 	  and positioning (David Benbennick).
+  edit_refresh()
+	- Fix cursor being above as well as below the current screen
+	  (David Benbennick).
 - winio.c:
   bottombars()
 	- Change strcpy of gettext() "Up" string to strncpy of max
diff --git a/winio.c b/winio.c
index cca2e33e8a1306358b38d9c37dc71638237e14c1..3ed476261580457a7c46e2ddcb6ba3559767763a 100644
--- a/winio.c
+++ b/winio.c
@@ -1093,7 +1093,8 @@ void edit_refresh(void)
     if (edittop == NULL)
 	edittop = current;
 
-    if (current->lineno >= edittop->lineno + editwinrows)
+    if (current->lineno < edittop->lineno ||
+	    current->lineno >= edittop->lineno + editwinrows)
 	/* Note that edit_update() changes edittop so that
 	 * current->lineno = edittop->lineno + editwinrows / 2.  Thus
 	 * when it then calls edit_refresh(), there is no danger of