diff --git a/ChangeLog b/ChangeLog
index 5ff94c9e53f7c2a42f343708eedb0a23854c7353..5c0559f22f624bb9a1773e546837ccea8e72632a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -83,8 +83,11 @@ CVS code -
 	  certain zero-length regex replacements ("^", "$", and "^$").
 	  Add a no_sameline parameter to findnextstr(), and set it in
 	  the calls in do_replace_loop() when such regexes are found, so
-	  that such regexes are only found once per line. (DLR; found by
-	  Mike Frysinger and DLR)
+	  that such regexes are only found once per line.  Also change
+	  length_change from a long to an int; size_t is unsuitable due
+	  to its being unsigned. (DLR; found by Mike Frysinger and DLR)
+	  David Benbennick: Add a few minor cleanups to
+	  do_replace_loop().
 - winio.c:
   get_kbinput(), get_accepted_kbinput()
 	- Don't pass in the value of the REBIND_DELETE flag anymore.
diff --git a/src/search.c b/src/search.c
index 8b1c9f76b1faec959ed0602b8f75ff96a9bdf9b0..53c05208c39ec31a234384765602976cb29db133 100644
--- a/src/search.c
+++ b/src/search.c
@@ -622,7 +622,6 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
     int beginline = 0, caretdollar = 0;
 #endif
     filestruct *fileptr = NULL;
-    char *copy;
 
     switch (*i) {
 	case -1:	/* Aborted enter. */
@@ -716,6 +715,9 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
 	    do_replace_highlight(FALSE, exp_word);
 	    free(exp_word);
 	    curs_set(1);
+
+	    if (*i == -1)	/* We canceled the replace. */
+		break;
 	}
 
 #ifdef HAVE_REGEX_H
@@ -726,8 +728,8 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
 #endif
 
 	if (*i > 0 || replaceall) {	/* Yes, replace it!!!! */
-	    long length_change;
-	    size_t match_len;
+	    char *copy;
+	    int length_change;
 
 	    if (*i == 2)
 		replaceall = 1;
@@ -741,13 +743,6 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
 
 	    length_change = strlen(copy) - strlen(current->data);
 
-#ifdef HAVE_REGEX_H
-	    if (ISSET(USE_REGEXP))
-		match_len = regmatches[0].rm_eo - regmatches[0].rm_so;
-	    else
-#endif
-		match_len = strlen(prevanswer);
-
 #ifndef NANO_SMALL
 	    if (current == mark_beginbuf && mark_beginx > current_x) {
 		if (mark_beginx < current_x + match_len)
@@ -780,10 +775,7 @@ int do_replace_loop(const char *prevanswer, const filestruct *begin,
 	    edit_refresh();
 	    set_modified();
 	    numreplaced++;
-
-	} else if (*i == -1)	/* Break out of the loop, else do
-				 * nothing and continue loop. */
-	    break;
+	}
     }
 
     /* If text has been added to the magicline, make a new magicline. */