diff --git a/ChangeLog b/ChangeLog
index e7bfc4afa3d8e2d6802f63ffdabbc2e218a4b9f1..3692779f37ba0c7a10ea07a84f079c7834a1ca89 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,6 +13,13 @@ CVS code -
 	  cursor position if there are no keys waiting in the buffer.
 	  (DLR)
 - search.c:
+  search_init()
+	- Don't blank out last_replace anymore when we get a new string,
+	  as it'll be blanked out in do_replace().  Also, consolidate
+	  the cases for blank and new search strings, as they now differ
+	  only in which string they pass to regexp_init(). (DLR)
+  replace_abort()
+	- Remove unnecessary update of placewewant. (DLR)
   do_replace()
 	- Blank out last_replace properly again just before displaying
 	  the "Replace" prompt. (DLR, found by Mike Frysinger)
diff --git a/src/search.c b/src/search.c
index 6687975d12969354711dd68d792d010345fd166d..fd7acf18743c81506202bdb48d8a240ca1072f12 100644
--- a/src/search.c
+++ b/src/search.c
@@ -215,17 +215,14 @@ int search_init(bool replacing, bool use_answer)
 	return -1;
     } else {
 	switch (i) {
-	    case -2:		/* It's the same string. */
+	    case -2:		/* It's an empty string. */
+	    case 0:		/* It's a new string. */
 #ifdef HAVE_REGEX_H
-		/* Since answer is "", use last_search! */
-		if (ISSET(USE_REGEXP) && regexp_init(last_search) == 0)
-		    return -1;
-#endif
-		break;
-	    case 0:		/* They entered something new. */
-		last_replace[0] = '\0';
-#ifdef HAVE_REGEX_H
-		if (ISSET(USE_REGEXP) && regexp_init(answer) == 0)
+		/* Use last_search if answer is an empty string, or
+		 * answer if it isn't. */
+		if (ISSET(USE_REGEXP) &&
+			regexp_init((i == -2) ? last_search :
+			answer) == 0)
 		    return -1;
 #endif
 		break;
@@ -570,11 +567,8 @@ void do_research(void)
 
 void replace_abort(void)
 {
-    /* Identical to search_abort(), so we'll call it here.  If it does
-     * something different later, we can change it back.  For now, it's
-     * just a waste to duplicate code. */
+    /* For now, we do the same thing as search_abort(). */
     search_abort();
-    placewewant = xplustabs();
 }
 
 #ifdef HAVE_REGEX_H