diff --git a/runtime/autoload/README.txt b/runtime/autoload/README.txt
index 2038fa2..dcefbf0 100644
--- a/runtime/autoload/README.txt
+++ b/runtime/autoload/README.txt
@@ -4,12 +4,18 @@
 automatically when the function is invoked.  See ":help autoload".
 
 gzip.vim	for editing compressed files
-netrw.vim	browsing (remote) directories and editing remote files
+netrw*.vim	browsing (remote) directories and editing remote files
 tar.vim		browsing tar files
 zip.vim		browsing zip files
+paste.vim	common code for mswin.vim, menu.vim and macmap.vim
+spellfile.vim	downloading of a missing spell file
 
-Occult completion files:
+Omni completion files:
 ccomplete.vim		C
 csscomplete.vim		HTML / CSS
 htmlcomplete.vim	HTML
-
+javascriptcomplete.vim  Javascript
+phpcomplete.vim		PHP
+pycomplete.vim		Python
+syntaxcomplete.vim	from syntax highlighting
+xmlcomplete.vim		XML (uses files in the xml directory)
diff --git a/runtime/autoload/paste.vim b/runtime/autoload/paste.vim
new file mode 100644
index 0000000..435c5e6
--- /dev/null
+++ b/runtime/autoload/paste.vim
@@ -0,0 +1,39 @@
+" Vim support file to help with paste mappings and menus
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2006 Mar 09
+
+" Define the string to use for items that are present both in Edit, Popup and
+" Toolbar menu.  Also used in mswin.vim and macmap.vim.
+
+" Pasting blockwise and linewise selections is not possible in Insert and
+" Visual mode without the +virtualedit feature.  They are pasted as if they
+" were characterwise instead.  Add to that some tricks to leave the cursor in
+" the right position, also for "gi".
+if has("virtualedit")
+  let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
+  let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
+  let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
+
+  func! paste#Paste()
+    let ove = &ve
+    set ve=all
+    normal! `^
+    if @+ != ''
+      normal! "+gP
+    endif
+    let c = col(".")
+    normal! i
+    if col(".") < c	" compensate for i<ESC> moving the cursor left
+      normal! l
+    endif
+    let &ve = ove
+  endfunc
+else
+  let paste#paste_cmd = {'n': "\"=@+.'xy'<CR>gPFx\"_2x"}
+  let paste#paste_cmd['v'] = '"-c<Esc>gix<Esc>' . paste#paste_cmd['n'] . '"_x'
+  let paste#paste_cmd['i'] = 'x<Esc>' . paste#paste_cmd['n'] . '"_s'
+endif
+
+if has("virtualedit")
+else
+endif
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 70cb7a8..9ebce3c 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -89,6 +89,7 @@
 	sponsor.txt \
 	starting.txt \
 	spell.txt \
+	sql.txt \
 	syntax.txt \
 	tabpage.txt \
 	tagsrch.txt \
@@ -213,6 +214,7 @@
 	sponsor.html \
 	starting.html \
 	spell.html \
+	sql.html \
 	syntax.html \
 	tabpage.html \
 	tagsrch.html \
diff --git a/runtime/doc/netbeans.txt b/runtime/doc/netbeans.txt
index 71f8f8e..9d851cc 100644
--- a/runtime/doc/netbeans.txt
+++ b/runtime/doc/netbeans.txt
@@ -1,4 +1,4 @@
-*netbeans.txt*  For Vim version 7.0aa.  Last change: 2006 Feb 05
+*netbeans.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 09
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -259,10 +259,19 @@
 confusion happening again, netbeans_saved() has been renamed to
 netbeans_save_buffer().
 
+We are now at version 2.3.  For the differences between 2.2 and 2.3 search for
+"2.3" below.
+
 The messages are currently sent over a socket.  Since the messages are in
 plain UTF-8 text this protocol could also be used with any other communication
 mechanism.
 
+To see an example implementation look at the gvim tool in Agide.  Currently
+found here:
+	http://cvs.sf.net/viewcvs.py/a-a-p/Agide/Tools/GvimTool.py?view=markup
+
+
+
 10.1 Kinds of messages		|nb-messages|
 10.2 Terms			|nb-terms|
 10.3 Commands			|nb-commands|
@@ -612,11 +621,22 @@
 insert off text
 		Insert "text" before position "off".  "text" is a string
 		argument, "off" a number.
+		"off" should have a "\n" (newline) at the end of each line.
+		Or "\r\n" when 'fileformat' is "dos".  When using "insert" in
+		an empty buffer Vim will set 'fileformat' accordingly.
+		When "off" points to the start of a line the text is inserted
+		above this line.  Thus when "off" is zero lines are inserted
+		before the first line.
+		When "off" points after the start of a line, possibly on the
+		NUL at the end of a line, the first line of text is appended
+		to this line.  Further lines come below it.
 		Possible replies:
 			123		no problem
 			123 !message	failed
 		Note that the message in the reply is not quoted.
 		Also sets the current buffer, if necessary.
+		Does not move the cursor to the changed text.
+		Resets undo information.
 
 remove off length
 		Delete "length" bytes of text at position "off".  Both
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
index efccebd..d2e6ee5 100644
--- a/runtime/ftplugin/sql.vim
+++ b/runtime/ftplugin/sql.vim
@@ -1,10 +1,13 @@
 " SQL filetype plugin file
 " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
-" Version:     0.08
+" Version:     1.0
 " Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Mon Feb 21 2005 7:27:36 AM
+" Last Change: Wed Jan 11 2006 10:04:55 AM
 " Download:    http://vim.sourceforge.net/script.php?script_id=454
 
+" For more details please use:
+"        :h sql.txt
+"
 " This file should only contain values that are common to all SQL languages
 " Oracle, Microsoft SQL Server, Sybase ASA/ASE, MySQL, and so on
 " If additional features are required create:
@@ -12,6 +15,22 @@
 "        .vim/after/ftplugin/sql.vim     (Unix)
 " to override and add any of your own settings.
 
+
+" This file also creates a command, SQLSetType, which allows you to change
+" SQL dialects on the fly.  For example, if I open an Oracle SQL file, it
+" is color highlighted appropriately.  If I open an Informix SQL file, it
+" will still be highlighted according to Oracles settings.  By running:
+"     :SQLSetType sqlinformix
+"
+" All files called sqlinformix.vim will be loaded from the indent and syntax
+" directories.  This allows you to easily flip SQL dialects on a per file
+" basis.  NOTE: you can also use completion:
+"     :SQLSetType <tab>
+"
+" To change the default dialect, add the following to your vimrc:
+"    let g:sql_type_default = 'sqlanywhere'
+
+
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
   finish
@@ -20,8 +39,146 @@
 let s:save_cpo = &cpo
 set cpo=
 
+" Functions/Commands to allow the user to change SQL syntax dialects
+" through the use of :SQLSetType <tab> for completion.
+" This works with both Vim 6 and 7.
+
+if !exists("*SQL_SetType")
+    " NOTE: You cannot use function! since this file can be 
+    " sourced from within this function.  That will result in
+    " an error reported by Vim.
+    function SQL_GetList(ArgLead, CmdLine, CursorPos)
+
+        if !exists('s:sql_list')
+            " Grab a list of files that contain "sql" in their names
+            let list_indent   = globpath(&runtimepath, 'indent/*sql*')
+            let list_syntax   = globpath(&runtimepath, 'syntax/*sql*')
+            let list_ftplugin = globpath(&runtimepath, 'ftplugin/*sql*')
+
+            let sqls = "\n".list_indent."\n".list_syntax."\n".list_ftplugin."\n"
+
+            " Strip out everything (path info) but the filename
+            " Regex
+            "    From between two newline characters
+            "    Non-greedily grab all characters
+            "    Followed by a valid filename \w\+\.\w\+ (sql.vim)
+            "    Followed by a newline, but do not include the newline
+            "
+            "    Replace it with just the filename (get rid of PATH)
+            "
+            "    Recursively, since there are many filenames that contain
+            "    the word SQL in the indent, syntax and ftplugin directory
+            let sqls = substitute( sqls, 
+                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 
+                        \ '\1\n', 
+                        \ 'g'
+                        \ )
+
+            " Remove duplicates, since sqlanywhere.vim can exist in the
+            " sytax, indent and ftplugin directory, yet we only want
+            " to display the option once
+            let index = match(sqls, '.\{-}\ze\n')
+            while index > -1
+                " Get the first filename
+                let file = matchstr(sqls, '.\{-}\ze\n', index)
+                " Recursively replace any *other* occurrence of that
+                " filename with nothing (ie remove it)
+                let sqls = substitute(sqls, '\%>'.(index+strlen(file)).'c\<'.file.'\>\n', '', 'g')
+                " Move on to the next filename
+                let index = match(sqls, '.\{-}\ze\n', (index+strlen(file)+1))
+            endwhile
+
+            " Sort the list if using version 7
+            if v:version >= 700
+                let mylist = split(sqls, "\n")
+                let mylist = sort(mylist)
+                let sqls   = join(mylist, "\n")
+            endif
+
+            let s:sql_list = sqls
+        endif
+
+        return s:sql_list
+
+    endfunction
+
+    function SQL_SetType(name)
+
+        " User has decided to override default SQL scripts and
+        " specify a vendor specific version 
+        " (ie Oracle, Informix, SQL Anywhere, ...)
+        " So check for an remove any settings that prevent the
+        " scripts from being executed, and then source the 
+        " appropriate Vim scripts.
+        if exists("b:did_ftplugin")
+            unlet b:did_ftplugin
+        endif
+        if exists("b:current_syntax")
+            " echomsg 'SQLSetType - clearing syntax'
+            syntax clear
+        endif
+        if exists("b:did_indent")
+            " echomsg 'SQLSetType - clearing indent'
+            unlet b:did_indent
+            " Set these values to their defaults
+            setlocal indentkeys&
+            setlocal indentexpr&
+        endif
+
+        " Ensure the name is in the correct format
+        let new_sql_type = substitute(a:name, 
+                    \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
+
+        " Do not specify a buffer local variable if it is 
+        " the default value
+        if new_sql_type == 'sql'
+          let new_sql_type = 'sqloracle'
+        endif
+        let b:sql_type_override = new_sql_type
+
+        " Vim will automatically source the correct files if we
+        " change the filetype.  You cannot do this with setfiletype
+        " since that command will only execute if a filetype has
+        " not already been set.  In this case we want to override
+        " the existing filetype.
+        let &filetype = 'sql'
+    endfunction
+    command! -nargs=* -complete=custom,SQL_GetList SQLSetType :call SQL_SetType(<q-args>)
+
+endif
+
+if exists("b:sql_type_override")
+    " echo 'sourcing buffer ftplugin/'.b:sql_type_override.'.vim'
+    if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.vim') != ''
+        exec 'runtime ftplugin/'.b:sql_type_override.'.vim'
+    " else
+    "     echomsg 'ftplugin/'.b:sql_type_override.' not exist, using default'
+    endif
+elseif exists("g:sql_type_default")
+    " echo 'sourcing global ftplugin/'.g:sql_type_default.'.vim'
+    if globpath(&runtimepath, 'ftplugin/'.g:sql_type_default.'.vim') != ''
+        exec 'runtime ftplugin/'.g:sql_type_default.'.vim'
+    " else
+    "     echomsg 'ftplugin/'.g:sql_type_default.'.vim not exist, using default'
+    endif
+endif
+
+" If the above runtime command succeeded, do not load the default settings
+if exists("b:did_ftplugin")
+  finish
+endif
+
+let b:undo_ftplugin = "setl comments<"
+
 " Don't load another plugin for this buffer
-let b:did_ftplugin = 1
+let b:did_ftplugin     = 1
+let b:current_ftplugin = 'sql'
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+    let b:browsefilter = "SQL Files (*.sql)\t*.sql\n" .
+	  \ "All Files (*.*)\t*.*\n"
+endif
 
 " Some standard expressions for use with the matchit strings
 let s:notend = '\%(\<end\s\+\)\@<!'
@@ -112,69 +269,78 @@
 " [d, [D, [_CTRL_D and so on features
 " Match these values ignoring case
 " ie  DECLARE varname INTEGER
-let &l:define = '\c\(DECLARE\|IN\|OUT\|INOUT\)\s*'
+let &l:define = '\c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>'
 
 
 " Mappings to move to the next BEGIN ... END block
 " \W - no characters or digits
-nmap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
-nmap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
-nmap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
-nmap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
-vmap <buffer> <silent> ]] /\c^\s*begin\><CR>
-vmap <buffer> <silent> [[ ?\c^\s*begin<CR>
-vmap <buffer> <silent> ][ /\c^\s*end\W*$<CR>
-vmap <buffer> <silent> [] ?\c^\s*end\W*$<CR>
+nmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR>
+nmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR>
+nmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR>
+nmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR>
+vmap <buffer> <silent> ]] /\\c^\\s*begin\\><CR>
+vmap <buffer> <silent> [[ ?\\c^\\s*begin\\><CR>
+vmap <buffer> <silent> ][ /\\c^\\s*end\\W*$<CR>
+vmap <buffer> <silent> [] ?\\c^\\s*end\\W*$<CR>
 
 
+" By default only look for CREATE statements, but allow
+" the user to override
+if !exists('g:ftplugin_sql_statements')
+    let g:ftplugin_sql_statements = 'create'
+endif
+
 " Predefined SQL objects what are used by the below mappings using
 " the ]} style maps.
 " This global variable allows the users to override it's value
 " from within their vimrc.
+" Note, you cannot use \?, since these patterns can be used to search
+" backwards, you must use \{,1}
 if !exists('g:ftplugin_sql_objects')
     let g:ftplugin_sql_objects = 'function,procedure,event,' .
-                \ '\(existing\\|global\s\+temporary\s\+\)\?table,trigger' .
+                \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+                \ 'table,trigger' .
                 \ ',schema,service,publication,database,datatype,domain' .
                 \ ',index,subscription,synchronization,view,variable'
 endif
 
+" Replace all ,'s with bars, except ones with numbers after them.
+" This will most likely be a \{,1} string.
 let s:ftplugin_sql_objects = 
-            \ '\c^\s*' .
-            \ '\(create\s\+\(or\s\+replace\s\+\)\?\)\?' .
-            \ '\<\(' .
-            \ substitute(g:ftplugin_sql_objects, ',', '\\\\|', 'g') .
-            \ '\)\>' 
+            \ '\\c^\\s*' .
+            \ '\\(\\(' .
+            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') .
+            \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' .
+            \ '\\<\\(' .
+            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') .
+            \ '\\)\\>' 
 
 " Mappings to move to the next CREATE ... block
-" map <buffer> <silent> ]} :call search(g:ftplugin_sql_objects, 'W' )<CR>
-" nmap <buffer> <silent> [{ :call search('\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\>', 'bW' )<CR>
-" exec 'nmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
 exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
 exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
 " Could not figure out how to use a :call search() string in visual mode
 " without it ending visual mode
+" Unfortunately, this will add a entry to the search history
 exec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
 exec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
-" vmap <buffer> <silent> ]} /\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\><CR>
-" vmap <buffer> <silent> [{ ?\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\><CR>
 
 " Mappings to move to the next COMMENT
 "
 " Had to double the \ for the \| separator since this has a special
 " meaning on maps
-let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)'
+let b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)'
 " Find the start of the next comment
-let b:comment_start  = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
-            \ '\(\s*'.b:comment_leader.'\)'
+let b:comment_start  = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+            \ '\\(\\s*'.b:comment_leader.'\\)'
 " Find the end of the previous comment
-let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'.
-            \ '\(^\s*'.b:comment_leader.'\)\@!'
+let b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'.
+            \ '\\(^\\s*'.b:comment_leader.'\\)\\@!'
 " Skip over the comment
 let b:comment_jump_over  = "call search('".
-            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
             \ "', 'W')"
 let b:comment_skip_back  = "call search('".
-            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
             \ "', 'bW')"
 " Move to the start and end of comments
 exec 'nnoremap <silent><buffer> ]" /'.b:comment_start.'<CR>'
@@ -187,11 +353,29 @@
 "    *
 "    */
 " or
-"   // 
-" or
 "   --
+" or
+"   // 
 setlocal comments=s1:/*,mb:*,ex:*/,:--,://
 
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&omnifunc')
+    " This is used by the sqlcomplete.vim plugin
+    " Source it for it's global functions
+    runtime autoload/syntaxcomplete.vim 
+
+    setlocal omnifunc=sqlcomplete#Complete
+    " Prevent the intellisense plugin from loading
+    let b:sql_vis = 1
+    imap <buffer> <c-space>t <C-O>:let b:sql_compl_type='table'<CR><C-X><C-O>
+    imap <buffer> <c-space>p <C-O>:let b:sql_compl_type='procedure'<CR><C-X><C-O>
+    imap <buffer> <c-space>v <C-O>:let b:sql_compl_type='view'<CR><C-X><C-O>
+    imap <buffer> <c-space>c <C-O>:let b:sql_compl_type='column'<CR><C-X><C-O>
+    imap <buffer> <c-space>f <C-O>:let b:sql_compl_type='function'<CR><C-X><C-O>
+    imap <buffer> <c-space>o <C-O>:let b:sql_compl_type='option'<CR><C-X><C-O>
+    imap <buffer> <c-right> <C-O>:let b:sql_compl_type='column'<CR><C-X><C-O>
+endif
+
 let &cpo = s:save_cpo
 
 " vim:sw=4:ff=unix:
diff --git a/runtime/indent/sql.vim b/runtime/indent/sql.vim
new file mode 100644
index 0000000..490d652
--- /dev/null
+++ b/runtime/indent/sql.vim
@@ -0,0 +1,39 @@
+" Vim indent file loader
+" Language:    SQL 
+" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
+" Last Change: Thu Sep 15 2005 10:27:51 AM
+" Version:     1.0
+" Download:    http://vim.sourceforge.net/script.php?script_id=495
+
+" Description: Checks for a:
+"                  buffer local variable, 
+"                  global variable, 
+"              If the above exist, it will source the type specified.
+"              If none exist, it will source the default sqlanywhere.vim file.
+
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+
+" Default to the standard Vim distribution file
+let filename = 'sqlanywhere'
+
+" Check for overrides.  Buffer variables have the highest priority.
+if exists("b:sql_type_override")
+    " Check the runtimepath to see if the file exists
+    if globpath(&runtimepath, 'indent/'.b:sql_type_override.'.vim') != ''
+        let filename = b:sql_type_override
+    endif
+elseif exists("g:sql_type_default")
+    if globpath(&runtimepath, 'indent/'.g:sql_type_default.'.vim') != ''
+        let filename = g:sql_type_default
+    endif
+endif
+
+" Source the appropriate file
+exec 'runtime indent/'.filename.'.vim'
+
+
+" vim:sw=4:ff=unix:
diff --git a/runtime/indent/sqlanywhere.vim b/runtime/indent/sqlanywhere.vim
new file mode 100644
index 0000000..65d7113
--- /dev/null
+++ b/runtime/indent/sqlanywhere.vim
@@ -0,0 +1,384 @@
+" Vim indent file
+" Language:    SQL 
+" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
+" Last Change: Wed Sep 14 2005 10:21:15 PM
+" Version:     1.4
+" Download:    http://vim.sourceforge.net/script.php?script_id=495
+
+" Notes:
+"    Indenting keywords are based on Oracle and Sybase Adaptive Server
+"    Anywhere (ASA).  Test indenting was done with ASA stored procedures and
+"    fuctions and Oracle packages which contain stored procedures and
+"    functions.
+"    This has not been tested against Microsoft SQL Server or 
+"    Sybase Adaptive Server Enterprise (ASE) which use the Transact-SQL
+"    syntax.  That syntax does not have end tags for IF's, which makes
+"    indenting more difficult.
+"
+" Known Issues:
+"    The Oracle MERGE statement does not have an end tag associated with
+"    it, this can leave the indent hanging to the right one too many.
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent     = 1
+let b:current_indent = "sqlanywhere"
+
+setlocal indentkeys-=0{
+setlocal indentkeys-=0}
+setlocal indentkeys-=:
+setlocal indentkeys-=0#
+setlocal indentkeys-=e
+
+" This indicates formatting should take place when one of these 
+" expressions is used.  These expressions would normally be something
+" you would type at the BEGINNING of a line
+" SQL is generally case insensitive, so this files assumes that
+" These keywords are something that would trigger an indent LEFT, not
+" an indent right, since the SQLBlockStart is used for those keywords
+setlocal indentkeys+==~end,=~else,=~elseif,=~elsif,0=~when,0=)
+
+" GetSQLIndent is executed whenever one of the expressions 
+" in the indentkeys is typed
+setlocal indentexpr=GetSQLIndent()
+
+" Only define the functions once.
+if exists("*GetSQLIndent")
+    finish
+endif
+
+" List of all the statements that start a new block.
+" These are typically words that start a line.
+" IS is excluded, since it is difficult to determine when the 
+" ending block is (especially for procedures/functions).
+let s:SQLBlockStart = '^\s*\%('.
+            \ 'if\|else\|elseif\|elsif\|'.
+                \ 'while\|loop\|do\|'.
+                \ 'begin\|'.
+                \ 'case\|when\|merge\|exception'.
+                \ '\)\>'
+let s:SQLBlockEnd = '^\s*\(end\)\>'
+
+" The indent level is also based on unmatched paranethesis
+" If a line has an extra "(" increase the indent
+" If a line has an extra ")" decrease the indent
+function s:CountUnbalancedParan( line, paran_to_check )
+    let l = a:line
+    let lp = substitute(l, '[^(]', '', 'g')
+    let l = a:line
+    let rp = substitute(l, '[^)]', '', 'g')
+
+    if a:paran_to_check =~ ')'
+        " echom 'CountUnbalancedParan ) returning: ' .
+        " \ (strlen(rp) - strlen(lp))
+        return (strlen(rp) - strlen(lp))
+    elseif a:paran_to_check =~ '('
+        " echom 'CountUnbalancedParan ( returning: ' .
+        " \ (strlen(lp) - strlen(rp))
+        return (strlen(lp) - strlen(rp))
+    else
+        " echom 'CountUnbalancedParan unknown paran to check: ' .
+        " \ a:paran_to_check
+        return 0
+    endif
+endfunction
+
+" Unindent commands based on previous indent level
+function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
+    let lnum = a:prev_lnum
+    let line = getline(lnum)
+    let ends = 0
+    let num_right_paran = a:num_levels
+    let ignore_paran = 0
+    let vircol = 1
+
+    while num_right_paran > 0
+        silent! exec 'norm! '.lnum."G\<bar>".vircol."\<bar>"
+        let right_paran = search( ')', 'W' )
+        if right_paran != lnum
+            " This should not happen since there should be at least
+            " num_right_paran matches for this line
+            break
+        endif
+        let vircol      = virtcol(".")
+
+        " if getline(".") =~ '^)'
+        let matching_paran = searchpair('(', '', ')', 'bW',
+                    \ 'IsColComment(line("."), col("."))')
+
+        if matching_paran < 1
+            " No match found
+            " echom 'CTIRP - no match found, ignoring'
+            break
+        endif
+
+        if matching_paran == lnum 
+            " This was not an unmatched parantenses, start the search again
+            " again after this column
+            " echom 'CTIRP - same line match, ignoring'
+            continue
+        endif
+
+        " echom 'CTIRP - match: ' . line(".") . '  ' . getline(".")
+
+        if getline(matching_paran) =~? '\(if\|while\)\>'
+            " echom 'CTIRP - if/while ignored: ' . line(".") . '  ' . getline(".")
+            let ignore_paran = ignore_paran + 1
+        endif
+
+        " One match found, decrease and check for further matches
+        let num_right_paran = num_right_paran - 1
+
+    endwhile
+
+    " Fallback - just move back one
+    " return a:prev_indent - &sw
+    return ignore_paran
+endfunction
+
+" Based on the keyword provided, loop through previous non empty
+" non comment lines to find the statement that initated the keyword.
+" Return its indent level
+"    CASE ..
+"    WHEN ...
+" Should return indent level of CASE
+"    EXCEPTION ..
+"    WHEN ...
+"         something;
+"    WHEN ...
+" Should return indent level of exception.
+function s:GetStmtStarterIndent( keyword, curr_lnum )
+    let lnum  = a:curr_lnum
+
+    " Default - reduce indent by 1
+    let ind = indent(a:curr_lnum) - &sw
+
+    if a:keyword =~? 'end'
+        exec 'normal! ^'
+        let stmts = '^\s*\%('.
+                    \ '\<begin\>\|' .
+                    \ '\%(\%(\<end\s\+\)\@<!\<loop\>\)\|' .
+                    \ '\%(\%(\<end\s\+\)\@<!\<case\>\)\|' .
+                    \ '\%(\%(\<end\s\+\)\@<!\<for\>\)\|' .
+                    \ '\%(\%(\<end\s\+\)\@<!\<if\>\)'.
+                    \ '\)'
+        let matching_lnum = searchpair(stmts, '', '\<end\>\zs', 'bW',
+                    \ 'IsColComment(line("."), col(".")) == 1')
+        exec 'normal! $'
+        if matching_lnum > 0 && matching_lnum < a:curr_lnum
+            let ind = indent(matching_lnum)
+        endif
+    elseif a:keyword =~? 'when'
+        exec 'normal! ^'
+        let matching_lnum = searchpair(
+                    \ '\%(\<end\s\+\)\@<!\<case\>\|\<exception\>\|\<merge\>', 
+                    \ '', 
+                    \ '\%(\%(\<when\s\+others\>\)\|\%(\<end\s\+case\>\)\)', 
+                    \ 'bW',
+                    \ 'IsColComment(line("."), col(".")) == 1')
+        exec 'normal! $'
+        if matching_lnum > 0 && matching_lnum < a:curr_lnum
+            let ind = indent(matching_lnum)
+        else
+            let ind = indent(a:curr_lnum)
+        endif
+    endif
+
+    return ind
+endfunction
+
+
+" Check if the line is a comment
+function IsLineComment(lnum)
+    let rc = synIDattr(
+                \ synID(a:lnum, 
+                \     match(getline(a:lnum), '\S')+1, 0)
+                \ , "name") 
+                \ =~? "comment" 
+
+    return rc
+endfunction
+
+
+" Check if the column is a comment
+function IsColComment(lnum, cnum)
+    let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name") 
+                \           =~? "comment" 
+
+    return rc
+endfunction
+
+
+" Check if the column is a comment
+function ModuloIndent(ind)
+    let ind = a:ind
+    
+    if ind > 0
+        let modulo = ind % &shiftwidth
+
+        if modulo > 0
+            let ind = ind - modulo
+        endif
+    endif
+
+    return ind
+endfunction
+
+
+" Find correct indent of a new line based upon the previous line
+function GetSQLIndent()
+    let lnum = v:lnum 
+    let ind = indent(lnum)
+
+    " If the current line is a comment, leave the indent as is
+    " Comment out this additional check since it affects the
+    " indenting of =, and will not reindent comments as it should
+    " if IsLineComment(lnum) == 1
+    "     return ind
+    " endif
+
+    " while 1
+        " Get previous non-blank line
+        let prevlnum = prevnonblank(lnum - 1)
+        if prevlnum <= 0
+            return ind
+        endif
+
+        if IsLineComment(prevlnum) == 1 
+            if getline(v:lnum) =~ '^\s*\*'
+                let ind = ModuloIndent(indent(prevlnum))
+                return ind + 1
+            endif
+            " If the previous line is a comment, then return -1
+            " to tell Vim to use the formatoptions setting to determine
+            " the indent to use
+            " But only if the next line is blank.  This would be true if
+            " the user is typing, but it would not be true if the user
+            " is reindenting the file
+            if getline(v:lnum) =~ '^\s*$'
+                return -1
+            endif
+        endif
+
+    "     let prevline = getline(prevlnum)
+    "     if prevline !~ '^\s*$'
+    "         " echom 'previous non blank - break: ' . prevline
+    "         break
+    "     endif
+    " endwhile
+
+    " echom 'PREVIOUS INDENT: ' . indent(prevlnum) . '  LINE: ' . getline(prevlnum) 
+
+    " This is the line you just hit return on, it is not the current line
+    " which is new and empty
+    " Based on this line, we can determine how much to indent the new
+    " line
+    
+    " Get default indent (from prev. line)
+    let ind      = indent(prevlnum)
+    let prevline = getline(prevlnum)
+
+    " Now check what's on the previous line to determine if the indent
+    " should be changed, for example IF, BEGIN, should increase the indent
+    " where END IF, END, should decrease the indent.
+    if prevline =~? s:SQLBlockStart
+        " Move indent in
+        let ind = ind + &sw
+        " echom 'prevl - SQLBlockStart - indent ' . ind . '  line: ' . prevline
+    elseif prevline =~ '[()]'
+        if prevline =~ '('
+            let num_unmatched_left = s:CountUnbalancedParan( prevline, '(' )
+        else
+            let num_unmatched_left = 0
+        endif
+        if prevline =~ ')'
+            let num_unmatched_right  = s:CountUnbalancedParan( prevline, ')' )
+        else
+            let num_unmatched_right  = 0
+            " let num_unmatched_right  = s:CountUnbalancedParan( prevline, ')' )
+        endif
+        if num_unmatched_left > 0
+            " There is a open left paranethesis 
+            " increase indent
+            let ind = ind + ( &sw * num_unmatched_left )
+        elseif num_unmatched_right > 0
+            " if it is an unbalanced paranethesis only unindent if
+            " it was part of a command (ie create table(..)  )
+            " instead of part of an if (ie if (....) then) which should
+            " maintain the indent level
+            let ignore = s:CheckToIgnoreRightParan( prevlnum, num_unmatched_right )
+            " echom 'prevl - ) unbalanced - CTIRP - ignore: ' . ignore
+
+            if prevline =~ '^\s*)'
+                let ignore = ignore + 1
+                " echom 'prevl - begins ) unbalanced ignore: ' . ignore
+            endif
+
+            if (num_unmatched_right - ignore) > 0
+                let ind = ind - ( &sw * (num_unmatched_right - ignore) )
+            endif
+
+        endif
+    endif
+
+
+    " echom 'CURRENT INDENT: ' . ind . '  LINE: '  . getline(v:lnum)
+
+    " This is a new blank line since we just typed a carriage return
+    " Check current line; search for simplistic matching start-of-block
+    let line = getline(v:lnum)
+
+    if line =~? '^\s*els'
+        " Any line when you type else will automatically back up one 
+        " ident level  (ie else, elseif, elsif)
+        let ind = ind - &sw
+        " echom 'curr - else - indent ' . ind
+    elseif line =~? '^\s*end\>'
+        let ind = s:GetStmtStarterIndent('end', v:lnum)
+        " General case for end
+        " let ind = ind - &sw
+        " echom 'curr - end - indent ' . ind
+    elseif line =~? '^\s*when\>'
+        let ind = s:GetStmtStarterIndent('when', v:lnum)
+        " If the WHEN clause is used with a MERGE or EXCEPTION
+        " clause, do not change the indent level, since these
+        " statements do not have a corresponding END statement.
+        " if stmt_starter =~? 'case'
+        "    let ind = ind - &sw
+        " endif
+        " elseif line =~ '^\s*)\s*;\?\s*$'
+        " elseif line =~ '^\s*)'
+    elseif line =~ '^\s*)'
+        let num_unmatched_right  = s:CountUnbalancedParan( line, ')' )
+        let ignore = s:CheckToIgnoreRightParan( v:lnum, num_unmatched_right )
+        " If the line ends in a ), then reduce the indent
+        " This catches items like:
+        " CREATE TABLE T1(
+        "    c1 int, 
+        "    c2 int
+        "    );
+        " But we do not want to unindent a line like:
+        " IF ( c1 = 1 
+        " AND  c2 = 3 ) THEN
+        " let num_unmatched_right  = s:CountUnbalancedParan( line, ')' )
+        " if num_unmatched_right > 0
+        " elseif strpart( line, strlen(line)-1, 1 ) =~ ')'
+        " let ind = ind - &sw
+        if line =~ '^\s*)'
+            " let ignore = ignore + 1
+            " echom 'curr - begins ) unbalanced ignore: ' . ignore
+        endif
+
+        if (num_unmatched_right - ignore) > 0
+            let ind = ind - ( &sw * (num_unmatched_right - ignore) )
+        endif
+        " endif
+    endif
+
+    " echom 'final - indent ' . ind
+    return ModuloIndent(ind)
+endfunction
+
+" vim:sw=4:ff=unix:
diff --git a/runtime/macmap.vim b/runtime/macmap.vim
new file mode 100644
index 0000000..28c729a
--- /dev/null
+++ b/runtime/macmap.vim
@@ -0,0 +1,83 @@
+" System gvimrc file for Mac OS X
+" Author:  	Benji Fisher <benji@member.AMS.org>
+" Last Change: Thu Mar 09 09:00 AM 2006 EST
+"
+" Define Mac-standard keyboard shortcuts.
+
+" Save and restore compatible mode.
+let s:save_cpo = &cpo
+set cpo&vim
+
+nnoremap <D-n> :confirm enew<CR>
+vmap <D-n> <Esc><D-n>gv
+imap <D-n> <C-O><D-n>
+cmap <D-n> <C-C><D-n>
+omap <D-n> <Esc><D-n>
+
+nnoremap <D-o> :browse confirm e<CR>
+vmap <D-o> <Esc><D-o>gv
+imap <D-o> <C-O><D-o>
+cmap <D-o> <C-C><D-o>
+omap <D-o> <Esc><D-o>
+
+nnoremap <silent> <D-w> :if winheight(2) < 0 <Bar>
+	\   confirm enew <Bar>
+	\ else <Bar>
+	\   confirm close <Bar>
+	\ endif<CR>
+vmap <D-w> <Esc><D-w>gv
+imap <D-w> <C-O><D-w>
+cmap <D-w> <C-C><D-w>
+omap <D-w> <Esc><D-w>
+
+nnoremap <silent> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar>
+	\ else<Bar>confirm w<Bar>endif<CR>
+vmap <D-s> <Esc><D-s>gv
+imap <D-s> <C-O><D-s>
+cmap <D-s> <C-C><D-s>
+omap <D-s> <Esc><D-s>
+
+nnoremap <D-S-s> :browse confirm saveas<CR>
+vmap <D-S-s> <Esc><D-s>gv
+imap <D-S-s> <C-O><D-s>
+cmap <D-S-s> <C-C><D-s>
+omap <D-S-s> <Esc><D-s>
+
+" From the Edit menu of SimpleText:
+nnoremap <D-z> u
+vmap <D-z> <Esc><D-z>gv
+imap <D-z> <C-O><D-z>
+cmap <D-z> <C-C><D-z>
+omap <D-z> <Esc><D-z>
+
+vnoremap <D-x> "+x
+
+vnoremap <D-c> "+y
+
+cnoremap <D-c> <C-Y>
+
+nnoremap <D-v> "+gP
+cnoremap <D-v> <C-R>+
+execute 'vnoremap <script> <D-v>' paste#paste_cmd['v']
+execute 'inoremap <script> <D-v>' paste#paste_cmd['i']
+
+nnoremap <silent> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar>
+	\ else<Bar>exe ":norm ggVG"<Bar>endif<CR>
+vmap <D-a> <Esc><D-a>
+imap <D-a> <Esc><D-a>
+cmap <D-a> <C-C><D-a>
+omap <D-a> <Esc><D-a>
+
+nnoremap <D-f> /
+vmap <D-f> <Esc><D-f>
+imap <D-f> <Esc><D-f>
+cmap <D-f> <C-C><D-f>
+omap <D-f> <Esc><D-f>
+
+nnoremap <D-g> n
+vmap <D-g> <Esc><D-g>
+imap <D-g> <C-O><D-g>
+cmap <D-g> <C-C><D-g>
+omap <D-g> <Esc><D-g>
+
+let &cpo = s:save_cpo
diff --git a/runtime/plugin/netrwPlugin.vim b/runtime/plugin/netrwPlugin.vim
index 2a691cd..1a0a1bc 100644
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -47,16 +47,17 @@
   au BufReadCmd  file://*		exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
   au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
  endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<amatch>")|exe 'Nread 0r "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
  au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "'   .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
  au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
  au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
 augroup END
 
 " Commands: :Nread, :Nwrite, :NetUserPass {{{2
-com! -nargs=*		Nread		call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn()
+com! -count=1 -nargs=*	Nread		call netrw#NetSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetRestorePosn()
 com! -range=% -nargs=*	Nwrite		call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
 com! -nargs=*		NetUserPass	call NetUserPass(<f-args>)
+com! -nargs=+           Ncopy           call netrw#NetObtain(<f-args>)
 
 " Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
 com! -nargs=? -bar -bang -count=0	Explore		call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
diff --git a/src/netbeans.c b/src/netbeans.c
index 889ad3c..ded4901 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -100,8 +100,6 @@
 static int cmdno;			/* current command number for reply */
 static int haveConnection = FALSE;	/* socket is connected and
 					   initialization is done */
-static int oldFire = 1;
-
 #ifdef FEAT_GUI_MOTIF
 static void netbeans_Xt_connect __ARGS((void *context));
 #endif
@@ -1439,13 +1437,7 @@
 	}
 	else if (streq((char *)cmd, "insert"))
 	{
-	    pos_T	*pos;
-	    pos_T	mypos;
 	    char_u	*to_free;
-	    char_u	*nl;
-	    linenr_T	lnum;
-	    pos_T	old_w_cursor;
-	    int		old_b_changed;
 
 	    if (skip >= SKIP_STOP)
 	    {
@@ -1475,115 +1467,127 @@
 	    }
 	    else if (args != NULL)
 	    {
-		/*
-		 * We need to detect EOL style
-		 * because addAnno passes char-offset
-		 */
-		int    ff_detected = EOL_UNKNOWN;
-		int    buf_was_empty = (buf->bufp->b_ml.ml_flags & ML_EMPTY);
-		char_u lbuf[4096];  /* size of largest insert sent by exted */
-		int    lbuf_len = 0;
+		int	ff_detected = EOL_UNKNOWN;
+		int	buf_was_empty = (buf->bufp->b_ml.ml_flags & ML_EMPTY);
+		size_t	len = 0;
+		int	added = 0;
+		int	oldFire = netbeansFireChanges;
+		int	old_b_changed;
+		char_u	*nl;
+		linenr_T lnum;
+		linenr_T lnum_start;
+		pos_T	*pos;
 
-		oldFire = netbeansFireChanges;
 		netbeansFireChanges = 0;
-		lbuf[0] = '\0';
 
+		/* Jump to the buffer where we insert.  After this "curbuf"
+		 * can be used. */
 		nb_set_curbuf(buf->bufp);
 		old_b_changed = curbuf->b_changed;
 
+		/* Convert the specified character offset into a lnum/col
+		 * position. */
 		pos = off2pos(curbuf, off);
 		if (pos != NULL)
 		{
-		    if (pos->lnum == 0)
-			pos->lnum = 1;
+		    if (pos->lnum <= 0)
+			lnum_start = 1;
+		    else
+			lnum_start = pos->lnum;
 		}
 		else
 		{
-		    /* if the given position is not found, assume we want
+		    /* If the given position is not found, assume we want
 		     * the end of the file.  See setLocAndSize HACK. */
-		    pos = &mypos;
-		    pos->col = 0;
-#ifdef FEAT_VIRTUALEDIT
-		    pos->coladd = 0;
-#endif
-		    pos->lnum = curbuf->b_ml.ml_line_count;
-		}
-		lnum = pos->lnum;
-		old_w_cursor = curwin->w_cursor;
-		curwin->w_cursor = *pos;
-
-		if (curbuf->b_start_eol == FALSE
-			&& lnum > 0
-			&& lnum <= curbuf->b_ml.ml_line_count)
-		{
-		    /* Append to a partial line */
-		    char_u *partial = ml_get(lnum);
-
-		    STRCPY(lbuf, partial);
-		    lbuf_len = STRLEN(partial);
-		    ml_delete(lnum, FALSE);
-		    buf_was_empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
+		    if (buf_was_empty)
+			lnum_start = 1;	    /* above empty line */
+		    else
+			lnum_start = curbuf->b_ml.ml_line_count + 1;
 		}
 
+		/* "lnum" is the line where we insert: either append to it or
+		 * insert a new line above it. */
+		lnum = lnum_start;
+
+		/* Loop over the "\n" separated lines of the argument. */
 		doupdate = 1;
-		while (*args)
+		while (*args != NUL)
 		{
-		    nl = (char_u *)strchr((char *)args, '\n');
-		    if (nl != NULL)
+		    nl = vim_strchr(args, '\n');
+		    if (nl == NULL)
 		    {
-			STRNCAT(lbuf, args, nl - args);
-			lbuf[lbuf_len + nl - args] = '\0';
-			args += nl - args + 1;
+			/* Incomplete line, probably truncated.  Next "insert"
+			 * command should append to this one. */
+			len = STRLEN(args);
 		    }
 		    else
 		    {
-			STRCPY(lbuf, args);
-			args += STRLEN(lbuf);
+			len = nl - args;
+
+			/*
+			 * We need to detect EOL style, because the commands
+			 * use a character offset.
+			 */
+			if (nl > args && nl[-1] == '\r')
+			{
+			    ff_detected = EOL_DOS;
+			    --len;
+			}
+			else
+			    ff_detected = EOL_UNIX;
+		    }
+		    args[len] = NUL;
+
+		    if (lnum == lnum_start
+			    && ((pos != NULL && pos->col > 0)
+				|| (lnum == 1 && buf_was_empty)))
+		    {
+			char_u *oldline = ml_get(lnum);
+			char_u *newline;
+
+			/* Insert halfway a line.  For simplicity we assume we
+			 * need to append to the line. */
+			newline = alloc_check(STRLEN(oldline) + len + 1);
+			if (newline != NULL)
+			{
+			    STRCPY(newline, oldline);
+			    STRCAT(newline, args);
+			    ml_replace(lnum, newline, FALSE);
+			}
+		    }
+		    else
+		    {
+			/* Append a new line.  Not that we always do this,
+			 * also when the text doesn't end in a "\n". */
+			ml_append((linenr_T)(lnum - 1), args, len + 1, FALSE);
+			++added;
 		    }
 
-		    /*
-		     * EOL detecting. Not sure how to deal with '\n' on Mac.
-		     */
-		    if (buf_was_empty && nl && *(nl - 1) != '\r')
-			ff_detected = EOL_UNIX;
-
-		    /* nbdebug(("    INSERT[%d]: %s\n", lnum, lbuf)); */
-		    ml_append((linenr_T)(lnum++ - 1), lbuf,
-						     STRLEN(lbuf) + 1, FALSE);
-		    lbuf[0] = '\0';	/* empty buffer */
-		    lbuf_len = 0;
+		    if (nl == NULL)
+			break;
+		    ++lnum;
+		    args = nl + 1;
 		}
 
-		if (*(args - 1) == '\n')
-		{
-		    curbuf->b_p_eol = TRUE;
-		    curbuf->b_start_eol = TRUE;
-		}
-		else
-		{
-		    curbuf->b_p_eol = FALSE;
-		    curbuf->b_start_eol = FALSE;
-		}
+		/* Adjust the marks below the inserted lines. */
+		appended_lines_mark(lnum_start - 1, (long)added);
 
-		appended_lines_mark(pos->lnum - 1, lnum - pos->lnum);
-
-		/* We can change initial ff without consequences
-		 * Isn't it a kind of hacking?
+		/*
+		 * When starting with an empty buffer set the fileformat.
+		 * This is just guessing...
 		 */
 		if (buf_was_empty)
 		{
 		    if (ff_detected == EOL_UNKNOWN)
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
 			ff_detected = EOL_DOS;
+#else
+			ff_detected = EOL_UNIX;
+#endif
 		    set_fileformat(ff_detected, OPT_LOCAL);
 		    curbuf->b_start_ffc = *curbuf->b_p_ff;
-
-		    /* Safety check: only delete empty line */
-		    if (*ml_get(curbuf->b_ml.ml_line_count) == NUL)
-			ml_delete(curbuf->b_ml.ml_line_count, FALSE);
 		}
 
-		curwin->w_cursor = old_w_cursor;
-
 		/*
 		 * XXX - GRP - Is the next line right? If I've inserted
 		 * text the buffer has been updated but not written. Will
@@ -1592,6 +1596,7 @@
 		curbuf->b_changed = old_b_changed; /* logically unchanged */
 		netbeansFireChanges = oldFire;
 
+		/* Undo info is invalid now... */
 		u_blockfree(curbuf);
 		u_clearall(curbuf);
 	    }
diff --git a/src/normal.c b/src/normal.c
index c59b01f..a2e3e7f 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4155,7 +4155,7 @@
 	if (curwin->w_cursor.lnum >= old_pos.lnum)
 	    t = FAIL;	/* match after start is failure too */
 
-	if (thisblock)
+	if (thisblock && t != FAIL)
 	{
 	    pos_T	*pos;
 
diff --git a/src/os_mac.h b/src/os_mac.h
index 82d91a8..22fd164 100644
--- a/src/os_mac.h
+++ b/src/os_mac.h
@@ -40,37 +40,11 @@
 /*
  * Unix interface
  */
-#if defined(__MWERKS__) /* for CodeWarrior */
-# include <unistd.h>
-# include <utsname.h>
-# include <unix.h>
-#endif
 #if defined(__APPLE_CC__) /* for Project Builder and ... */
 # include <unistd.h>
-#endif
 /* Get stat.h or something similar. Comment: How come some OS get in in vim.h */
-#if defined(__MWERKS__)
-# include <stat.h>
-#endif
-#if defined(__APPLE_CC__)
 # include <sys/stat.h>
-#endif
-#if defined(__MRC__) || defined(__SC__) /* for Apple MPW Compilers */
-/* There's no stat.h for MPW? */
-# ifdef powerc
-#  pragma options align=power
-# endif
-  struct stat
-  {
-    UInt32 st_mtime;
-    UInt32 st_mode;
-    UInt32 st_size;
-  };
-# ifdef powerc
-#  pragma options align=reset
-# endif
-#endif
-#if defined(__APPLE_CC__) /* && defined(HAVE_CURSE) */
+/* && defined(HAVE_CURSE) */
 /* The curses.h from MacOS X provides by default some BACKWARD compatibilty
  * definition which can cause us problem later on. So we undefine a few of them. */
 # include <curses.h>
@@ -84,29 +58,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
-#ifdef MACOS_X
-# include <dirent.h>
-#endif
-
-/*
- * Incompatibility checks
- */
-
-/* Got problem trying to use shared library in 68k */
-#if !defined(__POWERPC__) && !defined(__i386__) && defined(FEAT_PYTHON)
-# undef FEAT_PYTHON
-# warning Auto-disabling Python. Not yet supported in 68k.
-#endif
-
-#if !defined(__POWERPC__) && !defined(__ppc__) && !defined(__i386__)
-# if !__option(enumsalwaysint)
-#  error "You must compile with enums always int!"
-# endif
-# if defined(__MWERKS__) && !defined(__fourbyteints__)
-#  error "You must compile the project with 4-byte ints"
-/* MPW ints are always 4 byte long */
-# endif
-#endif
+#include <dirent.h>
 
 /*
  * MacOS specific #define
@@ -120,13 +72,7 @@
  */
 /* When compiled under MacOS X (including CARBON version)
  * we use the Unix File path style.  Also when UNIX is defined. */
-#if defined(UNIX) || (defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX)
-# undef COLON_AS_PATHSEP
 # define USE_UNIXFILENAME
-#else
-# define COLON_AS_PATHSEP
-# define DONT_ADD_PATHSEP_TO_DIR
-#endif
 
 
 /*
@@ -176,67 +122,35 @@
  */
 
 #ifndef SYS_VIMRC_FILE
-# ifdef COLON_AS_PATHSEP
-#  define SYS_VIMRC_FILE "$VIM:vimrc"
-# else
 #  define SYS_VIMRC_FILE "$VIM/vimrc"
-# endif
 #endif
 #ifndef SYS_GVIMRC_FILE
-# ifdef COLON_AS_PATHSEP
-#  define SYS_GVIMRC_FILE "$VIM:gvimrc"
-# else
 #  define SYS_GVIMRC_FILE "$VIM/gvimrc"
-# endif
 #endif
 #ifndef SYS_MENU_FILE
-# ifdef COLON_AS_PATHSEP
-#  define SYS_MENU_FILE	"$VIMRUNTIME:menu.vim"
-# else
 #  define SYS_MENU_FILE	"$VIMRUNTIME/menu.vim"
-# endif
 #endif
 #ifndef SYS_OPTWIN_FILE
-# ifdef COLON_AS_PATHSEP
-#  define SYS_OPTWIN_FILE "$VIMRUNTIME:optwin.vim"
-# else
 #  define SYS_OPTWIN_FILE "$VIMRUNTIME/optwin.vim"
-# endif
 #endif
 #ifndef EVIM_FILE
-# ifdef COLON_AS_PATHSEP
-#  define EVIM_FILE	"$VIMRUNTIME:evim.vim"
-# else
 #  define EVIM_FILE	"$VIMRUNTIME/evim.vim"
-# endif
 #endif
 
 #ifdef FEAT_GUI
 # ifndef USR_GVIMRC_FILE
-#  ifdef COLON_AS_PATHSEP
-#   define USR_GVIMRC_FILE "$VIM:.gvimrc"
-#  else
 #   define USR_GVIMRC_FILE "~/.gvimrc"
-#  endif
 # endif
 # ifndef GVIMRC_FILE
 #  define GVIMRC_FILE	"_gvimrc"
 # endif
 #endif
 #ifndef USR_VIMRC_FILE
-# ifdef COLON_AS_PATHSEP
-#  define USR_VIMRC_FILE	"$VIM:.vimrc"
-# else
 #  define USR_VIMRC_FILE	"~/.vimrc"
-# endif
 #endif
 
 #ifndef USR_EXRC_FILE
-# ifdef COLON_AS_PATHSEP
-#  define USR_EXRC_FILE	"$VIM:.exrc"
-# else
 #  define USR_EXRC_FILE	"~/.exrc"
-# endif
 #endif
 
 #ifndef VIMRC_FILE
@@ -248,11 +162,7 @@
 #endif
 
 #ifndef DFLT_HELPFILE
-# ifdef COLON_AS_PATHSEP
-#  define DFLT_HELPFILE	"$VIMRUNTIME:doc:help.txt"
-# else
 #  define DFLT_HELPFILE	"$VIMRUNTIME/doc/help.txt"
-# endif
 #endif
 
 #ifndef FILETYPE_FILE
@@ -275,20 +185,12 @@
 #endif
 
 #ifndef SYNTAX_FNAME
-# ifdef COLON_AS_PATHSEP
-#  define SYNTAX_FNAME	"$VIMRUNTIME:syntax:%s.vim"
-# else
 #  define SYNTAX_FNAME	"$VIMRUNTIME/syntax/%s.vim"
-# endif
 #endif
 
 #ifdef FEAT_VIMINFO
 # ifndef VIMINFO_FILE
-#  ifdef COLON_AS_PATHSEP
-#   define VIMINFO_FILE	"$VIM:viminfo"
-#  else
 #   define VIMINFO_FILE	"~/.viminfo"
-#  endif
 # endif
 #endif /* FEAT_VIMINFO */
 
@@ -301,21 +203,13 @@
 #endif
 
 #ifndef DFLT_VDIR
-# ifdef COLON_AS_PATHSEP
-#  define DFLT_VDIR	"$VIM:vimfiles:view"	/* default for 'viewdir' */
-# else
 #  define DFLT_VDIR	"$VIM/vimfiles/view"	/* default for 'viewdir' */
-# endif
 #endif
 
 #define DFLT_ERRORFILE		"errors.err"
 
 #ifndef DFLT_RUNTIMEPATH
-# ifdef COLON_AS_PATHSEP
-#  define DFLT_RUNTIMEPATH	"$VIM:vimfiles,$VIMRUNTIME,$VIM:vimfiles:after"
-# else
 #  define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
-# endif
 #endif
 
 /*
@@ -414,7 +308,3 @@
 #  define TRACE			1 ? (void)0 : printf
 # endif
 #endif
-
-#ifdef MACOS_CLASSIC
-#  define TRACE			1 ? (int)0 : printf
-#endif
diff --git a/src/spell.c b/src/spell.c
index 090b77f..036f60c 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -9756,6 +9756,7 @@
 	selected = prompt_for_number(&mouse_used);
 	if (mouse_used)
 	    selected -= lines_left;
+	lines_left = Rows;	/* avoid more prompt */
     }
 
     if (selected > 0 && selected <= sug.su_ga.ga_len && u_save_cursor() == OK)
diff --git a/src/vim.h b/src/vim.h
index 93c9446..0a08cd6 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -325,11 +325,7 @@
 #ifdef BACKSLASH_IN_FILENAME
 # define PATH_ESC_CHARS ((char_u *)" \t*?[{`%#")
 #else
-# ifdef COLON_AS_PATHSEP
-#  define PATH_ESC_CHARS ((char_u *)" \t*?[{`$%#/")
-# else
-#  define PATH_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|")
-# endif
+# define PATH_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|")
 # define SHELL_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|<>();&!")
 #endif
 
