diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
index c13dcf1..39028f3 100644
--- a/runtime/ftplugin/sql.vim
+++ b/runtime/ftplugin/sql.vim
@@ -1,8 +1,8 @@
 " SQL filetype plugin file
 " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
-" Version:     8.0
+" Version:     10.0
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Last Change: 2012 May 18
+" Last Change: 2012 Dec 04
 " Download:    http://vim.sourceforge.net/script.php?script_id=454
 
 " For more details please use:
@@ -30,34 +30,48 @@
 " To change the default dialect, add the following to your vimrc:
 "    let g:sql_type_default = 'sqlanywhere'
 "
-" This file also creates a command, SQLGetType, which allows you to 
+" This file also creates a command, SQLGetType, which allows you to
 " determine what the current dialect is in use.
 "     :SQLGetType
 "
 " History
 "
+" Version 10.0 (Dec 2012)
+"
+" NF: Changed all maps to use noremap instead of must map
+" NF: Changed all visual maps to use xnoremap instead of vnoremap as they
+"     should only be used in visual mode and not select mode.
+" BF: Most of the maps were using doubled up backslashes before they were
+"     changed to using the search() function, which meant they no longer
+"     worked.
+"
+" Version 9.0
+"
+" NF: Completes 'b:undo_ftplugin'
+" BF: Correctly set cpoptions when creating script
+"
 " Version 8.0
-" 
+"
 " NF: Improved the matchit plugin regex (Talek)
 "
 " Version 7.0
-" 
+"
 " NF: Calls the sqlcomplete#ResetCacheSyntax() function when calling
 "     SQLSetType.
 "
 " Version 6.0
-" 
+"
 " NF: Adds the command SQLGetType
 "
 " Version 5.0
-" 
-" NF: Adds the ability to choose the keys to control SQL completion, just add 
+"
+" NF: Adds the ability to choose the keys to control SQL completion, just add
 "     the following to your .vimrc:
 "    let g:ftplugin_sql_omni_key       = '<C-C>'
 "    let g:ftplugin_sql_omni_key_right = '<Right>'
 "    let g:ftplugin_sql_omni_key_left  = '<Left>'
 "
-" BF: format-options - Auto-wrap comments using textwidth was turned off 
+" BF: format-options - Auto-wrap comments using textwidth was turned off
 "                      by mistake.
 
 
@@ -81,7 +95,7 @@
 " This works with both Vim 6 and 7.
 
 if !exists("*SQL_SetType")
-    " NOTE: You cannot use function! since this file can be 
+    " 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)
@@ -105,9 +119,9 @@
             "
             "    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', 
+            let sqls = substitute( sqls,
+                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=',
+                        \ '\1\n',
                         \ 'g'
                         \ )
 
@@ -142,10 +156,10 @@
     function SQL_SetType(name)
 
         " User has decided to override default SQL scripts and
-        " specify a vendor specific version 
+        " 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 
+        " scripts from being executed, and then source the
         " appropriate Vim scripts.
         if exists("b:did_ftplugin")
             unlet b:did_ftplugin
@@ -163,10 +177,10 @@
         endif
 
         " Ensure the name is in the correct format
-        let new_sql_type = substitute(a:name, 
+        let new_sql_type = substitute(a:name,
                     \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
 
-        " Do not specify a buffer local variable if it is 
+        " Do not specify a buffer local variable if it is
         " the default value
         if new_sql_type == 'sql'
           let new_sql_type = 'sqloracle'
@@ -203,10 +217,10 @@
 
 if !exists("*SQL_GetType")
     function SQL_GetType()
-        if exists('b:sql_type_override') 
+        if exists('b:sql_type_override')
             echomsg "Current SQL dialect in use:".b:sql_type_override
         else
-            echomsg "Current SQL dialect in use:".g:sql_type_default        
+            echomsg "Current SQL dialect in use:".g:sql_type_default
         endif
     endfunction
     command! -nargs=0 SQLGetType :call SQL_GetType()
@@ -233,7 +247,8 @@
   finish
 endif
 
-let b:undo_ftplugin = "setl comments<"
+let b:undo_ftplugin = "setl comments< formatoptions< define< omnifunc<" .
+		    \ " | unlet! b:browsefilter b:match_words"
 
 " Don't load another plugin for this buffer
 let b:did_ftplugin     = 1
@@ -280,7 +295,7 @@
     " doend
     "
     " case
-    " when 
+    " when
     " when
     " default
     " end case
@@ -296,8 +311,10 @@
     " create[ or replace] procedure|function|event
                 " \ '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
 
-    let b:match_words =
-		\ '\<begin\>:\<end\>\W*$,'.
+    " For ColdFusion support
+    setlocal matchpairs+=<:>
+    let b:match_words = &matchpairs .
+		\ ',\<begin\>:\<end\>\W*$,'.
 		\
                 \ s:notend . '\<if\>:'.
                 \ '\<elsif\>\|\<elseif\>\|\<else\>:'.
@@ -337,14 +354,14 @@
 
 " 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-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'W' )<CR>
-vmap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'bW' )<CR>
-vmap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'W' )<CR>
-vmap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'bW' )<CR>
+nnoremap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
+nnoremap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
+nnoremap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
+nnoremap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
+xnoremap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'W' )<CR>
+xnoremap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'bW' )<CR>
+xnoremap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'W' )<CR>
+xnoremap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'bW' )<CR>
 
 
 " By default only look for CREATE statements, but allow
@@ -361,7 +378,7 @@
 " backwards, you must use \{,1}
 if !exists('g:ftplugin_sql_objects')
     let g:ftplugin_sql_objects = 'function,procedure,event,' .
-                \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+                \ '\(existing\\|global\s\+temporary\s\+\)\{,1}' .
                 \ 'table,trigger' .
                 \ ',schema,service,publication,database,datatype,domain' .
                 \ ',index,subscription,synchronization,view,variable'
@@ -382,47 +399,47 @@
 
 " 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*' .
-            \ '\\(\\(' .
-            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' .
-            \ '\\<\\(' .
-            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\>' 
+let s:ftplugin_sql_objects =
+            \ '\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
-exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
-exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
+exec "nnoremap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
+exec "nnoremap <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>'
+exec 'xnoremap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<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> ]" :call search('."'".b:comment_start."'".', "W" )<CR>'
 exec 'nnoremap <silent><buffer> [" :call search('."'".b:comment_end."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
 
 " Comments can be of the form:
 "   /*
@@ -431,7 +448,7 @@
 " or
 "   --
 " or
-"   // 
+"   //
 setlocal comments=s1:/*,mb:*,ex:*/,:--,://
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
@@ -443,7 +460,7 @@
 
     " This is used by the sqlcomplete.vim plugin
     " Source it for it's global functions
-    runtime autoload/syntaxcomplete.vim 
+    runtime autoload/syntaxcomplete.vim
 
     setlocal omnifunc=sqlcomplete#Complete
     " Prevent the intellisense plugin from loading
@@ -451,32 +468,32 @@
     if !exists('g:omni_sql_no_default_maps')
         " Static maps which use populate the completion list
         " using Vim's syntax highlighting rules
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
         " Dynamic maps which use populate the completion list
         " using the dbext.vim plugin
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " The next 3 maps are only to be used while the completion window is
         " active due to the <CR> at the beginning of the map
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " <C-Right> is not recognized on most Unix systems, so only create
         " these additional maps on the Windows platform.
         " If you would like to use these maps, choose a different key and make
         " the same map in your vimrc.
         " if has('win32')
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
         " endif
         " Remove any cached items useful for schema changes
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
     endif
 
     if b:sql_compl_savefunc != ""
