diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim
index 6f5e0c0..2d5e0ee 100644
--- a/runtime/autoload/ccomplete.vim
+++ b/runtime/autoload/ccomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Mar 19
+" Last Change:	2006 Mar 24
 
 
 " This function is used for the 'omnifunc' option.
@@ -166,9 +166,11 @@
 
     let res = []
     for i in range(len(diclist))
-      " New ctags has the "typename" field.
+      " New ctags has the "typeref" field.  Patched version has "typename".
       if has_key(diclist[i], 'typename')
 	call extend(res, s:StructMembers(diclist[i]['typename'], items[1:], 1))
+      elseif has_key(diclist[i], 'typeref')
+	call extend(res, s:StructMembers(diclist[i]['typeref'], items[1:], 1))
       endif
 
       " For a variable use the command, which must be a search pattern that
@@ -232,10 +234,9 @@
 
   let res['extra'] = s:Tagcmd2extra(a:val['cmd'], a:val['name'], a:val['filename'])
 
-  " Use the whole search command as the "info" entry.
-  let s = matchstr(a:val['cmd'], '/^\s*\zs.*\ze$/')
+  let s = s:Dict2info(a:val)
   if s != ''
-    let res['info'] = substitute(s, '\\\(.\)', '\1', 'g')
+    let res['info'] = s
   endif
 
   let res['tagline'] = ''
@@ -253,6 +254,51 @@
   return res
 endfunction
 
+" Use all the items in dictionary for the "info" entry.
+function! s:Dict2info(dict)
+  let info = ''
+  for k in sort(keys(a:dict))
+    let info  .= k . repeat(' ', 10 - len(k))
+    if k == 'cmd'
+      let info .= substitute(matchstr(a:dict['cmd'], '/^\s*\zs.*\ze$/'), '\\\(.\)', '\1', 'g')
+    else
+      let info .= a:dict[k]
+    endif
+    let info .= "\n"
+  endfor
+  return info
+endfunc
+
+" Parse a tag line and return a dictionary with items like taglist()
+function! s:ParseTagline(line)
+  let l = split(a:line, "\t")
+  let d = {}
+  if len(l) >= 3
+    let d['name'] = l[0]
+    let d['filename'] = l[1]
+    let d['cmd'] = l[2]
+    let n = 2
+    if l[2] =~ '^/'
+      " Find end of cmd, it may contain Tabs.
+      while n < len(l) && l[n] !~ '/;"$'
+	let n += 1
+	let d['cmd'] .= "  " . l[n]
+      endwhile
+    endif
+    for i in range(n + 1, len(l) - 1)
+      if l[i] == 'file:'
+	let d['static'] = 1
+      elseif l[i] !~ ':'
+	let d['kind'] = l[i]
+      else
+	let d[matchstr(l[i], '[^:]*')] = matchstr(l[i], ':\zs.*')
+      endif
+    endfor
+  endif
+
+  return d
+endfunction
+
 " Turn a match item "val" into an item for completion.
 " "val['match']" is the matching item.
 " "val['tagline']" is the tagline in which the last part was found.
@@ -265,10 +311,10 @@
     " Use info from Tag2item().
     let res['info'] = a:val['info']
   else
-    " Use the whole search command as the "info" entry.
-    let s = matchstr(line, '\t/^\s*\zs.*\ze$/')
+    " Parse the tag line and add each part to the "info" entry.
+    let s = s:Dict2info(s:ParseTagline(line))
     if s != ''
-      let res['info'] = substitute(s, '\\\(.\)', '\1', 'g')
+      let res['info'] = s
     endif
   endif
 
@@ -348,7 +394,11 @@
     for tagidx in range(len(diclist))
       let item = diclist[tagidx]
 
-      " New ctags has the "typename" field.
+      " New ctags has the "typeref" field.  Patched version has "typename".
+      if has_key(item, 'typeref')
+	call extend(res, s:StructMembers(item['typeref'], a:items, a:all))
+	continue
+      endif
       if has_key(item, 'typename')
 	call extend(res, s:StructMembers(item['typename'], a:items, a:all))
 	continue
@@ -496,11 +546,16 @@
     if has_key(a:matches[i], 'dict')
       if has_key(a:matches[i].dict, 'typename')
 	let typename = a:matches[i].dict['typename']
+      elseif has_key(a:matches[i].dict, 'typeref')
+	let typename = a:matches[i].dict['typeref']
       endif
       let line = "\t" . a:matches[i].dict['cmd']
     else
       let line = a:matches[i]['tagline']
       let e = matchend(line, '\ttypename:')
+      if e < 0
+	let e = matchend(line, '\ttyperef:')
+      endif
       if e > 0
 	" Use typename field
 	let typename = matchstr(line, '[^\t]*', e)
