diff --git a/runtime/plugin/NetrwFileHandlers.vim b/runtime/plugin/NetrwFileHandlers.vim
index addba4e..619115b 100644
--- a/runtime/plugin/NetrwFileHandlers.vim
+++ b/runtime/plugin/NetrwFileHandlers.vim
@@ -1,8 +1,8 @@
 " NetrwFileHandlers: contains various extension-based file handlers for
-"                    netrw's browsers' x command
+"                    netrw's browsers' x command ("eXecute launcher")
 " Author:	Charles E. Campbell, Jr.
-" Date:		Jul 06, 2004
-" Version:	3
+" Date:		Jul 09, 2004
+" Version:	1
 " ---------------------------------------------------------------------
 
 " NetrwFileHandler_html: handles html when the user hits "x" when the
@@ -105,7 +105,7 @@
 endfun
 
 " ---------------------------------------------------------------------
-" NetrwFileHandler_bmp:
+" NetrwFileHandler_bmp: visualize bmp files
 fun! NetrwFileHandler_bmp(bmpfile)
 "  call Dfunc("NetrwFileHandler_bmp(bmpfile<".a:bmpfile.">)")
 
@@ -123,3 +123,84 @@
 endfun
 
 " ---------------------------------------------------------------------
+" NetrwFileHandler_pdf: visualize pdf files
+fun! NetrwFileHandler_pdf(pdf)
+  " call Dfunc("NetrwFileHandler_pdf(pdf<".a:pdf.">)")
+  if executable("gs")
+   exe "silent! !gs ".a:pdf
+  else
+   " call Dret("NetrwFileHandler_pdf 0")
+   return 0
+  endif
+
+  " call Dret("NetrwFileHandler_pdf 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_sxw: visualize sxw files
+fun! NetrwFileHandler_sxw(sxw)
+  " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
+  if executable("gs")
+   exe "silent! !gs ".a:sxw
+  else
+   " call Dret("NetrwFileHandler_sxw 0")
+   return 0
+  endif
+
+  " call Dret("NetrwFileHandler_sxw 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_doc: visualize doc files
+fun! NetrwFileHandler_doc(doc)
+  " call Dfunc("NetrwFileHandler_doc(doc<".a:doc.">)")
+
+  if executable("oowriter")
+   exe "silent! !oowriter ".a:doc
+   redraw!
+  else
+   " call Dret("NetrwFileHandler_doc 0")
+   return 0
+  endif
+
+  " call Dret("NetrwFileHandler_doc 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_sxw: visualize sxw files
+fun! NetrwFileHandler_sxw(sxw)
+  " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
+
+  if executable("oowriter")
+   exe "silent! !oowriter ".a:sxw
+   redraw!
+  else
+   " call Dret("NetrwFileHandler_sxw 0")
+   return 0
+  endif
+
+  " call Dret("NetrwFileHandler_sxw 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwFileHandler_xls: visualize xls files
+fun! NetrwFileHandler_xls(xls)
+  " call Dfunc("NetrwFileHandler_xls(xls<".a:xls.">)")
+
+  if executable("oocalc")
+   exe "silent! !oocalc ".a:xls
+   redraw!
+  else
+   " call Dret("NetrwFileHandler_xls 0")
+   return 0
+  endif
+
+  " call Dret("NetrwFileHandler_xls 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index e6af41b..be6bb41 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:	Jul 08, 2004
+" Last Change:	Jul 26, 2004
 " Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	47l	 ASTRO-ONLY
+" Version:	47m
 " License:	Vim License  (see vim's :help license)
 "
 "  But be doers of the word, and not only hearers, deluding your own selves
@@ -12,7 +12,7 @@
 if exists("loaded_netrw") || &cp
   finish
 endif
-let loaded_netrw    = "v47l	 ASTRO-ONLY"
+let loaded_netrw    = "v47m"
 let s:save_cpo      = &cpo
 let loaded_explorer = 1
 set cpo&vim
@@ -79,7 +79,7 @@
  let g:netrw_longlist= 0
 else
  let g:netrw_longlist= 1
- let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l"
+ let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -lk"
 endif
 if !exists("g:netrw_timefmt")
  let g:netrw_timefmt= "%c"
@@ -100,6 +100,9 @@
 if !exists("g:netrw_mkdir_cmd")
  let g:netrw_mkdir_cmd= "ssh HOSTNAME mkdir"
 endif
+if !exists("g:netrw_hide")
+ let g:netrw_hide= 1
+endif
 
 " BufEnter event ignored by decho when following variable is true
 "  Has a side effect that doau BufReadPost doesn't work, so
@@ -173,7 +176,7 @@
   endif
   au BufReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
   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 "Nwrite "  .expand("<afile>")|call <SID>NetRestorePosn()
+  au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    		exe "silent doau BufWritePre ".expand("<afile>")|exe "Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
  augroup END
 endif
 
@@ -986,6 +989,7 @@
 "   call Dret("NetBrowse 0 : badly formatted dirname")
    return 0
   endif
+
   let method  = substitute(a:dirname,dirpat,'\1','')
   let user    = substitute(a:dirname,dirpat,'\2','')
   let machine = substitute(a:dirname,dirpat,'\3','')
@@ -1061,13 +1065,14 @@
   endif
   setlocal ts=32 bt=nofile bh=wipe nobl
   exe 'file '.escape(bufname,' ')
+"  call Decho("renaming file to bufname<".bufname.">")
   setlocal bt=nowrite bh=hide nobl
   nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr>
   nnoremap <buffer> <silent> <c-l>	:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
-  nnoremap <buffer> <silent> a		:let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
-  nnoremap <buffer> <silent> <Leader>H	:call <SID>NetHideEdit(0)<cr>
-  nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
+  nnoremap <buffer> <silent> a		:let g:netrw_hide=!g:netrw_hide<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
+  nnoremap <buffer> <silent> <Leader>h	:call <SID>NetHideEdit(0)<cr>
+  nnoremap <buffer> <silent> i		:call <SID>NetSavePosn()<bar>call <SID>NetLongList(0)<bar>call <SID>NetRestorePosn()<cr>
   nnoremap <buffer> <silent> o		:exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<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("%"),<SID>NetGetDir()))<cr>
   nnoremap <buffer> <silent> s		: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("%"),'./'))<cr>
@@ -1079,7 +1084,8 @@
   exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
-  exe 'nnoremap <buffer> <silent> <Leader>M :call <SID>NetMakeDir("'.user.machine.'")<cr>'
+  exe 'vnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
+  exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("'.user.machine.'")<cr>'
   nnoremap <buffer> ?			:he netrw-browse-cmds<cr>
   setlocal ma
 
@@ -1098,7 +1104,7 @@
    " sorted by size or date
    keepjumps put ='\"   Sorted by '.g:netrw_sort_by
   endif
-  if g:netrw_list_hide != "" && !exists("g:netrw_list_showall")
+  if g:netrw_list_hide != "" && g:netrw_hide
    keepjumps put ='\"   Hiding: '.g:netrw_list_hide
    let g:netrw_bannercnt= g:netrw_bannercnt + 1
   endif
@@ -1111,18 +1117,14 @@
   " manipulate the directory listing (hide, sort)
   setlocal ft=netrwlist
   if line("$") >= g:netrw_bannercnt
-   if !exists("g:netrw_list_showall")
-    if g:netrw_list_hide != ""
-     call s:NetrwListHide()
-    endif
-   else
-    unlet g:netrw_list_showall
+   if g:netrw_hide && g:netrw_list_hide != ""
+    call s:NetrwListHide()
    endif
    if g:netrw_longlist
     " do a long listing; these substitutions need to be done prior to sorting
     keepjumps silent /^total\s*\d\+$/d
     exe 'keepjumps silent '.g:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'keepjumps silent '.g:netrw_bannercnt.',$s/\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\)\s\+\(\S\+\)$/\2\t\1/e'
+    exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
     exe g:netrw_bannercnt
    endif
    if g:netrw_sort_by =~ "^n"
@@ -1130,10 +1132,10 @@
     exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()'
     exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e'
    endif
-  endif
-  let prvbuf= bufnr(bufname)
-  if prvbuf != -1
-   exe "silent! b ".prvbuf
+   if g:netrw_longlist
+    " shorten the list to keep its width <= 80 characters
+    exe "keepjumps silent ".g:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+   endif
   endif
 
   setlocal noma nomod
@@ -1188,7 +1190,7 @@
 " ---------------------------------------------------------------------
 "  NetGetDir: it gets the directory named under the cursor
 fun! <SID>NetGetDir()
-"  call Dfunc("NetGetDir()")
+"  call Dfunc("NetGetDir() line#".line("."))
   let dirname= getline(".")
   if dirname =~ '\t'
    let dirname= substitute(dirname,'\t.*$','','e')
@@ -1211,7 +1213,7 @@
    exe ctr
 
    norm! 0
-   let rmfile= a:path.expand("<cWORD>")
+   let rmfile= a:path.s:NetGetDir()
 "   call Decho("rmfile<".rmfile.">")
 
    if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
@@ -1265,7 +1267,7 @@
 
 " ---------------------------------------------------------------------
 " NetBrowseRename: rename a remote file or directory {{{2
-fun! <SID>NetBrowseRename(usrhost,path)
+fun! <SID>NetBrowseRename(usrhost,path) range
 "  call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
 
   " preparation for removing multiple files/directories
@@ -1277,7 +1279,7 @@
    exe "keepjumps ".ctr
 
    norm! 0
-   let oldname= a:path.expand("<cWORD>")
+   let oldname= a:path.s:NetGetDir()
 "   call Decho("oldname<".oldname.">")
 
    call inputsave()
@@ -1426,6 +1428,7 @@
 "   call Dret("NetMakeDir : user aborted with bare <cr>")
    return
   endif
+  let newdirname= escape(newdirname,' ')
 
   if a:usrhost == ""
 
@@ -1485,8 +1488,8 @@
   " one can no longer enter the DBG buffer.
 "  call Dfunc("LocalBrowse(dirname<".a:dirname.">)")
 
-  exe 'cd '.escape(a:dirname,' ')
-  let dirname= getcwd()."/"
+  exe 'cd '.escape(substitute(a:dirname,'\\','/','ge'),' ')
+  let dirname= substitute(getcwd(),'\\','/','ge')."/"
 "  call Decho("dirname<".dirname.">")
 
   " make this buffer modifiable
@@ -1502,64 +1505,84 @@
    let dirnamenr= bufnr(substitute(dirname,'/$','','e'))
   endif
 "  call Decho("bufnr(dirname<".dirname.">)=".dirnamenr)
+" call Dredir("file")
 
   if dirnamenr != -1 && bufexists(dirname)
    " buffer already exists (hidden), so switch to it!
+" call Dredir("file")
    exe "b ".dirnamenr
-   exe 'cd '.escape(dirname,' ')
+" call Dredir("file")
+   exe 'cd '.escape(substitute(a:dirname,'\\','/','ge'),' ')
+" call Dredir("file")
 "   call Decho("changed directory to<".dirname.">")
+" call Dredir("file")
    if a:dirname != "." && line("$") >= 5
 "    call Dret("LocalBrowse : buffer already exists with info")
     return
    endif
+" call Dredir("file")
 "   call Decho("buffer already exists, but needs listing (buf#".dirnamenr.")")
    keepjumps %d
+" call Dredir("file")
+   if expand("%:p") != escape(dirname,' ')
+    exe 'silent! file '.escape(dirname,' ')
+"    call Decho("renamed file to<".escape(dirname,' ').">")
+   endif
+" call Dredir("file")
   else
 "   call Dredir("ls!")
-"   call Decho("generate new buffer named<".dirname.">")
+"   call Decho("generate new buffer named<".escape(dirname,' ').">")
    silent! enew!
    exe 'silent! file '.escape(dirname,' ')
+"   call Decho("renamed file to<".escape(dirname,' ').">")
   endif
   " set standard browser options on buffer
   setlocal ts=32 bt=nowrite bh=hide nobl
 
   " set up all the maps
-  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
-  nnoremap <buffer> <silent> <c-l>	:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr>
-  nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'../'))<cr>
-  nnoremap <buffer> <silent> a		:let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr>
-  nnoremap <buffer> <silent> <Leader>H	:call <SID>NetHideEdit(1)<cr>
-  nnoremap <buffer> <silent> <Leader>M	:call <SID>NetMakeDir("")<cr>
+"  call Decho("Setting up local browser maps")
+  nnoremap <buffer> <silent> <cr>	:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),<SID>NetGetDir()))<cr>
+  nnoremap <buffer> <silent> <c-l>	:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),'./'))<cr>
+  nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),'../'))<cr>
+  nnoremap <buffer> <silent> a		:let g:netrw_hide=!g:netrw_hide<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),'./'))<cr>
+  nnoremap <buffer> <silent> <Leader>h	:call <SID>NetHideEdit(1)<cr>
+  nnoremap <buffer> <silent> <Leader>m	:call <SID>NetMakeDir("")<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(1)<cr>
-  nnoremap <buffer> <silent> o		:exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
-  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(expand("%:p"),<SID>NetGetDir()))<cr>
-  nnoremap <buffer> <silent> s		: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(expand("%:p"),'./'))<cr>
-  nnoremap <buffer> <silent> v		:exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
-  nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()),0)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr>
-  exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
-  exe 'vnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
-  exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
-  exe 'vnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>'
-  exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.expand("%:p").<SID>NetGetDir().'")<cr>'
+  nnoremap <buffer> <silent> o		:exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),<SID>NetGetDir()))<cr>
+  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(getcwd(),<SID>NetGetDir()))<cr>
+  nnoremap <buffer> <silent> s		: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(getcwd(),'./'))<cr>
+  nnoremap <buffer> <silent> v		:exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),<SID>NetGetDir()))<cr>
+  nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(getcwd(),<SID>NetGetDir()),0)<cr>
+  nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(getcwd(),<SID>NetGetDir()))<cr>
+  exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.getcwd().'/")<cr>'
+  exe 'vnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.getcwd().'/")<cr>'
+  exe 'nnoremap <buffer> <silent> D	:exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.getcwd().'/")<cr>'
+  exe 'vnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.getcwd().'/")<cr>'
+  exe 'nnoremap <buffer> <silent> R	:exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.getcwd().'/")<cr>'
+  exe 'vnoremap <buffer> <silent> R	:call <SID>LocalBrowseRename("'.getcwd().'/")<cr>'
+  exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
   nnoremap <buffer> ?			:he netrw-dir<cr>
 
   " Set up the banner
+"  call Decho("set up banner")
   keepjumps put ='\" ================='
   keepjumps 1d
   keepjumps put ='\" Directory Listing'
   keepjumps put ='\"   '.dirname
   let g:netrw_bannercnt= 6
+
   if g:netrw_sort_by =~ "^n"
+"   call Decho("directories will be sorted by name")
    " sorted by name
    let g:netrw_bannercnt= g:netrw_bannercnt + 1
    keepjumps put ='\"   Sorted by      '.g:netrw_sort_by
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
   else
+"   call Decho("directories will be sorted by size or date")
    " sorted by size or date
    keepjumps put ='\"   Sorted by '.g:netrw_sort_by
   endif
-  if g:netrw_list_hide != "" && !exists("g:netrw_list_showall")
+  if g:netrw_list_hide != "" && g:netrw_hide
    keepjumps put ='\"   Hiding: '.g:netrw_list_hide
    let g:netrw_bannercnt= g:netrw_bannercnt + 1
   endif
@@ -1571,12 +1594,8 @@
   " manipulate the directory listing (hide, sort)
   setlocal ft=netrwlist
   if line("$") >= g:netrw_bannercnt
-   if !exists("g:netrw_list_showall")
-    if g:netrw_list_hide != ""
-     call s:NetrwListHide()
-    endif
-   else
-    unlet g:netrw_list_showall
+   if g:netrw_hide && g:netrw_list_hide != ""
+    call s:NetrwListHide()
    endif
    if g:netrw_sort_by =~ "^n"
     call s:SetSort()
@@ -1588,16 +1607,10 @@
    endif
   endif
   exe g:netrw_bannercnt
-  try
-   exe 'cd '.escape(substitute(dirname,'/$','','e'),' ')
-"   call Decho("changed directory to<".dirname.">")
-  catch
-   echoerr "Not a directory: <".dirname.">"
-  endtry
 
   setlocal noma nomod
 
-"  call Dret("LocalBrowse")
+"  call Dret("LocalBrowse : file<".expand("%:p").">")
 endfun
 
 " ---------------------------------------------------------------------
@@ -1623,7 +1636,9 @@
    endif
    let pfile= strpart(pfile,dirnamelen)
    if g:netrw_longlist
-    let pfile= pfile."\t".getfsize(file)."\t".strftime(g:netrw_timefmt,getftime(file))
+    let sz   = getfsize(file)
+    let fsz  = strpart("               ",1,15-strlen(sz)).sz
+    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(file))
    endif
    if     g:netrw_sort_by =~ "^t"
     " sort by time (handles time up to 1 quintillion seconds, US)
@@ -1655,7 +1670,7 @@
 fun! <SID>LocalBrowseChgDir(dirname,newdir)
 "  call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
 
-  let dirname= a:dirname
+  let dirname= substitute(a:dirname,'\\','/','ge')
   let newdir = a:newdir
 
   if dirname !~ '/$'
@@ -1706,7 +1721,7 @@
    exe ctr
 
    norm! 0
-   let rmfile= a:path.expand("<cWORD>")
+   let rmfile= a:path.s:NetGetDir()
 "   call Decho("rmfile<".rmfile.">")
 
    if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$')
@@ -1724,7 +1739,7 @@
     call inputsave()
     let ok= input("Confirm deletion of directory<".rmfile."> ","y")
     call inputrestore()
-    let rmfile= substitute(rmfile,'/$','','e')
+    let rmfile= escape(substitute(rmfile,'/$','','e'),' ')
 
     if ok == "y"
      call system(g:netrw_local_rmdir." ".rmfile)
@@ -1764,7 +1779,7 @@
 
 " ---------------------------------------------------------------------
 " LocalBrowseRename: rename a remote file or directory {{{2
-fun! <SID>LocalBrowseRename(path)
+fun! <SID>LocalBrowseRename(path) range
 "  call Dfunc("LocalBrowseRename(path<".a:path.">)")
 
   " preparation for removing multiple files/directories
@@ -1775,7 +1790,7 @@
    exe "keepjumps ".ctr
 
    norm! 0
-   let oldname= a:path.expand("<cWORD>")
+   let oldname= a:path.s:NetGetDir()
 "   call Decho("oldname<".oldname.">")
 
    call inputsave()
@@ -1790,6 +1805,7 @@
 
   " refresh the directory
   let curline= line(".")
+"  call Decho("refresh the directory listing")
   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),'./'))
   exe "keepjumps ".curline
 "  call Dret("LocalBrowseRename")
