updated for version 7.0150
diff --git a/runtime/autoload/csscomplete.vim b/runtime/autoload/csscomplete.vim
index 8ac3600..9461f39 100644
--- a/runtime/autoload/csscomplete.vim
+++ b/runtime/autoload/csscomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	CSS 2.1
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 23
 
 function! csscomplete#CompleteCSS(findstart, base)
 if a:findstart
@@ -18,6 +18,8 @@
 	" 3. if } we are outside of css definitions
 	" 4. for comments ignoring is be the easiest but assume they are the same
 	"    as 1. 
+	" 5. if @ complete at-rule
+	" 6. if ! complete important
 	
 	let line = a:base
 	let res = []
@@ -26,14 +28,16 @@
 
 	" We need the last occurrence of char so reverse line
 	let revline = join(reverse(split(line, '.\zs')), '')
+
 	let openbrace  = stridx(revline, '{')
 	let closebrace = stridx(revline, '}')
-	let colon       = stridx(revline, ':')
-	let semicolon   = stridx(revline, ';')
-	let opencomm    = stridx(revline, '*/') " Line was reversed
-	let closecomm   = stridx(revline, '/*') " Line was reversed
-	let style       = stridx(revline, '=\s*elyts') " Line was reversed
-	let atrule      = stridx(revline, '@')
+	let colon      = stridx(revline, ':')
+	let semicolon  = stridx(revline, ';')
+	let opencomm   = stridx(revline, '*/') " Line was reversed
+	let closecomm  = stridx(revline, '/*') " Line was reversed
+	let style      = stridx(revline, '=\s*elyts') " Line was reversed
+	let atrule     = stridx(revline, '@')
+	let exclam     = stridx(revline, '!')
 
 	if openbrace > -1
 		let borders[openbrace] = "openbrace"
@@ -59,6 +63,9 @@
 	if atrule > -1
 		let borders[atrule] = "atrule"
 	endif
+	if exclam > -1
+		let borders[exclam] = "exclam"
+	endif
 
 	if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
 		" Complete properties
@@ -318,6 +325,22 @@
 
 		return []
 
+	elseif borders[min(keys(borders))] == 'exclam'
+
+		" Complete values
+		let impbase = matchstr(line, '.\{-}!\s*\ze[a-zA-Z ]*$')
+		let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
+
+		let values = ["important"]
+
+		for m in values
+			if m =~? '^'.entered_imp
+				call add(res, impbase . m)
+			endif
+		endfor
+
+		return res
+
 	elseif borders[min(keys(borders))] == 'atrule'
 
 		let afterat = matchstr(line, '.*@\zs.*')
@@ -368,7 +391,7 @@
 
 		endif
 
-		let values = ["charset", "page", "media", "import"]
+		let values = ["charset", "page", "media", "import", "font-face"]
 
 		let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
 		let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index ab50952..9dd5830 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	XHTML 1.0 Strict
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 23
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -66,8 +66,13 @@
 		" it possible?
 		" Also retrieving class names from current file and linked
 		" stylesheets.
-		if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
-			if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+		if a:base =~ "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
+			if a:base =~ "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+				if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "class"
+				elseif a:base =~ "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "id"
+				endif
 				" Handle class name completion
 				" 1. Find lines of <link stylesheet>
 				" 1a. Check file for @import
@@ -76,9 +81,22 @@
 				let head = getline(search('<head\>'), search('<\/head>'))
 				let headjoined = join(copy(head), ' ')
 				if headjoined =~ '<style'
-					let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
-					let styleheadlines = split(stylehead)
-					let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g')
+					if search_for == 'class'
+						let styleheadlines = split(stylehead)
+						let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					else
+						let stylesheet = split(headjoined, '[{}]')
+						" Get all lines which fit id syntax
+						let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+						" Filter out possible color definitions
+						call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+						" Filter out complex border definitions
+						call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+						let templines = join(classlines, ' ')
+						let headclasslines = split(templines)
+						call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+					endif
 					let internal = 1
 				else
 					let internal = 0
@@ -93,13 +111,15 @@
 						let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
 					endif
 				endfor
-				for file in filestable
+				for file in styletable
 					if filereadable(file)
 						let stylesheet = readfile(file)
 						let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
 						if len(secimport) > 0
 							for line in secimport
-								let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
+								let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")
+								let secfile = fnamemodify(file, ":p:h").'/'.secfile
+								let secimportfiles += [secfile]
 							endfor
 						endif
 					endif
@@ -109,10 +129,24 @@
 				for file in cssfiles
 					if filereadable(file)
 						let stylesheet = readfile(file)
-						let stylefile = join(stylesheet)
-						let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
-						let stylesheet = split(stylefile)
-						let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						let stylefile = join(stylesheet, ' ')
+						let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g')
+						if search_for == 'class'
+							let stylesheet = split(stylefile)
+							let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						else
+							let stylesheet = split(stylefile, '[{}]')
+							" Get all lines which fit id syntax
+							let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+							" Filter out possible color definitions
+							call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+							" Filter out complex border definitions
+							call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+							let templines = join(classlines, ' ')
+							let stylelines = split(templines)
+							let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+
+						endif
 					endif
 					" We gathered classes definitions from all external files
 					let classes += classlines
@@ -120,43 +154,71 @@
 				if internal == 1
 					let classes += headclasslines
 				endif
-				let elements = {}
-				for element in classes
-					if element =~ '^\.'
-						let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let class = substitute(class, ':.*', '', '')
-						if has_key(elements, "common")
-							let elements["common"] .= " ".class
-						else
-							let elements["common"] = class
-						endif
-					else
-						let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
-						if tagname != ''
-							if has_key(elements, tagname)
-								let elements[tagname] .= " ".class
+
+				if search_for == 'class'
+					let elements = {}
+					for element in classes
+						if element =~ '^\.'
+							let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let class = substitute(class, ':.*', '', '')
+							if has_key(elements, 'common')
+								let elements['common'] .= ' '.class
 							else
-								let elements[tagname] = class
+								let elements['common'] = class
+							endif
+						else
+							let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
+							if tagname != ''
+								if has_key(elements, tagname)
+									let elements[tagname] .= ' '.class
+								else
+									let elements[tagname] = class
+								endif
 							endif
 						endif
-					endif
-				endfor
+					endfor
 
-				if has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements[tag]." ".elements["common"])
-				elseif has_key(elements, tag) && !has_key(elements, "common")
-					let values = split(elements[tag])
-				elseif !has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements["common"])
-				else
-					return []
+					if has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements[tag]." ".elements['common'])
+					elseif has_key(elements, tag) && !has_key(elements, 'common')
+						let values = split(elements[tag])
+					elseif !has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements['common'])
+					else
+						return []
+					endif
+
+				elseif search_for == 'id'
+					" Find used IDs
+					" 1. Catch whole file
+					let filelines = getline(1, line('$'))
+					" 2. Find lines with possible id
+					let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"')
+					" 3a. Join all filtered lines 
+					let id_string = join(used_id_lines, ' ')
+					" 3b. And split them to be sure each id is in separate item
+					let id_list = split(id_string, 'id\s*=\s*')
+					" 4. Extract id values
+					let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")')
+					let joined_used_id = ','.join(used_id, ',').','
+
+					let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")')
+
+					let values = []
+
+					for element in classes
+						if joined_used_id !~ ','.element.','
+							let values += [element]
+						endif
+
+					endfor
+
 				endif
 
 				" We need special version of sbase
 				let classbase = matchstr(a:base, ".*[\"']")
-			    let classquote = matchstr(classbase, '.$')
-
+				let classquote = matchstr(classbase, '.$')
 
 				let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
 
@@ -229,6 +291,10 @@
 					let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
 				elseif a:base =~ '^button'
 					let values = ["button", "submit", "reset"]
+				elseif a:base =~ '^style'
+					let values = ["text/css"]
+				elseif a:base =~ '^script'
+					let values = ["text/javascript"]
 				endif
 			else
 				return []
@@ -313,11 +379,11 @@
 		elseif tag == 'q'
 			let attrs = coreattrs + ["cite"]
 		elseif tag == 'script'
-			let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
+			let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"]
 		elseif tag == 'select'
 			let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
 		elseif tag == 'style'
-			let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
+			let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"]
 		elseif tag == 'table'
 			let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
 		elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index c7434af..10dd285 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,6 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            AUTOLOAD PORTION
-" Date:		Sep 12, 2005
-" Version:	70
+" Last Change:	Aug 29, 2005
 " 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
@@ -17,19 +16,13 @@
 "  But be doers of the Word, and not only hearers, deluding your own selves {{{1
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-" Exception for &cp: {{{1
-if &cp
-  finish
-endif
+let s:keepcpo= &cpo
+set cpo&vim
+" call Decho("doing autoload/netrw.vim")
 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
 endif
-let g:loaded_netrw = "v70"
-let s:keepcpo      = &cpo
-set cpo&vim
-" call Decho("doing autoload/netrw.vim")
 
 " ---------------------------------------------------------------------
 " Default values for global netrw variables {{{1
@@ -1133,7 +1126,7 @@
 "   call Decho("new path<".path.">")
 
    " remote-read the requested file into current buffer
-   keepjumps keepalt enew!
+   enew!
    set ma
 "   call Decho("exe file .method."://".user.machine."/".escape(path,s:netrw_cd_escape))
    exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
@@ -1143,7 +1136,7 @@
    keepjumps 1d
 
    " save certain window-oriented variables into buffer-oriented variables
-   call s:SetBufWinVars()
+   call s:BufWinVars()
    call s:NetOptionRestore()
    setlocal nomod
 
@@ -1169,7 +1162,7 @@
    endif
   else
 "   call Decho("generate a new buffer")
-   keepjumps keepalt enew!
+   enew!
   endif
 
   " rename file to reflect where its from
@@ -1207,7 +1200,7 @@
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:call <SID>NetSplit(1)<cr>
   nnoremap <buffer> <silent> x		:call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> <2-leftmouse> :call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
   exe 'nnoremap <buffer> <silent> d	:call <SID>NetMakeDir("'.user.machine.'")<cr>'
@@ -1267,7 +1260,6 @@
     if g:netrw_ftp_browse_reject != ""
      exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
     endif
-    silent! keepjumps %s/\r$//e
 
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
@@ -1282,9 +1274,9 @@
     keepjumps norm! 0
 
     " more cleanup
-    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-    exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-    exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+    exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
    endif
 
   else
@@ -1341,33 +1333,33 @@
     keepjumps norm! 0
     endif
 
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe w:netrw_bannercnt
    endif
 
    if line("$") >= w:netrw_bannercnt
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
      if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
     endif
     if w:netrw_longlist == 1
      " shorten the list to keep its width <= winwidth characters
-     exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+     exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
     endif
    endif
   endif
 
+  " cleanup any windows mess at end-of-line
+  keepjumps silent! %s/\r$//e
   call s:NetrwWideListing()
   if line("$") >= w:netrw_bannercnt
-   " place cursor on the top-left corner of the file listing
    exe "keepjumps ".w:netrw_bannercnt
-   norm! 0
   endif
 
   call s:NetOptionRestore()
@@ -1457,7 +1449,7 @@
     let s:netrw_skipbrowse= 1
     echo 'Pressing "a" also works'
    elseif line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe w:netrw_bannercnt
    endif
 
   elseif w:netrw_longlist == 0
@@ -1698,7 +1690,7 @@
    " create a local copy
    let fname= tempname().".".exten
 "   call Decho("create a local copy of <".a:fname."> as <".fname.">")
-   exe "silent keepjumps bot 1new ".a:fname
+   exe "keepjumps silent bot 1new ".a:fname
    set bh=delete
    exe "w! ".fname
    q
@@ -1823,14 +1815,14 @@
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
-   silent! keepjumps! %s/\r$//e
+   keepjumps silent!! %s/\r$//e
   endif
   if a:cmd == "dir"
    " infer directory/link based on the file permission string
-   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
-   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
+   keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@
+   keepjumps silent! g/l\%([-r][-w][-x]\)\{3}/s/$/@/
    if w:netrw_longlist == 0 || w:netrw_longlist == 2
-    exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
+    exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
    endif
   endif
 
@@ -1868,9 +1860,9 @@
    " Prune the list by hiding any files which match
 "   call Decho("pruning <".hide."> listhide<".listhide.">")
    if g:netrw_hide == 1
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
    elseif g:netrw_hide == 2
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
    endif
   endwhile
 
@@ -2004,7 +1996,7 @@
      exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
     endif
     exe "silent keepjumps ".newcolstart.','.newcolend.'d'
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe w:netrw_bannercnt
    endwhile
    exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
    set noma nomod
@@ -2138,7 +2130,7 @@
   if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
    " looks like a "b" was pressed while in the banner region
    if line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe w:netrw_bannercnt
    endif
    echo ""
 "  call Dret("NetBookmarkDir - ignoring")
@@ -2237,10 +2229,12 @@
 " ---------------------------------------------------------------------
 " NetObtain: obtain file under cursor (for remote browsing support) {{{2
 fun! s:NetObtain()
+  if !exists("s:netrw_users_stl")
+   let s:netrw_users_stl= &stl
+  endif
   let fname= expand("<cWORD>")
-
-  " NetrwStatusLine support - for obtaining support
-  call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
+  exe 'set stl=%f\ %h%m%r%=Obtaining\ '.escape(fname,' ')
+  redraw!
 
 "  call Dfunc("NetObtain() method=".w:netrw_method)
   if exists("w:netrw_method") && w:netrw_method =~ '[235]'
@@ -2318,8 +2312,6 @@
      echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
-    let &stl        = s:netrw_users_stl
-    let &laststatus = s:netrw_users_ls
 "    call Dret("NetObtain")
     return
    endif
@@ -2343,8 +2335,7 @@
   endif
 
   " restore status line
-  let &stl        = s:netrw_users_stl
-  let &laststatus = s:netrw_users_ls
+  let &stl= s:netrw_users_stl
   redraw!
 
 "  call Dret("NetObtain")
@@ -2413,7 +2404,7 @@
 
   " get cleared buffer
   if bufnum < 0 || !bufexists(bufnum)
-   keepjumps keepalt enew!
+   keepalt enew!
 "   call Decho("enew buffer")
   else
    exe "keepalt b ".bufnum
@@ -2505,7 +2496,7 @@
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
   nnoremap <buffer> <silent> v		:call <SID>NetSplit(3)<cr>
   nnoremap <buffer> <silent> x		:call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
-  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> <2-leftmouse> :exe "call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))"<cr>
   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
   nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
   exe 'nnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
@@ -2583,19 +2574,19 @@
      call s:SetSort()
 
      if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
 
     else
      if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
 
    endif
@@ -2603,16 +2594,14 @@
 
   call s:NetrwWideListing()
   if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
-   " place cursor on the top-left corner of the file listing
-   exe 'silent '.w:netrw_bannercnt
-   norm! 0
+   exe w:netrw_bannercnt
   endif
 
   " record previous current directory
   let w:netrw_prvdir= b:netrw_curdir
 
   " save certain window-oriented variables into buffer-oriented variables
-  call s:SetBufWinVars()
+  call s:BufWinVars()
   call s:NetOptionRestore()
   setlocal noma nomod nonu bh=hide nobl
 
@@ -2712,7 +2701,7 @@
   endwhile
   
   " cleanup any windows mess at end-of-line
-  silent! keepjumps %s/\r$//e
+  keepjumps silent! %s/\r$//e
   setlocal ts=32
 
 "  call Dret("LocalBrowseList")
@@ -3043,8 +3032,12 @@
      endif
     endif
 
-    " NetrwStatusLine support - for exploring support
+    " NetrwStatusLine support
     let w:netrw_explore_indx= indx
+    if !exists("s:netrw_users_stl")
+     let s:netrw_users_stl= &stl
+    endif
+    set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
 "    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
     " sanity check
@@ -3057,21 +3050,15 @@
     endif
 
     exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+"    call Decho("dirfile<".dirfile."> indx=".indx)
     let newdir= substitute(dirfile,'/[^/]*$','','e')
 "    call Decho("newdir<".newdir.">")
-
 "    call Decho("calling LocalBrowse(newdir<".newdir.">)")
     call s:LocalBrowse(newdir)
-    if w:netrw_longlist == 0 || w:netrw_longlist == 1
-     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
-    endif
+    call search(substitute(dirfile,"^.*/","",""),"W")
     let w:netrw_explore_mtchcnt = indx + 1
     let w:netrw_explore_bufnr   = bufnr(".")
     let w:netrw_explore_line    = line(".")
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
 "    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
    else
@@ -3091,73 +3078,12 @@
 endfun
 
 " ---------------------------------------------------------------------
-" SetupNetrwStatusLine: {{{2
-fun! s:SetupNetrwStatusLine(statline)
-"  call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
-
-  if !exists("s:netrw_setup_statline")
-   let s:netrw_setup_statline= 1
-"   call Decho("do first-time status line setup")
-
-   if !exists("s:netrw_users_stl")
-    let s:netrw_users_stl= &stl
-   endif
-   if !exists("s:netrw_users_ls")
-    let s:netrw_users_ls= &laststatus
-   endif
-
-   " set up User9 highlighting as needed
-   let keepa= @a
-   redir @a
-   try
-    hi User9
-   catch /^Vim\%((\a\+)\)\=:E411/
-    if &bg == "dark"
-     hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
-    else
-     hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
-    endif
-   endtry
-   redir END
-   let @a= keepa
-  endif
-
-  " set up status line (may use User9 highlighting)
-  " insure that windows have a statusline
-  " make sure statusline is displayed
-  let &stl=a:statline
-  set laststatus=2
-"  call Decho("stl=".&stl)
-  redraw!
-
-"  call Dret("SetupNetrwStatusLine : stl=".&stl)
-endfun
-
-" ---------------------------------------------------------------------
 " NetrwStatusLine: {{{2
 fun! NetrwStatusLine()
-
-  " vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr(".")
-"   let g:stlmsg="explore_bufnr!=".bufnr(".")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-  " ^^^ NetrwStatusLine() debugging ^^^
-
+"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
   if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
    " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
+   let &stl= s:netrw_users_stl
    if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
    if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
    return ""
@@ -3410,12 +3336,6 @@
 "  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
   let g:netrw_passwd=a:2
  endif
-
- " surround password with double-quotes if it contains embedded blanks
- if g:netrw_passwd !~ '^"' && g:netrw_passwd =~ ' '
-  let g:netrw_passwd= '"'.g:netrw_passwd.'"'
- endif
-
 "  call Dret("NetUserPass")
 endfun
 
@@ -3472,21 +3392,22 @@
   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
+  let &ai	= w:aikeep
+  if has("netbeans_intg") || has("sun_workshop")
+   let &acd     = w:acdkeep
   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:gdkeep")  |let &gd     = w:gdkeep  |unlet w:gdkeep  |endif
-  if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
-  if exists("w:twkeep")  |let &tw     = w:twkeep  |unlet w:twkeep  |endif
+  let &cin	= w:cinkeep
+  let &cino	= w:cinokeep
+  let &com	= w:comkeep
+  let &cpo	= w:cpokeep
+  if exists("w:dirkeep")
+   exe "lcd ".w:dirkeep
+  endif
+  let &gd	= w:gdkeep
+  let &report   = w:repkeep
+  let &tw	= w:twkeep
   if exists("w:swfkeep")
-   if &directory == "" && exists("w:swfkeep")
+   if &directory == ""
     " user hasn't specified a swapfile directory;
     " netrw will temporarily make the swapfile
     " directory the current local one.
@@ -3498,6 +3419,17 @@
    endif
    unlet w:swfkeep
   endif
+  unlet w:aikeep
+  unlet w:cinkeep
+  unlet w:cinokeep
+  unlet w:comkeep
+  unlet w:cpokeep
+  unlet w:gdkeep
+  unlet w:repkeep
+  unlet w:twkeep
+  if exists("w:dirkeep")
+   unlet w:dirkeep
+  endif
  
 "  call Dret("NetOptionRestore")
 endfun
@@ -3509,7 +3441,7 @@
 "               example and as a fix for a Windows 95 problem: in my
 "               experience, win95's ftp always dumped four blank lines
 "               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
+if has("win95") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
 "   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
    if method == 3   " ftp (no <.netrc>)
@@ -3610,14 +3542,14 @@
     return
    endif
    if seq == '*'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
    endif
    let priority = priority + 1
   endwhile
 
-  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
+  exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
 
 "  call Dret("SetSort")
 endfun
@@ -3655,14 +3587,14 @@
 endfun
 
 " ---------------------------------------------------------------------
-" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
+" BufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
 "   To allow separate windows to have their own activities, such as
 "   Explore **/pattern, several variables have been made window-oriented.
 "   However, when the user splits a browser window (ex: ctrl-w s), these
-"   variables are not inherited by the new window.  SetBufWinVars() and
+"   variables are not inherited by the new window.  BufWinVars() and
 "   UseBufWinVars() get around that.
-fun! s:SetBufWinVars()
-"  call Dfunc("SetBufWinVars()")
+fun! s:BufWinVars()
+"  call Dfunc("BufWinVars()")
   if exists("w:netrw_longlist")       |let b:netrw_longlist        = w:netrw_longlist       |endif
   if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt       = w:netrw_bannercnt      |endif
   if exists("w:netrw_method")         |let b:netrw_method          = w:netrw_method         |endif
@@ -3673,7 +3605,7 @@
   if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr   = w:netrw_explore_bufnr  |endif
   if exists("w:netrw_explore_line")   |let b:netrw_explore_line    = w:netrw_explore_line   |endif
   if exists("w:netrw_explore_list")   |let b:netrw_explore_list    = w:netrw_explore_list   |endif
-"  call Dret("SetBufWinVars")
+"  call Dret("BufWinVars")
 endfun
 
 " ---------------------------------------------------------------------