diff --git a/ChangeLog b/ChangeLog
index 997096dbcd84cc9d8617001f2687fa54025b8a9c..3ef21287065b42b91b6270d47df2dd31e2299776 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 	* src/files.c (update_poshistory): Move an updated item to the end
 	of the list, so that it won't be dropped any time soon.  The problem
 	was pointed out by David Niklas.
+	* src/winio.c (edit_redraw): Condense by removing a triplication.
 
 2016-01-22  Benno Schulenberg  <bensberg@justemail.net>
 	* src/utils.c (get_homedir): Don't use $HOME when we're root, because
diff --git a/src/winio.c b/src/winio.c
index 385b35881c3caf171eb012d22ead4e68bbd4cf78..9d4c0346623f40a915a2f71023f59dbd4dceb060 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2948,90 +2948,30 @@ void edit_scroll(scroll_dir direction, ssize_t nlines)
  * updated.  Use this if we've moved without changing any text. */
 void edit_redraw(filestruct *old_current, size_t pww_save)
 {
-    filestruct *foo = NULL;
-    bool do_redraw = need_screen_update(0) || need_screen_update(pww_save);
-
-    /* If either old_current or current is offscreen, scroll the edit
-     * window until it's onscreen and get out. */
-    if (old_current->lineno < openfile->edittop->lineno ||
-		old_current->lineno >= openfile->edittop->lineno + maxrows ||
-		openfile->current->lineno < openfile->edittop->lineno ||
-		openfile->current->lineno >= openfile->edittop->lineno + maxrows) {
-#ifdef DEBUG
-	fprintf(stderr, "edit_redraw(): line %ld was offscreen, oldcurrent = %ld edittop = %ld",
-		(long)openfile->current->lineno, (long)old_current->lineno, (long)openfile->edittop->lineno);
-#endif
-
-#ifndef NANO_TINY
-	/* If the mark is on, update all the lines between old_current
-	 * and either the old first line or old last line (depending on
-	 * whether we've scrolled up or down) of the edit window. */
-	if (openfile->mark_set) {
-	    ssize_t old_lineno;
-
-	    if (openfile->edittop->lineno + maxrows <= openfile->filebot->lineno)
-		old_lineno = openfile->edittop->lineno + editwinrows;
-	    else
-		old_lineno = openfile->filebot->lineno;
-
-	    foo = old_current;
-
-	    while (foo->lineno != old_lineno) {
-		update_line(foo, 0);
-
-		foo = (foo->lineno > old_lineno) ?
-			foo->prev : foo->next;
-	    }
-	}
-#endif /* !NANO_TINY */
-
-	/* Make sure the current line is on the screen. */
+    /* If the current line is offscreen, scroll until it's onscreen. */
+    if (openfile->current->lineno >= openfile->edittop->lineno + maxrows ||
+		openfile->current->lineno < openfile->edittop->lineno)
 	edit_update((ISSET(SMOOTH_SCROLL) && !focusing) ? NONE : CENTER);
 
-	/* Update old_current if we're not on the same page as
-	 * before. */
-	if (do_redraw)
-	    update_line(old_current, 0);
-
 #ifndef NANO_TINY
-	/* If the mark is on, update all the lines between the old first
-	 * line or old last line of the edit window (depending on
-	 * whether we've scrolled up or down) and current. */
-	if (openfile->mark_set) {
-	    while (foo->lineno != openfile->current->lineno) {
-		update_line(foo, 0);
-
-		foo = (foo->lineno > openfile->current->lineno) ?
-			foo->prev : foo->next;
-	    }
-	}
-#endif /* !NANO_TINY */
-
-	return;
-    }
-
-    /* Update old_current and current if we're not on the same page as
-     * before.  If the mark is on, update all the lines between
-     * old_current and current too. */
-    foo = old_current;
+    /* If the mark is on, update all lines between old_current and current. */
+    if (openfile->mark_set) {
+	filestruct *foo = old_current;
 
-    while (foo != openfile->current) {
-	if (do_redraw)
+	while (foo != openfile->current) {
 	    update_line(foo, 0);
 
-#ifndef NANO_TINY
-	if (!openfile->mark_set)
-#endif
-	    break;
-
-#ifndef NANO_TINY
-	foo = (foo->lineno > openfile->current->lineno) ? foo->prev :
-		foo->next;
-#endif
+	    foo = (foo->lineno > openfile->current->lineno) ?
+			foo->prev : foo->next;
+	}
     }
+#endif /* !NANO_TINY */
 
-    if (do_redraw)
+    /* Update old_current and current if we've changed page. */
+    if (need_screen_update(0) || need_screen_update(pww_save)) {
+	update_line(old_current, 0);
 	update_line(openfile->current, openfile->current_x);
+    }
 }
 
 /* Refresh the screen without changing the position of lines.  Use this