diff --git a/src/files.c b/src/files.c
index 0f4a961f25347cbea7b319f3d9a4fbd2f6e21c9e..f38cd984d6fa65cc8d59106252515c91863ebe0d 100644
--- a/src/files.c
+++ b/src/files.c
@@ -567,8 +567,7 @@ void display_buffer(void)
 	precalc_multicolorinfo();
 #endif
 
-    /* Update the edit window. */
-    edit_refresh();
+    refresh_needed = TRUE;
 }
 
 #ifndef DISABLE_MULTIBUFFER
diff --git a/src/nano.c b/src/nano.c
index a4f43c42d2e451e7a49f6c13044c12938662a672..8944909d8154a7802b25e167f657bee0589e7eb9 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1428,7 +1428,7 @@ void do_toggle(int flag)
 	case LINE_NUMBERS:
 #endif
 	case SOFTWRAP:
-	    edit_refresh();
+	    refresh_needed = TRUE;
 	    break;
     }
 
@@ -1733,13 +1733,7 @@ int do_input(bool allow_funcs)
 	    if (f && !f->viewok)
 		reset_multis(openfile->current, FALSE);
 #endif
-	    if (refresh_needed) {
-#ifdef DEBUG
-		fprintf(stderr, "running edit_refresh() as refresh_needed is true\n");
-#endif
-		edit_refresh();
-		refresh_needed = FALSE;
-	    } else if (s->scfunc == do_delete || s->scfunc == do_backspace)
+	    if (!refresh_needed && (s->scfunc == do_delete || s->scfunc == do_backspace))
 		update_line(openfile->current, openfile->current_x);
 	}
     }
@@ -1956,10 +1950,7 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
     reset_multis(openfile->current, FALSE);
 #endif
 
-    if (refresh_needed == TRUE) {
-	edit_refresh();
-	refresh_needed = FALSE;
-    } else
+    if (!refresh_needed)
 	update_line(openfile->current, openfile->current_x);
 }
 
@@ -2718,10 +2709,14 @@ int main(int argc, char **argv)
 	/* Forget any earlier statusbar x position. */
 	reinit_statusbar_x();
 
-	/* Place the cursor in the edit window and make it visible. */
-	reset_cursor();
-	curs_set(1);
-	wnoutrefresh(edit);
+	/* Refresh either the entire edit window or just the cursor. */
+	if (refresh_needed)
+	    edit_refresh();
+	else {
+	    reset_cursor();
+	    curs_set(1);
+	    wnoutrefresh(edit);
+	}
 
 	/* Read in and interpret keystrokes. */
 	do_input(TRUE);
diff --git a/src/winio.c b/src/winio.c
index 73c367c0be4fda0549182bd5596cc542b6561443..61681f4eda820bb2285cabb26f2bca92dc7ca9c0 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2978,7 +2978,10 @@ void edit_refresh(void)
 	blank_line(edit, nlines, 0, COLS);
 
     reset_cursor();
+    curs_set(1);
     wnoutrefresh(edit);
+
+    refresh_needed = FALSE;
 }
 
 /* Move edittop so that current is on the screen.  manner says how it