diff --git a/Filelist b/Filelist
index 2c36a1a..3378c5c 100644
--- a/Filelist
+++ b/Filelist
@@ -702,6 +702,7 @@
 		src/po/README.txt \
 		src/po/README_mingw.txt \
 		src/po/README_mvc.txt \
+		src/po/check.vim \
 		src/po/cleanup.vim \
 		src/po/Makefile \
 		src/po/Make_cyg.mak \
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index f1144a5..ab152de 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 6.3.  Last change: Jul 09, 2005
+*pi_netrw.txt*  For Vim version 7.0.  Last change: Aug 01, 2005
 
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -1143,9 +1143,15 @@
 ==============================================================================
 10. History						*netrw-history*
 
+	v57: * Explore and relatives can now handle RO files
+	     * reverse sort restored with vim7's sort command
+	     * g:netrw_keepdir now being used to keep the current directory
+	       unchanged as intended (sense change)
+	     * vim 6.3 still supported
 	v56: * LocalBrowse now saves autochdir setting, unsets it, and
 	       restores it before returning.
 	     * using vim's rename() instead of system + local_rename variable
+	     * avoids changing directory when g:netrw_keepdir is false
 	v55: * -bar used with :Explore :Sexplore etc to allow multiple
 	       commands to be separated by |s
 	     * browser listings now use the "nowrap" option
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 20ed1bf..0918481 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1596,7 +1596,6 @@
 45.4	usr_45.txt	/*45.4*
 45.5	usr_45.txt	/*45.5*
 755	spell.txt	/*755*
-767	eval.txt	/*767*
 90.1	usr_90.txt	/*90.1*
 90.2	usr_90.txt	/*90.2*
 90.3	usr_90.txt	/*90.3*
@@ -3736,6 +3735,8 @@
 E764	spell.txt	/*E764*
 E765	options.txt	/*E765*
 E766	eval.txt	/*E766*
+E767	eval.txt	/*E767*
+E768	message.txt	/*E768*
 E77	message.txt	/*E77*
 E78	motion.txt	/*E78*
 E79	message.txt	/*E79*
@@ -5840,6 +5841,7 @@
 new-manpage-trans	version7.txt	/*new-manpage-trans*
 new-multi-byte	version5.txt	/*new-multi-byte*
 new-multi-lang	version6.txt	/*new-multi-lang*
+new-netrw-explore	version7.txt	/*new-netrw-explore*
 new-network-files	version6.txt	/*new-network-files*
 new-operator-mod	version6.txt	/*new-operator-mod*
 new-options-5.2	version5.txt	/*new-options-5.2*
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index 5222012..c515b8b 100644
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
-" Last Change:	Aug 01, 2005
+" Last Change:	Aug 02, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	56
+" Version:	58b	NOT RELEASED
 " License:	Vim License  (see vim's :help license)
 "
 "  But be doers of the Word, and not only hearers, deluding your own selves
@@ -14,7 +14,7 @@
 if exists("g:loaded_netrw") || &cp
   finish
 endif
-let g:loaded_netrw  = "v56"
+let g:loaded_netrw  = "v58b"
 let loaded_explorer = 1
 let s:keepcpo       = &cpo
 set cpo&vim
@@ -90,9 +90,12 @@
 endif
 if !exists("g:netrw_longlist") || g:netrw_longlist == 0
  let g:netrw_longlist= 0
+ let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
 else
  let g:netrw_longlist= 1
- let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -lk"
+ let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l"
+endif
+if !exists("g:netrw_list_cmd")
 endif
 if !exists("g:netrw_timefmt")
  let g:netrw_timefmt= "%c"
@@ -232,10 +235,12 @@
 com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
 
 " Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{1
-com! -nargs=? -bar -bang  	Explore		call s:Explore(0,0+<bang>0,<q-args>)
-com! -nargs=? -bar -bang  	Sexplore	call s:Explore(1,0+<bang>0,<q-args>)
-com! -nargs=? -bar -bang  	Hexplore	call s:Explore(1,2+<bang>0,<q-args>)
-com! -nargs=? -bar -bang  	Vexplore	call s:Explore(1,4+<bang>0,<q-args>)
+com! -nargs=? -bar -bang -count=0  	Explore		call s:Explore(<count>,0,0+<bang>0,<q-args>)
+com! -nargs=? -bar -bang -count=0  	Sexplore	call s:Explore(<count>,1,0+<bang>0,<q-args>)
+com! -nargs=? -bar -bang -count=0  	Hexplore	call s:Explore(<count>,1,2+<bang>0,<q-args>)
+com! -nargs=? -bar -bang -count=0  	Vexplore	call s:Explore(<count>,1,4+<bang>0,<q-args>)
+com! -nargs=? -bar -bang   		Nexplore	call s:Explore(-1,0,0,<q-args>)
+com! -nargs=? -bar -bang   		Pexplore	call s:Explore(-2,0,0,<q-args>)
 
 " ------------------------------------------------------------------------
 " NetSavePosn: saves position of cursor on screen {{{1
@@ -682,7 +687,11 @@
 "   call Dredir("ls!","starting buffer list")
 
    " rename the current buffer to the temp file (ie. fname)
-   keepalt exe "file ".fname
+   if v:version < 700
+    exe "file ".fname
+   else
+    keepalt exe "file ".fname
+   endif
 "   call Dredir("ls!","after renaming current buffer to <".fname.">")
 
    " edit temporary file
@@ -690,7 +699,11 @@
 "   call Dredir("ls!","after editing temporary file")
 
    " rename buffer back to remote filename
-   keepalt exe "file ".rfile
+   if v:version < 700
+    exe "file ".rfile
+   else
+    keepalt exe "file ".rfile
+   endif
 "   call Dredir("ls!","renaming buffer back to remote filename<".rfile.">")
    let line1 = 1
    let line2 = line("$")
@@ -1232,7 +1245,6 @@
    " use ftp to get remote file listing
 "   call Decho("use ftp to get remote file listing")
    call NetBrowseFtpCmd(path,listcmd)
-
    keepjumps 1d
 
    if !g:netrw_longlist
@@ -1269,15 +1281,28 @@
    let shq= &shq? &shq : ( &sxq? &sxq : "'")
 "   call Decho("exe silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq)
    exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
+if !exists("g:junk")
+ let g:junk=1
+else
+ put ='testing'
+ return
+endif
    keepjumps 1d
    " cleanup
    if g:netrw_ftp_browse_reject != ""
     exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
-    endif
+   endif
+  endif
+
+  " set up syntax highlighting
+  if has("syntax")
+   setlocal ft=netrwlist
+   if !has("syntax_items")
+    setlocal ft=
+   endif
   endif
 
   " manipulate the directory listing (hide, sort)
-  setlocal ft=netrwlist
   if line("$") >= s:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
@@ -1316,8 +1341,10 @@
      call s:SetSort()
      if v:version < 700
       exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-     else
+     elseif g:netrw_sort_direction =~ 'n'
       exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+     else
+      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
      endif
      exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
     endif
@@ -1352,7 +1379,7 @@
   elseif newdir == './'
    " refresh the directory list
 "   call Decho("refresh directory listing")
-   setlocal ma
+   setlocal ma nobl bh=hide
    %d
 
   elseif newdir == '../'
@@ -1623,8 +1650,7 @@
   " for the unwanted first blank line (doing a :put to an empty
   " buffer yields a blank first line)
   let ffkeep= &ff
-  setlocal ma
-  setlocal ff=unix
+  setlocal ma ff=unix
   let curline= s:netrw_bannercnt+1
   exe "silent! keepjumps ".curline.",$d"
 
@@ -1772,14 +1798,18 @@
 
   if g:netrw_longlist != 0
    " turn long listing off
+"   call Decho("turn long listing off")
    let g:netrw_longlist = 0
    let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
   else
    " turn long listing on
+"   call Decho("turn long listing on")
    let g:netrw_longlist = 1
    let g:netrw_list_cmd = g:netrw_list_cmd." -l"
   endif
+  setlocal ma
+  %d
 
   " refresh the listing
   if a:mode == 0
@@ -1861,7 +1891,7 @@
 "    call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">")
 "    call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
     exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
-    if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
+    if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
    endif
 
    if v:shell_error == 0
@@ -2013,7 +2043,6 @@
   " unfortunate interaction -- when putting debugging calls
   " above one can no longer enter the DBG buffer.
 "  call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr())
-"  call Decho("winbufnr1=".winbufnr(1)." winbufnr2=".winbufnr(2)." winbufnr3=".winbufnr(3))
 "  call Dredir("ls!")
 
   if v:version < 603
@@ -2026,26 +2055,70 @@
   endif
 
   " record autochdir setting and then insure its unset (tnx to David Fishburn)
-  let keep_autochdir= &autochdir
-  set noautochdir
+  if has("netbeans_intg") || has("sun_workshop")
+   let keep_autochdir= &autochdir
+   set noautochdir
+  endif
 
-  " record and change current directory
+  " find buffer number of buffer named precisely the same as a:dirname
+  let bufnum= bufnr(a:dirname)
+"  call Decho("findbuf: bufnum=".bufnum)
+  if bufnum > 0 && bufname(bufnum) != a:dirname
+   let ibuf= 1
+   let buflast= bufnr("$")
+   while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
+"    call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
+    let ibuf= ibuf + 1
+   endwhile
+   if ibuf > buflast
+    let bufnum= -1
+   else
+    let bufnum= ibuf
+   endif
+"   call Decho("findbuf: bufnum=".bufnum." (final)")
+  endif
+
+  " get cleared buffer
+  if bufnum < 0
+   if v:version < 700
+    enew!
+   else
+    keepalt enew!
+   endif
+"   call Decho("enew buffer")
+  else
+   let eikeep= &ei
+   set ei=BufEnter
+   if v:version < 700
+    exe "b ".bufnum
+   else
+    exe "keepalt b ".bufnum
+   endif
+   let &ei= eikeep
+   if getline(2) =~ '^" Directory Listing '
+"    call Dret("LocalBrowse : reusing buffer#".bufnum."<".a:dirname.">")
+    return
+   endif
+  endif
+
+  " get the new directory name
   let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
   if b:netrw_curdir =~ '[/\\]$'
    let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
   endif
 "  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+
   " make netrw's idea of the current directory vim's if the user wishes
-  if g:netrw_keepdir
+  if !g:netrw_keepdir
 "   call Decho("change directory: cd ".b:netrw_curdir)
    exe 'cd '.b:netrw_curdir
   endif
 
   " change the name of the buffer to reflect the b:netrw_curdir
-  exe 'silent file '.escape(b:netrw_curdir,s:netrw_cd_escape)
+  exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
 
-  " make this buffer modifiable
-  setlocal ma
+  " make this buffer modifiable and hidden
+  setlocal ma hidden nonu
 
   " ---------------------------
   "  Perform Directory Listing:
@@ -2132,35 +2205,52 @@
   " generate the requested directory listing
   call LocalBrowseList()
 
+  " set up syntax highlighting
+  if has("syntax")
+   setlocal ft=netrwlist
+   if !has("syntax_items")
+    setlocal ft=
+   endif
+  endif
+
   " manipulate the directory listing (hide, sort)
-  setlocal ft=netrwlist
   if line("$") >= s:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
    if line("$") >= s:netrw_bannercnt
+
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
+
      if v:version < 700
       exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-     else
+     elseif g:netrw_sort_direction =~ 'n'
       exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+     else
+      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
      endif
      exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+
     else
      if v:version < 700
       exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-     else
+     elseif g:netrw_sort_direction =~ 'n'
       exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+     else
+      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
      endif
      exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
+
    endif
   endif
   exe s:netrw_bannercnt
 
-  setlocal noma nomod nonu
-  let &autochdir= keep_autochdir
+  setlocal noma nomod nonu bh=hide nobl
+  if has("netbeans_intg") || has("sun_workshop")
+   let &autochdir= keep_autochdir
+  endif
 
 "  call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
 endfun
@@ -2226,8 +2316,12 @@
 
    if g:netrw_longlist
     let sz   = getfsize(filename)
-    let fsz  = strpart("               ",1,15-strlen(sz)).sz
-    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
+    if v:version <= 700
+     let fsz  = strpart("               ",1,15-strlen(sz)).sz
+     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
+    else
+     let pfile= printf('%-'.g:netrw_maxfilenamelen.'s%15d%s',pfile,sz,getftime(filename))
+    endif
 "    call Decho("sz=".sz." fsz=".fsz)
    endif
 
@@ -2274,8 +2368,6 @@
    " is removing the "/".  Bad idea, so I have to put it back.
    let dirname= dirname.'/'
 "   call Decho("adjusting dirname<".dirname.">")
-   setlocal ma
-   %d
   endif
 
   if newdir !~ '[\/]$'
@@ -2297,15 +2389,11 @@
    " go up one directory
    let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
 "   call Decho("go up one dir: dirname<".dirname.">")
-   setlocal ma
-   %d
 
   else
    " go down one directory
    let dirname= dirname.newdir
 "   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
-   setlocal ma
-   %d
   endif
 
 "  call Dret("LocalBrowseChgDir <".dirname.">")
@@ -2488,8 +2576,8 @@
 "                      been modified
 "          dosplit==1: the window will be split before running the local
 "                      browser
-fun! s:Explore(dosplit,style,...)
-"  call Dfunc("Explore(dosplit=".a:dosplit." style=".a:style.")")
+fun! s:Explore(indx,dosplit,style,...)
+"  call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
 
   " if dosplit or file has been modified
   if a:dosplit || &modified
@@ -2509,13 +2597,60 @@
   endif
   norm! 0
 
-  if a:1 == ""
+  if a:1 == "" && a:indx >= 0
    let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e')
+"   call Decho("calling LocalBrowse(newdir<".newdir.">)")
+   call s:LocalBrowse(newdir)
+
+  elseif a:1 =~ '\*\*' || a:indx < 0
+
+   if has("path_extra")
+    if !exists("s:indx")
+     let s:indx= 0
+    endif
+    let indx = a:indx
+    if indx == -1
+     let indx= s:indx + 1
+    elseif indx == -2
+     let indx= s:indx - 1
+    else
+     let s:indx        = 0
+     let s:explorelist = split(expand(b:netrw_curdir."/".a:1),'\n')
+     let s:listlen     = len(s:explorelist)
+    endif
+    let s:indx = indx
+"    call Decho("explorelist<".join(s:explorelist,',')."> len=".s:listlen)
+
+    " sanity check
+    if indx >= s:listlen
+     echoerr "***netrw*** no more directories with matching files"
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"     call Dret("Explore")
+     return
+    endif
+
+    exe "let dirfile= s:explorelist[".indx."]"
+"    call Decho("dirfile<".dirfile."> indx=".indx)
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("newdir<".newdir.">")
+"    call Decho("calling LocalBrowse(newdir<".newdir.">)")
+    call s:LocalBrowse(newdir)
+    call search(substitute(dirfile,"^.*/","",""),"W")
+
+   else
+    if v:version < 700
+     echoerr "***netrw*** you need vim version 7.0 or later for Exploring with **!"
+    elseif !exists("g:netrw_quiet")
+     echoerr "***netrw*** your vim needs the path_extra feature for Exploring with **!"
+    endif
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   endif
+
   else
    let newdir= a:1
+"   call Decho("calling LocalBrowse(newdir<".newdir.">)")
+   call s:LocalBrowse(newdir)
   endif
-"  call Decho("newdir<".newdir.">")
-  call s:LocalBrowse(newdir)
 
 "  call Dret("Explore")
 endfun
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index ab11dff..bb07582 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6665,11 +6665,25 @@
 #endif
 	    && eap->cmdidx != CMD_new)
     {
-	fname = do_browse(0, (char_u *)_("Edit File in new window"),
+	if (
+# ifdef FEAT_GUI
+	    !gui.in_use &&
+# endif
+		au_has_group((char_u *)"FileExplorer"))
+	{
+	    /* No browsing supported but we do have the file explorer:
+	     * Edit the directory. */
+	    if (*eap->arg == NUL || !mch_isdir(eap->arg))
+		eap->arg = (char_u *)".";
+	}
+	else
+	{
+	    fname = do_browse(0, (char_u *)_("Edit File in new window"),
 					  eap->arg, NULL, NULL, NULL, curbuf);
-	if (fname == NULL)
-	    goto theend;
-	eap->arg = fname;
+	    if (fname == NULL)
+		goto theend;
+	    eap->arg = fname;
+	}
     }
     cmdmod.browse = FALSE;	/* Don't browse again in do_ecmd(). */
 #endif
diff --git a/src/fileio.c b/src/fileio.c
index 7e14155..7c4c9ac 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7059,6 +7059,18 @@
     return AUGROUP_ERROR;
 }
 
+#if defined(FEAT_BROWSE) || defined(PROTO)
+/*
+ * Return TRUE if augroup "name" exists.
+ */
+    int
+au_has_group(name)
+    char_u	*name;
+{
+    return au_find_group(name) != AUGROUP_ERROR;
+}
+#endif
+
 /*
  * ":augroup {name}".
  */
diff --git a/src/misc2.c b/src/misc2.c
index 93b3bbe..704e176 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -4058,7 +4058,7 @@
 		else
 		    ff_expand_buffer[len++] = FF_MAX_STAR_STAR_EXPAND;
 		wc_part = (char_u *)errpt;
-		if (*wc_part != PATHSEP && *wc_part != NUL)
+		if (*wc_part != NUL && !vim_ispathsep(*wc_part))
 		{
 		    EMSG2(_("E343: Invalid path: '**[number]' must be at the end of the path or be followed by '%s'."), PATHSEPSTR);
 		    goto error_return;
@@ -4582,10 +4582,10 @@
 
 	    /* cut of last dir */
 	    while (path_end > ff_search_ctx->ffsc_start_dir
-		    && *path_end == PATHSEP)
+		    && vim_ispathsep(*path_end))
 		path_end--;
 	    while (path_end > ff_search_ctx->ffsc_start_dir
-		    && *(path_end-1) != PATHSEP)
+		    && !vim_ispathsep(path_end[-1]))
 		path_end--;
 	    *path_end = 0;
 	    path_end--;
@@ -5050,7 +5050,7 @@
     int		i = 0;
 
     /* eat up trailing path separators, except the first */
-    while (path_len > 1 && path[path_len - 1] == PATHSEP)
+    while (path_len > 1 && vim_ispathsep(path[path_len - 1]))
 	path_len--;
 
     /* if no path consider it as match */
@@ -5066,7 +5066,7 @@
 	     * '/home/r' would also match '/home/rks'
 	     */
 	    if (fnamencmp(stopdirs_v[i], path, path_len) == 0
-		    && stopdirs_v[i][path_len] == PATHSEP)
+		    && vim_ispathsep(stopdirs_v[i][path_len]))
 		return TRUE;
 	}
 	else
diff --git a/src/po/check.vim b/src/po/check.vim
new file mode 100644
index 0000000..a5f25aa
--- /dev/null
+++ b/src/po/check.vim
@@ -0,0 +1,58 @@
+" Vim script for checking .po files.
+"
+" Go through the file and verify that all %...s items in "msgid" are identical
+" to the ones in "msgstr".
+
+if 1	" Only execute this if the eval feature is available.
+
+" Function to get a split line at the cursor.
+" Used for both msgid and msgstr lines.
+" Removes all text except % items and returns the result.
+func! GetMline()
+  let idline = substitute(getline('.'), '"\(.*\)"$', '\1', '')
+  while line('.') < line('$')
+    +
+    let line = getline('.')
+    if line[0] != '"'
+      break
+    endif
+    let idline .= substitute(line, '"\(.*\)"$', '\1', '')
+  endwhile
+
+  " remove everything but % items.
+  return substitute(idline, '[^%]*\(%[-+ #''.0-9*]*l\=[dsuxXpoc%]\)\=', '\1', 'g')
+endfunc
+
+" Start at the first "msgid" line.
+1
+/^msgid
+let startline = line('.')
+let error = 0
+
+while 1
+  if getline(line('.') - 1) !~ "no-c-format"
+    let fromline = GetMline()
+    if getline('.') !~ '^msgstr'
+      echo 'Missing "msgstr" in line ' . line('.')
+      let error = 1
+    endif
+    let toline = GetMline()
+    if fromline != toline
+      echo 'Mismatching % in line ' . (line('.') - 1)
+      let error = 1
+    endif
+  endif
+
+  " Find next msgid.
+  " Wrap around at the end of the file, quit when back at the first one.
+  /^msgid
+  if line('.') == startline
+    break
+  endif
+endwhile
+
+if error == 0
+  echo "OK"
+endif
+
+endif
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index 8b05113..2f5897c 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -22,6 +22,7 @@
 char_u *vim_tempname __ARGS((int extra_char));
 void forward_slash __ARGS((char_u *fname));
 void aubuflocal_remove __ARGS((buf_T *buf));
+int au_has_group __ARGS((char_u *name));
 void do_augroup __ARGS((char_u *arg, int del_group));
 void free_all_autocmds __ARGS((void));
 int check_ei __ARGS((void));
diff --git a/src/quickfix.c b/src/quickfix.c
index 5847ae1..bf0b0b8 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -323,13 +323,12 @@
 					 && efmp[1] != '\\' && efmp[1] != '%')
 		    {
 			/* A file name may contain spaces, but this isn't in
-			 * "\f".  use "[^x]\+" instead (x is next character) */
-			*ptr++ = '[';
-			*ptr++ = '^';
-			*ptr++ = efmp[1];
-			*ptr++ = ']';
-			*ptr++ = '\\';
-			*ptr++ = '+';
+			 * "\f".  For "%f:%l:%m" there may be a ":" in the
+			 * file name.  Use ".\{-1,}x" instead (x is the next
+			 * character), the requirement that :999: follows
+			 * should work. */
+			STRCPY(ptr, ".\\{-1,}");
+			ptr += 7;
 		    }
 		    else
 		    {
diff --git a/src/version.h b/src/version.h
index 2c5193e..3fff8d6 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 Aug 1)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 1, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 4)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 4, compiled "
