diff --git a/src/eval.c b/src/eval.c
index 0e9a2ba..66aed74 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -367,7 +367,6 @@
 static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static list_T *list_alloc __ARGS((void));
-static void list_unref __ARGS((list_T *l));
 static void list_free __ARGS((list_T *l));
 static listitem_T *listitem_alloc __ARGS((void));
 static void listitem_free __ARGS((listitem_T *item));
@@ -560,6 +559,7 @@
 static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_sort __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_soundfold __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_spellbadword __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_spellsuggest __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_split __ARGS((typval_T *argvars, typval_T *rettv));
@@ -596,6 +596,8 @@
 static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
 
+static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
+static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
 static win_T *find_win_by_nr __ARGS((typval_T *vp));
 static pos_T *var2fpos __ARGS((typval_T *varp, int lnum));
 static int get_env_len __ARGS((char_u **arg));
@@ -1206,6 +1208,69 @@
     return retval;
 }
 
+#if defined(FEAT_SYN_HL) || defined(PROTO)
+/*
+ * Evaluate an expression to a list with suggestions.
+ * For the "expr:" part of 'spellsuggest'.
+ */
+    list_T *
+eval_spell_expr(badword, expr)
+    char_u	*badword;
+    char_u	*expr;
+{
+    typval_T	save_val;
+    typval_T	rettv;
+    list_T	*list = NULL;
+    char_u	*p = skipwhite(expr);
+
+    /* Set "v:val" to the bad word. */
+    prepare_vimvar(VV_VAL, &save_val);
+    vimvars[VV_VAL].vv_type = VAR_STRING;
+    vimvars[VV_VAL].vv_str = badword;
+    if (p_verbose == 0)
+	++emsg_off;
+
+    if (eval1(&p, &rettv, TRUE) == OK)
+    {
+	if (rettv.v_type != VAR_LIST)
+	    clear_tv(&rettv);
+	else
+	    list = rettv.vval.v_list;
+    }
+
+    if (p_verbose == 0)
+	--emsg_off;
+    vimvars[VV_VAL].vv_str = NULL;
+    restore_vimvar(VV_VAL, &save_val);
+
+    return list;
+}
+
+/*
+ * "list" is supposed to contain two items: a word and a number.  Return the
+ * word in "pp" and the number as the return value.
+ * Return -1 if anything isn't right.
+ * Used to get the good word and score from the eval_spell_expr() result.
+ */
+    int
+get_spellword(list, pp)
+    list_T	*list;
+    char_u	**pp;
+{
+    listitem_T	*li;
+
+    li = list->lv_first;
+    if (li == NULL)
+	return -1;
+    *pp = get_tv_string(&li->li_tv);
+
+    li = li->li_next;
+    if (li == NULL)
+	return -1;
+    return get_tv_number(&li->li_tv);
+}
+#endif
+
 #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
 /*
  * Call some vimL function and return the result as a string
@@ -4976,7 +5041,7 @@
  * Unreference a list: decrement the reference count and free it when it
  * becomes zero.
  */
-    static void
+    void
 list_unref(l)
     list_T *l;
 {
@@ -6627,6 +6692,7 @@
     {"setwinvar",	3, 3, f_setwinvar},
     {"simplify",	1, 1, f_simplify},
     {"sort",		1, 2, f_sort},
+    {"soundfold",	1, 1, f_soundfold},
     {"spellbadword",	0, 0, f_spellbadword},
     {"spellsuggest",	1, 2, f_spellsuggest},
     {"split",		1, 3, f_split},
@@ -8442,8 +8508,6 @@
     rettv->v_type = VAR_STRING;
 }
 
-static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
-static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
 static void filter_map __ARGS((typval_T *argvars, typval_T *rettv, int map));
 static int filter_map_one __ARGS((typval_T *tv, char_u *expr, int map, int *remp));
 
@@ -13358,6 +13422,25 @@
 }
 
 /*
+ * "soundfold({word})" function
+ */
+    static void
+f_soundfold(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*s;
+
+    rettv->v_type = VAR_STRING;
+    s = get_tv_string(&argvars[0]);
+#ifdef FEAT_SYN_HL
+    rettv->vval.v_string = eval_soundfold(s);
+#else
+    rettv->vval.v_string = vim_strsave(s);
+#endif
+}
+
+/*
  * "spellbadword()" function
  */
 /* ARGSUSED */
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 6a06be5..48ef24b 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -765,6 +765,8 @@
 			NEEDARG|EXTRA|TRLBAR),
 EX(CMD_spelldump,	"spelldump",	ex_spelldump,
 			TRLBAR),
+EX(CMD_spellrepall,	"spellrepall",	ex_spellrepall,
+			TRLBAR),
 EX(CMD_sprevious,	"sprevious",	ex_previous,
 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_srewind,		"srewind",	ex_rewind,
diff --git a/src/memline.c b/src/memline.c
index 9f9e307..47dc00d 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -880,7 +880,7 @@
 	    (void)recover_names(&fname, TRUE, 0);
 	    msg_putchar('\n');
 	    MSG_PUTS(_("Enter number of swap file to use (0 to quit): "));
-	    i = get_number(FALSE);
+	    i = get_number(FALSE, NULL);
 	    if (i < 1 || i > len)
 		goto theend;
 	}
diff --git a/src/misc1.c b/src/misc1.c
index 87c0f1a..73d0ef2 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3085,15 +3085,20 @@
 }
 
 /*
- * get a number from the user
+ * Get a number from the user.
+ * When "mouse_used" is not NULL allow using the mouse.
  */
     int
-get_number(colon)
-    int	colon;			/* allow colon to abort */
+get_number(colon, mouse_used)
+    int	    colon;			/* allow colon to abort */
+    int	    *mouse_used;
 {
     int	n = 0;
     int	c;
 
+    if (mouse_used != NULL)
+	*mouse_used = FALSE;
+
     /* When not printing messages, the user won't know what to type, return a
      * zero (as if CR was hit). */
     if (msg_silent != 0)
@@ -3118,6 +3123,14 @@
 	    n /= 10;
 	    MSG_PUTS("\b \b");
 	}
+#ifdef FEAT_MOUSE
+	else if (mouse_used != NULL && c == K_LEFTMOUSE)
+	{
+	    *mouse_used = TRUE;
+	    n = mouse_row + 1;
+	    break;
+	}
+#endif
 	else if (n == 0 && c == ':' && colon)
 	{
 	    stuffcharReadbuff(':');
@@ -3137,9 +3150,12 @@
 
 /*
  * Ask the user to enter a number.
+ * When "mouse_used" is not NULL allow using the mouse and in that case return
+ * the line number.
  */
     int
-prompt_for_number()
+prompt_for_number(mouse_used)
+    int		*mouse_used;
 {
     int		i;
     int		save_cmdline_row;
@@ -3152,12 +3168,16 @@
     save_cmdline_row = cmdline_row;
     cmdline_row = Rows - 1;
     save_State = State;
-    State = CMDLINE;
+    if (mouse_used == NULL)
+	State = CMDLINE;
+    else
+	State = NORMAL;
 
-    i = get_number(TRUE);
-    if (KeyTyped)		/* don't call wait_return() now */
+    i = get_number(TRUE, mouse_used);
+    if (KeyTyped)
     {
-	msg_putchar('\n');
+	/* don't call wait_return() now */
+	/* msg_putchar('\n'); */
 	cmdline_row = msg_row - 1;
 	need_wait_return = FALSE;
 	msg_didany = FALSE;
@@ -3426,24 +3446,30 @@
     char_u	*dst;		/* where to put the result */
     int		dstlen;		/* maximum length of the result */
 {
-    expand_env_esc(src, dst, dstlen, FALSE);
+    expand_env_esc(src, dst, dstlen, FALSE, NULL);
 }
 
     void
-expand_env_esc(src, dst, dstlen, esc)
-    char_u	*src;		/* input string e.g. "$HOME/vim.hlp" */
+expand_env_esc(srcp, dst, dstlen, esc, startstr)
+    char_u	*srcp;		/* input string e.g. "$HOME/vim.hlp" */
     char_u	*dst;		/* where to put the result */
     int		dstlen;		/* maximum length of the result */
     int		esc;		/* escape spaces in expanded variables */
+    char_u	*startstr;	/* start again after this (can be NULL) */
 {
+    char_u	*src;
     char_u	*tail;
     int		c;
     char_u	*var;
     int		copy_char;
     int		mustfree;	/* var was allocated, need to free it later */
     int		at_start = TRUE; /* at start of a name */
+    int		startstr_len = 0;
 
-    src = skipwhite(src);
+    if (startstr != NULL)
+	startstr_len = STRLEN(startstr);
+
+    src = skipwhite(srcp);
     --dstlen;		    /* leave one char space for "\," */
     while (*src && dstlen > 0)
     {
@@ -3679,6 +3705,10 @@
 		at_start = TRUE;
 	    *dst++ = *src++;
 	    --dstlen;
+
+	    if (startstr != NULL && src - startstr_len >= srcp
+		    && STRNCMP(src - startstr_len, startstr, startstr_len) == 0)
+		at_start = TRUE;
 	}
     }
     *dst = NUL;
diff --git a/src/option.c b/src/option.c
index 389ab6e..8553771 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2040,7 +2040,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    },
-    {"spelllang",   "spl",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF,
+    {"spelllang",   "spl",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF|P_EXPAND,
 #ifdef FEAT_SYN_HL
 			    (char_u *)&p_spl, PV_SPL,
 			    {(char_u *)"en", (char_u *)0L}
@@ -2049,7 +2049,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    },
-    {"spellsuggest", "sps", P_STRING|P_VI_DEF,
+    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
 #ifdef FEAT_SYN_HL
 			    (char_u *)&p_sps, PV_NONE,
 			    {(char_u *)"best", (char_u *)0L}
@@ -4554,9 +4554,14 @@
      * Expanding this with NameBuff, expand_env() must not be passed IObuff.
      * Escape spaces when expanding 'tags', they are used to separate file
      * names.
+     * For 'spellsuggest' expand after "file:".
      */
     expand_env_esc(val, NameBuff, MAXPATHL,
-				  (char_u **)options[opt_idx].var == &p_tags);
+	    (char_u **)options[opt_idx].var == &p_tags,
+#ifdef FEAT_SYN_HL
+	    (char_u **)options[opt_idx].var == &p_sps ? (char_u *)"file:" :
+#endif
+				  NULL);
     if (STRCMP(NameBuff, val) == 0)   /* they are the same */
 	return NULL;
 
@@ -4590,7 +4595,7 @@
     (void)opt_strings_flags(p_ttym, p_ttym_values, &ttym_flags, FALSE);
 #endif
 #ifdef FEAT_SYN_HL
-    (void)opt_strings_flags(p_sps, p_sps_values, &sps_flags, FALSE);
+    (void)spell_check_sps();
 #endif
 #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
     (void)opt_strings_flags(p_toolbar, p_toolbar_values, &toolbar_flags, TRUE);
@@ -5753,7 +5758,7 @@
     /* 'spellsuggest' */
     else if (varp == &p_sps)
     {
-	if (opt_strings_flags(p_sps, p_sps_values, &sps_flags, FALSE) != OK)
+	if (spell_check_sps() != OK)
 	    errmsg = e_invarg;
     }
 #endif
@@ -9013,6 +9018,16 @@
 		break;
 	    }
 	}
+
+#ifdef FEAT_SYN_HL
+	/* for 'spellsuggest' start at "file:" */
+	if (options[opt_idx].var == (char_u *)&p_sps
+					       && STRNCMP(p, "file:", 5) == 0)
+	{
+	    xp->xp_pattern = p + 5;
+	    break;
+	}
+#endif
     }
 
     return;
diff --git a/src/option.h b/src/option.h
index 0be4ac3..2b7e80d 100644
--- a/src/option.h
+++ b/src/option.h
@@ -708,13 +708,6 @@
 #endif
 #ifdef FEAT_SYN_HL
 EXTERN char_u	*p_sps;		/* 'spellsuggest' */
-EXTERN unsigned sps_flags;
-# ifdef IN_OPTION_C
-static char *(p_sps_values[]) = {"best", "fast", "double", NULL};
-# endif
-# define SPS_BEST		0x01
-# define SPS_FAST		0x02
-# define SPS_DOUBLE		0x04
 #endif
 #ifdef FEAT_VERTSPLIT
 EXTERN int	p_spr;		/* 'splitright' */
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index f03b28b..9505ed0 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -20,6 +20,8 @@
 char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd));
 char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd));
 int eval_to_number __ARGS((char_u *expr));
+list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+int get_spellword __ARGS((list_T *list, char_u **pp));
 char_u *call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *save_funccal __ARGS((void));
 void restore_funccal __ARGS((void *vfc));
@@ -37,6 +39,7 @@
 int do_unlet __ARGS((char_u *name, int forceit));
 void del_menutrans_vars __ARGS((void));
 char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
+void list_unref __ARGS((list_T *l));
 int list_append_dict __ARGS((list_T *list, dict_T *dict));
 int garbage_collect __ARGS((void));
 dict_T *dict_alloc __ARGS((void));
diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro
index 94d0455..be4c9df 100644
--- a/src/proto/misc1.pro
+++ b/src/proto/misc1.pro
@@ -41,15 +41,15 @@
 void change_warning __ARGS((int col));
 int ask_yesno __ARGS((char_u *str, int direct));
 int get_keystroke __ARGS((void));
-int get_number __ARGS((int colon));
-int prompt_for_number __ARGS((void));
+int get_number __ARGS((int colon, int *mouse_used));
+int prompt_for_number __ARGS((int *mouse_used));
 void msgmore __ARGS((long n));
 void beep_flush __ARGS((void));
 void vim_beep __ARGS((void));
 void init_homedir __ARGS((void));
 void free_homedir __ARGS((void));
 void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
-void expand_env_esc __ARGS((char_u *src, char_u *dst, int dstlen, int esc));
+void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, char_u *startstr));
 char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
 char_u *expand_env_save __ARGS((char_u *src));
 void vim_setenv __ARGS((char_u *name, char_u *val));
diff --git a/src/proto/spell.pro b/src/proto/spell.pro
index 37830ca..91483b0 100644
--- a/src/proto/spell.pro
+++ b/src/proto/spell.pro
@@ -10,7 +10,10 @@
 void ex_spell __ARGS((exarg_T *eap));
 void spell_add_word __ARGS((char_u *word, int len, int bad));
 void init_spell_chartab __ARGS((void));
+int spell_check_sps __ARGS((void));
 void spell_suggest __ARGS((void));
+void ex_spellrepall __ARGS((exarg_T *eap));
 void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount));
+char_u *eval_soundfold __ARGS((char_u *word));
 void ex_spelldump __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff --git a/src/version.h b/src/version.h
index 4dbd342..1b12b0c 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 27)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 27, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 28)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 28, compiled "
