updated for version 7.0113
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index 0653aab..f1da4b0 100644
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1839,12 +1839,8 @@
 "    call Dret("NetMakeDir : file<".newdirname."> exists previously")
     return
    endif
-   let netrw_origdir= s:NetGetcwd(1)
-   exe 'cd '.b:netrw_curdir
-"   call Decho("netrw_origdir<".netrw_origdir."> b:netrw_curdir<".b:netrw_curdir.">")
-"   call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
-   exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
-   if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
+"   call Decho("exe silent! !".g:netrw_local_mkdir.' "'.fullnewdir.'"')
+   exe "silent! !".g:netrw_local_mkdir.' "'.fullnewdir.'"'
 
    if v:shell_error == 0
     " refresh listing
@@ -2008,12 +2004,22 @@
 
   " record and change current directory
   let netrw_origdir= s:NetGetcwd(1)
+  try
+    cd -
+    let netrw_altdir= s:NetGetcwd(1)
+    cd -
+  catch
+    let netrw_altdir= ''
+  endtry
   exe 'cd '.escape(substitute(a:dirname,'\\','/','ge'),s:netrw_cd_escape)
 "  call Decho("dirname<".a:dirname."> buf#".bufnr("%")." winnr=".winnr())
 
   " make this buffer modifiable
   setlocal ma
 
+  " disable 'autochdir', it breaks things
+  set noautochdir
+
   " ---------------------------
   "  Perform Directory Listing:
 "  call Decho("Perform directory listing...")
@@ -2044,7 +2050,12 @@
    if a:dirname != "." && line("$") >= 5 && exists("b:netrw_curdir")
     if b:netrw_curdir == dirname
 "     call Dret("LocalBrowse : buffer already exists with info, #".dirnamenr)
-     if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
+     if g:netrw_keepdir
+       if netrw_altdir != ''
+	 exe 'keepjumps cd '.netrw_altdir
+       endif
+       exe 'keepjumps cd '.netrw_origdir
+     endif
      return
     endif
    endif
@@ -2056,7 +2067,6 @@
    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)
 "    call Decho("errmsg1<".v:errmsg.">")
 "    call Decho("renamed buffer to<".escape(dirname,s:netrw_cd_escape).">")
@@ -2067,12 +2077,13 @@
    silent! enew!
    " set standard browser options on buffer
    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("errmsg2<".v:errmsg.">")
 "   call Decho("renamed buffer to<".substitute(escape(dirname,s:netrw_cd_escape),'[\/]$','','e').">")
 "   call Decho("yielding actual bufname<".bufname("%").">")
   endif
+  exe "setlocal ts=".g:netrw_maxfilenamelen
+
   if bufname("#") == "" && bufnr("#") != -1
    " the file command produces a lot of [No File] buffers
 "   call Decho("wiping out nofile buffer#".bufnr("#"))
@@ -2182,7 +2193,12 @@
   exe s:netrw_bannercnt
 
   setlocal noma nomod nonu
-  if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
+  if g:netrw_keepdir
+    if netrw_altdir != ''
+      exe 'keepjumps cd '.netrw_altdir
+    endif
+    exe 'keepjumps cd '.netrw_origdir
+  endif
 
 "  call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
 endfun
@@ -2330,8 +2346,6 @@
   " preparation for removing multiple files/directories
   let ctr           = a:firstline
   let ret           = 0
-  let netrw_origdir = s:NetGetcwd(1)
-  exe 'cd '.b:netrw_curdir
   let all= 0
 
   " remove multiple files and directories
@@ -2423,7 +2437,6 @@
 
   " refresh the directory
   let curline= line(".")
-  if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
 "  call Decho("refresh the directory")
   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))
   exe curline