updated for version 7.0026
diff --git a/src/eval.c b/src/eval.c
index dcd86e5..13a5b1b 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3427,25 +3427,12 @@
     VAR		avar;
 {
     buf_T	*buf = NULL;
-    char_u	*name;
 
     if (avar->var_type == VAR_NUMBER)
 	buf = buflist_findnr((int)avar->var_val.var_number);
     else if (avar->var_val.var_string != NULL)
     {
-	/* First make the name into a full path name */
-	name = FullName_save(avar->var_val.var_string,
-#ifdef UNIX
-		TRUE	    /* force expansion, get rid of symbolic links */
-#else
-		FALSE
-#endif
-		);
-	if (name != NULL)
-	{
-	    buf = buflist_findname(name);
-	    vim_free(name);
-	}
+	buf = buflist_findname_exp(avar->var_val.var_string);
 	if (buf == NULL)
 	{
 	    /* No full path name match, try a match with a URL or a "nofile"
diff --git a/src/main.c b/src/main.c
index d71ef60..78639a2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -141,7 +141,8 @@
     int		full_path = FALSE;
 #endif
 #ifdef FEAT_CLIENTSERVER
-    char_u	*serverStr = NULL;
+    char_u	*serverStr = NULL;	/* remote server command */
+    char_u	*serverStrEnc = NULL;	/* encoding of serverStr */
     char_u	*serverName_arg = NULL;	/* cmdline arg for server name */
     int		serverArg = FALSE;	/* TRUE when argument for a server */
     char_u	*servername = NULL;	/* allocated name for our server */
@@ -378,10 +379,16 @@
 
 	/*
 	 * When a command server argument was found, execute it.  This may
-	 * exit Vim when it was successful.
+	 * exit Vim when it was successful.  Otherwise it's executed further
+	 * on.  Remember the encoding used here in "serverStrEnc".
 	 */
 	if (serverArg)
+	{
 	    cmdsrv_main(&argc, argv, serverName_arg, &serverStr);
+# ifdef FEAT_MBYTE
+	    serverStrEnc = vim_strsave(p_enc);
+# endif
+	}
 
 	/* If we're still running, get the name to register ourselves.
 	 * On Win32 can register right now, for X11 need to setup the
@@ -1662,7 +1669,10 @@
      * else we would have exited above).
      */
     if (serverStr != NULL)
-	server_to_input_buf(serverStr);
+    {
+	server_to_input_buf(serverConvert(serverStrEnc, serverStr, &p));
+	vim_free(p);
+    }
 #endif
 
     /*
diff --git a/src/memline.c b/src/memline.c
index 13f35c2..e18b895 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -425,7 +425,8 @@
     {
 	if (*dirp == NUL)	    /* tried all directories, fail */
 	    break;
-	fname = findswapname(buf, &dirp, mfp->mf_fname); /* alloc's fname */
+	fname = findswapname(buf, &dirp, mfp->mf_fname);
+						    /* alloc's fname */
 	if (fname == NULL)	    /* no file name found for this dir */
 	    continue;
 
@@ -529,7 +530,7 @@
 	/* There is a small chance that between chosing the swap file name and
 	 * creating it, another Vim creates the file.  In that case the
 	 * creation will fail and we will use another directory. */
-	fname = findswapname(buf, &dirp, NULL);	/* allocates fname */
+	fname = findswapname(buf, &dirp, NULL); /* allocates fname */
 	if (fname == NULL)
 	    continue;
 	if (mf_open_file(mfp, fname) == OK)	/* consumes fname! */
@@ -3731,7 +3732,8 @@
 	     * viewing a help file or when the path of the file is different
 	     * (happens when all .swp files are in one directory).
 	     */
-	    if (!recoverymode && buf->b_fname != NULL && !buf->b_help)
+	    if (!recoverymode && buf->b_fname != NULL
+				&& !buf->b_help && !(buf->b_flags & BF_DUMMY))
 	    {
 		int		fd;
 		struct block0	b0;
diff --git a/src/proto/quickfix.pro b/src/proto/quickfix.pro
index adec72f..dbdca5f 100644
--- a/src/proto/quickfix.pro
+++ b/src/proto/quickfix.pro
@@ -13,7 +13,7 @@
 int bt_dontwrite __ARGS((buf_T *buf));
 int bt_dontwrite_msg __ARGS((buf_T *buf));
 int buf_hide __ARGS((buf_T *buf));
-int grep_internal __ARGS((exarg_T *eap));
+int grep_internal __ARGS((cmdidx_T cmdidx));
 void ex_make __ARGS((exarg_T *eap));
 void ex_cc __ARGS((exarg_T *eap));
 void ex_cnext __ARGS((exarg_T *eap));