diff --git a/ChangeLog b/ChangeLog
index 865aea06552081b475b52865046233edb9f36cc0..8a74ed9ca899e26648c5698a70fff054b266a2c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-02-18  Benno Schulenberg  <bensberg@justemail.net>
+	* src/search.c (do_replace_loop), src/text.c (do_int_spell_fix),
+	src/winio.c (edit_refresh): Fix Savannah bug #47127 the proper way.
+
 2016-02-16  Benno Schulenberg  <bensberg@justemail.net>
 	* src/files.c (initialize_buffer_text): Delete redundant assignment.
 
diff --git a/src/search.c b/src/search.c
index 010540332ff91425534ec48e6d8c4378154832ee..014b11196a586dcebf06d17be2158a5ce435bbf6 100644
--- a/src/search.c
+++ b/src/search.c
@@ -708,10 +708,7 @@ ssize_t do_replace_loop(
 		xpt, strnlenpt(openfile->current->data,
 		openfile->current_x + match_len) - xpt, FALSE);
 
-	    /* If the match is offscreen, center it; otherwise, let it be. */
-	    edit_redraw(openfile->current, openfile->placewewant);
-
-	    /* Now refresh the entire edit window, in case it scrolled. */
+	    /* Refresh the edit window, scrolling it if necessary. */
 	    edit_refresh();
 
 	    /* Don't show cursor, to not distract from highlighted match. */
diff --git a/src/text.c b/src/text.c
index 2b2e067521ba0246f68bbb1ad0a696732ce35e9b..da105ea1f1cc93198a80a218f2eaa86e3e8e1012 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2414,7 +2414,6 @@ bool do_int_spell_fix(const char *word)
 		xpt, strnlenpt(openfile->current->data,
 		openfile->current_x + match_len) - xpt, FALSE);
 
-	    edit_redraw(openfile->current, openfile->placewewant);
 	    edit_refresh();
 
 	    do_replace_highlight(TRUE, exp_word);
diff --git a/src/winio.c b/src/winio.c
index a32453b324131c72751642cace1826d113ed1d08..b0ce93ba497a3a5dfe8e93141fcd94c30a53087e 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2998,7 +2998,7 @@ void edit_refresh(void)
 #endif
 
 	/* Make sure the current line is on the screen. */
-	edit_update(ISSET(SMOOTH_SCROLL) ? NONE : CENTER);
+	edit_update((ISSET(SMOOTH_SCROLL) && !focusing) ? NONE : CENTER);
     }
 
     foo = openfile->edittop;