diff --git a/src/diff.c b/src/diff.c
index f2af8e2..b6f936e 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -668,18 +668,18 @@
     for (;;)
     {
 	ok = FALSE;
-	fd = fopen((char *)tmp_orig, "w");
+	fd = mch_fopen((char *)tmp_orig, "w");
 	if (fd != NULL)
 	{
 	    fwrite("line1\n", (size_t)6, (size_t)1, fd);
 	    fclose(fd);
-	    fd = fopen((char *)tmp_new, "w");
+	    fd = mch_fopen((char *)tmp_new, "w");
 	    if (fd != NULL)
 	    {
 		fwrite("line2\n", (size_t)6, (size_t)1, fd);
 		fclose(fd);
 		diff_file(tmp_orig, tmp_new, tmp_diff);
-		fd = fopen((char *)tmp_diff, "r");
+		fd = mch_fopen((char *)tmp_diff, "r");
 		if (fd != NULL)
 		{
 		    char_u	linebuf[LBUFLEN];
@@ -1144,7 +1144,7 @@
     long	count_orig, count_new;
     int		notset = TRUE;	    /* block "*dp" not set yet */
 
-    fd = fopen((char *)fname, "r");
+    fd = mch_fopen((char *)fname, "r");
     if (fd == NULL)
     {
 	EMSG(_("E98: Cannot read diff output"));
diff --git a/src/eval.c b/src/eval.c
index e087b7a..2365b3f 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -504,6 +504,7 @@
 static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getfontname __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_getfperm __ARGS((typval_T *argvars, typval_T *rettv));
@@ -6769,6 +6770,7 @@
     {"getcharmod",	0, 0, f_getcharmod},
     {"getcmdline",	0, 0, f_getcmdline},
     {"getcmdpos",	0, 0, f_getcmdpos},
+    {"getcmdtype",	0, 0, f_getcmdtype},
     {"getcwd",		0, 0, f_getcwd},
     {"getfontname",	0, 1, f_getfontname},
     {"getfperm",	1, 1, f_getfperm},
@@ -6799,7 +6801,7 @@
     {"iconv",		3, 3, f_iconv},
     {"indent",		1, 1, f_indent},
     {"index",		2, 4, f_index},
-    {"input",		1, 2, f_input},
+    {"input",		1, 3, f_input},
     {"inputdialog",	1, 3, f_inputdialog},
     {"inputlist",	1, 1, f_inputlist},
     {"inputrestore",	0, 0, f_inputrestore},
@@ -9438,6 +9440,24 @@
 }
 
 /*
+ * "getcmdtype()" function
+ */
+/*ARGSUSED*/
+    static void
+f_getcmdtype(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->v_type = VAR_STRING;
+    rettv->vval.v_string = alloc(2);
+    if (rettv->vval.v_string != NULL)
+    {
+	rettv->vval.v_string[0] = get_cmdline_type();
+	rettv->vval.v_string[1] = NUL;
+    }
+}
+
+/*
  * "getcwd()" function
  */
 /*ARGSUSED*/
@@ -10794,6 +10814,8 @@
     char_u	buf[NUMBUFLEN];
     int		cmd_silent_save = cmd_silent;
     char_u	*defstr = (char_u *)"";
+    int		xp_type = EXPAND_NOTHING;
+    char_u	*xp_arg = NULL;
 
     rettv->v_type = VAR_STRING;
 
@@ -10835,9 +10857,31 @@
 		stuffReadbuffSpec(defstr);
 	}
 
+	if (argvars[2].v_type != VAR_UNKNOWN)
+	{
+	    char_u	*xp_name;
+	    int		xp_namelen;
+	    long	argt;
+
+	    rettv->vval.v_string = NULL;
+
+	    xp_name = get_tv_string_buf_chk(&argvars[2], buf);
+	    if (xp_name == NULL)
+		return;
+
+	    xp_namelen = STRLEN(xp_name);
+
+	    if (parse_compl_arg(xp_name, xp_namelen, &xp_type, &argt, &xp_arg)
+								      == FAIL)
+		return;
+	}
+
 	if (defstr != NULL)
 	    rettv->vval.v_string =
-		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr);
+		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+				  xp_type, xp_arg);
+
+	vim_free(xp_arg);
 
 	/* since the user typed this, no need to wait for return */
 	need_wait_return = FALSE;
@@ -17680,10 +17724,8 @@
     }
     msg_putchar(')');
     msg_clr_eos();
-#ifdef FEAT_EVAL
     if (p_verbose > 0)
 	last_set_msg(fp->uf_script_ID);
-#endif
 }
 
 /*
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 529baf7..c35ad38 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -5688,7 +5688,7 @@
 			{
 			    for (fi = 0; fi < fcount; ++fi)
 			    {
-				fd = fopen((char *)fnames[fi], "r");
+				fd = mch_fopen((char *)fnames[fi], "r");
 				if (fd != NULL)
 				{
 				    vim_fgets(IObuff, IOSIZE, fd);
@@ -5953,7 +5953,7 @@
     STRCPY(NameBuff, dir);
     add_pathsep(NameBuff);
     STRCAT(NameBuff, tagfname);
-    fd_tags = fopen((char *)NameBuff, "w");
+    fd_tags = mch_fopen((char *)NameBuff, "w");
     if (fd_tags == NULL)
     {
 	EMSG2(_("E152: Cannot open %s for writing"), NameBuff);
@@ -5988,7 +5988,7 @@
      */
     for (fi = 0; fi < filecount && !got_int; ++fi)
     {
-	fd = fopen((char *)files[fi], "r");
+	fd = mch_fopen((char *)files[fi], "r");
 	if (fd == NULL)
 	{
 	    EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index bd8d748..c635bfc 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -167,7 +167,7 @@
 	if (!debug_greedy)
 	    save_typeahead(&typeaheadbuf);
 
-	cmdline = getcmdline_prompt('>', NULL, 0);
+	cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
 
 	if (!debug_greedy)
 	    restore_typeahead(&typeaheadbuf);
@@ -1031,7 +1031,7 @@
 
     if (profile_fname != NULL)
     {
-	fd = fopen((char *)profile_fname, "w");
+	fd = mch_fopen((char *)profile_fname, "w");
 	if (fd == NULL)
 	    EMSG2(_(e_notopen), profile_fname);
 	else
@@ -1149,7 +1149,7 @@
 	    fprintf(fd, "\n");
 	    fprintf(fd, "count  total (s)   self (s)\n");
 
-	    sfd = fopen((char *)si->sn_name, "r");
+	    sfd = mch_fopen((char *)si->sn_name, "r");
 	    if (sfd == NULL)
 		fprintf(fd, "Cannot open file!\n");
 	    else
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 6e6e297..72ffc18 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5267,66 +5267,15 @@
 	}
 	else if (STRNICMP(attr, "complete", attrlen) == 0)
 	{
-	    char_u	*arg = NULL;
-	    size_t	arglen = 0;
-
 	    if (val == NULL)
 	    {
-		EMSG(_("E179: argument required for complete"));
+		EMSG(_("E179: argument required for -complete"));
 		return FAIL;
 	    }
-	    /* Look for any argument part - which is the part after any ',' */
-	    for (i = 0; i < (int)vallen; ++i)
-	    {
-		if (val[i] == ',')
-		{
-		    arg = &val[i + 1];
-		    arglen = vallen - i - 1;
-		    vallen = i;
-		    break;
-		}
-	    }
 
-	    for (i = 0; command_complete[i].expand != 0; ++i)
-	    {
-		if (STRLEN(command_complete[i].name) == vallen
-			&& STRNCMP(val, command_complete[i].name, vallen) == 0)
-		{
-		    *compl = command_complete[i].expand;
-		    if (command_complete[i].expand == EXPAND_BUFFERS)
-			*argt |= BUFNAME;
-		    else if (command_complete[i].expand == EXPAND_DIRECTORIES
-			    || command_complete[i].expand == EXPAND_FILES)
-			*argt |= XFILE;
-		    break;
-		}
-	    }
-
-	    if (command_complete[i].expand == 0)
-	    {
-		EMSG2(_("E180: Invalid complete value: %s"), val);
+	    if (parse_compl_arg(val, (int)vallen, compl, argt, compl_arg)
+								      == FAIL)
 		return FAIL;
-	    }
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
-	    if (*compl != EXPAND_USER_DEFINED && *compl != EXPAND_USER_LIST &&
-		arg != NULL)
-#else
-	    if (arg != NULL)
-#endif
-	    {
-		EMSG(_("E468: Completion argument only allowed for custom completion"));
-		return FAIL;
-	    }
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
-	    if ((*compl == EXPAND_USER_DEFINED || *compl == EXPAND_USER_LIST) &&
-		arg == NULL)
-	    {
-		EMSG(_("E467: Custom completion requires a function argument"));
-		return FAIL;
-	    }
-	    if (arg != NULL)
-		*compl_arg = vim_strnsave(arg, (int)arglen);
-#endif
 	}
 	else
 	{
@@ -5914,6 +5863,86 @@
 
 #endif	/* FEAT_USR_CMDS */
 
+#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Parse a completion argument "value[vallen]".
+ * The detected completion goes in "*complp", argument type in "*argt".
+ * When there is an argument, for function and user defined completion, it's
+ * copied to allocated memory and stored in "*compl_arg".
+ * Returns FAIL if something is wrong.
+ */
+    int
+parse_compl_arg(value, vallen, complp, argt, compl_arg)
+    char_u	*value;
+    int		vallen;
+    int		*complp;
+    long	*argt;
+    char_u	**compl_arg;
+{
+    char_u	*arg = NULL;
+    size_t	arglen = 0;
+    int		i;
+    int		valend = vallen;
+
+    /* Look for any argument part - which is the part after any ',' */
+    for (i = 0; i < vallen; ++i)
+    {
+	if (value[i] == ',')
+	{
+	    arg = &value[i + 1];
+	    arglen = vallen - i - 1;
+	    valend = i;
+	    break;
+	}
+    }
+
+    for (i = 0; command_complete[i].expand != 0; ++i)
+    {
+	if (STRLEN(command_complete[i].name) == valend
+		&& STRNCMP(value, command_complete[i].name, valend) == 0)
+	{
+	    *complp = command_complete[i].expand;
+	    if (command_complete[i].expand == EXPAND_BUFFERS)
+		*argt |= BUFNAME;
+	    else if (command_complete[i].expand == EXPAND_DIRECTORIES
+		    || command_complete[i].expand == EXPAND_FILES)
+		*argt |= XFILE;
+	    break;
+	}
+    }
+
+    if (command_complete[i].expand == 0)
+    {
+	EMSG2(_("E180: Invalid complete value: %s"), value);
+	return FAIL;
+    }
+
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+    if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
+							       && arg != NULL)
+# else
+    if (arg != NULL)
+# endif
+    {
+	EMSG(_("E468: Completion argument only allowed for custom completion"));
+	return FAIL;
+    }
+
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+    if ((*complp == EXPAND_USER_DEFINED || *complp == EXPAND_USER_LIST)
+							       && arg == NULL)
+    {
+	EMSG(_("E467: Custom completion requires a function argument"));
+	return FAIL;
+    }
+
+    if (arg != NULL)
+	*compl_arg = vim_strnsave(arg, (int)arglen);
+# endif
+    return OK;
+}
+#endif
+
     static void
 ex_colorscheme(eap)
     exarg_T	*eap;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 6f6550b..b69076f 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -31,6 +31,11 @@
     int		cmdattr;	/* attributes for prompt */
     int		overstrike;	/* Typing mode on the command line.  Shared by
 				   getcmdline() and put_on_cmdline(). */
+    int		xp_context;	/* type of expansion */
+# ifdef FEAT_EVAL
+    char_u	*xp_arg;	/* user-defined expansion arg */
+    int		input_fn;	/* Invoked for input() function */
+# endif
 };
 
 static struct cmdline_info ccline;	/* current cmdline_info */
@@ -254,6 +259,15 @@
     xpc.xp_context = EXPAND_NOTHING;
     xpc.xp_backslash = XP_BS_NONE;
 
+#if defined(FEAT_EVAL)
+    if (ccline.input_fn)
+    {
+	xpc.xp_context = ccline.xp_context;
+	xpc.xp_pattern = ccline.cmdbuff;
+	xpc.xp_arg = ccline.xp_arg;
+    }
+#endif
+
     /*
      * Avoid scrolling when called by a recursive do_cmdline(), e.g. when
      * doing ":@0" when register 0 doesn't contain a CR.
@@ -414,6 +428,13 @@
 	    if (p_wmnu && wild_menu_showing != 0)
 	    {
 		int skt = KeyTyped;
+		int old_RedrawingDisabled;
+
+		if (ccline.input_fn)
+		{
+		    old_RedrawingDisabled = RedrawingDisabled;
+		    RedrawingDisabled = 0;
+		}
 
 		if (wild_menu_showing == WM_SCROLLED)
 		{
@@ -442,6 +463,8 @@
 # endif
 		    redraw_statuslines();
 		}
+		if (ccline.input_fn)
+		    RedrawingDisabled = old_RedrawingDisabled;
 		KeyTyped = skt;
 		wild_menu_showing = 0;
 	    }
@@ -1791,10 +1814,12 @@
  * Returns the command line in allocated memory, or NULL.
  */
     char_u *
-getcmdline_prompt(firstc, prompt, attr)
+getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
     int		firstc;
     char_u	*prompt;	/* command line prompt */
     int		attr;		/* attributes for prompt */
+    int		xp_context;	/* type of expansion */
+    char_u	*xp_arg;	/* user-defined expansion argument */
 {
     char_u		*s;
     struct cmdline_info	save_ccline;
@@ -1803,6 +1828,11 @@
     save_cmdline(&save_ccline);
     ccline.cmdprompt = prompt;
     ccline.cmdattr = attr;
+# ifdef FEAT_EVAL
+    ccline.xp_context = xp_context;
+    ccline.xp_arg = xp_arg;
+    ccline.input_fn = (firstc == '@');
+# endif
     s = getcmdline(firstc, 1L, 0);
     restore_cmdline(&save_ccline);
     /* Restore msg_col, the prompt from input() may have changed it. */
@@ -1830,7 +1860,7 @@
     static void
 set_cmdspos()
 {
-    if (ccline.cmdfirstc)
+    if (ccline.cmdfirstc != NUL)
 	ccline.cmdspos = 1 + ccline.cmdindent;
     else
 	ccline.cmdspos = 0 + ccline.cmdindent;
@@ -2222,7 +2252,7 @@
 
 	old_row = msg_row;
 	old_col = msg_col;
-	cmdspos = ((ccline.cmdfirstc) ? 1 : 0) + ccline.cmdindent;
+	cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
 
 # ifdef FEAT_MBYTE
 	if (has_mbyte)
@@ -2813,14 +2843,14 @@
 
     if (cmd_silent)
 	return;
-    if (ccline.cmdfirstc)
+    if (ccline.cmdfirstc != NUL)
 	msg_putchar(ccline.cmdfirstc);
     if (ccline.cmdprompt != NULL)
     {
 	msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
 	ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
 	/* do the reverse of set_cmdspos() */
-	if (ccline.cmdfirstc)
+	if (ccline.cmdfirstc != NUL)
 	    --ccline.cmdindent;
     }
     else
@@ -3843,6 +3873,7 @@
     if (ccline.cmdfirstc != ':'
 #ifdef FEAT_EVAL
 	    && ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
+	    && !ccline.input_fn
 #endif
 	    )
     {
@@ -3875,6 +3906,12 @@
     if (ccline.cmdfirstc == '=')
 	/* pass CMD_SIZE because there is no real command */
 	set_context_for_expression(xp, str, CMD_SIZE);
+    else if (ccline.input_fn)
+    {
+	xp->xp_context = ccline.xp_context;
+	xp->xp_pattern = ccline.cmdbuff;
+	xp->xp_arg = ccline.xp_arg;
+    }
     else
 #endif
 	while (nextcomm != NULL)
@@ -4838,6 +4875,22 @@
 }
 
 /*
+ * Get the current command-line type.
+ * Returns ':' or '/' or '?' or '@' or '>'
+ * Only works when the command line is being edited.
+ * Returns NUL when something is wrong.
+ */
+    int
+get_cmdline_type()
+{
+    struct cmdline_info *p = get_ccline_ptr();
+
+    if (p == NULL)
+	return NUL;
+    return p->cmdfirstc;
+}
+
+/*
  * Calculate history index from a number:
  *   num > 0: seen as identifying number of a history entry
  *   num < 0: relative position in history wrt newest entry
diff --git a/src/fileio.c b/src/fileio.c
index d49d87b..916fdcb 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3483,12 +3483,11 @@
 		}
 		if (backup != NULL)
 		{
-
 		    /*
-		     * Delete any existing backup and move the current version to
-		     * the backup.	For safety, we don't remove the backup until
-		     * the write has finished successfully. And if the 'backup'
-		     * option is set, leave it around.
+		     * Delete any existing backup and move the current version
+		     * to the backup.	For safety, we don't remove the backup
+		     * until the write has finished successfully. And if the
+		     * 'backup' option is set, leave it around.
 		     */
 		    /*
 		     * If the renaming of the original file to the backup file
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 7653308..24d7d06 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -1098,7 +1098,7 @@
 	FILE *f;
 	char_u *tmp = vim_tempname('c');
 
-	f = fopen((char *)tmp, "w");
+	f = mch_fopen((char *)tmp, "w");
 	cs_file_results(f, nummatches);
 	fclose(f);
 	/* '-' starts a new error list */
diff --git a/src/main.c b/src/main.c
index 0067b1c..898205e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -201,7 +201,7 @@
 #endif
 
 #ifdef STARTUPTIME
-    time_fd = fopen(STARTUPTIME, "a");
+    time_fd = mch_fopen(STARTUPTIME, "a");
     TIME_MSG("--- VIM STARTING ---");
 #endif
 
diff --git a/src/mbyte.c b/src/mbyte.c
index abdb9e8..d057266 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -161,7 +161,7 @@
 	return;
     if (fd == NULL)
     {
-	fd = fopen("xim.log", "w");
+	fd = mch_fopen("xim.log", "w");
 	if (fd == NULL)
 	{
 	    EMSG("Cannot open xim.log");
diff --git a/src/message.c b/src/message.c
index b5329bc..6daa365 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3034,7 +3034,7 @@
 	/* Only give the error message once. */
 	verbose_did_open = TRUE;
 
-	verbose_fd = fopen((char *)p_vfile, "a");
+	verbose_fd = mch_fopen((char *)p_vfile, "a");
 	if (verbose_fd == NULL)
 	{
 	    EMSG2(_(e_notopen), p_vfile);
diff --git a/src/misc2.c b/src/misc2.c
index 3057415..e691aa9 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -3512,7 +3512,8 @@
 	cmdline_row = msg_row;
 	p1 = getcmdline_prompt(NUL, round == 0
 		? (char_u *)_("Enter encryption key: ")
-		: (char_u *)_("Enter same key again: "), 0);
+		: (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING,
+		NULL);
 	cmdline_star = FALSE;
 
 	if (p1 == NULL)
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index f4df30d..25601e1 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -21,6 +21,7 @@
 char_u *get_user_cmd_flags __ARGS((expand_T *xp, int idx));
 char_u *get_user_cmd_nargs __ARGS((expand_T *xp, int idx));
 char_u *get_user_cmd_complete __ARGS((expand_T *xp, int idx));
+int parse_compl_arg __ARGS((char_u *value, int vallen, int *complp, long *argt, char_u **compl_arg));
 void not_exiting __ARGS((void));
 void handle_drop __ARGS((int filec, char_u **filev, int split));
 void alist_clear __ARGS((alist_T *al));
diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro
index f0d45a3..fe2752b 100644
--- a/src/proto/ex_getln.pro
+++ b/src/proto/ex_getln.pro
@@ -1,6 +1,6 @@
 /* ex_getln.c */
 char_u *getcmdline __ARGS((int firstc, long count, int indent));
-char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr));
+char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg));
 char_u *getexline __ARGS((int c, void *dummy, int indent));
 char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
 int cmdline_overstrike __ARGS((void));
@@ -33,6 +33,7 @@
 char_u *get_cmdline_str __ARGS((void));
 int get_cmdline_pos __ARGS((void));
 int set_cmdline_pos __ARGS((int pos));
+int get_cmdline_type __ARGS((void));
 char_u *get_history_entry __ARGS((int histype, int idx));
 int clr_history __ARGS((int histype));
 int del_history_entry __ARGS((int histype, char_u *str));
diff --git a/src/quickfix.c b/src/quickfix.c
index 56f1671..1133187 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3056,7 +3056,7 @@
 					   + STRLEN(fnames[fi]) - 3, 3) == 0))
 			    continue;
 #endif
-		    fd = fopen((char *)fnames[fi], "r");
+		    fd = mch_fopen((char *)fnames[fi], "r");
 		    if (fd != NULL)
 		    {
 			lnum = 1;
diff --git a/src/version.h b/src/version.h
index f4c9e71..0cb24ad 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 Sep 16)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
