diff --git a/src/spell.c b/src/spell.c
index a1ab89c..9d8f2bf 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -945,6 +945,10 @@
 static char *e_affrange = N_("E762: Character in FOL, LOW or UPP is out of range");
 static char *msg_compressing = N_("Compressing word tree...");
 
+/* Remember what "z?" replaced. */
+static char_u	*repl_from = NULL;
+static char_u	*repl_to = NULL;
+
 /*
  * Main spell-checking function.
  * "ptr" points to a character that could be the start of a word.
@@ -1657,8 +1661,8 @@
 }
 
 /*
- * Return TRUE if "flags" is a valid sequence of compound flags and
- * "word[len]" does not have too many syllables.
+ * Return TRUE if "flags" is a valid sequence of compound flags and "word"
+ * does not have too many syllables.
  */
     static int
 can_compound(slang, word, flags)
@@ -1884,7 +1888,7 @@
 
 /*
  * Need to fold at least one more character.  Do until next non-word character
- * for efficiency.
+ * for efficiency.  Include the non-word character too.
  * Return the length of the folded chars in bytes.
  */
     static int
@@ -1900,8 +1904,7 @@
 	mb_ptr_adv(mip->mi_fend);
     } while (*mip->mi_fend != NUL && spell_iswordp(mip->mi_fend, mip->mi_buf));
 
-    /* Include the non-word character so that we can check for the
-     * word end. */
+    /* Include the non-word character so that we can check for the word end. */
     if (*mip->mi_fend != NUL)
 	mb_ptr_adv(mip->mi_fend);
 
@@ -2201,6 +2204,9 @@
     }
 }
 
+/*
+ * Structure used for the cookie argument of do_in_runtimepath().
+ */
 typedef struct spelload_S
 {
     char_u  sl_lang[MAXWLEN + 1];	/* language name */
@@ -2246,7 +2252,7 @@
 						     lang, spell_enc(), lang);
     else if (sl.sl_slang != NULL)
     {
-	/* At least one file was loaded, now load all the additions. */
+	/* At least one file was loaded, now load ALL the additions. */
 	STRCPY(fname_enc + STRLEN(fname_enc) - 3, "add.spl");
 	do_in_runtimepath(fname_enc, TRUE, spell_load_cb, &sl);
     }
@@ -2469,7 +2475,8 @@
  * - To reload a spell file that was changed.  "lang" is NULL and "old_lp"
  *   points to the existing slang_T.
  * - Just after writing a .spl file; it's read back to produce the .sug file.
- *   "old_lp" is NULL and "lang" is a dummy name.  Will allocate an slang_T.
+ *   "old_lp" is NULL and "lang" is NULL.  Will allocate an slang_T.
+ *
  * Returns the slang_T the spell file was loaded into.  NULL for error.
  */
     static slang_T *
@@ -2686,7 +2693,7 @@
 	goto someerror;
 
     /* For a new file link it in the list of spell files. */
-    if (old_lp == NULL)
+    if (old_lp == NULL && lang != NULL)
     {
 	lp->sl_next = first_lang;
 	first_lang = lp;
@@ -4358,6 +4365,11 @@
     }
 
     init_spell_chartab();
+
+    vim_free(repl_to);
+    repl_to = NULL;
+    vim_free(repl_from);
+    repl_from = NULL;
 }
 # endif
 
@@ -4423,7 +4435,7 @@
     }
 
     /* When "zg" was used and the file wasn't loaded yet, should redo
-     * 'spelllang' to get it loaded. */
+     * 'spelllang' to load it now. */
     if (added_word && !didit)
 	did_set_spelllang(curbuf);
 }
@@ -7875,9 +7887,6 @@
 	slang = spell_load_file(wfname, NULL, NULL, FALSE);
 	if (slang == NULL)
 	    return;
-	/* don't want this language in the list */
-	if (first_lang == slang)
-	    first_lang = slang->sl_next;
 	free_slang = TRUE;
     }
 
@@ -9339,10 +9348,6 @@
     return OK;
 }
 
-/* Remember what "z?" replaced. */
-static char_u	*repl_from = NULL;
-static char_u	*repl_to = NULL;
-
 /*
  * "z?": Find badly spelled word under or after the cursor.
  * Give suggestions for the properly spelled word.
@@ -9720,22 +9725,22 @@
 
     /* Make room in "gap". */
     ga_init2(gap, sizeof(char_u *), sug.su_ga.ga_len + 1);
-    if (ga_grow(gap, sug.su_ga.ga_len) == FAIL)
-	return;
-
-    for (i = 0; i < sug.su_ga.ga_len; ++i)
+    if (ga_grow(gap, sug.su_ga.ga_len) == OK)
     {
-	stp = &SUG(sug.su_ga, i);
+	for (i = 0; i < sug.su_ga.ga_len; ++i)
+	{
+	    stp = &SUG(sug.su_ga, i);
 
-	/* The suggested word may replace only part of "word", add the not
-	 * replaced part. */
-	wcopy = alloc(stp->st_wordlen
+	    /* The suggested word may replace only part of "word", add the not
+	     * replaced part. */
+	    wcopy = alloc(stp->st_wordlen
 				+ STRLEN(sug.su_badptr + stp->st_orglen) + 1);
-	if (wcopy == NULL)
-	    break;
-	STRCPY(wcopy, stp->st_word);
-	STRCPY(wcopy + stp->st_wordlen, sug.su_badptr + stp->st_orglen);
-	((char_u **)gap->ga_data)[gap->ga_len++] = wcopy;
+	    if (wcopy == NULL)
+		break;
+	    STRCPY(wcopy, stp->st_word);
+	    STRCPY(wcopy + stp->st_wordlen, sug.su_badptr + stp->st_orglen);
+	    ((char_u **)gap->ga_data)[gap->ga_len++] = wcopy;
+	}
     }
 
     spell_find_cleanup(&sug);
@@ -10110,20 +10115,20 @@
 		buf[i] = getc(fd);			/* <fileID> */
 	    if (STRNCMP(buf, VIMSUGMAGIC, VIMSUGMAGICL) != 0)
 	    {
-		EMSG2(_("E999: This does not look like a .sug file: %s"),
+		EMSG2(_("E778: This does not look like a .sug file: %s"),
 							     slang->sl_fname);
 		goto nextone;
 	    }
 	    c = getc(fd);				/* <versionnr> */
 	    if (c < VIMSUGVERSION)
 	    {
-		EMSG2(_("E999: Old .sug file, needs to be updated: %s"),
+		EMSG2(_("E779: Old .sug file, needs to be updated: %s"),
 							     slang->sl_fname);
 		goto nextone;
 	    }
 	    else if (c > VIMSUGVERSION)
 	    {
-		EMSG2(_("E999: .sug file is for newer version of Vim: %s"),
+		EMSG2(_("E780: .sug file is for newer version of Vim: %s"),
 							     slang->sl_fname);
 		goto nextone;
 	    }
@@ -10135,7 +10140,7 @@
 		timestamp += getc(fd) << (i * 8);
 	    if (timestamp != slang->sl_sugtime)
 	    {
-		EMSG2(_("E999: .sug file doesn't match .spl file: %s"),
+		EMSG2(_("E781: .sug file doesn't match .spl file: %s"),
 							     slang->sl_fname);
 		goto nextone;
 	    }
@@ -10148,7 +10153,7 @@
 							       FALSE, 0) != 0)
 	    {
 someerror:
-		EMSG2(_("E999: error while reading .sug file: %s"),
+		EMSG2(_("E782: error while reading .sug file: %s"),
 							     slang->sl_fname);
 		slang_clear_sug(slang);
 		goto nextone;
@@ -12786,7 +12791,7 @@
 		{
 		    /* This should have been checked when generating the .spl
 		     * file. */
-		    EMSG(_("E999: duplicate char in MAP entry"));
+		    EMSG(_("E783: duplicate char in MAP entry"));
 		    vim_free(b);
 		}
 	    }
@@ -13026,7 +13031,7 @@
     suginfo_T	*su;
     char_u	*word;
 {
-    char_u	*s = vim_strsave(word);
+    char_u	*s;
     hash_T	hash;
     hashitem_T	*hi;
 
@@ -14888,7 +14893,7 @@
     int		len;
     int		i;
 
-    /* if the word starts with a lower-case letter make the word with an
+    /* If the word starts with a lower-case letter make the word with an
      * upper-case letter in word_up[]. */
     c = PTR2CHAR(word);
     if (SPELL_TOUPPER(c) != c)
@@ -14973,7 +14978,8 @@
 }
 
 /*
- * Move "p" to end of word.
+ * Move "p" to the end of word "start".
+ * Uses the spell-checking word characters.
  */
     char_u *
 spell_to_word_end(start, buf)
@@ -14989,10 +14995,10 @@
 
 #if defined(FEAT_INS_EXPAND) || defined(PROTO)
 /*
- * Find start of the word in front of the cursor.  We don't check if it is
- * badly spelled, with completion we can only change the word in front of the
- * cursor.
- * Used for Insert mode completion CTRL-X ?.
+ * For Insert mode completion CTRL-X s:
+ * Find start of the word in front of column "startcol".
+ * We don't check if it is badly spelled, with completion we can only change
+ * the word in front of the cursor.
  * Returns the column number of the word.
  */
     int
