diff --git a/ChangeLog b/ChangeLog
index 55e72e9c3f86ebad1e7d01d5f2ff1558f41e885f..ec4f7a677cc46ba551b424808cd6304b799babeb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-31  Benno Schulenberg  <bensberg@justemail.net>
+	* src/text.c (do_int_spell_fix): Replace a fake 'while' and delete
+	a redundant 'if' -- we searched for whole words only, so it will be.
+
 2016-03-30  Benno Schulenberg  <bensberg@justemail.net>
 	* src/search.c (do_replace_loop, go_looking, findnextstr): Report
 	"Cancelled" instead of "Not found" when the user aborts a replace
diff --git a/src/text.c b/src/text.c
index e28836788cec13246071610f81fea355e7b38981..42c33bf86b3a355d1abe6368ad9f7ac37d405265 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2353,14 +2353,16 @@ void do_full_justify(void)
  * return FALSE if the user cancels. */
 bool do_int_spell_fix(const char *word)
 {
-    char *save_search;
+    char *save_search, *exp_word;
     size_t match_len, current_x_save = openfile->current_x;
     size_t pww_save = openfile->placewewant;
     filestruct *edittop_save = openfile->edittop;
     filestruct *current_save = openfile->current;
 	/* Save where we are. */
     bool canceled = FALSE;
-	/* The return value. */
+	/* The inverse of this function's return value. */
+    bool result;
+	/* The return value of searching for a misspelled word. */
     unsigned stash[sizeof(flags) / sizeof(flags[0])];
 	/* A storage place for the current flag settings. */
 #ifndef NANO_TINY
@@ -2417,21 +2419,24 @@ bool do_int_spell_fix(const char *word)
     openfile->current_x = (size_t)-1;
     openfile->placewewant = 0;
 
-    /* Find the first whole occurrence of word. */
     findnextstr_wrap_reset();
-    while (findnextstr(TRUE, openfile->fileage, 0, word, &match_len) == 1) {
-	if (is_whole_word(openfile->current_x, openfile->current->data,
-		word)) {
-	    size_t xpt = xplustabs();
-	    char *exp_word = display_string(openfile->current->data,
-		xpt, strnlenpt(openfile->current->data,
-		openfile->current_x + match_len) - xpt, FALSE);
+
+    /* Find the first whole occurrence of word. */
+    result = findnextstr(TRUE, openfile->fileage, 0, word, &match_len);
+
+    /* The word must exist; if not, something is wrong. */
+    if (result == 0)
+	statusbar("Internal error: speller listed unfindable word");
+    else if (result == 1) {
+	exp_word = display_string(openfile->current->data, xplustabs(),
+			strnlenpt(openfile->current->data,
+			openfile->current_x + match_len) - xplustabs(), FALSE);
 
 	    edit_refresh();
 
 	    spotlight(TRUE, exp_word);
 
-	    /* Allow all instances of the word to be corrected. */
+	/* Let the user supply a correctly spelled alternative. */
 	    canceled = (do_prompt(FALSE,
 #ifndef DISABLE_TABCOMP
 		TRUE,
@@ -2446,14 +2451,12 @@ bool do_int_spell_fix(const char *word)
 
 	    free(exp_word);
 
+	/* If a replacement was given, go through all occurrences. */
 	    if (!canceled && strcmp(word, answer) != 0) {
 		openfile->current_x--;
 		do_replace_loop(TRUE, openfile->current,
 			&openfile->current_x, word);
 	    }
-
-	    break;
-	}
     }
 
 #ifndef NANO_TINY