diff --git a/ChangeLog b/ChangeLog
index 04a769266b4fdf947cb4177eec90c347a9fa349e..3ed253cc06f32680fdfa5504c506960f085e11cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,9 @@
 	has_blank_mbchars): Simplify by using for loops instead of while
 	loops where possible, to match the single-byte versions of these
 	functions.
+	* search.c (do_replace_loop): Fix problem where replacing e.g.
+	single-byte characters with multibyte ones could result in
+	openfile->totsize's being miscalculated.
 
 2007-07-06  David Lawrence Ramsey  <pooka109@gmail.com>
 
diff --git a/src/search.c b/src/search.c
index a1e5d644e0c162b43ced2c8a8f2fd84f927501f3..4761623d2a9881300d8c971096b08d5bbcd5fd7d 100644
--- a/src/search.c
+++ b/src/search.c
@@ -827,7 +827,8 @@ ssize_t do_replace_loop(
 		openfile->current_x += match_len + length_change - 1;
 
 	    /* Cleanup. */
-	    openfile->totsize += length_change;
+	    openfile->totsize += mbstrlen(copy) -
+		mbstrlen(openfile->current->data);
 	    free(openfile->current->data);
 	    openfile->current->data = copy;