diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index 3a184a1..5461351 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            AUTOLOAD PORTION
-" Date:		Jan 30, 2006
-" Version:	78
+" Date:		Mar 09, 2006
+" Version:	79
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -23,7 +23,7 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v78"
+let g:loaded_netrw = "v79"
 if v:version < 700
  echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
  finish
@@ -76,7 +76,7 @@
  let g:netrw_ssh_cmd= "ssh"
 endif
 
-if has("win32") || has("win95") || has("win64") || has("win16")
+if (has("win32") || has("win95") || has("win64") || has("win16"))
   \ && exists("g:netrw_use_nt_rcp")
   \ && g:netrw_use_nt_rcp
   \ && executable( $SystemRoot .'/system32/rcp.exe')
@@ -191,6 +191,9 @@
 else
  let g:netrw_silentxfer= ""
 endif
+if !exists("g:netrw_fastbrowse")
+ let g:netrw_fastbrowse= 1
+endif
 if !exists("g:netrw_sort_by")
  " alternatives: date size
  let g:netrw_sort_by= "name"
@@ -224,6 +227,12 @@
   let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
  endif
 endif
+if !exists("g:netrw_fname_escape")
+ let g:netrw_fname_escape= ' ?&;'
+endif
+if !exists("g:netrw_tmpfile_escape")
+ let g:netrw_tmpfile_escape= ' ?&;'
+endif
 if !exists("s:netrw_glob_escape")
  if has("win32") || has("win95") || has("win64") || has("win16")
   let s:netrw_glob_escape= ""
@@ -292,49 +301,48 @@
 
 " ------------------------------------------------------------------------
 " NetRead: responsible for reading a file over the net {{{2
-fun! netrw#NetRead(...)
-"  call Dfunc("NetRead(a:1<".a:1.">)")
- 
+fun! netrw#NetRead(mode,...)
+"  call Dfunc("NetRead(mode=".a:mode.",...) a:0=".a:0)
+
   " save options
   call s:NetOptionSave()
- 
-  " Special Exception: if a file is named "0r", then {{{3
-  "		      "0r" will be used to read the
-  "		      following files instead of "r"
-  if	a:0 == 0
-   let readcmd= "r"
-   let ichoice= 0
-  elseif a:1 == "0r"
+
+  if     a:mode == 0 " read remote file before current line
    let readcmd = "0r"
-   let ichoice = 2
-  else
+  elseif a:mode == 1 " read file after current line
    let readcmd = "r"
-   let ichoice = 1
+  elseif a:mode == 2 " replace with remote file
+   let readcmd = "%r"
+  else
+   exe a:mode
+   let readcmd = "r"
   endif
- 
+  let ichoice = (a:0 == 0)? 0 : 1
+"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+
   " get name of a temporary file and set up shell-quoting character {{{3
   let tmpfile= tempname()
-  let tmpfile= substitute(tmpfile,'\','/','ge')
+  let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
    echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!" | echohl None
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "   call Dret("NetRead")
    return
   endif
- 
-"  call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
+"  call Decho("tmpfile<".tmpfile.">")
+
   while ichoice <= a:0
- 
+
    " attempt to repeat with previous host-file-etc
    if exists("b:netrw_lastfile") && a:0 == 0
 "    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
     let choice = b:netrw_lastfile
     let ichoice= ichoice + 1
- 
+
    else
     exe "let choice= a:" . ichoice
 "    call Decho("no lastfile: choice<" . choice . ">")
- 
+
     if match(choice,"?") == 0
      " give help
      echomsg 'NetRead Usage:'
@@ -361,7 +369,7 @@
        "  case "... ... ..."
       let choice      = strpart(choice,1,strlen(choice)-1)
       let wholechoice = ""
- 
+
       while match(choice,"\"$") == -1
        let wholechoice = wholechoice . " " . choice
        let ichoice     = ichoice + 1
@@ -382,7 +390,7 @@
 
 "   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
- 
+
    " fix up windows urls
    if has("win32") || has("win95") || has("win64") || has("win16")
     let choice = substitute(choice,'\\','/','ge')
@@ -391,10 +399,10 @@
     exe 'lcd ' . fnamemodify(tmpfile,':h')
     let tmpfile = fnamemodify(tmpfile,':t')
    endif
- 
+
    " Determine method of read (ftp, rcp, etc) {{{3
    call s:NetMethod(choice)
- 
+
    " Check if NetBrowse() should be handling this request
 "   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
    if choice =~ "^.*[\/]$"
@@ -409,14 +417,14 @@
     let tmpfile= substitute(tmpfile,"$",suffix,'e')
 "    call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
    endif
- 
+
    " ============
    " Perform Protocol-Based Read {{{3
    " ===========================
    if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
     echo "(netrw) Processing your read request..."
    endif
- 
+
    ".........................................
    " rcp:  NetRead Method #1 {{{3
    if  b:netrw_method == 1 " read with rcp
@@ -439,16 +447,16 @@
      let uid_machine = g:netrw_machine
     endif
    endif
-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-   exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile)
+   exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile
    let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
    let b:netrw_lastfile = choice
- 
+
    ".........................................
    " ftp + <.netrc>:  NetRead Method #2 {{{3
    elseif b:netrw_method  == 2		" read with ftp + <.netrc>
 "     call Decho("read via ftp+.netrc (method #2)")
-     let netrw_fname= b:netrw_fname
+     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
      new
      setlocal ff=unix
      exe "put ='".g:netrw_ftpmode."'"
@@ -473,13 +481,13 @@
      bd!
      let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
      let b:netrw_lastfile = choice
- 
+
    ".........................................
    " ftp + machine,id,passwd,filename:  NetRead Method #3 {{{3
    elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
     " Construct execution string (four lines) which will be passed through filter
 "    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     new
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -489,7 +497,7 @@
      put ='open '.g:netrw_machine
 "     call Decho("filter input: ".getline("."))
     endif
- 
+
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
      put =g:netrw_uid
 "     call Decho("filter input: ".getline("."))
@@ -499,14 +507,14 @@
      put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline("."))
     endif
- 
+
     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
      put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline("."))
     endif
     put ='get \"'.netrw_fname.'\" '.tmpfile
 "     call Decho("filter input: ".getline("."))
- 
+
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
@@ -525,7 +533,7 @@
     bd!
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " scp: NetRead Method #4 {{{3
    elseif     b:netrw_method  == 4	" read with scp
@@ -537,15 +545,15 @@
     endif
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."' ".cygtmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."' ".cygtmpfile
+"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile
     else
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."' ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."' ".tmpfile
+"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile
     endif
     let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " http: NetRead Method #5 (wget) {{{3
    elseif     b:netrw_method  == 5
@@ -558,17 +566,18 @@
 "     call Dret("NetRead")
      return
     endif
- 
+
     if match(b:netrw_fname,"#") == -1
      " simple wget
-"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
-     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
+     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname)
+     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_fname
      let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- 
+
     else
      " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
-     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
-     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+     let netrw_html= substitute(netrw_fname,"#.*$","","")
+     let netrw_tag = substitute(netrw_fname,"^.*#","","")
 "     call Decho("netrw_html<".netrw_html.">")
 "     call Decho("netrw_tag <".netrw_tag.">")
 "     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
@@ -578,14 +587,14 @@
      exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
     endif
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " cadaver: NetRead Method #6 {{{3
    elseif     b:netrw_method  == 6
 "    call Decho("read via cadaver (method #6)")
- 
+
     " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     new
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -594,7 +603,7 @@
      put ='open '.g:netrw_machine
     endif
     put ='user '.g:netrw_uid.' '.g:netrw_passwd
- 
+
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
      put ='get '.netrw_fname.' '.cygtmpfile
@@ -602,7 +611,7 @@
      put ='get '.netrw_fname.' '.tmpfile
     endif
     put ='quit'
- 
+
     " perform cadaver operation:
     norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
@@ -610,26 +619,28 @@
     bd!
     let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " rsync: NetRead Method #7 {{{3
    elseif     b:netrw_method  == 7
 "    call Decho("read via rsync (method #7)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
     else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
     endif
     let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " fetch: NetRead Method #8 {{{3
    "    fetch://[user@]host[:http]/path
    elseif     b:netrw_method  == 8
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if g:netrw_fetch_cmd == ""
      if !exists("g:netrw_quiet")
       echohl Error | echo "***netrw*** fetch command not available" | echohl None
@@ -643,41 +654,42 @@
      let netrw_option= "ftp"
     endif
 "    call Decho("read via fetch for ".netrw_option)
- 
+
     if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
-"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
-     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname)
+     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname
     else
-"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
-     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname)
+     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".netrw_fname
     endif
- 
+
     let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " sftp: NetRead Method #9 {{{3
    elseif     b:netrw_method  == 9
 "    call Decho("read via sftp (method #4)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-     exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+"     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
+     exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
     else
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
     endif
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " Complain {{{3
    else
     echo "***warning*** unable to comply with your request<" . choice . ">"
    endif
   endwhile
- 
+
   " cleanup {{{3
 "  call Decho("cleanup")
   if exists("b:netrw_method")
@@ -691,18 +703,21 @@
 
 " ------------------------------------------------------------------------
 " NetGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+"    readcmd == %r : replace buffer with newly read file
+"            == 0r : read file at top of buffer
+"            == r  : read file after current line
 fun! s:NetGetFile(readcmd, tfile, method)
-"   call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+"  call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
 
   " get name of remote filename (ie. url and all)
   let rfile= bufname("%")
 "  call Decho("rfile<".rfile.">")
- 
+
   if exists("*NetReadFixup")
    " for the use of NetReadFixup (not otherwise used internally)
    let line2= line("$")
   endif
- 
+
   " transform paths from / to \ for Windows (except for cygwin)
   if &term == "win32"
    if g:netrw_cygwin
@@ -716,8 +731,8 @@
    let tfile= a:tfile
 "   call Decho("tfile=a:tfile<".tfile.">")
   endif
- 
-  if a:readcmd[0] == '0'
+
+  if a:readcmd[0] == '%'
   " get file into buffer
 
 "   call Dredir("ls!","starting buffer list")
@@ -749,18 +764,17 @@
    let lastline= line("$")
 "   call Decho("exe<".a:readcmd." ".v:cmdarg." ".tfile.">  line#".curline)
    exe a:readcmd." ".v:cmdarg." ".tfile
-   let line1        = curline + 1
-   let line2        = line("$") - lastline + 1
+   let line1= curline + 1
+   let line2= line("$") - lastline + 1
 
   else
    " not readable
-"   call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
    echohl WarningMsg | echo "***netrw*** file <".tfile."> not readable"| echohl None
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "   call Dret("NetGetFile : tfile<".tfile."> not readable")
    return
   endif
- 
+
   " User-provided (ie. optional) fix-it-up command
   if exists("*NetReadFixup")
 "   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
@@ -773,9 +787,9 @@
   if has("gui") && has("gui_running")
    silent! emenu Buffers.Refresh\ menu
   endif
- 
+
 "  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".filereadable(a:tfile))
- 
+
  " make sure file is being displayed
   redraw!
 "  call Dret("NetGetFile")
@@ -785,26 +799,26 @@
 " NetWrite: responsible for writing a file over the net {{{2
 fun! netrw#NetWrite(...) range
 "  call Dfunc("NetWrite(a:0=".a:0.")")
- 
+
   " option handling
   let mod= 0
   call s:NetOptionSave()
- 
+
   " Get Temporary Filename {{{3
-  let tmpfile= tempname()
+  let tmpfile= escape(tempname(),g:netrw_tmpfile_escape)
   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
    echohl Error | echo "***netrw*** your ".substitute(tmpfile,'[^/]\+$','','e')." directory is missing!"
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "   call Dret("NetWrite")
    return
   endif
- 
+
   if a:0 == 0
    let ichoice = 0
   else
    let ichoice = 1
   endif
- 
+
   if &binary
    " for binary writes, write entire file.  Line numbers don't really make sense.
    " Supports the writing of tar and zip files.
@@ -815,9 +829,9 @@
 "   call Decho("silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
    silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
   endif
- 
+
   while ichoice <= a:0
- 
+
    " Process arguments: {{{3
    " attempt to repeat with previous host-file-etc
    if exists("b:netrw_lastfile") && a:0 == 0
@@ -826,7 +840,7 @@
     let ichoice= ichoice + 1
    else
     exe "let choice= a:" . ichoice
- 
+
     " Reconstruct Choice if choice starts with '"'
     if match(choice,"?") == 0
      echomsg 'NetWrite Usage:"'
@@ -841,7 +855,7 @@
      echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
      echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
      break
- 
+
     elseif match(choice,"^\"") != -1
      if match(choice,"\"$") != -1
        " case "..."
@@ -850,7 +864,7 @@
       "  case "... ... ..."
       let choice      = strpart(choice,1,strlen(choice)-1)
       let wholechoice = ""
- 
+
       while match(choice,"\"$") == -1
        let wholechoice= wholechoice . " " . choice
        let ichoice    = ichoice + 1
@@ -870,7 +884,7 @@
    endif
 "   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
- 
+
    " fix up windows urls
    if has("win32") || has("win95") || has("win64") || has("win16")
     let choice= substitute(choice,'\\','/','ge')
@@ -878,17 +892,17 @@
     exe 'lcd ' . fnamemodify(tmpfile,':h')
     let tmpfile = fnamemodify(tmpfile,':t')
    endif
- 
+
    " Determine method of read (ftp, rcp, etc) {{{3
    call s:NetMethod(choice)
- 
+
    " =============
    " Perform Protocol-Based Write {{{3
    " ============================
    if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
     echo "(netrw) Processing your write request..."
    endif
- 
+
    ".........................................
    " rcp: NetWrite Method #1 {{{3
    if  b:netrw_method == 1
@@ -906,14 +920,15 @@
       let uid_machine = g:netrw_machine
      endif
     endif
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname)
+    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " ftp + <.netrc>: NetWrite Method #2 {{{3
    elseif b:netrw_method == 2
-    let netrw_fname = b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     new
     setlocal ff=unix
     exe "put ='".g:netrw_ftpmode."'"
@@ -937,11 +952,11 @@
     endif
     bd!
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{3
    elseif b:netrw_method == 3
-    let netrw_fname= b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     new
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -964,7 +979,7 @@
 "    call Decho("filter input: ".getline("."))
     " save choice/id/password for future use
     let b:netrw_lastfile = choice
- 
+
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
@@ -981,10 +996,11 @@
      let mod=1
     endif
     bd!
- 
+
    ".........................................
    " scp: NetWrite Method #4 {{{3
    elseif     b:netrw_method == 4
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if exists("g:netrw_port") && g:netrw_port != ""
      let useport= " -P ".g:netrw_port
     else
@@ -992,14 +1008,14 @@
     endif
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."'")
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."'"
+"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'")
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'"
     else
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."'")
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".escape(b:netrw_fname,' ?&')."'"
+"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'")
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'"
     endif
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " http: NetWrite Method #5 {{{3
    elseif     b:netrw_method == 5
@@ -1007,14 +1023,14 @@
      echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
- 
+
    ".........................................
    " dav: NetWrite Method #6 (cadaver) {{{3
    elseif     b:netrw_method == 6
 "    call Decho("write via cadaver (method #6)")
- 
+
     " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     new
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -1023,38 +1039,39 @@
      put ='open '.g:netrw_machine
     endif
     put ='user '.g:netrw_uid.' '.g:netrw_passwd
- 
+
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
      put ='put '.cygtmpfile.' '.netrw_fname
     else
      put ='put '.tmpfile.' '.netrw_fname
     endif
- 
+
     " perform cadaver operation:
     norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
     exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
     bd!
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " rsync: NetWrite Method #7 {{{3
    elseif     b:netrw_method == 7
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if g:netrw_cygwin == 1
      let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname
     else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
     endif
     let b:netrw_lastfile = choice
- 
+
    ".........................................
    " sftp: NetWrite Method #9 {{{3
    elseif     b:netrw_method == 9
-    let netrw_fname= b:netrw_fname
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
     else
@@ -1068,23 +1085,23 @@
     exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
     bd!
     let b:netrw_lastfile= choice
- 
+
    ".........................................
    " Complain {{{3
    else
     echo "***warning*** unable to comply with your request<" . choice . ">"
    endif
   endwhile
- 
+
   " cleanup {{{3
 "  call Decho("cleanup")
   let result=delete(tmpfile)
   call s:NetOptionRestore()
- 
+
   if a:firstline == 1 && a:lastline == line("$")
    let &mod= mod	" usually equivalent to set nomod
   endif
- 
+
 "  call Dret("NetWrite")
 endfun
 
@@ -1135,6 +1152,10 @@
   " use buffer-oriented WinVars if buffer ones exist but window ones don't
   call s:UseBufWinVars()
 
+  " set up menus
+  let b:netrw_browser_active= 1
+  call s:NetMenu()
+
   " make this buffer modifiable
   setlocal ma nonu nowrap
 
@@ -1216,14 +1237,14 @@
 "   call Decho("exe file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape))
    exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
    exe "silent doau BufReadPre ".fname
-   silent call netrw#NetRead(method."://".user.machine."/".path)
+   silent call netrw#NetRead(2,method."://".user.machine."/".path)
    exe "silent doau BufReadPost ".fname
    keepjumps 1d
 
    " save certain window-oriented variables into buffer-oriented variables
    call s:SetBufWinVars()
    call s:NetOptionRestore()
-   setlocal nomod
+   setlocal nomod nowrap
 
 "   call Dret("NetBrowse : file<".fname.">")
    return
@@ -1256,7 +1277,10 @@
 "  call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
   exe 'file '.escape(bufname,s:netrw_cd_escape)
 "  call Decho("renaming file to bufname<".bufname.">")
-  setlocal bh=hide bt=nofile nobl nonu noswf
+  setlocal bt=nofile nobl nonu noswf
+  if g:netrw_fastbrowse >= 1
+   setlocal bh=hide
+  endif
 
   " save current directory on directory history list
   call s:NetBookmarkDir(3,expand("%"))
@@ -1276,7 +1300,7 @@
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
   nnoremap <buffer> <silent> o		:call <SID>NetSplit(0)<cr>
-  nnoremap <buffer> <silent> O		:call <SID>NetObtain()<cr>
+  nnoremap <buffer> <silent> O		:call netrw#NetObtain()<cr>
   nnoremap <buffer> <silent> P		:call <SID>NetPrevWinOpen(0)<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
@@ -1475,12 +1499,16 @@
     rightb vert new
     wincmd |
    endif
+   call s:NetMenu()
 "   call Decho("handling a file: dirname<".dirname.">")
 
   elseif newdir == './'
    " refresh the directory list
 "   call Decho("refresh directory listing")
-   setlocal ma nobl bh=hide
+   setlocal ma nobl
+   if g:netrw_fastbrowse >= 1
+    setlocal bh=hide
+   endif
    %d
 
   elseif newdir == '../'
@@ -1630,7 +1658,7 @@
     elseif ok =~ 'q\%[uit]'
      break
     endif
-  
+
    else
     " attempt to remove directory
     if !all
@@ -1661,7 +1689,7 @@
 "       call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
        let ret= system(netrw_rmf_cmd)
 "       call Decho("returned=".ret." errcode=".v:shell_error)
-     
+
        if v:shell_error != 0 && !exists("g:netrw_quiet")
         echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
@@ -1795,25 +1823,23 @@
 
   " seems kde systems often have gnome-open due to dependencies, even though
   " gnome-open's subsidiary display tools are largely absent.  Kde systems
-  " usually have "kicker" running, though...  (tnx Mikolaj Machowski)
-  if !exists("s:haskicker")
+  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+  if !exists("s:haskdeinit")
    if has("unix")
-    let v:shell_error=0
-    silent! let s:haskicker= system('ps -e') =~ 'kicker'
+    silent! let s:haskdeinit= system('ps -e') =~ 'kdeinit'
     if v:shell_error
-     let s:haskicker   = 0
-     let v:shell_error = 0
+     let s:haskdeinit = 0
     endif
    else
-    let s:haskicker= 0
+    let s:haskdeinit= 0
    endif
-"   call Decho("setting s:haskicker=".s:haskicker)
+"   call Decho("setting s:haskdeinit=".s:haskdeinit)
   endif
 
   if a:remote == 1
    " create a local copy
    let fname= tempname().".".exten
-"   call Decho("create a local copy of <".a:fname."> as <".fname.">")
+"   call Decho("a:remote==1: create a local copy of <".a:fname."> as <".fname.">")
    exe "silent keepjumps bot 1new ".a:fname
    set bh=delete
    exe "w! ".fname
@@ -1827,15 +1853,12 @@
   else
    let redir= &srr . "/dev/null"
   endif
-"  call Decho("redir:".redir.":")
+"  call Decho("redir{".redir."} srr{".&srr."}")
 
   if exists("g:netrw_browsex_viewer") && executable(g:netrw_browsex_viewer)
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
    if g:netrw_browsex_viewer == '-'
-    call netrwFileHandlers#Init()
-    if exten != "" && exists("*netrwFileHandlers#NFH_".exten)
-"     call Decho("let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")')
-     exe "let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")'
-    endif
+    let ret= netrwFileHandlers#Invoke(exten,fname)
    else
 "    call Decho("exe silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."' ".redir)
     exe "silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."'".redir
@@ -1848,23 +1871,26 @@
    exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
    let ret= v:shell_error
 
-  elseif has("unix") && executable("gnome-open") && !s:haskicker
+  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
 "   call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
    exe "silent !gnome-open '".escape(fname,'%#')."'".redir
    let ret= v:shell_error
 
-  elseif has("unix") && executable("kfmclient") && s:haskicker
+  elseif has("unix") && executable("kfmclient") && s:haskdeinit
 "   call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
    exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
    let ret= v:shell_error
 
   else
-   call netrwFileHandlers#Init()
-   if exten != "" && exists("*netrwFileHandlers#NFH_".exten)
-"    call Decho("let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")')
-    exe "let ret= netrwFileHandlers#NFH_".exten.'("'.fname.'")'
-   endif
+   " netrwFileHandlers#Invoke() always returns 0
+   let ret= netrwFileHandlers#Invoke(exten,fname)
   endif
+
+  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+  if ret
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
   redraw!
 
   " cleanup: remove temporary file,
@@ -1928,19 +1954,19 @@
     else
      put ='open '.g:netrw_machine
     endif
- 
+
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
      put =g:netrw_uid
      put ='\"'.g:netrw_passwd.'\"'
     else
      put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
     endif
- 
+
    if a:path != ""
     put ='cd \"'.a:path.'\"'
    endif
    exe "put ='".a:cmd."'"
- 
+
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
@@ -2123,6 +2149,9 @@
 
    " determine qty files per line (fpl)
    let w:netrw_fpl= winwidth(0)/b:netrw_cpf
+   if w:netrw_fpl <= 0
+    let w:netrw_fpl= 1
+   endif
 "   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
 
    " make wide display
@@ -2258,7 +2287,7 @@
    endif
    redraw!
   endif
-  
+
 "  call Dret("NetMakeDir")
 endfun
 
@@ -2376,13 +2405,40 @@
 
 " ---------------------------------------------------------------------
 " NetObtain: obtain file under cursor (for remote browsing support) {{{2
-fun! s:NetObtain()
-  let fname= expand("<cWORD>")
+fun! netrw#NetObtain(...)
+"  call Dfunc("NetObtain() a:0=".a:0)
+
+  if a:0==0
+   " no arguments -- use word under cursor
+   let fname= expand("<cWORD>")
+"   call Decho("no arguments, use <".fname.">")
+  elseif a:0 > 1
+   " more than one argument, recurse with each argument separately
+"   call Decho("more than 1 argument, use recursion")
+   let i=1
+   while i <= a:0
+    call netrw#NetObtain(a:{i})
+    let i=i+1
+   endwhile
+   return
+  else
+   " one argument provided
+   let fname              = a:1
+   let keep_netrw_choice  = exists("b:netrw_choice")?  b:netrw_choice  : ""
+   let keep_netrw_fname   = exists("b:netrw_fname")?   b:netrw_fname   : ""
+   let keep_netrw_wmethod = exists("w:netrw_method")?  w:netrw_method  : ""
+   call s:NetMethod(fname)
+   let w:netrw_method= b:netrw_method
+   let fname         = b:netrw_fname
+"   call Decho("g:netrw_scp_cmd<".g:netrw_scp_cmd.">")
+"   call Decho("g:netrw_machine<".g:netrw_machine.">")
+"   call Decho("fname<".fname.">")
+  endif
 
   " NetrwStatusLine support - for obtaining support
   call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
 
-"  call Dfunc("NetObtain() method=".w:netrw_method)
+"  call Decho("method=".w:netrw_method)
   if exists("w:netrw_method") && w:netrw_method =~ '[235]'
    if executable("ftp")
     let curdir = expand("%")
@@ -2419,9 +2475,9 @@
 "     call Decho('ftp:  open '.g:netrw_machine.' '.g:netrw_port)
     else
      put ='open '.g:netrw_machine
-"     call Decho('ftp:  open '.g:netrw_machine
+"     call Decho('ftp:  open '.g:netrw_machine)
     endif
- 
+
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
      put =g:netrw_uid
      put ='\"'.g:netrw_passwd.'\"'
@@ -2431,21 +2487,21 @@
      put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
 "     call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
     endif
- 
+
    if a:path != ""
     put ='cd '.a:path
 "    call Decho('cd '.a:path)
    endif
    exe "put ='".a:cmd."'"
 "   call Decho("ftp:  ".a:cmd)
- 
+
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
 "    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
     exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
-   
+
     ".........................................
     else
       echo "***warning*** unable to comply with your request<" . choice . ">"
@@ -2459,8 +2515,14 @@
      echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
+    " restore status line
     let &stl        = s:netrw_users_stl
     let &laststatus = s:netrw_users_ls
+    " restore NetMethod
+    if exists("keep_netrw_method")
+     call s:NetMethod(keep_netrw_choice)
+     let w:netrw_method  = keep_netrw_wmethod
+    endif
 "    call Dret("NetObtain")
     return
    endif
@@ -2470,6 +2532,7 @@
    " scp: Method#4
    let curdir = expand("%")
    let path   = substitute(curdir,'scp://[^/]\+/','','e')
+"   call Decho("path<".path.">")
    if exists("g:netrw_port") && g:netrw_port != ""
     let useport= " -P ".g:netrw_port
    else
@@ -2490,6 +2553,12 @@
   let &laststatus = s:netrw_users_ls
   redraw!
 
+  " restore NetMethod
+  if exists("keep_netrw_method")
+   call s:NetMethod(keep_netrw_choice)
+   let w:netrw_method  = keep_netrw_wmethod
+  endif
+
 "  call Dret("NetObtain")
 endfun
 
@@ -2569,6 +2638,77 @@
 "  call Dret("NetPrevWinOpen")
 endfun
 
+" ---------------------------------------------------------------------
+" NetMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetMenu()
+
+  if has("menu") && has("gui_running") && &go =~ 'm'
+"   call Dfunc("NetMenu()")
+   if !exists("s:netrw_menu_enabled")
+    let s:netrw_menu_enabled= 1
+    if !exists("g:DrChipTopLvlMenu")
+     let g:DrChipTopLvlMenu= "DrChip."
+    endif
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Help<tab>?	?'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Apply\ Special\ Viewer<tab>x	x'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Bookmark\ Current\ Directory<tab>b	Nb'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Go\ Up\ Directory<tab>-	-'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Goto\ Bookmarked\ Directory<tab>B	NB'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Recently\ Used\ Directory<tab>u	u'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Subsequently\ Used\ Directory<tab>U	U'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Delete\ File/Directory<tab>D	D'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<c-h>"
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory<tab><cr>	'."\<cr>"
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory,\ New\ Window<tab>o	o'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File/Directory,\ New\ Vertical\ Window\ <tab>v	v'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.List\ Bookmarks\ and\ History<tab>q	q'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Listing\ Style\ (thin-long-wide)<tab>i	i'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Make\ Subdirectory<tab>d	d'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Normal-Hide-Show<tab>a	a'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Obtain\ File<tab>O	O'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Preview\ File/Directory<tab>p	p'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Previous\ Window\ Browser<tab>P	P'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Rename\ File/Directory<tab>R	R'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Select\ Sorting\ Style<tab>s	s'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Sorting\ Sequence\ Edit<tab>S	S'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Set\ Current\ Directory<tab>c	c'
+    exe 'silent! menu '.g:DrChipTopLvlMenu.'Netrw.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+   else
+"    call Decho("clear menus")
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Help'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Apply\ Special\ Viewer'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Bookmark\ Current\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Go\ Up\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Goto\ Bookmarked\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Recently\ Used\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Change\ To\ Subsequently\ Used\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Delete\ File/Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File\ Hiding\ List'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Edit\ File'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Enter\ File/Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Enter\ File/Directory\ (vertical\ split)'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.List\ Bookmarks\ and\ History'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Listing\ Style\ (thin-long-wide)'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Make\ Subdirectory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Normal-Hide-Show'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Obtain\ File'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Preview\ File'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Previous\ Window\ Browser'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Refresh\ Listing'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Rename\ File/Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Reverse\ Sorting\ Order'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Select\ Sorting\ Style'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Sorting\ Sequence\ Edit'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Set\ Current\ Directory'
+    exe 'silent! unmenu '.g:DrChipTopLvlMenu.'Netrw.Settings/Options'
+   endif
+"   call Dret("NetMenu")
+  endif
+
+endfun
+
 " ==========================================
 "  Local Directory Browsing Support:    {{{1
 " ==========================================
@@ -2597,6 +2737,13 @@
 "   call Dret("DirBrowse")
    return
   endif
+  if &fo =~ '[ta]'
+   set fo-=t
+   set fo-=a
+   echohl Warning
+   echo '***warning*** directory browsing and formatoptions "ta" are incompatible'
+   echohl None
+  endif
 
   call s:NetOptionSave()
 
@@ -2613,6 +2760,10 @@
   " use buffer-oriented WinVars if buffer ones exist but window ones don't
   call s:UseBufWinVars()
 
+  " set up menus
+  let b:netrw_browser_active= 1
+  call s:NetMenu()
+
   " find buffer number of buffer named precisely the same as a:dirname
   let bufnum= bufnr(escape(a:dirname,'\'))
 "  call Decho("findbuf: bufnum=".bufnum)
@@ -2692,7 +2843,10 @@
   exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
 
   " make this buffer not-a-file, modifiable, not line-numbered, etc
-  setlocal bh=hide bt=nofile nobl ma nonu noswf
+  setlocal bt=nofile nobl ma nonu noswf nowrap
+  if g:netrw_fastbrowse >= 2
+   setlocal bh=hide
+  endif
   keepalt silent! %d
 
   " ---------------------------
@@ -2845,7 +2999,10 @@
   " save certain window-oriented variables into buffer-oriented variables
   call s:SetBufWinVars()
   call s:NetOptionRestore()
-  setlocal noma nomod nonu bh=hide nobl
+  setlocal noma nomod nonu nobl nowrap
+  if g:netrw_fastbrowse >= 2
+   setlocal bh=hide
+  endif
 
 "  call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
 endfun
@@ -2941,7 +3098,7 @@
     keepjumps silent! put=pfile
    endif
   endwhile
-  
+
   " cleanup any windows mess at end-of-line
   silent! keepjumps %s/\r$//e
   setlocal ts=32
@@ -2981,6 +3138,7 @@
      wincmd |
     endif
     exe "e! ".escape(dirname,s:netrw_cd_escape)
+    call s:NetMenu()
     set ma nomod
    endif
 
@@ -3058,7 +3216,7 @@
     elseif ok =~ 'q\%[uit]'
      break
     endif
-  
+
    else
     " attempt to remove directory
     if !all
@@ -3434,13 +3592,14 @@
 "	     9: sftp
 fun! s:NetMethod(choice)  " globals: method machine id passwd fname
 "   call Dfunc("NetMethod(a:choice<".a:choice.">)")
- 
+
   " initialization
   let b:netrw_method  = 0
   let g:netrw_machine = ""
   let b:netrw_fname   = ""
   let g:netrw_port    = ""
- 
+  let g:netrw_choice  = a:choice
+
   " Patterns:
   " mipf     : a:machine a:id password filename	     Use ftp
   " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
@@ -3464,7 +3623,7 @@
   let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
   let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
   let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
- 
+
 "  call Decho("determine method:")
   " Determine Method
   " rcp://user@hostname/...path-to-file
@@ -3477,7 +3636,7 @@
    if userid != ""
     let g:netrw_uid= userid
    endif
- 
+
   " scp://user@hostname/...path-to-file
   elseif match(a:choice,scpurm) == 0
 "   call Decho("scp://...")
@@ -3485,14 +3644,14 @@
    let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
    let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
    let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
- 
+
   " http://user@hostname/...path-to-file
   elseif match(a:choice,httpurm) == 0
 "   call Decho("http://...")
    let b:netrw_method = 5
    let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
- 
+
   " dav://hostname[:port]/..path-to-file..
   elseif match(a:choice,davurm) == 0
 "   call Decho("dav://...")
@@ -3503,14 +3662,14 @@
     let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
    endif
    let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
- 
+
   " rsync://user@hostname/...path-to-file
   elseif match(a:choice,rsyncurm) == 0
 "   call Decho("rsync://...")
    let b:netrw_method = 7
    let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
- 
+
   " ftp://[user@]hostname[[:#]port]/...path-to-file
   elseif match(a:choice,ftpurm) == 0
 "   call Decho("ftp://...")
@@ -3536,7 +3695,7 @@
      let b:netrw_method= 3
     endif
    endif
- 
+
   elseif match(a:choice,fetchurm) == 0
 "   call Decho("fetch://...")
    let b:netrw_method = 8
@@ -3544,7 +3703,7 @@
    let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
    let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
    let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
- 
+
   " Issue an ftp : "machine id password [path/]filename"
   elseif match(a:choice,mipf) == 0
 "   call Decho("(ftp) host id pass file")
@@ -3553,7 +3712,7 @@
    let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
    let g:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
    let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
- 
+
   " Issue an ftp: "hostname [path/]filename"
   elseif match(a:choice,mf) == 0
 "   call Decho("(ftp) host file")
@@ -3561,20 +3720,20 @@
     let b:netrw_method  = 3
     let g:netrw_machine = substitute(a:choice,mf,'\1',"")
     let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
- 
+
    elseif filereadable(expand("$HOME/.netrc"))
     let b:netrw_method  = 2
     let g:netrw_machine = substitute(a:choice,mf,'\1',"")
     let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
    endif
- 
+
   " sftp://user@hostname/...path-to-file
   elseif match(a:choice,sftpurm) == 0
 "   call Decho("sftp://...")
    let b:netrw_method = 9
    let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
    let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
- 
+
   " Issue an rcp: hostname:filename"  (this one should be last)
   elseif match(a:choice,rcphf) == 0
 "   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
@@ -3593,7 +3752,7 @@
     " don't let PCs try <.netrc>
     let b:netrw_method = 3
    endif
- 
+
   else
    if !exists("g:netrw_quiet")
     echohl Error | echo "***netrw*** cannot determine method" | echohl None
@@ -3606,7 +3765,7 @@
   if g:netrw_port != ""
     let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
   endif
- 
+
 "  call Decho("a:choice       <".a:choice.">")
 "  call Decho("b:netrw_method <".b:netrw_method.">")
 "  call Decho("g:netrw_machine<".g:netrw_machine.">")
@@ -3618,7 +3777,7 @@
 "   call Decho("g:netrw_passwd <".g:netrw_passwd.">")
 "  endif					"Decho
 "  call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"  call Dret("NetMethod")
+"  call Dret("NetMethod : b:netrw_method=".b:netrw_method)
 endfun
 
 " ------------------------------------------------------------------------
@@ -3666,14 +3825,18 @@
   " Get Temporary Filename
   let w:aikeep   = &ai
   " record autochdir setting and then insure its unset (tnx to David Fishburn)
-  if has("netbeans_intg") || has("sun_workshop")
-   let w:acdkeep = &autochdir
-   set noautochdir
+  if &acd && (has("netbeans_intg") || has("sun_workshop"))
+   set noacd
+   echohl Warning | echomsg "***warning*** directory browsing and the acd setting are incompatible" |echohl None
   endif
+  let w:fokeep    = &fo
+  let w:aikeep    = &ai
+  let w:cikeep    = &ci
   let w:cinkeep   = &cin
   let w:cinokeep  = &cino
   let w:comkeep   = &com
   let w:cpokeep   = &cpo
+  let w:magickeep = &magic
   if !g:netrw_keepdir
    let w:dirkeep  = getcwd()
   endif
@@ -3684,7 +3847,7 @@
   setlocal cino =
   setlocal com  =
   setlocal cpo -=aA
-  setlocal nocin noai nospell
+  setlocal nocin noai noci magic nospell fo=nroql2
   setlocal tw   =0
   setlocal report=10000
   if has("win32") && !has("win95")
@@ -3705,18 +3868,18 @@
    return
   endif
   unlet w:netoptionsave
- 
+
   if exists("w:aikeep")| let &ai= w:aikeep|endif
-  if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
-   let &acd= w:acdkeep
-   unlet w:acdkeep
-  endif
+  if exists("w:aikeep")   |let &ai     = w:aikeep      |unlet w:aikeep   |endif
+  if exists("w:cikeep")   |let &ci     = w:cikeep      |unlet w:cikeep   |endif
   if exists("w:cinkeep")  |let &cin    = w:cinkeep     |unlet w:cinkeep  |endif
   if exists("w:cinokeep") |let &cino   = w:cinokeep    |unlet w:cinokeep |endif
   if exists("w:comkeep")  |let &com    = w:comkeep     |unlet w:comkeep  |endif
   if exists("w:cpokeep")  |let &cpo    = w:cpokeep     |unlet w:cpokeep  |endif
   if exists("w:dirkeep")  |exe "lcd ".w:dirkeep        |unlet w:dirkeep  |endif
+  if exists("w:fokeep")   |let &fo     = w:fokeep      |unlet w:fokeep   |endif
   if exists("w:gdkeep")   |let &gd     = w:gdkeep      |unlet w:gdkeep   |endif
+  if exists("w:magic")    |let &magic  = w:magic       |unlet w:magic    |endif
   if exists("w:repkeep")  |let &report = w:repkeep     |unlet w:repkeep  |endif
   if exists("w:spellkeep")|let &spell  = w:spellkeep   |unlet w:spellkeep|endif
   if exists("w:twkeep")   |let &tw     = w:twkeep      |unlet w:twkeep   |endif
@@ -3733,7 +3896,7 @@
    endif
    unlet w:swfkeep
   endif
- 
+
 "  call Dret("NetOptionRestore")
 endfun
 
@@ -3760,7 +3923,7 @@
 if v:version < 700
  fun! s:NetSort() range
 " "  call Dfunc("NetSort()")
- 
+
   let i = a:firstline + 1
   while i <= a:lastline
     " find insertion point via binary search
@@ -3795,7 +3958,7 @@
     endif
     let i = i + 1
   endwhile
- 
+
 " "  call Dret("NetSort")
  endfun
 endif
diff --git a/runtime/autoload/netrwSettings.vim b/runtime/autoload/netrwSettings.vim
index 73cfd18..e8d6bd2 100644
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/autoload/netrwSettings.vim
@@ -96,6 +96,7 @@
    put = 'let g:netrw_browsex_viewer    = (not defined)'
   endif
   put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
+  put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
   put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
   put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
   put = 'let g:netrw_hide              = '.g:netrw_hide
