diff --git a/ChangeLog b/ChangeLog
index 3f6b65e6eedc3c63783ffb262cefff91287845e8..f3393aed8510caca32db0131f87e684f1d5b9562 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -124,6 +124,12 @@ CVS code -
   nregcomp()
 	- Rename the variable flags to eflags so as not to conflict with
 	  the global flags. (DLR)
+- search.c:
+  do_replace_loop()
+	- Make sure old_pww is updated to the current value of
+	  placewewant when a new match is found, so that edit_redraw()
+	  will redraw the screen properly when only placewewant changes.
+	  (DLR, found by Mike Frysinger)
 - utils.c:
   parse_num()
 	- New function to parse numeric values, so that we don't have to
diff --git a/src/search.c b/src/search.c
index 56839e59a4c92143ed41a5cd49332b73fc7e0688..4d153c2d052cc47c5b5e7b3bc6c19cde01ac72ca 100644
--- a/src/search.c
+++ b/src/search.c
@@ -635,8 +635,11 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
 	}
 #endif
 
-	if (!replaceall)
+	if (!replaceall) {
+	    placewewant = xplustabs();
 	    edit_redraw(current_save, old_pww);
+	    old_pww = placewewant;
+	}
 
 #ifdef HAVE_REGEX_H
 	if (ISSET(USE_REGEXP))