diff --git a/src/buffer.c b/src/buffer.c
index adc70fe..4049f71 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4145,13 +4145,11 @@
     /*
      * Force expanding the path always for Unix, because symbolic links may
      * mess up the full path name, even though it starts with a '/'.
-     * Also expand always for VMS, it may have alternate paths that need to be
-     * resolved.
      * Also expand when there is ".." in the file name, try to remove it,
      * because "c:/src/../README" is equal to "c:/README".
      * For MS-Windows also expand names like "longna~1" to "longname".
      */
-#if defined(UNIX) || defined(VMS)
+#ifdef UNIX
     return FullName_save(fname, TRUE);
 #else
     if (!vim_isAbsName(fname) || strstr((char *)fname, "..") != NULL
diff --git a/src/memline.c b/src/memline.c
index d0eb0f8..bb1126d 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -3592,9 +3592,8 @@
 #else
 	    (buf->b_p_sn || buf->b_shortname),
 #endif
-#if defined(VMS) || defined(RISCOS)
-	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap>.
-	     * For VMS always use full path for swapfile. */
+#ifdef RISCOS
+	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
 	    ffname,
 #else
 # ifdef HAVE_READLINK
diff --git a/src/os_unix.c b/src/os_unix.c
index 5e8f0cb..047bd84 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2214,49 +2214,22 @@
     int		len;
     int		force;		/* also expand when already absolute path */
 {
-#ifdef VMS
-    /*
-     * VMS does this in a completely different way.
-     *
-     * By default a file found in a complex path is written to the first
-     * directory in the path and not to the original directory.  This
-     * behaviour should be avoided for the existing files and we need to find
-     * the exact path of the edited file.
-     */
-    {
-	char_u	*fixed_fname = vms_fixfilename(fname);
-	int	fd = mch_open((char *)fixed_fname, O_RDONLY | O_EXTRA, 0);
-
-	if (fd > 0)
-	{
-	    char nbuf[MAXNAMLEN];
-
-	    /* File exists, use getname() to get the real name. */
-	    if (getname(fd, nbuf))
-		vim_strncpy(fixed_fname, (char_u *)nbuf, (size_t)(len - 1));
-	    close(fd);
-	}
-
-	if (STRLEN(fixed_fname) >= len)
-	    return FAIL;
-
-	STRCPY(buf, fixed_fname);
-    }
-
-#else /* not VMS */
-
     int		l;
-# ifdef OS2
+#ifdef OS2
     int		only_drive;	/* file name is only a drive letter */
-# endif
-# ifdef HAVE_FCHDIR
+#endif
+#ifdef HAVE_FCHDIR
     int		fd = -1;
     static int	dont_fchdir = FALSE;	/* TRUE when fchdir() doesn't work */
-# endif
+#endif
     char_u	olddir[MAXPATHL];
     char_u	*p;
     int		retval = OK;
 
+#ifdef VMS
+    fname = vms_fixfilename(fname);
+#endif
+
     /* expand it if forced or not an absolute path */
     if (force || !mch_isFullName(fname))
     {
@@ -2265,16 +2238,16 @@
 	 * and then do the getwd() (and get back to where we were).
 	 * This will get the correct path name with "../" things.
 	 */
-# ifdef OS2
+#ifdef OS2
 	only_drive = 0;
 	if (((p = vim_strrchr(fname, '/')) != NULL)
 		|| ((p = vim_strrchr(fname, '\\')) != NULL)
 		|| (((p = vim_strchr(fname,  ':')) != NULL) && ++only_drive))
-# else
+#else
 	if ((p = vim_strrchr(fname, '/')) != NULL)
-# endif
+#endif
 	{
-# ifdef HAVE_FCHDIR
+#ifdef HAVE_FCHDIR
 	    /*
 	     * Use fchdir() if possible, it's said to be faster and more
 	     * reliable.  But on SunOS 4 it might not work.  Check this by
@@ -2290,14 +2263,14 @@
 		    dont_fchdir = TRUE;	    /* don't try again */
 		}
 	    }
-# endif
+#endif
 
 	    /* Only change directory when we are sure we can return to where
 	     * we are now.  After doing "su" chdir(".") might not work. */
 	    if (
-# ifdef HAVE_FCHDIR
+#ifdef HAVE_FCHDIR
 		fd < 0 &&
-# endif
+#endif
 			(mch_dirname(olddir, MAXPATHL) == FAIL
 					   || mch_chdir((char *)olddir) != 0))
 	    {
@@ -2306,7 +2279,7 @@
 	    }
 	    else
 	    {
-# ifdef OS2
+#ifdef OS2
 		/*
 		 * compensate for case where ':' from "D:" was the only
 		 * path separator detected in the file name; the _next_
@@ -2314,7 +2287,7 @@
 		 */
 		if (only_drive)
 		    p++;
-# endif
+#endif
 		/* The directory is copied into buf[], to be able to remove
 		 * the file name without changing it (could be a string in
 		 * read-only memory) */
@@ -2329,14 +2302,14 @@
 			fname = p + 1;
 		    *buf = NUL;
 		}
-# ifdef OS2
+#ifdef OS2
 		if (only_drive)
 		{
 		    p--;
 		    if (retval != FAIL)
 			fname--;
 		}
-# endif
+#endif
 	    }
 	}
 	if (mch_dirname(buf, len) == FAIL)
@@ -2346,14 +2319,14 @@
 	}
 	if (p != NULL)
 	{
-# ifdef HAVE_FCHDIR
+#ifdef HAVE_FCHDIR
 	    if (fd >= 0)
 	    {
 		l = fchdir(fd);
 		close(fd);
 	    }
 	    else
-# endif
+#endif
 		l = mch_chdir((char *)olddir);
 	    if (l != 0)
 		EMSG(_(e_prev_dir));
@@ -2362,12 +2335,14 @@
 	l = STRLEN(buf);
 	if (l >= len)
 	    retval = FAIL;
+#ifndef VMS
 	else
 	{
 	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
 						   && STRCMP(fname, ".") != 0)
 		STRCAT(buf, "/");
 	}
+#endif
     }
 
     /* Catch file names which are too long. */
@@ -2378,8 +2353,6 @@
     if (STRCMP(fname, ".") != 0)
 	STRCAT(buf, fname);
 
-#endif /* VMS */
-
     return OK;
 }
 
diff --git a/src/version.c b/src/version.c
index ef0923f..331e75f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    208,
+/**/
     207,
 /**/
     206,
