diff --git a/Filelist b/Filelist
index 3378c5c..7579088 100644
--- a/Filelist
+++ b/Filelist
@@ -688,6 +688,7 @@
 		runtime/spell/README.txt \
 		runtime/spell/??/*.diff \
 		runtime/spell/??/main.aap \
+		runtime/spell/yi/README.txt \
 		runtime/spell/main.aap \
 
 # generic language files, binary
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index a47f472..f98bd93 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Aug 05
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3983,7 +3983,7 @@
 
 							*spellbadword()*
 spellbadword()	Return the badly spelled word under or after the cursor.
-		The cursor is advanced to the start of the bad word.
+		The cursor is moved to the start of the bad word.
 		When no bad word is found in the cursor line an empty String
 		is returned and the cursor doesn't move.
 
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index 087a0bf..43b3d4f 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Aug 01
+*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -354,6 +354,8 @@
 <MouseUp>	scroll three lines up			     *i_<MouseUp>*
 <S-MouseUp>	scroll a full page up			     *i_<S-MouseUp>*
 CTRL-O		execute one command, return to Insert mode   *i_CTRL-O*
+CTRL-\ CTRL-O   like CTRL-O but don't move the cursor        *i_CTRL-\_CTRL-O*
+CTRL-L		when 'insertmode' is set: go to Normal mode  *i_CTRL-L*
 CTRL-G u	break undo sequence, start new change	     *i_CTRL-G_u*
 -----------------------------------------------------------------------
 
@@ -363,7 +365,8 @@
 The CTRL-O command sometimes has a side effect: If the cursor was beyond the
 end of the line, it will be put on the last character in the line.  In
 mappings it's often better to use <Esc> (first put an "x" in the text, <Esc>
-will then always put the cursor on it).
+will then always put the cursor on it).  Or use CTRL-\ CTRL-O, but then
+beware of the cursor possibly being beyond the end of the line.
 
 The shifted cursor keys are not available on all terminals.
 
@@ -567,7 +570,8 @@
 9. Vim command-line					|i_CTRL-X_CTRL-V|
 10. User defined completion				|i_CTRL-X_CTRL-U|
 11. Occult completion					|i_CTRL-X_CTRL-O|
-12. keywords in 'complete'				|i_CTRL-N|
+12. Spelling suggestions				|i_CTRL-X_s|
+13. keywords in 'complete'				|i_CTRL-N|
 
 All these (except 2) are done in CTRL-X mode.  This is a sub-mode of Insert
 and Replace modes.  You enter CTRL-X mode by typing CTRL-X and one of the
@@ -893,6 +897,25 @@
 			previous one.
 
 
+Spelling suggestions					*compl-spelling*
+
+The word in front of the cursor is located and correctly spelled words are
+suggested to replace it.  The word doesn't actually have to be badly spelled.
+NOTE: CTRL-S suspends display in many Unix terminals.  Use 's' instead.  Type
+CTRL-Q to resume displaying.
+
+						*i_CTRL-X_CTRL-S* *i_CTRL-X_s*
+CTRL-X CTRL-S   or
+CTRL-X s		Locate the word in front of the cursor and find the
+			first spell suggestion for it.
+	CTRL-S	or
+	CTRL-N		Use the next suggestion.  This replaces the previous
+			one.  Note that you can't use 's' here.
+
+	CTRL-P		Use the previous suggestion.  This replaces the
+			previous one.
+
+
 Completing keywords from different sources		*compl-generic*
 
 							*i_CTRL-N*
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index f17cf65..70bdb87 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2005 Aug 05
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3732,9 +3732,9 @@
 	- Use CTRL-O to execute one Normal mode command |i_CTRL-O|).  When
 	  this is a mapping, it is executed as if 'insertmode' was off.
 	  Normal mode remains active until the mapping is finished.
-								*i_CTRL-L*
 	- Use CTRL-L to execute a number of Normal mode commands, then use
-	  <Esc> to get back to Insert mode.
+	  <Esc> to get back to Insert mode.  Note that CTRL-L moves the cursor
+	  left, like <Esc> does when 'insertmode' isn't set.  |i_CTRL-L|
 
 	These items change when 'insertmode' is set:
 	- when starting to edit of a file, Vim goes to Insert mode.
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index a7e6e3b..435d51b 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.0.  Last change: Aug 08, 2005
+*pi_netrw.txt*  For Vim version 7.0.  Last change: Aug 09, 2005
 
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -580,12 +580,12 @@
      x................Customizing Browsing.......................|netrw-x|
 
     COMMANDS						*netrw-explore-cmds*
-     :Explore[!]  [dir].Explore directory of current file........|netrw-explore|
-     :Sexplore[!] [dir].Split & Explore directory of current file|netrw-explore|
-     :Hexplore[!] [dir].Horizontal Split & Explore...............|netrw-explore|
-     :Vexplore[!] [dir].Vertical Split & Explore.................|netrw-explore|
-     :Pexplore[!] [dir].Vertical Split & Explore.................|netrw-explore|
-     :Nexplore[!] [dir].Vertical Split & Explore.................|netrw-explore|
+     :Explore[!]  [dir] Explore directory of current file........|netrw-explore|
+     :Sexplore[!] [dir] Split & Explore directory ...............|netrw-explore|
+     :Hexplore[!] [dir] Horizontal Split & Explore...............|netrw-explore|
+     :Vexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
+     :Pexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
+     :Nexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
 
 QUICK REFERENCE COMMANDS TABLE     			*netrw-browse-cmds*
 >
@@ -745,28 +745,32 @@
 				*netrw-hexplore* *netrw-sexplore*
 DIRECTORY EXPLORING COMMANDS	*netrw-nexplore* *netrw-vexplore*
 
-     :Explore[!]   [dir]... Explore directory of current file
-     :Sexplore[!]  [dir]... Split & Explore directory of current file
-     :Hexplore[!]  [dir]... Horizontal Split & Explore
-     :Vexplore[!]  [dir]... Vertical Split & Explore
-     :Nexplore............. used with **/patterns; go to next matching file
-     :Pexplore............. used with **/patterns; go to previous matching file
+     :Explore[!]   [dir]... Explore directory of current file       *:Explore*
+     :Sexplore[!]  [dir]... Split&Explore directory of current file *:Sexplore*
+     :Hexplore[!]  [dir]... Horizontal Split & Explore              *:Hexplore*
+     :Vexplore[!]  [dir]... Vertical   Split & Explore              *:Vexplore*
 
-The Explore command will open the local-directory browser on the current
-file's directory (or on directory [dir] if specified).  The window will be
-split only if the file has been modified, otherwise the browsing window will
-take over that window.  Normally the splitting is taken horizontally; the
-optional ! will use vertical splitting.
+     Used with :Explore **/pattern :
+     :Nexplore............. go to next matching file                *:Nexplore*
+     :Pexplore............. go to previous matching file            *:Pexplore*
 
-Sexplore will always split the window before invoking the local-directory
-browser.  As with Explore, the splitting is normally done horizontally, but
-with the optional ! the splitting will be done vertically.
+:Explore  will open the local-directory browser on the current file's
+          directory (or on directory [dir] if specified).  The window will be
+	  split only if the file has been modified, otherwise the browsing
+	  window will take over that window.  Normally the splitting is taken
+	  horizontally.
+:Explore! is like :Explore, but will use vertical splitting.
+:Sexplore will always split the window before invoking the local-directory
+          browser.  As with Explore, the splitting is normally done
+	  horizontally.
+:Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
+:Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
+:Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
+:Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
+:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
 
-Hexplore does an Explore with |belowright| horizontal splitting; the
-optional ! does the Explore with |aboveleft| horizontal splitting.
-
-Vexplore does an Explore with |leftabove| vertical splitting; the
-optional "!" does an Explore with |topleft| vertical splitting.
+By default, these commands use the current file's directory.  However, one
+may explicitly provide a directory (path) to use.
 
 (Following needs v7.0 or later)			*netrw-starstar*
 When Explore, Sexplore, Hexplore, or Vexplore are used like
@@ -941,7 +945,7 @@
 SELECTING SORTING STYLE				*netrw-s* *netrw-sort*
 
 One may select the sorting style by name, time, or (file) size.  The
-"s" map allows one to circulate among the three choices; the directory
+"s" map allows one to circulate amongst the three choices; the directory
 listing will automatically be refreshed to reflect the selected style.
 
 
@@ -952,7 +956,7 @@
 prioritizes the name-listing by suffix, although any pattern will do.
 Patterns are delimited by commas.  The default sorting sequence is:
 >
-	/$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
+	[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
 <
 The lone * is where all filenames not covered by one of the other
 patterns will end up.  One may change the sorting sequence by modifying
@@ -1072,7 +1076,7 @@
 
 	(This section is likely to grow as I get feedback)
 	(also see |netrw-debug|)
-
+								*netrw-p1*
 	P1. I use windows 95, and my ftp dumps four blank lines at the
 	    end of every read.
 
@@ -1081,8 +1085,7 @@
 
 			let g:netrw_win95ftp= 1
 
-
-
+								*netrw-p2*
 	P2. I use windows, and my network browsing with ftp doesn't sort by
 	    time or size
 
@@ -1100,6 +1103,7 @@
 
 			let g:netrw_cygwin= 1
 
+								*netrw-p3*
 	P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw
 	    used ssh!  That wasn't what I asked for...
 
@@ -1108,6 +1112,7 @@
 		When it comes time to do download a file (not just a directory
 		listing), netrw will use the given protocol to do so.
 
+								*netrw-p4*
 	P4. I would like long listings to be the default.
 
 			let g:netrw_longlist=1
@@ -1115,6 +1120,7 @@
 		Check out |netrw-browse-var| for more customizations that
 		you can set.
 
+								*netrw-p5*
 	P5. My times come up oddly in local browsing
 
 		Does your system's strftime() accept the "%c" to yield dates
@@ -1123,6 +1129,7 @@
 		your <.vimrc>:
 			let g:netrw_timefmt= "%X"  (where X is the option)
 
+								*netrw-p6*
 	P6. I want my current directory to track my browsing.
 	    How do I do that?
 
@@ -1133,9 +1140,11 @@
 9. Debugging						*netrw-debug*
 
 The <netrw.vim> script is typically available as:
-
+>
 	/usr/local/share/vim/vim6x/plugin/netrw.vim
-
+< -or- >
+	/usr/local/share/vim/vim7x/plugin/netrw.vim
+<
 which is loaded automatically at startup (assuming :set nocp).
 
 	1. Get the <Decho.vim> script, available as:
@@ -1179,6 +1188,12 @@
 ==============================================================================
 10. History						*netrw-history*
 
+	v60: * when using the i map to switch between long and short listings,
+	       netrw will now keep cursor on same line
+	     * "Match # of #" now uses status line
+	     * :Explore **/*.c  will now work from a non-netrw-browser window
+	     * :Explore **/patterns can now be run in separate browser windows
+	     * active banner (hit <cr> will cause various things to happen)
 	v59: * bugfix -- another keepalt work-around installed (for vim6.3)
 	     * "Match # of #" for Explore **/pattern matches
 	v58: * Explore and relatives can now handle **/somefilepattern (v7)
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index 573a942..d76c66b 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Jul 31
+*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -145,6 +145,10 @@
 :spellr[epall]		Repeat the replacement done by |z?| for all matches
 			with the replaced word in the current window.
 
+In Insert mode, when the cursor is after a badly spelled word, you can use
+CTRL-X s to find suggestions.  This works like Insert mode completion.  Use
+CTRL-N to use the next suggestion, CTRL-P to go back. |i_CTRL-X_s|
+
 The 'spellsuggest' option influences how the list of suggestions is generated
 and sorted.  See |'spellsuggest'|.
 
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index dfe93ca..3643f7a 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.0aa.  Last change: 2005 Jul 29
+*syntax.txt*	For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -399,7 +399,7 @@
    :unlet html_number_lines
 
 Closed folds are put in the HTML as they are displayed.  If you don't want
-this, use the "zR" command before invoking 2html, or use: >
+this, use the |zR| command before invoking 2html, or use: >
    :let html_ignore_folding = 1
 
 By default, HTML optimized for old browsers is generated.  If you prefer using
@@ -426,16 +426,13 @@
 variable: >
    :unlet html_use_encoding
 <
-Closed folds are kept as they are displayed.  If you don't want closed folds
-in the HTML use the |zR| command before converting.
-
 For diff mode a sequence of more than 3 filler lines is displayed as three
 lines with the middle line mentioning the total number of inserted lines.  If
 you prefer to see all the inserted lines use: >
     :let html_whole_filler = 1
 And to go back to displaying up to three lines again: >
     :unlet html_whole_filler
-
+<
 					    *convert-to-XML* *convert-to-XHTML*
 An alternative is to have the script generate XHTML (XML compliant HTML).  To
 do this set the "use_xhtml" variable: >
@@ -2355,18 +2352,30 @@
 
 TEX						*tex.vim* *tex-syntax*
 
+*tex-folding*
+Want Syntax Folding? ~
+
+As of version 28 of <syntax/tex.vim>, syntax-based folding of parts, chapters,
+sections, subsections, etc are supported.  Put >
+	let g:tex_fold_enabled=1
+in your <.vimrc>, and :set fdm=syntax.  I suggest doing the latter via a
+modeline at the end of your LaTeX file: >
+	% vim: fdm=syntax
+<
+*tex-runon*
 Run-on Comments/Math? ~
 
-The tex highlighting supports TeX, LaTeX, and some AmsTeX.  The
-highlighting supports three primary zones: normal, texZone, and texMathZone.
-Although a considerable effort has been made to have these zones terminate
-properly, zones delineated by $..$ and $$..$$ cannot be synchronized as
-there's no difference between start and end patterns.  Consequently, a
+The <syntax/tex.vim> highlighting supports TeX, LaTeX, and some AmsTeX.  The
+highlighting supports three primary zones/regions: normal, texZone, and
+texMathZone.  Although considerable effort has been made to have these zones
+terminate properly, zones delineated by $..$ and $$..$$ cannot be synchronized
+as there's no difference between start and end patterns.  Consequently, a
 special "TeX comment" has been provided >
 	%stopzone
 which will forcibly terminate the highlighting of either a texZone or a
 texMathZone.
 
+*tex-slow*
 Slow Syntax Highlighting? ~
 
 If you have a slow computer, you may wish to reduce the values for >
@@ -2376,6 +2385,7 @@
 increase them.	This primarily affects synchronizing (i.e. just what group,
 if any, is the text at the top of the screen supposed to be in?).
 
+*tex-error*
 Excessive Error Highlighting? ~
 
 The <tex.vim> supports lexical error checking of various sorts.  Thus,
@@ -2383,28 +2393,24 @@
 errors where none actually are.  If this proves to be a problem for you,
 you may put in your <.vimrc> the following statement: >
 	let tex_no_error=1
-and all error checking by <tex.vim> will be suppressed.
+and all error checking by <syntax/tex.vim> will be suppressed.
 
+*tex-math*
 Need a new Math Group? ~
 
 If you want to include a new math group in your LaTeX, the following
 code shows you an example as to how you might do so: >
+	call TexNewMathZone(sfx,mathzone,starform)
+You'll want to provide the new math group with a unique suffix
+(currently, A-L and V-Z are taken by <syntax/tex.vim> itself).
+As an example, consider how eqnarray is set up by <syntax/tex.vim>: >
+	call TexNewMathZone("D","eqnarray",1)
+You'll need to change "mathzone" to the name of your new math group,
+and then to the call to it in .vim/after/syntax/tex.vim.
+The "starform" variable, if true, implies that your new math group
+has a starred form (ie. eqnarray*).
 
-    syn cluster texMathZones add=texMathZoneLOCAL
-    syn region texMathZoneLOCAL start="\\begin\s*{\s*LOCALMATH\s*}"
-       \ end="\\end\s*{\s*LOCALMATH\s*}" keepend
-       \ contains=@texMathZoneGroup
-    if !exists("tex_no_math")
-     syn sync match texSyncMathZoneLOCAL grouphere texMathZoneLOCAL
-       \ "\\begin\s*{\s*LOCALMATH\*\s*}"
-     syn sync match texSyncMathZoneLOCAL groupthere NONE
-       \ "\\end\s*{\s*LOCALMATH\*\s*}"
-    endif
-    hi link texMathZoneLOCAL texMath
-<
-You'll need to change LOCALMATH to the name of your new math group,
-and then to put it into .vim/after/syntax/tex.vim.
-
+*tex-style*
 Starting a New Style? ~
 
 One may use "\makeatletter" in *.tex files, thereby making the use of "@" in
diff --git a/runtime/doc/tags b/runtime/doc/tags
index e5eb5d3..0cb5c8d 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4453,6 +4453,7 @@
 compl-generic	insert.txt	/*compl-generic*
 compl-keyword	insert.txt	/*compl-keyword*
 compl-occult	insert.txt	/*compl-occult*
+compl-spelling	insert.txt	/*compl-spelling*
 compl-tag	insert.txt	/*compl-tag*
 compl-vim	insert.txt	/*compl-vim*
 compl-whole-line	insert.txt	/*compl-whole-line*
@@ -5317,7 +5318,7 @@
 i_CTRL-I	insert.txt	/*i_CTRL-I*
 i_CTRL-J	insert.txt	/*i_CTRL-J*
 i_CTRL-K	insert.txt	/*i_CTRL-K*
-i_CTRL-L	options.txt	/*i_CTRL-L*
+i_CTRL-L	insert.txt	/*i_CTRL-L*
 i_CTRL-M	insert.txt	/*i_CTRL-M*
 i_CTRL-N	insert.txt	/*i_CTRL-N*
 i_CTRL-O	insert.txt	/*i_CTRL-O*
@@ -5342,17 +5343,20 @@
 i_CTRL-X_CTRL-N	insert.txt	/*i_CTRL-X_CTRL-N*
 i_CTRL-X_CTRL-O	insert.txt	/*i_CTRL-X_CTRL-O*
 i_CTRL-X_CTRL-P	insert.txt	/*i_CTRL-X_CTRL-P*
+i_CTRL-X_CTRL-S	insert.txt	/*i_CTRL-X_CTRL-S*
 i_CTRL-X_CTRL-T	insert.txt	/*i_CTRL-X_CTRL-T*
 i_CTRL-X_CTRL-U	insert.txt	/*i_CTRL-X_CTRL-U*
 i_CTRL-X_CTRL-V	insert.txt	/*i_CTRL-X_CTRL-V*
 i_CTRL-X_CTRL-Y	insert.txt	/*i_CTRL-X_CTRL-Y*
 i_CTRL-X_CTRL-]	insert.txt	/*i_CTRL-X_CTRL-]*
 i_CTRL-X_index	index.txt	/*i_CTRL-X_index*
+i_CTRL-X_s	insert.txt	/*i_CTRL-X_s*
 i_CTRL-Y	insert.txt	/*i_CTRL-Y*
 i_CTRL-Z	options.txt	/*i_CTRL-Z*
 i_CTRL-[	insert.txt	/*i_CTRL-[*
 i_CTRL-\_CTRL-G	intro.txt	/*i_CTRL-\\_CTRL-G*
 i_CTRL-\_CTRL-N	intro.txt	/*i_CTRL-\\_CTRL-N*
+i_CTRL-\_CTRL-O	insert.txt	/*i_CTRL-\\_CTRL-O*
 i_CTRL-]	insert.txt	/*i_CTRL-]*
 i_CTRL-^	insert.txt	/*i_CTRL-^*
 i_CTRL-_	insert.txt	/*i_CTRL-_*
@@ -5764,6 +5768,7 @@
 netrw-h	pi_netrw.txt	/*netrw-h*
 netrw-handler	pi_netrw.txt	/*netrw-handler*
 netrw-help	pi_netrw.txt	/*netrw-help*
+netrw-hexplore	pi_netrw.txt	/*netrw-hexplore*
 netrw-history	pi_netrw.txt	/*netrw-history*
 netrw-horiz	pi_netrw.txt	/*netrw-horiz*
 netrw-i	pi_netrw.txt	/*netrw-i*
@@ -5773,6 +5778,7 @@
 netrw-maps	pi_netrw.txt	/*netrw-maps*
 netrw-move	pi_netrw.txt	/*netrw-move*
 netrw-netrc	pi_netrw.txt	/*netrw-netrc*
+netrw-nexplore	pi_netrw.txt	/*netrw-nexplore*
 netrw-nread	pi_netrw.txt	/*netrw-nread*
 netrw-nwrite	pi_netrw.txt	/*netrw-nwrite*
 netrw-o	pi_netrw.txt	/*netrw-o*
@@ -5780,6 +5786,7 @@
 netrw-p	pi_netrw.txt	/*netrw-p*
 netrw-passwd	pi_netrw.txt	/*netrw-passwd*
 netrw-path	pi_netrw.txt	/*netrw-path*
+netrw-pexplore	pi_netrw.txt	/*netrw-pexplore*
 netrw-preview	pi_netrw.txt	/*netrw-preview*
 netrw-problems	pi_netrw.txt	/*netrw-problems*
 netrw-protocol	pi_netrw.txt	/*netrw-protocol*
@@ -5790,8 +5797,10 @@
 netrw-rename	pi_netrw.txt	/*netrw-rename*
 netrw-reverse	pi_netrw.txt	/*netrw-reverse*
 netrw-s	pi_netrw.txt	/*netrw-s*
+netrw-sexplore	pi_netrw.txt	/*netrw-sexplore*
 netrw-sort	pi_netrw.txt	/*netrw-sort*
 netrw-sortsequence	pi_netrw.txt	/*netrw-sortsequence*
+netrw-starstar	pi_netrw.txt	/*netrw-starstar*
 netrw-transparent	pi_netrw.txt	/*netrw-transparent*
 netrw-u	pi_netrw.txt	/*netrw-u*
 netrw-uidpass	pi_netrw.txt	/*netrw-uidpass*
@@ -5800,6 +5809,7 @@
 netrw-v	pi_netrw.txt	/*netrw-v*
 netrw-var	pi_netrw.txt	/*netrw-var*
 netrw-variables	pi_netrw.txt	/*netrw-variables*
+netrw-vexplore	pi_netrw.txt	/*netrw-vexplore*
 netrw-write	pi_netrw.txt	/*netrw-write*
 netrw-x	pi_netrw.txt	/*netrw-x*
 netrw-xfer	pi_netrw.txt	/*netrw-xfer*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 68c220a..6776077 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Aug 10
+*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -33,9 +33,6 @@
 Spell checking: default value for 'spellcapcheck' in spell file?
 For Hebrew and Yiddish it should be empty.
 
-When 'insertmode' is set, CTRL-L no longer moves the cursor left.  What
-compatibility problems does this cause?
-
 Using "@:" has two problems (Tim Chase, 2005 Aug 9)
 
 Mac unicode patch (Da Woon Jung):
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 10402aa..d4fbb33 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 09
+*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Aug 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -331,6 +331,11 @@
 |at| and |it| text objects select a block of text between HTML or XML tags.
 
 
+Insert mode commands: ~
+
+CTRL-\ CTRL-O		Execute a Normal mode command.  Like CTRL-O but
+			without moving the cursor.
+
 Options: ~
 
 'completefunc'		The name of a function used for user-specified Insert
@@ -1274,7 +1279,4 @@
 
 Win32: Could not use "**/" in 'path', it had to be "**\".
 
-When 'insertmode' is set CTRL-L would move the cursor.  That wasn't supposed
-to happen, CTRL-O doesn't do it either.
-
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index edda27a..0b7c616 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:	Aug 08, 2005
+" Last Change:	Aug 10, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	59
+" Version:	60
 " License:	Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr.
 "               Permission is hereby granted to use and distribute this code,
@@ -22,9 +22,11 @@
 if exists("g:loaded_netrw") || &cp
   finish
 endif
-let g:loaded_netrw  = "v59"
-let loaded_explorer = 1
-let s:keepcpo       = &cpo
+let g:loaded_netrw  = "v60"
+if v:version < 700
+ let loaded_explorer = 1
+endif
+let s:keepcpo= &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
@@ -255,28 +257,28 @@
 fun! s:NetSavePosn()
 "  call Dfunc("NetSavePosn()")
   " Save current line and column
-  let s:netrw_winnr= winnr()
-  let s:netrw_line = line(".")
-  let s:netrw_col  = virtcol(".")
+  let w:netrw_winnr= winnr()
+  let w:netrw_line = line(".")
+  let w:netrw_col  = virtcol(".")
 
   " Save top-of-screen line
   norm! H0
-  let s:netrw_hline= line(".")
+  let w:netrw_hline= line(".")
 
   call s:NetRestorePosn()
-"  call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+"  call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
 endfun
 
 " ------------------------------------------------------------------------
 " NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
 fun! <SID>NetRestorePosn()
-"  call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+"  call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
   let eikeep= &ei
   set ei=all
 
   " restore window
-"  call Decho("restore window: exe silent! ".s:netrw_winnr."wincmd w")
-  exe "silent! ".s:netrw_winnr."wincmd w"
+"  call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+  exe "silent! ".w:netrw_winnr."wincmd w"
 "  if v:shell_error == 0
 "   " as suggested by Bram M: redraw on no error
 "   " allows protocol error messages to remain visible
@@ -284,12 +286,12 @@
 "  endif
 
   " restore top-of-screen line
-"  call Decho("restore topofscreen: exe norm! ".s:netrw_hline."G0z")
-  exe "norm! ".s:netrw_hline."G0z\<CR>"
+"  call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+  exe "norm! ".w:netrw_hline."G0z\<CR>"
 
   " restore position
-"  call Decho("restore posn: exe norm! ".s:netrw_line."G0".s:netrw_col."|")
-  exe "norm! ".s:netrw_line."G0".s:netrw_col."\<bar>"
+"  call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+  exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
 
   let &ei= eikeep
 "  call Dret("NetRestorePosn")
@@ -1050,6 +1052,12 @@
 fun! <SID>NetBrowse(dirname)
 "  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
 
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Dret("NetBrowse")
+   return
+  endif
+
   " sanity check
   if exists("b:netrw_method") && b:netrw_method =~ '[235]'
 "   call Decho("b:netrw_method=".b:netrw_method)
@@ -1106,8 +1114,8 @@
   endif
 
   if exists("b:netrw_method")
-"   call Decho("setting s:netrw_method<".b:netrw_method.">")
-   let s:netrw_method= b:netrw_method
+"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+   let w:netrw_method= b:netrw_method
   endif
 
   " optionally sort by time (-t) or by size (-S)
@@ -1200,14 +1208,14 @@
   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
-  nnoremap <buffer> <silent> o		:exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> o		:call <SID>NetSplit(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>
   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> v		:call <SID>NetSplit(1)<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>
   exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
@@ -1225,15 +1233,15 @@
   keepjumps put ='\" ==========================================================================='
   keepjumps put ='\" Netrw Remote Directory Listing'
   keepjumps put ='\"   '.bufname
-  let s:netrw_bannercnt= 7
-  let sortby= g:netrw_sort_by
+  let w:netrw_bannercnt = 7
+  let sortby            = g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
-   let sortby= sortby." reversed"
+   let sortby           = sortby." reversed"
   endif
 
   if g:netrw_sort_by =~ "^n"
    " sorted by name
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
    keepjumps put ='\"   Sorted by      '.sortby
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
   else
@@ -1246,7 +1254,7 @@
    else
     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
   keepjumps put ='\"   Quick Help:    ?:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
   keepjumps put ='\" ==========================================================================='
@@ -1263,7 +1271,7 @@
    if !g:netrw_longlist
     " shorten the listing
 "    call Decho("generate short listing")
-    exe "keepjumps ".s:netrw_bannercnt
+    exe "keepjumps ".w:netrw_bannercnt
 
     " cleanup
     if g:netrw_ftp_browse_reject != ""
@@ -1283,9 +1291,9 @@
     keepjumps norm! 0
 
     " more cleanup
-    exe 'keepjumps silent! '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-    exe "keepjumps silent! ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-    exe "keepjumps silent! ".s: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
@@ -1315,7 +1323,7 @@
   endif
 
   " manipulate the directory listing (hide, sort)
-  if line("$") >= s:netrw_bannercnt
+  if line("$") >= w:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
@@ -1326,7 +1334,7 @@
 
     if method == "ftp"
      " cleanup
-     exe "keepjumps ".s:netrw_bannercnt
+     exe "keepjumps ".w:netrw_bannercnt
      while getline(".") =~ g:netrw_ftp_browse_reject
       keepjumps d
      endwhile
@@ -1336,37 +1344,37 @@
      silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
      let line2= line(".")
      if line2 == 0
-      exe 'keepjumps '.s:netrw_bannercnt."put='./'"
-      exe 'keepjumps '.s:netrw_bannercnt."put='../'"
+      exe 'keepjumps '.w:netrw_bannercnt."put='./'"
+      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
      endif
     exe "keepjumps ".line1
     keepjumps norm! 0
     endif
 
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe s: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("$") >= s:netrw_bannercnt
+   if line("$") >= w:netrw_bannercnt
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w: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'
+     exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
     endif
    endif
   endif
-  exe "keepjumps ".s:netrw_bannercnt
+  exe "keepjumps ".w:netrw_bannercnt
 
   setlocal nomod noma nonu
 
@@ -1421,8 +1429,27 @@
 "  NetGetWord: it gets the directory named under the cursor
 fun! <SID>NetGetWord()
 "  call Dfunc("NetGetWord() line#".line("."))
-  if line(".") < s:netrw_bannercnt
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
    let dirname= "./"
+   let curline= getline(".")
+   if curline =~ '"\s*Sorted by\s'
+    norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+   elseif curline =~ '"\s*Quick Help:'
+    norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+   elseif line("$") > w:netrw_bannercnt
+    exe w:netrw_bannercnt
+   endif
   else
    let dirname= getline(".")
    if dirname =~ '\t'
@@ -1466,7 +1493,7 @@
     endif
 
     if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
       silent! keepjumps .,$d
       call NetBrowseFtpCmd(a:path,"delete ".rmfile)
      else
@@ -1492,7 +1519,7 @@
     endif
 
     if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
       call NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
      else
       let rmfile         = a:path.rmfile
@@ -1552,7 +1579,7 @@
    let newname= input("Moving ".oldname." to : ",oldname)
    call inputrestore()
 
-   if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+   if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
     call NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
    else
     let oldname= a:path.oldname
@@ -1583,6 +1610,41 @@
 endfun
 
 " ---------------------------------------------------------------------
+" NetSplit: mode {{{2
+"           =0 : net   and o
+"           =1 : net   and v
+"           =2 : local and o
+"           =3 : local and v
+fun! s:NetSplit(mode)
+"  call Dfunc("NetSplit(mode=".a:mode.")")
+
+  call s:SaveWinVars()
+  if a:mode == 0
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
+  elseif a:mode ==1
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
+  elseif a:mode ==2
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
+  else
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
+  endif
+
+"  call Dret("NetSplit")
+endfun
+
+" ---------------------------------------------------------------------
 " NetBrowseX:  allows users to write custom functions to operate on {{{2
 "              files given their extension.  Passes 0=local, 1=remote
 fun! <SID>NetBrowseX(fname,remote)
@@ -1661,7 +1723,7 @@
 "  and reverse sorts will be requested of the server but not otherwise
 "  enforced here.
 fun! NetBrowseFtpCmd(path,cmd)
-"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".s:netrw_method)
+"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".w:netrw_method)
 
   " because WinXX ftp uses unix style input
   " curline is one more than the bannercnt in order to account
@@ -1669,11 +1731,11 @@
   " buffer yields a blank first line)
   let ffkeep= &ff
   setlocal ma ff=unix
-  let curline= s:netrw_bannercnt+1
+  let curline= w:netrw_bannercnt+1
   exe "silent! keepjumps ".curline.",$d"
 
    ".........................................
-  if s:netrw_method == 2 || s:netrw_method == 5
+  if w:netrw_method == 2 || w:netrw_method == 5
    " ftp + <.netrc>:  Method #2
    if a:path != ""
     put ='cd '.a:path
@@ -1689,7 +1751,7 @@
    endif
 
    ".........................................
-  elseif s:netrw_method == 3
+  elseif w:netrw_method == 3
    " ftp + machine,id,passwd,filename:  Method #3
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -1759,9 +1821,9 @@
    " Prune the list by hiding any files which match
 "   call Decho("pruning <".hide."> listhide<".listhide.">")
    if g:netrw_hide == 1
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
    elseif g:netrw_hide == 2
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$v~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
    endif
   endwhile
 
@@ -1838,7 +1900,8 @@
    silent call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
   endif
 
-"  call s:NetRestorePosn()
+  call s:NetRestorePosn()
+
 "  call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
 endfun
 
@@ -1964,6 +2027,15 @@
 "    5: (user: <U>)   go down (next)     bookmark
 fun! <SID>NetBookmarkDir(chg,curdir)
 "  call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
+  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 w:netrw_bannercnt
+   endif
+   echo ""
+"  call Dret("NetBookmarkDir - ignoring")
+   return
+  endif
 
   if a:chg == 0
    " bookmark the current directory
@@ -1973,6 +2045,7 @@
    elseif v:count > g:NETRW_BOOKMARKMAX
     let g:NETRW_BOOKMARKMAX= v:count
    endif
+   echo "bookmarked the current directory"
 
   elseif a:chg == 1
    " change to the bookmarked directory
@@ -2072,6 +2145,12 @@
 "  call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
 "  call Dredir("ls!")
 
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Dret("NetBrowse")
+   return
+  endif
+
   if v:version < 603
    if !exists("g:netrw_quiet")
     echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
@@ -2142,7 +2221,18 @@
   " make netrw's idea of the current directory vim's if the user wishes
   if !g:netrw_keepdir
 "   call Decho("change directory: cd ".b:netrw_curdir)
-   exe 'cd '.b:netrw_curdir
+   try
+    exe 'cd '.b:netrw_curdir
+   catch /^Vim\%((\a\+)\)\=:E472/
+    echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+    if exists("w:netrw_prvdir")
+     let b:netrw_curdir= w:netrw_prvdir
+    else
+"     call Dret("LocalBrowse : reusing buffer#".bufnum."<".a:dirname.">")
+     return
+    endif
+   endtry
   endif
 
   " change the name of the buffer to reflect the b:netrw_curdir
@@ -2174,7 +2264,7 @@
   nnoremap <buffer> <silent> d		:call <SID>NetMakeDir("")<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(1)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(1)<cr>
-  nnoremap <buffer> <silent> o		:exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> o		:call <SID>NetSplit(2)<cr>
   nnoremap <buffer> <silent> p		:exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<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(b:netrw_curdir,'./'))<cr>
@@ -2182,7 +2272,7 @@
   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> v		:call <SID>NetSplit(3)<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>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
@@ -2202,7 +2292,7 @@
   keepjumps 1d
   keepjumps put ='\" Directory Listing                                              (netrw '.g:loaded_netrw.')'
   keepjumps put ='\"   '.b:netrw_curdir
-  let s:netrw_bannercnt= 3
+  let w:netrw_bannercnt= 3
 
   let sortby= g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
@@ -2215,12 +2305,12 @@
    " sorted by name
    keepjumps put ='\"   Sorted by      '.sortby
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
-   let s:netrw_bannercnt= s:netrw_bannercnt + 2
+   let w:netrw_bannercnt= w: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
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
 
   " Hiding...  -or-  Showing...
@@ -2230,15 +2320,15 @@
    else
     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w: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
+  let w:netrw_bannercnt= w: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)
+  let w:netrw_bannercnt= w:netrw_bannercnt + 1
+"  call Decho("bannercnt=".w:netrw_bannercnt)
 
   " generate the requested directory listing
   call LocalBrowseList()
@@ -2252,38 +2342,43 @@
   endif
 
   " manipulate the directory listing (hide, sort)
-  if line("$") >= s:netrw_bannercnt
+  if line("$") >= w:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
-   if line("$") >= s:netrw_bannercnt
+   if line("$") >= w:netrw_bannercnt
 
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
 
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
 
     else
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
 
    endif
   endif
-  exe s:netrw_bannercnt
+  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
+   exe w:netrw_bannercnt
+  endif
+
+  " record previous current directory
+  let w:netrw_prvdir= b:netrw_curdir
 
   setlocal noma nomod nonu bh=hide nobl
   if has("netbeans_intg") || has("sun_workshop")
@@ -2454,7 +2549,7 @@
    exe "keepjumps ".ctr
 
    " sanity checks
-   if line(".") < s:netrw_bannercnt
+   if line(".") < w:netrw_bannercnt
     let ctr= ctr + 1
     continue
    endif
@@ -2558,7 +2653,7 @@
    exe "keepjumps ".ctr
 
    " sanity checks
-   if line(".") < s:netrw_bannercnt
+   if line(".") < w:netrw_bannercnt
     let ctr= ctr + 1
     continue
    endif
@@ -2630,46 +2725,67 @@
 
   " if dosplit or file has been modified
   if a:dosplit || &modified
+   call <SID>SaveWinVars()
+
    if a:style == 0      " Explore, Sexplore
     exe g:netrw_winsize."wincmd s"
+"    call Decho("style=0: Explore or Sexplore")
+
    elseif a:style == 1  "Explore!, Sexplore!
     exe g:netrw_winsize."wincmd v"
+"    call Decho("style=1: Explore! or Sexplore!")
+
    elseif a:style == 2  " Hexplore
     exe "bel ".g:netrw_winsize."wincmd s"
+"    call Decho("style=2: Hexplore")
+
    elseif a:style == 3  " Hexplore!
     exe "abo ".g:netrw_winsize."wincmd s"
+"    call Decho("style=3: Hexplore!")
+
    elseif a:style == 4  " Vexplore
     exe "lefta ".g:netrw_winsize."wincmd v"
+"    call Decho("style=4: Vexplore")
+
    elseif a:style == 5  " Vexplore!
     exe "rightb ".g:netrw_winsize."wincmd v"
+"    call Decho("style=5: Vexplore!")
    endif
+   call s:CopyWinVars()
   endif
   norm! 0
 
   if a:1 == "" && a:indx >= 0
-   let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e')
-"   call Decho("calling LocalBrowse(newdir<".newdir.">)")
-   call s:LocalBrowse(newdir)
+   " Explore Hexplore Vexplore Sexplore
+   let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+   if newdir =~ '^scp:' || newdir =~ '^ftp:'
+"    call Decho("calling NetBrowse(newdir<".newdir.">)")
+    call s:NetBrowse(newdir)
+   else
+"    call Decho("calling LocalBrowse(newdir<".newdir.">)")
+    call s:LocalBrowse(newdir)
+   endif
 
   elseif a:1 =~ '\*\*/' || a:indx < 0
+   " Nexplore Pexplore -or-  Explore **/...
 
-   if has("path_extra")
-    if !exists("s:explore_indx")
-     let s:explore_indx= 0
+   if has("path_extra") && v:version >= 700
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
     endif
     let indx = a:indx
     if indx == -1
-     let indx= s:explore_indx + 1
+     let indx= w:netrw_explore_indx + 1
     elseif indx == -2
-     let indx= s:explore_indx - 1
+     let indx= w:netrw_explore_indx - 1
     else
-     let s:explore_indx    = 0
+     let w:netrw_explore_indx    = 0
      if !exists("b:netrw_curdir")
-       let b:netrw_curdir = "."
+      let b:netrw_curdir= getcwd()
      endif
-     let s:explorelist     = split(expand(b:netrw_curdir."/".a:1),'\n')
-     let s:explore_listlen = len(s:explorelist)
-     if s:explore_listlen == 1 && s:explorelist[0] =~ '\*\*\/'
+     let w:netrw_explore_list    = split(expand(b:netrw_curdir."/".a:1),'\n')
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+     if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
       echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
       call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "      call Dret("Explore")
@@ -2678,32 +2794,33 @@
     endif
 
     " NetrwStatusLine support
-    let s:explore_indx  = indx
+    let w:netrw_explore_indx= indx
     if !exists("s:netrw_explore_stl")
      let s:netrw_explore_stl= &stl
     endif
     set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
-"    call Decho("explorelist<".join(s:explorelist,',')."> len=".s:explore_listlen)
+"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
     " sanity check
-    if indx >= s:explore_listlen || indx < 0
-     let indx= (indx < 0)? 0 : ( s:explore_listlen - 1 )
+    if indx >= w:netrw_explore_listlen || indx < 0
+     let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
      echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "     call Dret("Explore")
      return
     endif
 
-    exe "let dirfile= s:explorelist[".indx."]"
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
 "    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)
     call search(substitute(dirfile,"^.*/","",""),"W")
-    let s:explore_mtchcnt = indx + 1
-    let s:explore_bufnr   = bufnr(".")
-    let s:explore_line    = line(".")
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr(".")
+    let w:netrw_explore_line    = line(".")
+"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
    else
     if v:version < 700
@@ -2726,13 +2843,14 @@
 " ---------------------------------------------------------------------
 " NetrwStatusLine: {{{2
 fun! NetrwStatusLine()
-  let g:explore_bufnr= s:explore_bufnr
-  let g:explore_line= s:explore_line
-  if !exists("s:explore_bufnr") || s:explore_bufnr != bufnr(".") || !exists("s:explore_line") || s:explore_line != line(".")
+"  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")
    let &stl= s:netrw_explore_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 ""
   else
-   return "Match ".s:explore_mtchcnt." of ".s:explore_listlen
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
   endif
 endfun
 
@@ -3119,7 +3237,7 @@
 "          "files" that satisfy each pattern, putting the priority / in
 "          front.  An "*" pattern handles the default priority.
 fun! <SID>SetSort()
-"  call Dfunc("SetSort() bannercnt=".s:netrw_bannercnt)
+"  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
   if g:netrw_longlist
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
@@ -3151,24 +3269,54 @@
 "   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
 
    " sanity check
-   if s:netrw_bannercnt > line("$")
+   if w: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.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
    endif
    let priority = priority + 1
   endwhile
 
-  exe 'keepjumps silent '.s: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
 
+" ---------------------------------------------------------------------
+" SaveWinVars: (used by Explore()) {{{1
+fun! s:SaveWinVars()
+"  call Dfunc("SaveWinVars()")
+  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
+  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
+  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
+  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
+"  call Dret("SaveWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" CopyWinVars: (used by Explore()) {{{1
+fun! s:CopyWinVars()
+"  call Dfunc("CopyWinVars()")
+  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
+  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
+  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
+  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
+  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
+  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
+  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
+  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
+"  call Dret("CopyWinVars")
+endfun
+
 let &cpo= s:keepcpo
 unlet s:keepcpo
 " ------------------------------------------------------------------------
diff --git "a/runtime/spell/yi/\041yi.diff" "b/runtime/spell/yi/\041yi.diff"
new file mode 100644
index 0000000..00ec104
--- /dev/null
+++ "b/runtime/spell/yi/\041yi.diff"
@@ -0,0 +1,7 @@
+*** wordlist.utf8.txt	Thu Aug 11 17:55:15 2005
+--- yi.dic	Thu Aug 11 17:56:28 2005
+***************
+*** 1 ****
+--- 1,2 ----
++ 99999
+  גרונטעלעמענט
diff --git a/runtime/spell/yi/README.txt b/runtime/spell/yi/README.txt
new file mode 100644
index 0000000..db43293
--- /dev/null
+++ b/runtime/spell/yi/README.txt
@@ -0,0 +1,6 @@
+README file for the Yiddish spell file.
+
+The word list was provided by Raphael Finkel.  It is the same one that is used
+by uspell.
+
+Copyright Raphael Finkel.  Included with permission in Vim.
diff --git a/runtime/spell/yi/yi.diff b/runtime/spell/yi/yi.diff
new file mode 100644
index 0000000..020f2dc
--- /dev/null
+++ b/runtime/spell/yi/yi.diff
@@ -0,0 +1,18 @@
+*** wordlist.utf8.txt	Thu Aug 11 18:40:11 2005
+--- yi.dic	Thu Aug 11 19:48:53 2005
+***************
+*** 1,2 ****
+--- 1,3 ----
++ 999999
+  גרונטעלעמענט
+  דזשאָבענדיקס
+*** /dev/null	Thu Aug 11 19:48:23 2005
+--- yi.aff	Thu Aug 11 18:50:45 2005
+***************
+*** 0 ****
+--- 1,5 ----
++ SET UTF-8
++ 
++ REP 2
++ REP וו װ
++ REP יי ײ
diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
index b6a0450..fb7a7e4 100644
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	TeX
-" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Mar 02, 2005
-" Version:	27
-" URL:		http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
+" Last Change:	Aug 11, 2005
+" Version:	28
+" URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
 "
@@ -80,7 +80,6 @@
  set fdm=syntax
 endif
 
-
 " (La)TeX keywords: only use the letters a-zA-Z {{{1
 " but _ is the only one that causes problems.
 if version < 600
@@ -102,6 +101,7 @@
  syn cluster texCmdGroup	add=texMathError
 endif
 syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
+syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
 syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
 syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
 if !exists("tex_no_math")
@@ -246,12 +246,29 @@
 
 " Sections, subsections, etc: {{{1
 if g:tex_fold_enabled && has("folding")
- syn region texSectionZone	matchgroup=texSection start="\\\(sub\)*\(section\|author\|part\|chapter\|paragraph\)\*\=\>"	end="\ze\\\(sub\)*\(section\|author\|part\|chapter\|paragraph\)\*\=\>" end="%\s*stopzone\>"	contains=TOP fold
- syn region texSectionZone	matchgroup=texSection start="\\begin\s*{\s*abstract\s*}"	end="\\end\s*{\s*abstract\s*}"  contains=TOP fold
+ syn cluster texDocGroup		contains=texPartZone,@texPartGroup
+ syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
+ syn cluster texChapterGroup		contains=texSectionZone,texParaZone
+ syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
+ syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
+ syn cluster texSubSubSectionGroup	contains=texParaZone
+ syn cluster texParaGroup		contains=texSubParaZone
+
+ syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	fold keepend contains=@texFoldGroup,@texDocGroup
+ syn region texPartZone			matchgroup=texSection start='\\part\>'		end='\n\ze\s*\\part\>'		fold keepend contains=@texFoldGroup,@texPartGroup
+ syn region texChapterZone		matchgroup=texSection start='\\chapter\>'	end='\n\ze\s*\\chapter\>'	fold keepend contains=@texFoldGroup,@texChapterGroup
+ syn region texSectionZone		matchgroup=texSection start='\\section\>'	end='\n\ze\s*\\section\>'	fold keepend contains=@texFoldGroup,@texSectionGroup
+ syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'	end='\n\ze\s*\\subsection\>'	fold keepend contains=@texFoldGroup,@texSubSectionGroup
+ syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'	end='\n\ze\s*\\subsubsection\>'	fold keepend contains=@texFoldGroup,@texSubSubSectionGroup
+ syn region texParaZone			matchgroup=texSection start='\\paragraph\>'	end='\n\ze\s*\\paragraph\>'	fold keepend contains=@texFoldGroup,@texParaGroup
+ syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'	end='\n\ze\s*\\subparagraph\>'	fold keepend contains=@texFoldGroup
+ syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'		fold contains=@texFoldGroup
+ syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'	fold contains=@texFoldGroup
 else
- syn match texSection		"\\\(sub\)*section\*\=\>"
- syn match texSection		"\\\(title\|author\|part\|chapter\|paragraph\|subparagraph\)\>"
- syn match texSection		"\\begin\s*{\s*abstract\s*}\|\\end\s*{\s*abstract\s*}"
+ syn match texSection			"\\\(sub\)*section\*\=\>"
+ syn match texSection			"\\\(part\|chapter\|paragraph\|subparagraph\)\>"
+ syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*\ze{' end='}'		contains=@texFoldGroup
+ syn match texSection			"\\begin\s*{\s*abstract\s*}\|\\end\s*{\s*abstract\s*}"
 endif
 
 " Bad Math (mismatched): {{{1
@@ -263,7 +280,7 @@
 
 " Math Zones: {{{1
 if !exists("tex_no_math")
- " TexNewMathZone: creates a mathzone with the given suffix and mathzone name. {{{2
+ " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
  "                 Starred forms are created if starform is true.  Starred
  "                 forms have syntax group and synchronization groups with a
  "                 "S" appended.  Handles: cluster, syntax, sync, and HiLink.
diff --git a/src/edit.c b/src/edit.c
index 41214b8..fe130e6 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -32,14 +32,15 @@
 #define CTRL_X_CMDLINE		11
 #define CTRL_X_FUNCTION		12
 #define CTRL_X_OCCULT		13
-#define CTRL_X_LOCAL_MSG	14	/* only used in "ctrl_x_msgs" */
+#define CTRL_X_SPELL		14
+#define CTRL_X_LOCAL_MSG	15	/* only used in "ctrl_x_msgs" */
 
 #define CTRL_X_MSG(i) ctrl_x_msgs[(i) & ~CTRL_X_WANT_IDENT]
 
 static char *ctrl_x_msgs[] =
 {
     N_(" Keyword completion (^N^P)"), /* ctrl_x_mode == 0, ^P/^N compl. */
-    N_(" ^X mode (^E^Y^L^]^F^I^K^D^U^V^N^P)"),
+    N_(" ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"),
     NULL,
     N_(" Whole line completion (^L^N^P)"),
     N_(" File name completion (^F^N^P)"),
@@ -52,6 +53,7 @@
     N_(" Command-line completion (^V^N^P)"),
     N_(" User defined completion (^U^N^P)"),
     N_(" Occult completion (^O^N^P)"),
+    N_(" Spelling suggestion (^S^N^P)"),
     N_(" Keyword Local completion (^N^P)"),
 };
 
@@ -152,7 +154,7 @@
 static void ins_reg __ARGS((void));
 static void ins_ctrl_g __ARGS((void));
 static void ins_ctrl_hat __ARGS((void));
-static int  ins_esc __ARGS((long *count, int cmdchar, int c));
+static int  ins_esc __ARGS((long *count, int cmdchar, int nomove));
 #ifdef FEAT_RIGHTLEFT
 static void ins_ctrl_ __ARGS((void));
 #endif
@@ -266,6 +268,7 @@
     int		inserted_space = FALSE;     /* just inserted a space */
     int		replaceState = REPLACE;
     int		did_restart_edit = restart_edit;
+    int		nomove = FALSE;		    /* don't move cursor on return */
 
     /* sleep before redrawing, needed for "CTRL-O :" that results in an
      * error message */
@@ -658,8 +661,9 @@
 	    ins_compl_prep(c);
 #endif
 
-	/* CTRL-\ CTRL-N goes to Normal mode, CTRL-\ CTRL-G goes to mode
-	 * selected with 'insertmode'.  */
+	/* CTRL-\ CTRL-N goes to Normal mode,
+	 * CTRL-\ CTRL-G goes to mode selected with 'insertmode',
+	 * CTRL-\ CTRL-O is like CTRL-O but without moving the cursor.  */
 	if (c == Ctrl_BSL)
 	{
 	    /* may need to redraw when no more chars available now */
@@ -669,8 +673,9 @@
 	    c = safe_vgetc();
 	    --no_mapping;
 	    --allow_keys;
-	    if (c != Ctrl_N && c != Ctrl_G)	/* it's something else */
+	    if (c != Ctrl_N && c != Ctrl_G && c != Ctrl_O)
 	    {
+		/* it's something else */
 		vungetc(c);
 		c = Ctrl_BSL;
 	    }
@@ -678,6 +683,12 @@
 		continue;
 	    else
 	    {
+		if (c == Ctrl_O)
+		{
+		    ins_ctrl_o();
+		    ins_at_eol = FALSE;	/* cursor keeps its column */
+		    nomove = TRUE;
+		}
 		count = 0;
 		goto doESCkey;
 	    }
@@ -787,7 +798,7 @@
 	    if (ins_at_eol && gchar_cursor() == NUL)
 		o_lnum = curwin->w_cursor.lnum;
 
-	    if (ins_esc(&count, cmdchar, c))
+	    if (ins_esc(&count, cmdchar, nomove))
 	    {
 #ifdef FEAT_AUTOCMD
 		if (cmdchar != 'r' && cmdchar != 'v')
@@ -1117,6 +1128,12 @@
 	    if (ctrl_x_mode != CTRL_X_FILES)
 		goto normalchar;
 	    goto docomplete;
+
+	case 's':	/* Spelling completion after ^X */
+	case Ctrl_S:
+	    if (ctrl_x_mode != CTRL_X_SPELL)
+		goto normalchar;
+	    goto docomplete;
 #endif
 
 	case Ctrl_L:	/* Whole line completion after ^X */
@@ -1799,7 +1816,8 @@
 		    || c == Ctrl_L || c == Ctrl_F || c == Ctrl_RSB
 		    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
 		    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
-		    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O);
+		    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+		    || c == Ctrl_S || c == 's');
 	case CTRL_X_SCROLL:
 	    return (c == Ctrl_Y || c == Ctrl_E);
 	case CTRL_X_WHOLE_LINE:
@@ -1827,6 +1845,8 @@
 #endif
 	case CTRL_X_OCCULT:
 	    return (c == Ctrl_O || c == Ctrl_P || c == Ctrl_N);
+	case CTRL_X_SPELL:
+	    return (c == Ctrl_S || c == Ctrl_P || c == Ctrl_N);
     }
     EMSG(_(e_internal));
     return FALSE;
@@ -2342,6 +2362,10 @@
 	    case Ctrl_O:
 		ctrl_x_mode = CTRL_X_OCCULT;
 		break;
+	    case 's':
+	    case Ctrl_S:
+		ctrl_x_mode = CTRL_X_SPELL;
+		break;
 	    case Ctrl_RSB:
 		ctrl_x_mode = CTRL_X_TAGS;
 		break;
@@ -2855,6 +2879,15 @@
 		ins_compl_add_matches(num_matches, matches, dir);
 	    break;
 
+	case CTRL_X_SPELL:
+#ifdef FEAT_SYN_HL
+	    num_matches = expand_spelling(first_match_pos.lnum,
+				 first_match_pos.col, compl_pattern, &matches);
+	    if (num_matches > 0)
+		ins_compl_add_matches(num_matches, matches, dir);
+#endif
+	    break;
+
 	default:	/* normal ^P/^N and ^X^L */
 	    /*
 	     * If 'infercase' is set, don't use 'smartcase' here
@@ -3496,6 +3529,18 @@
 	    if (compl_pattern == NULL)
 		return FAIL;
 	}
+	else if (ctrl_x_mode == CTRL_X_SPELL)
+	{
+#ifdef FEAT_SYN_HL
+	    compl_col = spell_word_start(startcol);
+	    if (compl_col == startcol)
+		return FAIL;
+	    compl_length = (int)curs_col - compl_col;
+	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
+	    if (compl_pattern == NULL)
+#endif
+		return FAIL;
+	}
 	else
 	{
 	    EMSG2(_(e_intern2), "ins_complete()");
@@ -6272,10 +6317,10 @@
  * insert.
  */
     static int
-ins_esc(count, cmdchar, c)
+ins_esc(count, cmdchar, nomove)
     long	*count;
     int		cmdchar;
-    int		c;	    /* typed character */
+    int		nomove;	    /* don't move cursor */
 {
     int		temp;
     static int	disabled_redraw = FALSE;
@@ -6353,18 +6398,20 @@
 
     /*
      * The cursor should end up on the last inserted character.
-     * Don't do it for CTRL-O or CTRL-L.
+     * Don't do it for CTRL-O, unless past the end of the line.
      */
-    if ((curwin->w_cursor.col != 0
+    if (!nomove
+	    && (curwin->w_cursor.col != 0
 #ifdef FEAT_VIRTUALEDIT
 		|| curwin->w_cursor.coladd > 0
 #endif
-	) && ((restart_edit == NUL && c != Ctrl_L)
-		|| (gchar_cursor() == NUL
+	       )
+	    && (restart_edit == NUL
+		   || (gchar_cursor() == NUL
 #ifdef FEAT_VISUAL
-		    && !VIsual_active
+		       && !VIsual_active
 #endif
-		    ))
+		      ))
 #ifdef FEAT_RIGHTLEFT
 	    && !revins_on
 #endif
diff --git a/src/option.c b/src/option.c
index ab66727..d1444fb 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2035,7 +2035,7 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)FALSE, (char_u *)0L}},
-    {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE|P_RBUF,
+    {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF,
 #ifdef FEAT_SYN_HL
 			    (char_u *)&p_spc, PV_SPC,
 			    {(char_u *)"[.?!]\\_[\\])'\"	 ]\\+", (char_u *)0L}
diff --git a/src/proto/spell.pro b/src/proto/spell.pro
index 1b47b31..2123440 100644
--- a/src/proto/spell.pro
+++ b/src/proto/spell.pro
@@ -13,7 +13,9 @@
 int spell_check_sps __ARGS((void));
 void spell_suggest __ARGS((void));
 void ex_spellrepall __ARGS((exarg_T *eap));
-void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount));
+void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount, int need_cap));
 char_u *eval_soundfold __ARGS((char_u *word));
 void ex_spelldump __ARGS((exarg_T *eap));
+int spell_word_start __ARGS((int startcol));
+int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp));
 /* vim: set ft=c : */
diff --git a/src/version.h b/src/version.h
index 85a221e..9d047e0 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 10)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 10, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 11)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 11, compiled "
