diff --git a/runtime/autoload/phpcomplete.vim b/runtime/autoload/phpcomplete.vim
index 1dbabc3..e5d910e 100644
--- a/runtime/autoload/phpcomplete.vim
+++ b/runtime/autoload/phpcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	PHP
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Apr 30
+" Last Change:	2006 May 9
 "
 "   TODO:
 "   - Class aware completion:
@@ -74,7 +74,7 @@
 		let file = getline(1, '$')
 		call filter(file,
 				\ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let jfile = join(file, ' ')
 		let int_values = split(jfile, 'class\s\+')
 		let int_classes = {}
@@ -85,33 +85,43 @@
 			endif
 		endfor
 
-		" Prepare list of functions from tags file
+		" Prepare list of classes from tags file
 		let ext_classes = {}
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		if fnames != ''
 			exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				" [:space:] thing: we don't have to be so strict when
-				" dealing with tags files - entries there were already
-				" checked by ctags.
-				let item = matchstr(field['text'], '^[^[:space:]]\+')
-				let ext_classes[item] = ''
+			if len(qflist) > 0
+				for field in qflist
+					" [:space:] thing: we don't have to be so strict when
+					" dealing with tags files - entries there were already
+					" checked by ctags.
+					let item = matchstr(field['text'], '^[^[:space:]]\+')
+					let ext_classes[item] = ''
+				endfor
+			endif
+		endif
+
+		" Prepare list of built in classes from g:php_builtin_functions
+		if !exists("g:php_omni_bi_classes")
+			let g:php_omni_bi_classes = {}
+			for i in keys(g:php_builtin_object_functions)
+				let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = ''
 			endfor
 		endif
 
-		call extend(int_classes, ext_classes)
+		let classes = sort(keys(int_classes))
+		let classes += sort(keys(ext_classes))
+		let classes += sort(keys(g:php_omni_bi_classes))
 
-		for m in sort(keys(int_classes))
+		for m in classes
 			if m =~ '^'.a:base
 				call add(res, m)
 			endif
 		endfor
 
-		let int_list = res
-
 		let final_menu = []
-		for i in int_list
+		for i in res
 			let final_menu += [{'word':i, 'kind':'c'}]
 		endfor
 
@@ -138,6 +148,19 @@
 				let classlocation = ''
 			endif
 
+			if classlocation == 'VIMPHP_BUILTINOBJECT'
+
+				for object in keys(g:php_builtin_object_functions)
+					if object =~ '^'.classname
+						let res += [{'word':substitute(object, '.*::', '', ''),
+							   	\    'info': g:php_builtin_object_functions[object]}]
+					endif
+				endfor
+
+				return res
+
+			endif
+
 			if filereadable(classlocation)
 				let classfile = readfile(classlocation)
 				let classcontent = ''
@@ -154,7 +177,7 @@
 				" Functions declared with public keyword or without any
 				" keyword are public
 				let functions = filter(deepcopy(sccontent),
-						\ 'v:val =~ "^\\s*\\(public\\s\\*\\)\\?function"')
+						\ 'v:val =~ "^\\s*\\(static\\s\\+\\|public\\s\\+\\)*function"')
 				let jfuncs = join(functions, ' ')
 				let sfuncs = split(jfuncs, 'function\s\+')
 				let c_functions = {}
@@ -185,7 +208,6 @@
 				let all_values = {}
 				call extend(all_values, c_functions)
 				call extend(all_values, c_variables)
-				call extend(all_values, g:php_builtin_object_functions)
 
 				for m in sort(keys(all_values))
 					if m =~ '^'.a:base && m !~ '::'
@@ -244,23 +266,25 @@
 
 		" ctags has good support for PHP, use tags file for external
 		" variables
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let ext_vars = {}
 		if fnames != ''
 			let sbase = substitute(a:base, '^\$', '', '')
 			exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				let item = matchstr(field['text'], '^[^[:space:]]\+')
-				" Add -> if it is possible object declaration
-				let classname = ''
-				if field['text'] =~ item.'\s*=\s*new\s\+'
-					let item = item.'->'
-					let classname = matchstr(field['text'],
-							\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
-				endif
-				let ext_vars[adddollar.item] = classname
-			endfor
+			if len(qflist) > 0
+				for field in qflist
+					let item = matchstr(field['text'], '^[^[:space:]]\+')
+					" Add -> if it is possible object declaration
+					let classname = ''
+					if field['text'] =~ item.'\s*=\s*new\s\+'
+						let item = item.'->'
+						let classname = matchstr(field['text'],
+								\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
+					endif
+					let ext_vars[adddollar.item] = classname
+				endfor
+			endif
 		endif
 
 		" Now we have all variables in int_vars dictionary
@@ -270,7 +294,7 @@
 		let file = getline(1, '$')
 		call filter(file,
 				\ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let jfile = join(file, ' ')
 		let int_values = split(jfile, 'function\s\+')
 		let int_functions = {}
@@ -287,14 +311,16 @@
 		if fnames != ''
 			exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				" File name
-				let item = matchstr(field['text'], '^[^[:space:]]\+')
-				let fname = matchstr(field['text'], '\t\zs\f\+\ze')
-				let prototype = matchstr(field['text'],
-						\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
-				let ext_functions[item.'('] = prototype.') - '.fname
-			endfor
+			if len(qflist) > 0
+				for field in qflist
+					" File name
+					let item = matchstr(field['text'], '^[^[:space:]]\+')
+					let fname = matchstr(field['text'], '\t\zs\f\+\ze')
+					let prototype = matchstr(field['text'],
+							\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
+					let ext_functions[item.'('] = prototype.') - '.fname
+				endfor
+			endif
 		endif
 
 		let all_values = {}
@@ -375,23 +401,25 @@
 		call extend(int_vars,g:php_builtin_vars)
 
 		" ctags has support for PHP, use tags file for external variables
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let ext_vars = {}
 		if fnames != ''
 			let sbase = substitute(a:base, '^\$', '', '')
 			exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				let item = '$'.matchstr(field['text'], '^[^[:space:]]\+')
-				let m_menu = ''
-				" Add -> if it is possible object declaration
-				if field['text'] =~ item.'\s*=\s*new\s\+'
-					let item = item.'->'
-					let m_menu = matchstr(field['text'],
-							\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
-				endif
-				let ext_vars[item] = m_menu
-			endfor
+			if len(qflist) > 0
+				for field in qflist
+					let item = '$'.matchstr(field['text'], '^[^[:space:]]\+')
+					let m_menu = ''
+					" Add -> if it is possible object declaration
+					if field['text'] =~ item.'\s*=\s*new\s\+'
+						let item = item.'->'
+						let m_menu = matchstr(field['text'],
+								\ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze')
+					endif
+					let ext_vars[item] = m_menu
+				endfor
+			endif
 		endif
 
 		call extend(int_vars, ext_vars)
@@ -433,7 +461,7 @@
 		let file = getline(1, '$')
 		call filter(file,
 				\ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("')
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let jfile = join(file, ' ')
 		let int_values = split(jfile, 'function\s\+')
 		let int_functions = {}
@@ -450,14 +478,16 @@
 		if fnames != ''
 			exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				" File name
-				let item = matchstr(field['text'], '^[^[:space:]]\+')
-				let fname = matchstr(field['text'], '\t\zs\f\+\ze')
-				let prototype = matchstr(field['text'],
-						\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
-				let ext_functions[item.'('] = prototype.') - '.fname
-			endfor
+			if len(qflist) > 0
+				for field in qflist
+					" File name
+					let item = matchstr(field['text'], '^[^[:space:]]\+')
+					let fname = matchstr(field['text'], '\t\zs\f\+\ze')
+					let prototype = matchstr(field['text'],
+							\ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?')
+					let ext_functions[item.'('] = prototype.') - '.fname
+				endfor
+			endif
 		endif
 
 		" All functions
@@ -480,15 +510,17 @@
 		endfor
 
 		" Prepare list of constants from tags file
-		let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+		let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 		let ext_constants = {}
 		if fnames != ''
 			exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames
 			let qflist = getqflist()
-			for field in qflist
-				let item = matchstr(field['text'], '^[^[:space:]]\+')
-				let ext_constants[item] = ''
-			endfor
+			if len(qflist) > 0
+				for field in qflist
+					let item = matchstr(field['text'], '^[^[:space:]]\+')
+					let ext_constants[item] = ''
+				endfor
+			endif
 		endif
 
 		" All constants
@@ -558,7 +590,7 @@
 	endwhile
 
 	" OK, first way failed, now check tags file(s)
-	let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
+	let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
 	exe 'silent! vimgrep /^'.object.'.*\$'.object.'.*=\s*new\s\+.*\tv\(\t\|$\)/j '.fnames
 	let qflist = getqflist()
 	if len(qflist) == 0
@@ -573,6 +605,17 @@
 endfunction
 " }}}
 function! phpcomplete#GetClassLocation(classname) " {{{
+	" Check classname may be name of built in object
+	if !exists("g:php_omni_bi_classes")
+		let g:php_omni_bi_classes = {}
+		for i in keys(g:php_builtin_object_functions)
+			let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = ''
+		endfor
+	endif
+	if has_key(g:php_omni_bi_classes, a:classname)
+		return 'VIMPHP_BUILTINOBJECT'
+	endif
+
 	" Get class location
 	for fname in tagfiles()
 		let fhead = fnamemodify(fname, ":h")
@@ -583,8 +626,12 @@
 		let fname = escape(fname, " \\")
 		exe 'silent! vimgrep /^'.a:classname.'.*\tc\(\t\|$\)/j '.fname
 		let qflist = getqflist()
-		" As in GetClassName we can manage only one element
-		let classlocation = matchstr(qflist[0]['text'], '\t\zs\f\+\ze\t')
+		" As in GetClassName we can manage only one element if it exists
+		if len(qflist) > 0
+			let classlocation = matchstr(qflist[0]['text'], '\t\zs\f\+\ze\t')
+		else
+			return ''
+		endif
 		" And only one class location
 		if classlocation != ''
 			let classlocation = fhead.classlocation
@@ -614,6 +661,7 @@
 	else
 		let extends_class = ''
 	endif
+	call search('{')
 	normal! %
 	let classc = getline(cfline, ".")
 	let classcontent = join(classc, "\n")
diff --git a/runtime/autoload/sqlcomplete.vim b/runtime/autoload/sqlcomplete.vim
index 146cf21..c803932 100644
--- a/runtime/autoload/sqlcomplete.vim
+++ b/runtime/autoload/sqlcomplete.vim
@@ -1,8 +1,8 @@
 " Vim OMNI completion script for SQL
 " Language:    SQL
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     4.0
-" Last Change: Wed Apr 26 2006 3:00:06 PM
+" Version:     5.0
+" Last Change: Mon Jun 05 2006 3:30:04 PM
 " Usage:       For detailed help
 "              ":help sql.txt" 
 "              or ":help ft-sql-omni" 
@@ -22,7 +22,7 @@
 if exists('g:loaded_sql_completion')
     finish 
 endif
-let g:loaded_sql_completion = 40
+let g:loaded_sql_completion = 50
 
 " Maintains filename of dictionary
 let s:sql_file_table        = ""
@@ -113,7 +113,7 @@
                 " If lastword has already been set for column completion
                 " break from the loop, since we do not also want to pickup
                 " a table name if it was also supplied.
-                if lastword != -1 && compl_type == 'column'
+                if lastword != -1 && compl_type == 'column' 
                     break
                 endif
                 " If column completion was specified stop at the "." if
@@ -176,11 +176,19 @@
             return []
         endif
 
-        if s:sql_file_{compl_type} == ""
-            let compl_type = substitute(compl_type, '\w\+', '\u&', '')
-            let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type)
+        " Allow the user to override the dbext plugin to specify whether
+        " the owner/creator should be included in the list
+        let saved_dbext_show_owner      = 1
+        if exists('g:dbext_default_dict_show_owner')
+            let saved_dbext_show_owner  = g:dbext_default_dict_show_owner
         endif
-        let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type)
+        let g:dbext_default_dict_show_owner = g:omni_sql_include_owner
+
+        let compl_type_uc = substitute(compl_type, '\w\+', '\u&', '')
+        if s:sql_file_{compl_type} == ""
+            let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
+        endif
+        let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
         if s:sql_file_{compl_type} != ""
             if filereadable(s:sql_file_{compl_type})
                 let compl_list = readfile(s:sql_file_{compl_type})
@@ -194,7 +202,9 @@
                 " endif
             endif
         endif
-    elseif compl_type == 'column'
+
+        let g:dbext_default_dict_show_owner = saved_dbext_show_owner
+    elseif compl_type =~? 'column'
 
         " This type of completion relies upon the dbext.vim plugin
         if s:SQLCCheck4dbext() == -1
@@ -209,33 +219,88 @@
             let base = s:save_prev_table
         endif
 
-        if base != ""
-            let compl_list        = s:SQLCGetColumns(base, '')
+        let owner  = ''
+        let column = ''
+
+        if base =~ '\.'
+            " Check if the owner/creator has been specified
+            let owner  = matchstr( base, '^\zs.*\ze\..*\..*' )
+            let table  = matchstr( base, '^\(.*\.\)\?\zs.*\ze\..*' )
+            let column = matchstr( base, '.*\.\zs.*' )
+
+            " It is pretty well impossible to determine if the user
+            " has entered:
+            "    owner.table
+            "    table.column_prefix
+            " So there are a couple of things we can do to mitigate 
+            " this issue.
+            "    1.  Check if the dbext plugin has the option turned
+            "        on to even allow owners
+            "    2.  Based on 1, if the user is showing a table list
+            "        and the DrillIntoTable (using <C-Right>) then 
+            "        this will be owner.table.  In this case, we can
+            "        check to see the table.column exists in the 
+            "        cached table list.  If it does, then we have
+            "        determined the user has actually chosen 
+            "        owner.table, not table.column_prefix.
+            let found = -1
+            if g:omni_sql_include_owner == 1 && owner == ''
+                if filereadable(s:sql_file_table)
+                    let tbl_list = readfile(s:sql_file_table)
+                    let found    = index( tbl_list, ((table != '')?(table.'.'):'').column)
+                endif
+            endif
+            " If the table.column was found in the table list, we can safely assume
+            " the owner was not provided and shift the items appropriately.
+            " OR
+            " If the user has indicated not to use table owners at all and
+            " the base ends in a '.' we know they are not providing a column
+            " name, so we can shift the items appropriately.
+            if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
+                let owner  = table
+                let table  = column
+                let column = ''
+            endif
+        else
+            let table  = base
+        endif
+
+        " Get anything after the . and consider this the table name
+        " If an owner has been specified, then we must consider the 
+        " base to be a partial column name
+        " let base  = matchstr( base, '^\(.*\.\)\?\zs.*' )
+
+        if table != ""
             let s:save_prev_table = base
-            let base              = ''
-        endif
-    elseif compl_type == 'column_csv'
+            let list_type         = ''
 
-        " This type of completion relies upon the dbext.vim plugin
-        if s:SQLCCheck4dbext() == -1
-            return []
-        endif
+            if compl_type == 'column_csv'
+                " Return one array element, with a comma separated
+                " list of values instead of multiple array entries
+                " for each column in the table.
+                let list_type     = 'csv'
+            endif
 
-        if base == ""
-            " The last time we displayed a column list we stored
-            " the table name.  If the user selects a column list 
-            " without a table name of alias present, assume they want
-            " the previous column list displayed.
-            let base = s:save_prev_table
-        endif
+            let compl_list  = s:SQLCGetColumns(table, list_type)
+            if column != ''
+                " If no column prefix has been provided and the table
+                " name was provided, append it to each of the items
+                " returned.
+                let compl_list = map(compl_list, "table.'.'.v:val")
+                if owner != ''
+                    " If an owner has been provided append it to each of the
+                    " items returned.
+                    let compl_list = map(compl_list, "owner.'.'.v:val")
+                endif
+            else
+                let base = ''
+            endif
 
-        if base != ""
-            let compl_list        = s:SQLCGetColumns(base, 'csv')
-            let s:save_prev_table = base
-            " Join the column array into 1 single element array
-            " but make the columns column separated
-            let compl_list        = [join(compl_list, ', ')]
-            let base              = ''
+            if compl_type == 'column_csv'
+                " Join the column array into 1 single element array
+                " but make the columns column separated
+                let compl_list        = [join(compl_list, ', ')]
+            endif
         endif
     elseif compl_type == 'resetCache'
         " Reset all cached items
@@ -256,7 +321,7 @@
     if base != ''
         " Filter the list based on the first few characters the user
         " entered
-        let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "^'.base.'"'
+        let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
         let compl_list = filter(deepcopy(compl_list), expr)
     endif
 
@@ -274,6 +339,8 @@
     else
         let syn_group_arr = g:omni_sql_precache_syntax_groups
     endif
+    " For each group specified in the list, precache all
+    " the sytnax items.
     if !empty(syn_group_arr)
         for group_name in syn_group_arr
             call s:SQLCGetSyntaxList(group_name)
@@ -444,9 +511,23 @@
     return cols
 endfunction
 
+function! s:SQLCGetObjectOwner(object) 
+    " The owner regex matches a word at the start of the string which is
+    " followed by a dot, but doesn't include the dot in the result.
+    " ^    - from beginning of line
+    " "\?  - ignore any quotes
+    " \zs  - start the match now
+    " \w\+ - get owner name
+    " \ze  - end the match
+    " "\?  - ignore any quotes
+    " \.   - must by followed by a .
+    let owner = matchstr( a:object, '^"\?\zs\w\+\ze"\?\.' )
+    return owner
+endfunction 
+
 function! s:SQLCGetColumns(table_name, list_type)
-    let table_name   = matchstr(a:table_name, '^\w\+')
-    let table_name   = matchstr(a:table_name, '^[a-zA-Z0-9_.]\+')
+    " Check if the table name was provided as part of the column name
+    let table_name   = matchstr(a:table_name, '^[a-zA-Z0-9_]\+\ze\.\?')
     let table_cols   = []
     let table_alias  = ''
     let move_to_top  = 1
diff --git a/runtime/doc/getscript.txt b/runtime/doc/getscript.txt
deleted file mode 100644
index d43b9be..0000000
--- a/runtime/doc/getscript.txt
+++ /dev/null
@@ -1,303 +0,0 @@
-*getscript.txt*	For Vim version 7.0.  Last change: 2006 Apr 30
-
-		Get the Latest VimScripts
-
-Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
-	  (remove NOSPAM from the email address)
-						*GetLatestVimScripts-copyright*
-Copyright: (c) 2004-2005 by Charles E. Campbell, Jr.
-	   The VIM LICENSE applies to GetLatestVimScripts.vim and
-	   GetLatestVimScripts.txt (see |copyright|) except use
-	   "GetLatestVimScripts" instead of "Vim".
-	   No warranty, express or implied.  Use At-Your-Own-Risk.
-
-
-==============================================================================
-1. Contents						*glvs-contents*
-
-	1. Contents.......................................: |glvs-contents|
-	2. GetLatestVimScripts Usage......................: |glvs|
-	3. GetLatestVimScripts Data File..................: |glvs-data|
-	4. GetLatestVimScripts Plugins....................: |glvs-plugins|
-	5. GetLatestVimScripts AutoInstall................: |glvs-autoinstall|
-	6. GetLatestVimScripts Algorithm..................: |glvs-alg|
-	7. GetLatestVimScripts History....................: |glvs-hist|
-
-
-==============================================================================
-2. GetLatestVimScripts Usage	      *getlatestvimscripts* *getscript* *glvs*
-
-	While in vim, type
->
-		:GetLatestVimScripts
-<
-	Unless its been defined elsewhere,
->
-		:GLVS
-<
-	will also work.
-
-	The script will attempt to update and, if so directed, automatically
-	install scripts from http://vim.sourceforge.net/.  To do so it will
-	peruse a file, [.vim|vimfiles]/GetLatest/GetLatestVimScripts.dat
-	(see |glvs-data|), and examine plugins in your [.vim|vimfiles]/plugin
-	directory (see |glvs-plugins|).
-
-	Scripts which have been downloaded will appear in the .../GetLatest
-	subdirectory.
-
-	The <GetLatestVimScripts.dat> file will be automatically be updated to
-	reflect the latest version of script(s) so downloaded.
-
-
-==============================================================================
-3. GetLatestVimScripts Data File	*getlatestvimscripts-data* *glvs-data*
-
-	The Data file has a header which should appear as:
->
-		ScriptID SourceID Filename
-		--------------------------
-<
-	Below that are three columns; the first two are numeric followed by a
-	text column.
-
-	The first number on each line gives the script's ScriptID.  When
-	you're about to use a web browser to look at scripts on
-	http://vim.sf.net/, just before you click on the script's link, you'll
-	see a line resembling
-
-	http://vim.sourceforge.net/scripts/script.php?script_id=40
-
-	The "40" happens to be a ScriptID that GetLatestVimScripts needs to
-	download the associated page.
-
-	The second number on each line gives the script's SourceID.  The
-	SourceID records the count of uploaded scripts as determined by
-	vim.sf.net; hence it serves to indicate "when" a script was uploaded.
-	Setting the SourceID to 1 insures that GetLatestVimScripts will assume
-	that the script it has is out-of-date.
-
-	The SourceID is extracted by GetLatestVimScripts from the script's
-	page on vim.sf.net; whenever its greater than the one stored in the
-	GetLatestVimScripts.dat file, the script will be downloaded.
-
-	If your script's author has included a special comment line in his/her
-	plugin, the plugin itself will be used by GetLatestVimScripts to build
-	your <GetLatestVimScripts.dat> file, including any dependencies on
-	other scripts it may have.
-
-	If your comment field begins with :AutoInstall:, GetLatestVimScripts
-	will attempt to automatically install the script.  Thus,
-	GetLatestVimScripts thus provides a comprehensive ability to keep your
-	plugins up-to-date!
-
-==============================================================================
-4. GetLatestVimScripts Plugins	*getlatestvimscripts-plugins* *glvs-plugins*
-
-
-	If a plugin author includes the following comment anywhere in their
-	plugin, GetLatestVimScripts will find it and use it to build user's
-	GetLatestVimScripts.dat files:
->
-				     src_id
-					    v
-		" GetLatestVimScripts: ### ### yourscriptname
-					^
-				    scriptid
-<
-	As an author, you should include such a line in to refer to your own
-	script plus any additional lines describing any plugin dependencies it
-	may have.  Same format, of course!
-
-	If your command is auto-installable (see |glvs-autoinstall|), and most
-	scripts are, then you may include :AutoInstall: at the start of
-	"yourscriptname".
-
-	GetLatestVimScript commands for those scripts are then appended, if
-	not already present, to the user's GetLatest/GetLatestVimScripts.dat
-	file.  Its a relatively painless way to automate the acquisition of
-	any scripts your plugins depend upon.
-
-	Now, as an author, you probably don't want GetLatestVimScripts to
-	download your own scripts for you yourself, thereby overwriting your
-	not-yet-released hard work.  GetLatestVimScripts provides a solution
-	for this:  put
->
-		0 0 yourscriptname
-<
-	into your <GetLatestVimScripts.dat> file and GetLatestVimScripts will
-	skip examining the "yourscriptname" scripts for those
-	GetLatestVimScript comment lines.  As a result, those lines won't be
-	inadvertently installed into your <GetLatestVimScripts.dat> file and
-	subsequently used to download your own scripts.  This is especially
-	important to do if you've included the :AutoInstall: option.
-
-	Be certain to use the same "yourscriptname" in the "0 0
-	yourscriptname" line as you've used in your GetLatestVimScript
-	comment!
-
-
-==============================================================================
-5. GetLatestVimScripts AutoInstall	*getlatestvimscripts-autoinstall*
-					*glvs-autoinstall*
-
-	GetLatestVimScripts now supports "AutoInstall".  Not all scripts are
-	supportive of auto-install, as they may have special things you need
-	to do to install them (please refer to the script's "install"
-	directions).  On the other hand, most scripts will be
-	auto-installable.
-
-	To let GetLatestVimScripts do an autoinstall, the data file's comment
-	field should begin with (surrounding blanks are ignored):
-
-		:AutoInstall:
-
-	Both colons are needed, and it should begin the comment
-	(yourscriptname) field.
-
-	One may prevent any autoinstalling by putting the following line
-	in your <.vimrc>:
->
-		let g:GetLatestVimScripts_allowautoinstall= 0
-<
-
-	With :AutoInstall: enabled, as it is by default, files which end with
-
-	  ---.tar.bz2  : decompressed and untarred in [.vim|vimfiles] directory
-	  ---.tar.gz   : decompressed and untarred in [.vim|vimfiles] directory
-	  ---.vim.bz2  : decompressed and moved to the .vim/plugin directory
-	  ---.vim.gz   : decompressed and moved to the .vim/plugin directory
-	  ---.zip      : unzipped in [.vim|vimfiles] directory
-	  ---.vim      : moved to [.vim|vimfiles]/plugin directory
-
-	and which merely need to have their components placed by the
-	untar/gunzip or move-to-plugin-directory process should be
-	auto-installable.
-
-	When is a script not auto-installable?  Let me give an example:
->
-		[.vim|vimfiles]/after/syntax/blockhl.vim
-<
-	The <blockhl.vim> script provides block highlighting for C/C++
-	programs; it is available at:
->
-		http://vim.sourceforge.net/scripts/script.php?script_id=104
-<
-	Currently, vim's after/syntax only supports by-filetype scripts (in
-	blockhl.vim's case, that's after/syntax/c.vim).  Hence, auto-install
-	would possibly overwrite the current user's after/syntax/c.vim file.
-
-	In my own case, I use <aftersyntax.vim> (renamed to
-	after/syntax/c.vim) to allow a after/syntax/c/ directory:
->
-		http://vim.sourceforge.net/scripts/script.php?script_id=1023
-<
-	The script allows multiple syntax files to exist separately in the
-	after/syntax/c subdirectory.  I can't bundle aftersyntax.vim in and
-	build an appropriate tarball for auto-install because of the potential
-	for the after/syntax/c.vim contained in it to overwrite a user's
-	c.vim.
-
-
-==============================================================================
-6. GetLatestVimScripts Algorithm	*getlatestvimscripts-algorithm*
-								*glvs-alg*
-
-	The Vim sourceforge page dynamically creates a page by keying off of
-	the so-called script-id.  Within the webpage of
-
-		http://vim.sourceforge.net/scripts/script.php?script_id=40
-
-	is a line specifying the latest source-id (src_id).  The source
-	identifier numbers are always increasing, hence if the src_id is
-	greater than the one recorded for the script in GetLatestVimScripts
-	then its time to download a newer copy of that script.
-
-	GetLatestVimScripts will then download the script and update its
-	internal database of script ids, source ids, and scriptnames.
-
-	The AutoInstall process will:
-
-		Move the file from GetLatest/ to the following directory
-			Unix   : $HOME/.vim
-			Windows: $HOME\vimfiles
-
-		if the downloaded file ends with ".bz2"
-			bunzip2 it
-		else if the downloaded file ends with ".gz"
-			gunzip it
-		if the resulting file ends with ".zip"
-			unzip it
-		else if the resulting file ends with ".tar"
-			tar -oxvf it
-		else if the resulting file ends with ".vim"
-			move it to the plugin subdirectory
-
-
-==============================================================================
-7. GetLatestVimScripts History       *getlatestvimscripts-history* *glvs-hist*
-
-	v20 Dec 23, 2005 : * Eric Haarbauer found&fixed a bug with unzip use;
-			     unzip needs the -o flag to overwrite.
-	v19 Nov 28, 2005 : * v18's GetLatestVimScript line accessed the wrong
-			     script! Fixed.
-	v18 Mar 21, 2005 : * bugfix to automatic database construction
-			   * bugfix - nowrapscan caused an error
-			     (tnx to David Green for the fix)
-	    Apr 01, 2005   * if shell is bash, "mv" instead of "ren" used in
-			     :AutoInstall:s, even though its o/s is windows
-	    Apr 01, 2005   * when downloading errors occurred, GLVS was
-			     terminating early.  It now just goes on to trying
-			     the next script (after trying three times to
-			     download a script description page)
-	    Apr 20, 2005   * bugfix - when a failure to download occurred,
-			     GetLatestVimScripts would stop early and claim that
-			     everything was current.  Fixed.
-	v17 Aug 25, 2004 : * g:GetLatestVimScripts_allowautoinstall, which
-			     defaults to 1, can be used to prevent all
-			     :AutoInstall:
-	v16 Aug 25, 2004 : * made execution of bunzip2/gunzip/tar/zip silent
-			   * fixed bug with :AutoInstall: use of helptags
-	v15 Aug 24, 2004 : * bugfix: the "0 0 comment" download prevention wasn't
-			     always preventing downloads (just usually).  Fixed.
-	v14 Aug 24, 2004 : * bugfix -- helptags was using dotvim, rather than
-			     s:dotvim.	Fixed.
-	v13 Aug 23, 2004 : * will skip downloading a file if its scriptid or srcid
-			     is zero.  Useful for script authors; that way their
-			     own GetLatestVimScripts activity won't overwrite
-			     their scripts.
-	v12 Aug 23, 2004 : * bugfix - a "return" got left in the distribution that
-			     was intended only for testing.  Removed, now works.
-			   * :AutoInstall: implemented
-	v11 Aug 20, 2004 : * GetLatestVimScripts is now a plugin:
-			   * :GetLatestVimScripts command
-			   * (runtimepath)/GetLatest/GetLatestVimScripts.dat
-			     now holds scripts that need updating
-	v10 Apr 19, 2004 : * moved history from script to doc
-	v9  Jan 23, 2004 :   windows (win32/win16/win95) will use
-			     double quotes ("") whereas other systems will use
-			     single quotes ('') around the urls in calls via wget
-	v8  Dec 01, 2003 :   makes three tries at downloading
-	v7  Sep 02, 2003 :   added error messages if "Click on..." or "src_id="
-			     not found in downloaded webpage
-			     Uses t_ti, t_te, and rs to make progress visible
-	v6  Aug 06, 2003 :   final status messages now display summary of work
-			     ( "Downloaded someqty scripts" or
-			       "Everything was current")
-			     Now GetLatestVimScripts is careful about downloading
-			     GetLatestVimScripts.vim itself!
-			     (goes to <NEW_GetLatestVimScripts.vim>)
-	v5  Aug 04, 2003 :   missing an endif near bottom
-	v4  Jun 17, 2003 :   redraw! just before each "considering" message
-	v3  May 27, 2003 :   Protects downloaded files from errant shell
-			     expansions with single quotes: '...'
-	v2  May 14, 2003 :   extracts name of item to be obtained from the
-			     script file.  Uses it instead of comment field
-			     for output filename; comment is used in the
-			     "considering..." line and is now just a comment!
-			   * Fixed a bug: a string-of-numbers is not the
-			     same as a number, so I added zero to them
-			     and they became numbers.  Fixes comparison.
-
-==============================================================================
-vim:tw=78:ts=8:ft=help
diff --git a/runtime/doc/xxd.man b/runtime/doc/xxd.man
index 935751c..057c8e9 100644
--- a/runtime/doc/xxd.man
+++ b/runtime/doc/xxd.man
@@ -86,13 +86,12 @@
               found in hexdump.
 
        -s [+][-]seek
-              start at <seek> bytes abs. (or rel.) infile offset.   +  fRindi-
-              cates  that the seek is relative to the current stdin file posi-
-              tion (meaningless when not reading  from  stdin).   -  indicates
-              that the seek should be that many characters from the end of the
-              input (or if combined with +:  before  the  current  stdin  file
-              position).   Without  -s  option, xxd starts at the current file
-              position.
+              start at <seek> bytes abs. (or rel.) infile offset.  + indicates
+              that  the  seek  is  relative to the current stdin file position
+              (meaningless when not reading from stdin).  - indicates that the
+              seek  should  be  that many characters from the end of the input
+              (or if combined with +: before the current stdin file position).
+              Without -s option, xxd starts at the current file position.
 
        -u     use upper case hex letters. Default is lower case.
 
@@ -101,20 +100,20 @@
 
 CAVEATS
        xxd -r has some builtin magic while evaluating line number information.
-       If  the  output  file is seekable, then the linenumbers at the start of
-       each hexdump line may be out of order, lines may be missing,  or  over-
-       lapping.  In these cases xxd will lseek(2) to the next position. If the
-       output file is not seekable, only  gaps  are  allowed,  which  will  be
+       If the output file is seekable, then the linenumbers at  the  start  of
+       each  hexdump  line may be out of order, lines may be missing, or over-
+       lapping. In these cases xxd will lseek(2) to the next position. If  the
+       output  file  is  not  seekable,  only  gaps are allowed, which will be
        filled by null-bytes.
 
        xxd -r never generates parse errors. Garbage is silently skipped.
 
-       When  editing hexdumps, please note that xxd -r skips everything on the
+       When editing hexdumps, please note that xxd -r skips everything on  the
        input line after reading enough columns of hexadecimal data (see option
-       -c).  This  also means, that changes to the printable ascii (or ebcdic)
-       columns are always ignored. Reverting a  plain  (or  postscript)  style
-       hexdump  with  xxd  -r -p does not depend on the correct number of col-
-       umns. Here anything that looks like a  pair  of  hex-digits  is  inter-
+       -c). This also means, that changes to the printable ascii  (or  ebcdic)
+       columns  are  always  ignored.  Reverting a plain (or postscript) style
+       hexdump with xxd -r -p does not depend on the correct  number  of  col-
+       umns.  Here  anything  that  looks  like a pair of hex-digits is inter-
        preted.
 
        Note the difference between
@@ -122,28 +121,28 @@
        and
        % xxd -i < file
 
-       xxd  -s +seek may be different from xxd -s seek, as lseek(2) is used to
+       xxd -s +seek may be different from xxd -s seek, as lseek(2) is used  to
        "rewind" input.  A '+' makes a difference if the input source is stdin,
-       and  if  stdin's  file  position is not at the start of the file by the
-       time xxd is started and given its input.  The  following  examples  may
+       and if stdin's file position is not at the start of  the  file  by  the
+       time  xxd  is  started and given its input.  The following examples may
        help to clarify (or further confuse!)...
 
-       Rewind  stdin before reading; needed because the `cat' has already read
+       Rewind stdin before reading; needed because the `cat' has already  read
        to the end of stdin.
        % sh -c "cat > plain_copy; xxd -s 0 > hex_copy" < file
 
-       Hexdump from file position 0x480 (=1024+128)  onwards.   The  `+'  sign
+       Hexdump  from  file  position  0x480 (=1024+128) onwards.  The `+' sign
        means "relative to the current position", thus the `128' adds to the 1k
        where dd left off.
-       % sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 >  hex_snippet"
+       %  sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet"
        < file
 
        Hexdump from file position 0x100 ( = 1024-768) on.
        % sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet"
        < file
 
-       However, this is a rare situation and the use of `+' is rarely  needed.
-       The  author  prefers  to  monitor  the  effect of xxd with strace(1) or
+       However,  this is a rare situation and the use of `+' is rarely needed.
+       The author prefers to monitor the  effect  of  xxd  with  strace(1)  or
        truss(1), whenever -s is used.
 
 EXAMPLES
@@ -153,7 +152,7 @@
        Print 3 lines (hex 0x30 bytes) from the end of file.
        % xxd -s -0x30 file
 
-       Print 120 bytes as continuous hexdump with 40 octets per line.
+       Print 120 bytes as continuous hexdump with 20 octets per line.
        % xxd -l 120 -ps -c 20 xxd.1
        2e54482058584420312022417567757374203139
        39362220224d616e75616c207061676520666f72
@@ -187,7 +186,7 @@
        % xxd -s 0x36 -l 13 -c 13 xxd.1
        0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
 
-       Create a 65537 byte file with all bytes 0x00, except for the  last  one
+       Create  a  65537 byte file with all bytes 0x00, except for the last one
        which is 'A' (hex 0x41).
        % echo "010000: 41" | xxd -r > file
 
@@ -197,7 +196,7 @@
        *
        000fffc: 0000 0000 40                   ....A
 
-       Create  a  1  byte  file containing a single 'A' character.  The number
+       Create a 1 byte file containing a single  'A'  character.   The  number
        after '-r -s' adds to the linenumbers found in the file; in effect, the
        leading bytes are suppressed.
        % echo "010000: 41" | xxd -r -s -0x10000 > file
@@ -239,7 +238,7 @@
        uuencode(1), uudecode(1), patch(1)
 
 WARNINGS
-       The tools weirdness matches its creators brain.  Use entirely  at  your
+       The  tools  weirdness matches its creators brain.  Use entirely at your
        own risk. Copy files. Trace it. Become a wizard.
 
 VERSION
diff --git a/runtime/keymap/tamil_tscii.vim b/runtime/keymap/tamil_tscii.vim
index 92dbdc9..df85a4e 100644
--- a/runtime/keymap/tamil_tscii.vim
+++ b/runtime/keymap/tamil_tscii.vim
@@ -1,7 +1,7 @@
 " Keymap file for the editing Tamil language files in TSCII encoding.
 "
 " Maintainer: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
-" Last updated: August 4, 2005
+" Last updated: 2006 June 17
 "
 " You will need a fixed width TSCII font to use this encoding.  The
 " Avarangal TSCII fixed width font (TSC_AvarangalFxd) is used to test
@@ -118,7 +118,7 @@
 si     <char-186><char-162>
 sii    <char-186><char-163>
 sI     <char-186><char-163>
-su     <char-204>
+su     <char-205>
 suu    <char-221>
 sU     <char-221>
 se     <char-166><char-186>
diff --git a/runtime/plugin/getscript.vim b/runtime/plugin/getscript.vim
deleted file mode 100644
index d00e59d..0000000
--- a/runtime/plugin/getscript.vim
+++ /dev/null
@@ -1,470 +0,0 @@
-" ---------------------------------------------------------------------
-" GetLatestVimScripts.vim
-"  Author:		Charles E. Campbell, Jr.
-"  Date:		Feb 15, 2006
-"  Version:		20
-"  Installing:	:help glvs-install
-"  Usage:		:help glvs
-"
-" GetLatestVimScripts: 642 1 :AutoInstall: GetLatestVimScripts.vim
-" ---------------------------------------------------------------------
-" Initialization:	{{{1
-" if you're sourcing this file, surely you can't be
-" expecting vim to be in its vi-compatible mode
-if &cp
-  if &verbose
-	echo "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
-  endif
- finish
-endif
-let s:keepfo  = &fo
-let s:keepcpo = &cpo
-set cpo&vim
-
-if exists("loaded_GetLatestVimScripts")
- finish
-endif
-let g:loaded_GetLatestVimScripts= "v20"
-
-" ---------------------------------------------------------------------
-"  Global Variables: {{{1
-" allow user to change the command for obtaining scripts (does fetch work?)
-if !exists("g:GetLatestVimScripts_wget")
- let g:GetLatestVimScripts_wget= "wget"
-endif
-if !exists("g:GetLatestVimScripts_options")
- let g:GetLatestVimScripts_options= "-q -O"
-endif
-if !exists("g:GetLatestVimScripts_allowautoinstall")
- let g:GetLatestVimScripts_allowautoinstall= 1
-endif
-
-"" For debugging:
-"let g:GetLatestVimScripts_wget    = "echo"
-"let g:GetLatestVimScripts_options = "options"
-
-" check if s:autoinstall is possible
-let s:autoinstall= ""
-if g:GetLatestVimScripts_allowautoinstall
-
- if (has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")) && &shell != "bash"
-  " windows (but not cygwin/bash)
-  let s:dotvim= "vimfiles"
-  if !exists("g:GetLatestVimScripts_mv")
-   let g:GetLatestVimScripts_mv= "ren"
-  endif
-
- else
-  " unix
-  let s:dotvim= ".vim"
-  if !exists("g:GetLatestVimScripts_mv")
-   let g:GetLatestVimScripts_mv= "mv"
-  endif
- endif
-
- if exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
-  let s:autoinstall= $HOME."/".s:dotvim
- endif
-" call Decho("s:autoinstall<".s:autoinstall.">")
-else
-" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled")
-endif
-
-" ---------------------------------------------------------------------
-"  Public Interface: {{{1
-com!        -nargs=0 GetLatestVimScripts call <SID>GetLatestVimScripts()
-silent! com -nargs=0 GLVS                call <SID>GetLatestVimScripts()
-
-" ---------------------------------------------------------------------
-"  GetOneScript: (Get Latest Vim Script) this function operates {{{1
-"    on the current line, interpreting two numbers and text as
-"    ScriptID, SourceID, and Filename.
-"    It downloads any scripts that have newer versions from vim.sf.net.
-fun! <SID>GetOneScript(...)
-"   call Dfunc("GetOneScript()")
-
- " set options to allow progress to be shown on screen
-  let t_ti= &t_ti
-  let t_te= &t_te
-  let rs  = &rs
-  set t_ti= t_te= nors
-
- " put current line on top-of-screen and interpret it into
- " a      script identifer  : used to obtain webpage
- "        source identifier : used to identify current version
- " and an associated comment: used to report on what's being considered
-  if a:0 >= 3
-   let scriptid = a:1
-   let srcid    = a:2
-   let cmmnt    = a:3
-"   call Decho("scriptid<".scriptid.">")
-"   call Decho("srcid   <".srcid.">")
-"   call Decho("cmmnt   <".cmmnt.">")
-  else
-   let curline  = getline(".")
-   let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)$'
-   try
-    let scriptid = substitute(curline,parsepat,'\1','e')
-   catch /^Vim\%((\a\+)\)\=:E486/
-   	let scriptid= 0
-   endtry
-   try
-    let srcid    = substitute(curline,parsepat,'\2','e')
-   catch /^Vim\%((\a\+)\)\=:E486/
-   	let srcid= 0
-   endtry
-   try
-    let cmmnt    = substitute(curline,parsepat,'\3','e')
-   catch /^Vim\%((\a\+)\)\=:E486/
-   	let cmmnt= ""
-   endtry
-"   call Decho("curline <".curline.">")
-"   call Decho("parsepat<".parsepat.">")
-"   call Decho("scriptid<".scriptid.">")
-"   call Decho("srcid   <".srcid.">")
-"   call Decho("cmmnt   <".cmmnt.">")
-  endif
-
-  if scriptid == 0 || srcid == 0
-   " When looking for :AutoInstall: lines, skip scripts that
-   " have  0 0 scriptname
-"   call Dret("GetOneScript : skipping a scriptid==srcid==0 line")
-   return
-  endif
-
-  let doautoinstall= 0
-  if cmmnt =~ ":AutoInstall:"
-"   call Decho("cmmnt<".cmmnt."> has :AutoInstall:...")
-   let aicmmnt= substitute(cmmnt,'\s\+:AutoInstall:\s\+',' ','')
-"   call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall)
-   if s:autoinstall != ""
-    let doautoinstall = g:GetLatestVimScripts_allowautoinstall
-   endif
-  else
-   let aicmmnt= cmmnt
-  endif
-"  call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall)
-
-  exe "norm z\<CR>"
-  redraw!
-"  call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
-  echomsg 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
-
-  " grab a copy of the plugin's vim.sf.net webpage
-  let scriptaddr = 'http://vim.sf.net/script.php?script_id='.scriptid
-  let tmpfile    = tempname()
-  let v:errmsg   = ""
-
-  " make three tries at downloading the description
-  let itry= 1
-  while itry <= 3
-"   	call Decho("try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
-  	if has("win32") || has("win16") || has("win95")
-"     call Decho("silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile.' "'.scriptaddr.'"')
-     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile.' "'.scriptaddr.'"'
-	else
-"     call Decho("silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile." '".scriptaddr."'")
-     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile." '".scriptaddr."'"
-	endif
-	if itry == 1
-    exe "silent vsplit ".tmpfile
-	else
-	 silent! e %
-	endif
-  
-   " find the latest source-id in the plugin's webpage
-   silent! 1
-   let findpkg= search('Click on the package to download','W')
-   if findpkg > 0
-    break
-   endif
-   let itry= itry + 1
-  endwhile
-"  call Decho(" --- end downloading tries while loop --- itry=".itry)
-
-  " testing: did finding /Click on the package.../ fail?
-  if findpkg == 0 || itry >= 4
-    silent q!
-    call delete(tmpfile)
-   " restore options
-	let &t_ti        = t_ti
-	let &t_te        = t_te
-	let &rs          = rs
-	let s:downerrors = s:downerrors + 1
-"  	call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">")
-  	echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">"
-"	call Dret("GetOneScript : srch for /Click on the package/ failed")
-  	return
-  endif
-"  call Decho('found "Click on the package to download"')
-
-  let findsrcid= search('src_id=','W')
-  if findsrcid == 0
-    silent q!
-    call delete(tmpfile)
-   " restore options
-	let &t_ti        = t_ti
-	let &t_te        = t_te
-	let &rs          = rs
-	let s:downerrors = s:downerrors + 1
-"  	call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">")
-  	echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">"
-"	call Dret("GetOneScript : srch for /src_id/ failed")
-  	return
-  endif
-"  call Decho('found "src_id=" in description page')
-
-  let srcidpat   = '^\s*<td class.*src_id=\(\d\+\)">\([^<]\+\)<.*$'
-  let latestsrcid= substitute(getline("."),srcidpat,'\1','')
-  let fname      = substitute(getline("."),srcidpat,'\2','')
-"  call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> fname<".fname.">")
-  silent q!
-  call delete(tmpfile)
-
-  " convert the strings-of-numbers into numbers
-  let srcid       = srcid       + 0
-  let latestsrcid = latestsrcid + 0
-"   call Decho("srcid=".srcid." latestsrcid=".latestsrcid." fname<".fname.">")
-
-  " has the plugin's most-recent srcid increased, which indicates
-  " that it has been updated
-  if latestsrcid > srcid
-   let s:downloads= s:downloads + 1
-   if fname == bufname("%")
-    " GetLatestVimScript has to be careful about downloading itself
-    let fname= "NEW_".fname
-   endif
-
-   " the plugin has been updated since we last obtained it, so download a new copy
-"   call Decho("...downloading new <".fname.">")
-   echomsg "...downloading new <".fname.">"
-   if has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")
-"    call Decho("windows: silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname.' "'.'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid.'"')
-    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname.' "'.'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid.'"'
-   else
-"    call Decho("unix: silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname." '".'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid."'")
-    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname." '".'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid."'"
-   endif
-
-   " AutoInstall: only if doautoinstall is so indicating
-   if doautoinstall
-"   	call Decho("attempting to do autoinstall: getcwd<".getcwd()."> filereadable(".fname.")=".filereadable(fname))
-	if filereadable(fname)
-"	 call Decho("move <".fname."> to ".s:autoinstall)
-"	 call Decho("DISABLED for testing")
-   	 exe "silent !"g:GetLatestVimScripts_mv." ".fname." ".s:autoinstall
-	 let curdir= escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
-	 exe "cd ".s:autoinstall
-	 if fname =~ '\.bz2$'
-"	  call Decho("attempt to bunzip2 ".fname)
-	  exe "silent !bunzip2 ".fname
-	  let fname= substitute(fname,'\.bz2$','','')
-	 elseif fname =~ '\.gz$'
-"	  call Decho("attempt to gunzip ".fname)
-	  exe "silent !gunzip ".fname
-	  let fname= substitute(fname,'\.gz$','','')
-	 endif
-	 if fname =~ '\.zip$'
-"	  call Decho("attempt to unzip ".fname)
-	  exe "silent !unzip -o".fname
-	 elseif fname =~ '\.tar$'
-"	  call Decho("attempt to untar ".fname)
-	  exe "silent !tar -oxvf ".fname
-	 endif
-	 if fname =~ '.vim$'
-"	  call Decho("attempt to simply move ".fname." to plugin")
-	  exe "silent !".g:GetLatestVimScripts_mv." ".fname." plugin"
-	 endif
-	 exe "helptags ../".s:dotvim."/doc"
-	 exe "cd ".curdir
-	endif
-   endif
-
-   " update the data in the <GetLatestVimScripts.dat> file
-   let modline=scriptid." ".latestsrcid." ".cmmnt
-   call setline(line("."),modline)
-"   call Decho("modline<".modline."> (updated GetLatestVimScripts.dat file)")
-  endif
-
- " restore options
-  let &t_ti= t_ti
-  let &t_te= t_te
-  let &rs  = rs
-
-"  call Dret("GetOneScript")
-endfun
-
-" ---------------------------------------------------------------------
-" GetLatestVimScripts: this function gets the latest versions of {{{1
-" scripts based on the list in
-"
-"   (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat
-fun! <SID>GetLatestVimScripts()
-"  call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">")
-
-" insure that wget is executable
-  if executable(g:GetLatestVimScripts_wget) != 1
-   echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system"
-"   call Dret("GetLatestVimScripts : wget not executable/availble")
-   return
-  endif
-
-  " Find the .../GetLatest sudirectory under the runtimepath
-  let rtplist= &rtp
-  while rtplist != ""
-   let datadir= substitute(rtplist,',.*$','','e')."/GetLatest"
-   if isdirectory(datadir)
-"   	call Decho("found directory<".datadir.">")
-    break
-   endif
-   unlet datadir
-   if rtplist =~ ','
-    let rtplist= substitute(rtplist,'^.\{-},','','e')
-   else
-   	let rtplist= ""
-   endif
-  endwhile
-
-  " Sanity checks: readability and writability
-  if !exists("datadir")
-   echoerr "Unable to find a GetLatest subdirectory on your runtimepath"
-"   call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory")
-   return
-  endif
-  if filewritable(datadir) != 2
-   echoerr "Your ".datadir." isn't writable"
-"   call Dret("GetLatestVimScripts : non-writable directory<".datadir.">")
-   return
-  endif
-  let datafile= datadir."/GetLatestVimScripts.dat"
-  if !filereadable(datafile)
-   echoerr "Your data file<".datafile."> isn't readable"
-"   call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">")
-   return
-  endif
-  if !filewritable(datafile)
-   echoerr "Your data file<".datafile."> isn't writable"
-"   call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
-   return
-  endif
-"  call Decho("datadir  <".datadir.">")
-"  call Decho("datafile <".datafile.">")
-
-  " don't let any events interfere (like winmanager's, taglist's, etc)
-  let eikeep= &ei
-  set ei=all
-
-  " record current directory, change to datadir, open split window with
-  " datafile
-  let origdir= getcwd()
-  exe "cd ".escape(substitute(datadir,'\','/','ge'),"|[]*'\" #")
-  split
-  exe "e ".escape(substitute(datafile,'\','/','ge'),"|[]*'\" #")
-  res 1000
-  let s:downloads = 0
-  let s:downerrors= 0
-
-  " Check on dependencies mentioned in plugins
-"  call Decho(" ")
-"  call Decho("searching plugins for GetLatestVimScripts dependencies")
-  let lastline    = line("$")
-  let plugins     = globpath(&rtp,"plugin/*.vim")
-  let foundscript = 0
-
-"  call Decho("plugins<".plugins."> lastline#".lastline)
-  while plugins != ""
-   let plugin = substitute(plugins,'\n.*$','','e')
-   let plugins= (plugins =~ '\n')? substitute(plugins,'^.\{-}\n\(.*\)$','\1','e') : ""
-   $
-"   call Decho(".dependency checking<".plugin."> line$=".line("$"))
-   exe "silent r ".plugin
-   while search('^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+','W') != 0
-    let newscript= substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
-    let llp1     = lastline+1
-
-	if newscript !~ '^"'
-	 " found a "GetLatestVimScripts: # #" line in the script; check if its already in the datafile
-	 let curline     = line(".")
-	 let noai_script = substitute(newscript,'\s*:AutoInstall:\s*','','e')
-	 exe llp1
-	 let srchline    = search('\<'.noai_script.'\>','bW')
-"	 call Decho("..newscript<".newscript."> noai_script<".noai_script."> srch=".srchline." lastline=".lastline)
-
-	 if srchline == 0
-	  " found a new script to permanently include in the datafile
-	  let keep_rega   = @a
-	  let @a          = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
-	  exe lastline."put a"
-	  echomsg "Appending <".@a."> to ".datafile." for ".newscript
-"	  call Decho("..APPEND (".noai_script.")<".@a."> to GetLatestVimScripts.dat")
-	  let @a          = keep_rega
-	  let lastline    = llp1
-	  let curline     = curline     + 1
-	  let foundscript = foundscript + 1
-"	 else	" Decho
-"	  call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
-	 endif
-
-	 let curline = curline + 1
-	 exe curline
-	endif
-
-   endwhile
-   let llp1= lastline + 1
-"   call Decho(".deleting lines: ".llp1.",$d")
-   exe "silent! ".llp1.",$d"
-  endwhile
-
-  if foundscript == 0
-   set nomod
-  endif
-
-  " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
-  set lz
-"  call Decho(" --- end of dependency checking loop --- ")
-"  call Decho("call GetOneScript on lines at end of datafile<".datafile.">")
-  1
-  /^-----/,$g/^\s*\d/call <SID>GetOneScript()
-
-  " Final report (an echomsg)
-  try
-   silent! ?^-------?
-  catch /^Vim\%((\a\+)\)\=:E114/
-"   call Dret("GetLatestVimScripts : nothing done!")
-   return
-  endtry
-  exe "norm! kz\<CR>"
-  let s:msg = ""
-  if s:downloads == 1
-  let s:msg = "Downloaded one updated script to <".datadir.">"
-  elseif s:downloads == 2
-   let s:msg= "Downloaded two updated scripts to <".datadir.">"
-  elseif s:downloads > 1
-   let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">"
-  else
-   let s:msg= "Everything was already current"
-  endif
-  if s:downerrors > 0
-   let s:msg= s:msg." (".s:downerrors." downloading errors)"
-  endif
-  echomsg s:msg
-  " save the file
-  if &mod
-   wq
-  else
-   q
-  endif
-
-  " restore events and current directory
-  exe "cd ".escape(substitute(origdir,'\','/','ge'),"|[]*'\" #")
-  let &ei= eikeep
-  set nolz
-"  call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
-endfun
-" ---------------------------------------------------------------------
-
-" Restore Options: {{{1
-let &fo = s:keepfo
-let &cpo= s:keepcpo
-
-" vim: ts=8 sts=2 fdm=marker nowrap
diff --git a/runtime/plugin/tarPlugin.vim b/runtime/plugin/tarPlugin.vim
index 506b431..e1b87fe 100644
--- a/runtime/plugin/tarPlugin.vim
+++ b/runtime/plugin/tarPlugin.vim
@@ -1,5 +1,6 @@
 " tarPlugin.vim -- a Vim plugin for browsing tarfiles
-" Copyright (c) 2002, Michael C. Toren <mct@toren.net>
+" Original was copyright (c) 2002, Michael C. Toren <mct@toren.net>
+" Modified by Charles E. Campbell, Jr.
 " Distributed under the GNU General Public License.
 "
 " Updates are available from <http://michael.toren.net/code/>.  If you
@@ -8,7 +9,17 @@
 " Also look there for further comments and documentation.
 "
 " This part only sets the autocommands.  The functions are in autoload/tar.vim.
+" ---------------------------------------------------------------------
+"  Load Once: {{{1
+if &cp || exists("g:loaded_tarPlugin")
+ finish
+endif
+let g:loaded_tarPlugin = 1
+let s:keepcpo          = &cpo
+set cpo&vim
 
+" ---------------------------------------------------------------------
+"  Public Interface: {{{1
 augroup tar
   au!
   au BufReadCmd   tarfile:*	call tar#Read(expand("<amatch>"), 1)
@@ -30,4 +41,8 @@
   au BufReadCmd   *.tgz		call tar#Browse(expand("<amatch>"))
 augroup END
 
-" vim: ts=8
+" ---------------------------------------------------------------------
+" Restoration And Modelines: {{{1
+" vim: fdm=marker
+let &cpo= s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/syntax/mysql.vim b/runtime/syntax/mysql.vim
index 68b8e9d..aa123b7 100644
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -249,6 +249,7 @@
 syn region mysqlFunction	 start="subdate(" end=")" contains=ALL
 syn region mysqlFunction	 start="substring(" end=")" contains=ALL
 syn region mysqlFunction	 start="substring_index(" end=")" contains=ALL
+syn region mysqlFunction	 start="subtime(" end=")" contains=ALL
 syn region mysqlFunction	 start="sum(" end=")" contains=ALL
 syn region mysqlFunction	 start="sysdate(" end=")" contains=ALL
 syn region mysqlFunction	 start="system_user(" end=")" contains=ALL
