diff --git a/runtime/autoload/sqlcomplete.vim b/runtime/autoload/sqlcomplete.vim
index ec158f6..146cf21 100644
--- a/runtime/autoload/sqlcomplete.vim
+++ b/runtime/autoload/sqlcomplete.vim
@@ -1,8 +1,12 @@
-" Vim completion script
+" Vim OMNI completion script for SQL
 " Language:    SQL
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     3.0
-" Last Change: Thu Apr 20 2006 8:47:12 PM
+" Version:     4.0
+" Last Change: Wed Apr 26 2006 3:00:06 PM
+" Usage:       For detailed help
+"              ":help sql.txt" 
+"              or ":help ft-sql-omni" 
+"              or read $VIMRUNTIME/doc/sql.txt
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
@@ -18,7 +22,7 @@
 if exists('g:loaded_sql_completion')
     finish 
 endif
-let g:loaded_sql_completion = 30
+let g:loaded_sql_completion = 40
 
 " Maintains filename of dictionary
 let s:sql_file_table        = ""
@@ -93,9 +97,14 @@
     " be replaced by whatever is chosen from the completion list
     if a:findstart
         " Locate the start of the item, including "."
-        let line = getline('.')
-        let start = col('.') - 1
+        let line     = getline('.')
+        let start    = col('.') - 1
         let lastword = -1
+        let begindot = 0
+        " Check if the first character is a ".", for column completion
+        if line[start - 1] == '.'
+            let begindot = 1
+        endif
         while start > 0
             if line[start - 1] =~ '\w'
                 let start -= 1
@@ -104,18 +113,19 @@
                 " 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
-                " Assume we are looking for column completion
-                " column_type can be either 'column' or 'column_csv'
-                if lastword == -1 && compl_type =~ 'column'
+                " If column completion was specified stop at the "." if
+                " a . was specified, otherwise, replace all the way up
+                " to the owner name (if included).
+                if lastword == -1 && compl_type == 'column' && begindot == 1
                     let lastword = start
                 endif
                 " If omni_sql_include_owner = 0, do not include the table
                 " name as part of the substitution, so break here
                 if lastword == -1 && 
-                            \ compl_type =~ 'table\|view\|procedure' && 
+                            \ compl_type =~ 'table\|view\|procedure\column_csv' && 
                             \ g:omni_sql_include_owner == 0
                     let lastword = start
                     break
@@ -234,6 +244,11 @@
         let s:tbl_cols  = []
         let s:syn_list  = []
         let s:syn_value = []
+
+        let msg = "All SQL cached items have been removed."
+        call s:SQLCWarningMsg(msg)
+        " Leave time for the user to read the error message
+        :sleep 2
     else
         let compl_list = s:SQLCGetSyntaxList(compl_type)
     endif
@@ -252,18 +267,6 @@
     return compl_list
 endfunc
 
-function! s:SQLCWarningMsg(msg)
-    echohl WarningMsg
-    echomsg a:msg 
-    echohl None
-endfunction
-      
-function! s:SQLCErrorMsg(msg)
-    echohl ErrorMsg
-    echomsg a:msg 
-    echohl None
-endfunction
-      
 function! sqlcomplete#PreCacheSyntax(...)
     let syn_group_arr = []
     if a:0 > 0 
@@ -294,6 +297,51 @@
     let &omnifunc='sqlcomplete#Complete'
 endfunction
 
+function! sqlcomplete#DrillIntoTable()
+    " If the omni popup window is visible
+    if pumvisible()
+        call sqlcomplete#Map('column')
+        " C-Y, makes the currently highlighted entry active
+        " and trigger the omni popup to be redisplayed
+        call feedkeys("\<C-Y>\<C-X>\<C-O>")
+    else
+        if has('win32')
+            " If the popup is not visible, simple perform the normal
+            " <C-Right> behaviour
+            exec "normal! \<C-Right>"
+        endif
+    endif
+    return ""
+endfunction
+
+function! sqlcomplete#DrillOutOfColumns()
+    " If the omni popup window is visible
+    if pumvisible()
+        call sqlcomplete#Map('tableReset')
+        " Trigger the omni popup to be redisplayed
+        call feedkeys("\<C-X>\<C-O>")
+    else
+        if has('win32')
+            " If the popup is not visible, simple perform the normal
+            " <C-Left> behaviour
+            exec "normal! \<C-Left>"
+        endif
+    endif
+    return ""
+endfunction
+
+function! s:SQLCWarningMsg(msg)
+    echohl WarningMsg
+    echomsg a:msg 
+    echohl None
+endfunction
+      
+function! s:SQLCErrorMsg(msg)
+    echohl ErrorMsg
+    echomsg a:msg 
+    echohl None
+endfunction
+      
 function! s:SQLCGetSyntaxList(syn_group)
     let syn_group  = a:syn_group
     let compl_list = []
@@ -347,7 +395,8 @@
 endfunction
 
 function! s:SQLCAddAlias(table_name, table_alias, cols)
-    let table_name  = a:table_name
+    " Strip off the owner if included
+    let table_name  = matchstr(a:table_name, '\%(.\{-}\.\)\?\zs\(.*\)' )
     let table_alias = a:table_alias
     let cols        = a:cols
 
@@ -373,7 +422,7 @@
                     " Restore original value
                     let &iskeyword = save_keyword
                 elseif table_name =~ '\u\U'
-                    let initials = substitute(
+                    let table_alias = substitute(
                                 \ table_name, '\(\u\)\U*', '\1', 'g')
                 else
                     let table_alias = strpart(table_name, 0, 1)
@@ -397,6 +446,7 @@
 
 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_.]\+')
     let table_cols   = []
     let table_alias  = ''
     let move_to_top  = 1
@@ -480,7 +530,9 @@
                          \ 'from.\{-}'.
                          \ '\zs\(\(\<\w\+\>\)\.\)\?'.
                          \ '\<\w\+\>\ze'.
-                         \ '\s\+\%(as\s\+\)\?\<'.table_name.'\>'.
+                         \ '\s\+\%(as\s\+\)\?\<'.
+                         \ matchstr(table_name, '.\{-}\ze\.\?$').
+                         \ '\>'.
                          \ '\s*\.\@!.*'.
                          \ '\(\<where\>\|$\)'.
                          \ '.*'
@@ -544,9 +596,12 @@
         exec 'DBSetOption use_tbl_alias='.saveSettingAlias
     endif
 
+    " If the user has asked for a comma separate list of column
+    " values, ask the user if they want to prepend each column
+    " with a tablename alias.
     if a:list_type == 'csv' && !empty(table_cols)
-        let cols = join(table_cols, ', ')
-        let cols = s:SQLCAddAlias(table_name, table_alias, cols)
+        let cols       = join(table_cols, ', ')
+        let cols       = s:SQLCAddAlias(table_name, table_alias, cols)
         let table_cols = [cols]
     endif
 
