diff --git a/runtime/plugin/NetrwFileHandlers.vim b/runtime/plugin/NetrwFileHandlers.vim
index 6edeb51..35df6dd 100644
--- a/runtime/plugin/NetrwFileHandlers.vim
+++ b/runtime/plugin/NetrwFileHandlers.vim
@@ -2,14 +2,14 @@
 "                    netrw's browsers' x command ("eXecute launcher")
 " Author:	Charles E. Campbell, Jr.
 " Date:		Aug 31, 2004
-" Version:	3a	NOT RELEASED
+" Version:	3
 
 " ---------------------------------------------------------------------
 " Prevent Reloading: {{{1
 if exists("g:loaded_netrwfilehandlers") || &cp
  finish
 endif
-let g:loaded_netrwfilehandlers= "v3a"
+let g:loaded_netrwfilehandlers= "v3"
 
 " ---------------------------------------------------------------------
 " NetrwFileHandler_html: handles html when the user hits "x" when the {{{1
@@ -153,7 +153,7 @@
 fun! NetrwFileHandler_pdf(pdf)
 "  " call Dfunc("NetrwFileHandler_pdf(pdf<".a:pdf.">)")
   if executable("gs")
-   exe "silent! !gs ".a:pdf
+   exe 'silent! !gs "'.a:pdf.'"'
   else
 "   " call Dret("NetrwFileHandler_pdf 0")
    return 0
@@ -168,7 +168,7 @@
 fun! NetrwFileHandler_sxw(sxw)
 "  " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
   if executable("gs")
-   exe "silent! !gs ".a:sxw
+   exe 'silent! !gs "'.a:sxw.'"'
   else
 "   " call Dret("NetrwFileHandler_sxw 0")
    return 0
@@ -184,7 +184,7 @@
 "  " call Dfunc("NetrwFileHandler_doc(doc<".a:doc.">)")
 
   if executable("oowriter")
-   exe "silent! !oowriter ".a:doc
+   exe 'silent! !oowriter "'.a:doc.'"'
    redraw!
   else
 "   " call Dret("NetrwFileHandler_doc 0")
@@ -201,7 +201,7 @@
 "  " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
 
   if executable("oowriter")
-   exe "silent! !oowriter ".a:sxw
+   exe 'silent! !oowriter "'.a:sxw.'"'
    redraw!
   else
 "   " call Dret("NetrwFileHandler_sxw 0")
@@ -218,7 +218,7 @@
 "  " call Dfunc("NetrwFileHandler_xls(xls<".a:xls.">)")
 
   if executable("oocalc")
-   exe "silent! !oocalc ".a:xls
+   exe 'silent! !oocalc "'.a:xls.'"'
    redraw!
   else
 "   " call Dret("NetrwFileHandler_xls 0")
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index 608cc7d..e4868a3 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:	Sep 14, 2004
-" Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	51a	NOT RELEASED
+" last change:	Dec 06, 2004
+" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" Version:	53
 " 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  = "v51a"
+let g:loaded_netrw  = "v53"
 let s:save_cpo      = &cpo
 let loaded_explorer = 1
 set cpo&vim
@@ -29,7 +29,11 @@
 endif
 if !exists("g:netrw_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
-  let g:netrw_cygwin= 1
+  if &shell == "bash"
+   let g:netrw_cygwin= 1
+  else
+   let g:netrw_cygwin= 0
+  endif
  else
   let g:netrw_cygwin= 0
  endif
@@ -78,7 +82,7 @@
  let g:netrw_sort_by= "name"
 endif
 if !exists("g:netrw_sort_sequence")
- let g:netrw_sort_sequence= '/$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
+ let g:netrw_sort_sequence= '[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
 endif
 if !exists("g:netrw_sort_direction")
  " alternative: reverse  (z y x ...)
@@ -117,6 +121,9 @@
 if !exists("g:netrw_ftp_browse_reject")
  let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
 endif
+if !exists("g:netrw_ssh_browse_reject")
+  let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
+endif
 if !exists("g:netrw_keepdir")
  let g:netrw_keepdir= 1
 endif
@@ -143,6 +150,12 @@
 if !exists("g:netrw_maxfilenamelen")
  let g:netrw_maxfilenamelen= 32
 endif
+if !exists("g:netrw_dirhistmax")
+ let g:netrw_dirhistmax= 10
+endif
+if !exists("g:NETRW_DIRHIST_CNT")
+ let g:NETRW_DIRHIST_CNT= 0
+endif
 
 " BufEnter event ignored by decho when following variable is true
 "  Has a side effect that doau BufReadPost doesn't work, so
@@ -218,7 +231,6 @@
   au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread "   .expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
   au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	exe "silent doau BufWritePre ".expand("<afile>")|exe "Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
   au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	exe "silent doau BufWritePre ".expand("<afile>")|exe "'[,']Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
-"  au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	if exists("vcount")|call Decho("vcount=".vcount)|else|call Decho("no vcount")|endif
  augroup END
 endif
 
@@ -335,6 +347,7 @@
        if ichoice > a:0
        	if !exists("g:netrw_quiet")
          echoerr "Unbalanced string in filename '". wholechoice ."'"
+         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 	endif
 "        call Dret("NetRead")
         return
@@ -363,7 +376,7 @@
  
    " Check if NetBrowse() should be handling this request
 "   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
-   if choice =~ "^.*/$"
+   if choice =~ "^.*[\/]$"
     keepjumps call s:NetBrowse(choice)
 "    call Dret("NetRead")
     return
@@ -421,6 +434,7 @@
       let debugkeep= &debug
       set debug=msg
       echoerr getline(1)
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
       let &debug= debugkeep
      endif
      bd!
@@ -466,6 +480,7 @@
 "     call Decho("error<".getline(1).">")
      if !exists("g:netrw_quiet")
       echoerr getline(1)
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
      endif
     endif
     bd!
@@ -498,6 +513,7 @@
     if g:netrw_http_cmd == ""
      if !exists("g:netrw_quiet")
       echoerr "neither wget nor fetch command is available"
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
      endif
      exit
     endif
@@ -575,6 +591,7 @@
     if g:netrw_fetch_cmd == ""
      if !exists("g:netrw_quiet")
       echoerr "fetch command not available"
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
      endif
      exit
     endif
@@ -639,14 +656,14 @@
    let line2= line("$")
   endif
  
-  " transform paths from / to \ for Windows, unless the shell is bash
+  " transform paths from / to \ for Windows (except for cygwin)
   if &term == "win32"
-   if &shell == "bash"
-    let fname=a:fname
-"    call Decho("(win32 && bash) fname<".fname.">")
+   if g:netrw_cygwin
+    let fname= a:fname
+"    call Decho("(win32 && cygwin) fname<".fname.">")
    else
-    let fname=substitute(a:fname,'/','\\\\','ge')
-"    call Decho("(win32 && !bash) fname<".fname.">")
+    let fname= substitute(a:fname,'/','\\\\','ge')
+"    call Decho("(win32 && !cygwin) fname<".fname.">")
    endif
   else
    let fname= a:fname
@@ -802,6 +819,7 @@
        if choice > a:0
        	if !exists("g:netrw_quiet")
          echoerr "Unbalanced string in filename '". wholechoice ."'"
+         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 	endif
 "        call Dret("NetWrite")
         return
@@ -872,6 +890,7 @@
     if getline(1) !~ "^$"
      if !exists("g:netrw_quiet")
       echoerr getline(1)
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
      endif
      let mod=1
     endif
@@ -911,6 +930,7 @@
     if getline(1) !~ "^$"
      if  !exists("g:netrw_quiet")
       echoerr getline(1)
+      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
      endif
      let mod=1
     endif
@@ -939,6 +959,7 @@
    elseif     b:netrw_method == 5
     if !exists("g:netrw_quiet")
      echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
  
    ".........................................
@@ -1035,6 +1056,7 @@
    if !executable("ftp")
     if !exists("g:netrw_quiet")
      echoerr "***netrw*** this system doesn't support remote directory listing via ftp"
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
 "    call Dret("NetBrowse")
     return
@@ -1042,6 +1064,7 @@
   elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
    if !exists("g:netrw_quiet")
     echoerr "***netrw*** this system doesn't support remote directory listing via ssh"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
 "   call Dret("NetBrowse")
    return
@@ -1052,20 +1075,22 @@
 
   " analyze a:dirname and g:netrw_list_cmd
   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+  let dirname = substitute(a:dirname,'\\','/','ge')
 "  call Decho("dirpat<".dirpat.">")
-  if a:dirname !~ dirpat
+  if dirname !~ dirpat
    if !exists("g:netrw_quiet")
-    echoerr "NetBrowse: I don't understand your dirname<".a:dirname.">"
+    echoerr "NetBrowse: I don't understand your dirname<".dirname.">"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
-"   call Dret("NetBrowse : badly formatted dirname<".a:dirname.">")
+"   call Dret("NetBrowse : badly formatted dirname<".dirname.">")
    return
   endif
 
-  let method  = substitute(a:dirname,dirpat,'\1','')
-  let user    = substitute(a:dirname,dirpat,'\2','')
-  let machine = substitute(a:dirname,dirpat,'\3','')
-  let path    = substitute(a:dirname,dirpat,'\4','')
-  let fname   = substitute(a:dirname,'^.*/\ze.','','')
+  let method  = substitute(dirname,dirpat,'\1','')
+  let user    = substitute(dirname,dirpat,'\2','')
+  let machine = substitute(dirname,dirpat,'\3','')
+  let path    = substitute(dirname,dirpat,'\4','')
+  let fname   = substitute(dirname,'^.*/\ze.','','')
 "  call Decho("set up method <".method .">")
 "  call Decho("set up user   <".user   .">")
 "  call Decho("set up machine<".machine.">")
@@ -1087,6 +1112,7 @@
   " optionally sort by time (-t) or by size (-S)
   if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
    echoerr "***warning*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)"
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   else
    if g:netrw_sort_by =~ "^t"
     let listcmd= listcmd."t"
@@ -1102,14 +1128,14 @@
 "  call Decho("set up listcmd<".listcmd.">")
   if fname =~ '@$' && fname !~ '^"'
 "   call Decho("attempt transfer of symlink as file")
-   call s:NetBrowse(substitute(a:dirname,'@$','','e'))
+   call s:NetBrowse(substitute(dirname,'@$','','e'))
    redraw!
 "   call Dret("NetBrowse : symlink")
    return
 
-  elseif fname !~ '/$' && fname !~ '^"'
+  elseif fname !~ '[\/]$' && fname !~ '^"'
    " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".a:dirname.">")
+"   call Decho("attempt transfer as regular file<".dirname.">")
 
    " remove any filetype indicator from end of dirname, except for the
    " "this is a directory" indicator (/).  There shouldn't be one of those,
@@ -1157,7 +1183,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 nobl
+  setlocal bh=hide nobl nonu
+
+  " save current directory on directory history list
+  call <SID>NetBookmarkDir(3,expand("%"))
 
   " set up buffer-local mappings
 "  call Decho("set up buffer-local mappings")
@@ -1174,6 +1203,8 @@
   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>
   nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
+  nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
+  nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
   nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
@@ -1185,7 +1216,7 @@
   exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
   nnoremap <buffer> ?			:he netrw-browse-cmds<cr>
-  setlocal ma
+  setlocal ma nonu
 
   " Set up the banner
 "  call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method.">")
@@ -1209,9 +1240,9 @@
   endif
   if g:netrw_list_hide != "" && g:netrw_hide
    if g:netrw_hide == 1
-    keepjumps put ='\"   Hiding: '.g:netrw_list_hide
+    keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
    else
-    keepjumps put ='\"   Showing: '.g:netrw_list_hide
+    keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
    let s:netrw_bannercnt= s:netrw_bannercnt + 1
   endif
@@ -1232,10 +1263,11 @@
     " shorten the listing
 "    call Decho("generate short listing")
     exe "keepjumps ".s:netrw_bannercnt
+
     " cleanup
-    while getline(".") =~ g:netrw_ftp_browse_reject
-     keepjumps d
-    endwhile
+    if g:netrw_ftp_browse_reject != ""
+     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
+    endif
 
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
@@ -1262,6 +1294,10 @@
 "   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
    keepjumps 1d
+   " cleanup
+   if g:netrw_ftp_browse_reject != ""
+    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
+    endif
   endif
 
   " manipulate the directory listing (hide, sort)
@@ -1299,19 +1335,22 @@
     exe s:netrw_bannercnt
    endif
 
-   if g:netrw_sort_by =~ "^n"
-    call s:SetSort()
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
-   endif
-   if g:netrw_longlist
-    " shorten the list to keep its width <= 80 characters
-    exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+   if line("$") >= s:netrw_bannercnt
+    if g:netrw_sort_by =~ "^n"
+     call s:SetSort()
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+    endif
+    if g:netrw_longlist
+     " shorten the list to keep its width <= 80 characters
+     exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+    endif
    endif
   endif
   exe "keepjumps ".s:netrw_bannercnt
   setlocal nomod
   setlocal noma
+  setlocal nonu
 
 "  call Dret("NetBrowse")
   return
@@ -1325,7 +1364,7 @@
   let dirname= a:dirname
   let newdir = a:newdir
 
-  if newdir !~ '/$'
+  if newdir !~ '[\/]$'
    " handling a file
    let dirname= dirname.newdir
 "   call Decho("handling a file: dirname<".dirname.">")
@@ -1394,7 +1433,7 @@
    let rmfile= s:NetGetWord()
 "   call Decho("rmfile<".rmfile.">")
 
-   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
+   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
     " attempt to remove file
     if !all
      echohl Statement
@@ -1445,13 +1484,14 @@
 "      call Decho("returned=".ret." errcode=".v:shell_error)
 
       if v:shell_error != 0
-       let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'/$','','e')
+       let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.substitute(rmfile,'[\/]$','','e')
 "       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")
         echoerr "unable to remove directory<".rmfile."> -- is it empty?"
+        call inputsave()|call input("Press <cr> to continue")|call inputrestore()
        endif
       endif
      endif
@@ -1817,6 +1857,7 @@
    if isdirectory(fullnewdir)
     if !exists("g:netrw_quiet")
      echoerr "***warning*** <".newdirname."> is already a directory!"
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
 "    call Dret("NetMakeDir : directory<".newdirname."> exists previously")
     return
@@ -1824,6 +1865,7 @@
    if filereadable(fullnewdir)
     if !exists("g:netrw_quiet")
      echoerr "***warning*** <".newdirname."> is already a file!"
+     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
 "    call Dret("NetMakeDir : file<".newdirname."> exists previously")
     return
@@ -1846,6 +1888,7 @@
     exe linenum
    elseif !exists("g:netrw_quiet")
     echoerr "***warning*** unable to make directory<".newdirname.">"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
    redraw!
 
@@ -1865,6 +1908,7 @@
     exe linenum
    elseif !exists("g:netrw_quiet")
     echoerr "***warning*** unable to make directory<".newdirname.">"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
    redraw!
   endif
@@ -1896,17 +1940,71 @@
     echomsg "Sorry, bookmark#".v:count." doesn't exist!"
    endif
 
-  elseif exists("g:NETRW_BOOKMARKMAX")
-   " list bookmarks
-"   call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
-   let cnt= 0
-   while cnt <= g:NETRW_BOOKMARKMAX
-    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
-     echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
-"     call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
+  elseif a:chg == 2
+   if exists("g:NETRW_BOOKMARKMAX")
+    " list user's bookmarks
+"    call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
+    let cnt= 0
+    while cnt <= g:NETRW_BOOKMARKMAX
+     if exists("g:NETRW_BOOKMARKDIR_{cnt}")
+"      call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
+      echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
+     endif
+     let cnt= cnt + 1
+    endwhile
+   endif
+
+   " list directory history
+   let cnt     = g:NETRW_DIRHIST_CNT
+   let first   = 1
+   let histcnt = 0
+   while ( first || cnt != g:NETRW_DIRHIST_CNT )
+"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
+    let histcnt= histcnt + 1
+    if exists("g:NETRW_DIRHIST_{cnt}")
+"     call Decho("Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
+     echo "Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
     endif
-    let cnt= cnt + 1
+    let first = 0
+    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+    if cnt < 0
+     let cnt= cnt + g:netrw_dirhistmax
+    endif
    endwhile
+
+  elseif a:chg == 3
+   " saves most recently visited directories
+   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+   let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
+"   call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+
+  elseif a:chg == 4
+   " u: change to the previous directory stored on the history list
+   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
+   if g:NETRW_DIRHIST_CNT < 0
+    let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+   endif
+   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
+"    call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+    exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
+   else
+    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+    echo "Sorry, no predecessor directory exists yet"
+   endif
+
+  elseif a:chg == 5
+   " U: change to the subsequent directory stored on the history list
+   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
+"    call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+    exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
+   else
+    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
+    if g:NETRW_DIRHIST_CNT < 0
+     let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+    endif
+    echo "Sorry, no successor directory exists yet"
+   endif
   endif
 "  call Dret("NetBookmarkDir")
 endfun
@@ -1933,6 +2031,7 @@
   if v:version < 603
    if !exists("g:netrw_quiet")
     echoerr "vim version<".v:version."> too old for browsing with netrw"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
 "   call Dret("LocalBrowse : vim version<".v:version."> too old")
    return
@@ -1941,8 +2040,7 @@
   " record and change current directory
   let netrw_origdir= s:NetGetcwd(1)
   exe 'cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape)
-  let dirname= s:NetGetcwd(0)
-"  call Decho("dirname<".dirname."> buf#".bufnr("%")." winnr=".winnr())
+"  call Decho("dirname<".a:dirname."> buf#".bufnr("%")." winnr=".winnr())
 
   " make this buffer modifiable
   setlocal ma
@@ -1951,12 +2049,17 @@
   "  Perform Directory Listing:
 "  call Decho("Perform directory listing...")
   " set up new buffer and map
-  " remove the trailing "/"
-  let dirnamens= substitute(dirname,'/$','','e')
-  let dirnamenr= bufnr(dirnamens.'$')
+  " dirname   : current working directory, no escapes, has trailing /
+  " dirnamens : dirname, but with no trailing slash
+  " dirnamenr : buffer number containing dirnamens
+  " dirnamebuf: buffer's idea of dirname, with all \ -> /
+  let dirname    = s:NetGetcwd(0)
+  let dirnamens  = substitute(dirname,'[\/]$','','e')
+  let dirnamenr  = bufnr(dirnamens.'$')
+  let dirnamebuf = substitute(bufname(dirnamenr),'\\','/','ge')
 "  call Decho("dirnamenr= bufnr(".dirnamens.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr))
 
-  if dirnamenr != 0 && bufname(dirnamenr) != dirnamens
+  if dirnamenr != 0 && dirnamebuf != dirnamens
    " try keeping the trailing slash
    let dirnamenr = bufnr(dirname.'$')
 "   call Decho("dirnamenr= bufnr(".dirname.")=".dirnamenr." bufname(".dirnamenr.")=".bufname(dirnamenr)." (retry with /)")
@@ -1967,7 +2070,7 @@
 "   call Decho("buffer already exists: dirnamenr=".dirnamenr." dirname<".dirname."> pre-exists")
 "   call Dredir("ls!")
    exe "b ".dirnamenr
-   exe 'silent! cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape)
+   exe 'silent! cd '.escape(dirname,s:netrw_cd_escape)
 "   call Decho("changed directory to<".dirname.">")
    if a:dirname != "." && line("$") >= 5 && exists("b:netrw_curdir")
     if b:netrw_curdir == dirname
@@ -1980,11 +2083,13 @@
 "   call Decho("buffer name<".bufname("%")."> dirname<".dirname.">")
    setlocal ma
    keepjumps %d
-   if expand("%") != dirname
+   let curdir= substitute(substitute(expand("%"),'\\','/','ge'),'[^/]$','&/','e')
+   if curdir != dirname
     " set standard browser options on buffer
     setlocal bt=nofile bh=hide nobl noswf
     exe "setlocal ts=".g:netrw_maxfilenamelen
-    exe 'silent! file '.escape(dirname,s:netrw_cd_escape)
+    exe 'silent file '.escape(dirname,s:netrw_cd_escape)
+"    call Decho("errmsg1<".v:errmsg.">")
 "    call Decho("renamed buffer to<".escape(dirname,s:netrw_cd_escape).">")
 "    call Decho("yielding actual bufname<".bufname("%").">")
    endif
@@ -1992,10 +2097,11 @@
 "   call Decho("generate new buffer named<".escape(dirname,' #').">")
    silent! enew!
    " set standard browser options on buffer
-   setlocal bt=nofile bh=hide nobl noswf
+   setlocal bt=nofile bh=hide nobl noswf nonu
    exe "setlocal ts=".g:netrw_maxfilenamelen
-   exe 'silent! file '.substitute(escape(dirname,s:netrw_cd_escape),'/$','','e')
-"   call Decho("renamed buffer to<".substitute(escape(dirname,s:netrw_cd_escape),'/$','','e').">")
+   exe 'silent file '.substitute(escape(dirname,s:netrw_cd_escape),'[\/]$','','e')
+"   call Decho("errmsg2<".v:errmsg.">")
+"   call Decho("renamed buffer to<".substitute(escape(dirname,s:netrw_cd_escape),'[\/]$','','e').">")
 "   call Decho("yielding actual bufname<".bufname("%").">")
   endif
   if bufname("#") == "" && bufnr("#") != -1
@@ -2004,6 +2110,9 @@
    exe bufnr("#")."bwipe"
   endif
 
+  " save current directory on directory history list
+  call <SID>NetBookmarkDir(3,s:NetGetcwd(0))
+
   " set up all the maps
 "  call Decho("Setting up local browser maps")
   let b:netrw_curdir= s:NetGetcwd(1)
@@ -2023,6 +2132,8 @@
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
   nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
+  nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
+  nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
   nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
@@ -2041,34 +2152,43 @@
   keepjumps 1d
   keepjumps put ='\" Directory Listing                                              (netrw '.g:loaded_netrw.')'
   keepjumps put ='\"   '.dirname
-  let s:netrw_bannercnt= 7
+  let s:netrw_bannercnt= 3
 
   let sortby= g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
    let sortby= sortby." reversed"
   endif
 
+  " Sorted by...
   if g:netrw_sort_by =~ "^n"
 "   call Decho("directories will be sorted by name")
    " sorted by name
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
    keepjumps put ='\"   Sorted by      '.sortby
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
+   let s:netrw_bannercnt= s:netrw_bannercnt + 2
   else
 "   call Decho("directories will be sorted by size or date")
    " sorted by size or date
    keepjumps put ='\"   Sorted by '.sortby
+   let s:netrw_bannercnt= s:netrw_bannercnt + 1
   endif
+
+  " Hiding...  -or-  Showing...
   if g:netrw_list_hide != "" && g:netrw_hide
    if g:netrw_hide == 1
-    keepjumps put ='\"   Hiding: '.g:netrw_list_hide
+    keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
    else
-    keepjumps put ='\"   Showing: '.g:netrw_list_hide
+    keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
    let s:netrw_bannercnt= s:netrw_bannercnt + 1
   endif
   keepjumps put ='\"   Quick Help:    ?:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
   keepjumps put ='\" ============================================================================'
+  let s:netrw_bannercnt= s:netrw_bannercnt + 2
+
+  " bannercnt should index the line just after the banner
+  let s:netrw_bannercnt= s:netrw_bannercnt + 1
+"  call Decho("bannercnt=".s:netrw_bannercnt)
 
   " generate the requested directory listing
   call LocalBrowseList(dirname)
@@ -2079,18 +2199,20 @@
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
-   if g:netrw_sort_by =~ "^n"
-    call s:SetSort()
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
-   else
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
+   if line("$") >= s:netrw_bannercnt
+    if g:netrw_sort_by =~ "^n"
+     call s:SetSort()
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+    else
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
+    endif
    endif
   endif
   exe s:netrw_bannercnt
 
-  setlocal noma nomod
+  setlocal noma nomod nonu
   if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
 
 "  call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
@@ -2193,14 +2315,14 @@
   let dirname= substitute(a:dirname,'\\','','ge')
   let newdir = a:newdir
 
-  if dirname !~ '/$'
+  if dirname !~ '[\/]$'
    " apparently vim is "recognizing" that it is in the home directory and
    " is removing the "/".  Bad idea, so I have to put it back.
    let dirname= dirname.'/'
 "   call Decho("adjusting dirname<".dirname.">")
   endif
 
-  if newdir !~ '/$'
+  if newdir !~ '[\/]$'
    " handling a file
    let dirname= dirname.newdir
 "   call Decho("handling a file: dirname<".dirname.">")
@@ -2217,7 +2339,7 @@
 
   elseif newdir == '../'
    " go up one directory
-   let dirname= substitute(dirname,'^\(.*/\)\([^/]\+/$\)','\1','e')
+   let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
 "   call Decho("go up one dir: dirname<".dirname.">")
 
   else
@@ -2262,7 +2384,7 @@
    let rmfile= a:path.curword
 "   call Decho("rmfile<".rmfile.">")
 
-   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
+   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
     " attempt to remove file
     if !all
      echohl Statement
@@ -2295,7 +2417,7 @@
       let all= 1
      endif
     endif
-    let rmfile= substitute(rmfile,'/$','','e')
+    let rmfile= substitute(rmfile,'[\/]$','','e')
 
     if all || ok =~ 'y\%[es]' || ok == ""
 "     call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
@@ -2313,9 +2435,11 @@
 	call system("rm ".rmfile)
         if v:shell_error != 0 && !exists("g:netrw_quiet")
          echoerr "unable to remove directory<".rmfile."> -- is it empty?"
+         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 	endif
-       elseif !exist("g:netrw_quiet")s
+       elseif !exists("g:netrw_quiet")
         echoerr "unable to remove directory<".rmfile."> -- is it empty?"
+        call inputsave()|call input("Press <cr> to continue")|call inputrestore()
        endif
       endif
      endif
@@ -2390,11 +2514,13 @@
   if has("quickfix")
    if !isdirectory(a:path)
     exe "pedit ".a:path
-   elseif !exist("g:netrw_quiet")s
+   elseif !exists("g:netrw_quiet")
     echoerr "sorry, cannot preview a directory such as <".a:path.">"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
-  elseif !exist("g:netrw_quiet")s
+  elseif !exists("g:netrw_quiet")
    echoerr "sorry, to preview your vim needs the quickfix feature compiled in"
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   endif
 "  call Dret("LocalPreview")
 endfun
@@ -2406,7 +2532,7 @@
 fun! <SID>NetGetcwd(doesc)
 "  call Dfunc("NetGetcwd(doesc=".a:doesc.")")
   let curdir= substitute(getcwd(),'\\','/','ge')
-  if curdir !~ '/$'
+  if curdir !~ '[\/]$'
    let curdir= curdir.'/'
   endif
   if a:doesc
@@ -2595,6 +2721,7 @@
   else
    if !exists("g:netrw_quiet")
     echoerr "***error*** cannot determine method"
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
    let b:netrw_method  = -1
   endif
@@ -2685,7 +2812,16 @@
   let &gd	= s:gdkeep
   let &tw	= s:twkeep
   if exists("s:swfkeep")
-   let &swf= s:swfkeep
+   if &directory == ""
+    " user hasn't specified a swapfile directory;
+    " netrw will temporarily make the swapfile
+    " directory the current local one.
+    let &directory   = getcwd()
+    silent! let &swf = s:swfkeep
+    set directory=
+   else
+    let &swf= s:swfkeep
+   endif
    unlet s:swfkeep
   endif
   unlet s:aikeep
@@ -2799,6 +2935,12 @@
    endif
 "   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
 
+   " sanity check
+   if s:netrw_bannercnt > line("$")
+    " apparently no files were left after a Hiding pattern was used
+"    call Dret("SetSort : no files left after hiding")
+    return
+   endif
    if seq == '*'
     exe 'keepjumps silent '.s:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
