diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index a629537..0b4bc5f 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -41,7 +41,7 @@
 			let start = col('.') - 1
 			let b:jscompl = 1
 			let b:jsrange = [scriptstart, scriptend]
-			while start >= 0 && line[start - 1] =~ '\w'
+			while start >= 0 && line[start - 1] =~ '\k'
 				let start -= 1
 			endwhile
 			" We are inside of <script> tag. But we should also get contents
@@ -102,7 +102,7 @@
 		" completion will be badly reported
 		if b:compl_context =~? 'on[a-z]*\s*=\s*\(''[^'']*\|"[^"]*\)$'
 			let start = col('.') - 1
-			while start >= 0 && line[start - 1] =~ '\w'
+			while start >= 0 && line[start - 1] =~ '\k'
 				let start -= 1
 			endwhile
 		endif
@@ -178,13 +178,6 @@
 		endif
 	endif
 
-	" Set attribute groups
-    let coreattrs = ["id", "class", "style", "title"] 
-    let i18n = ["lang", "xml:lang", "dir=\"ltr\" ", "dir=\"rtl\" "]
-    let events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
-    			\ "onmouseover", "onmouseout", "onkeypress", "onkeydown", "onkeyup"]
-    let focus = ["accesskey", "tabindex", "onfocus", "onblur"]
-    let coregroup = coreattrs + i18n + events
 	" If context contains > it means we are already outside of tag and we
 	" should abandon action
 	" If context contains white space it is attribute. 
@@ -403,12 +396,11 @@
 
 				" 3. Proper call for javascriptcomplete#CompleteJS
 				call cursor(l,c)
-				let js_context = matchstr(a:base, '\w\+$')
+				let js_context = matchstr(a:base, '\k\+$')
 				let js_shortcontext = substitute(a:base, js_context.'$', '', '')
 				let b:compl_context = context
 				let b:jsrange = [l, l]
 				unlet! l c
-				"return map(javascriptcomplete#CompleteJS(0, js_context), 'js_shortcontext.v:val')
 				return javascriptcomplete#CompleteJS(0, js_context)
 
 			endif
@@ -501,95 +493,44 @@
 		" Attribute completion {{{
 		" Shorten context to not include last word
 		let sbase = matchstr(context, '.*\ze\s.*')
-		if tag =~ '^\(abbr\|acronym\|address\|b\|bdo\|big\|caption\|cite\|code\|dd\|dfn\|div\|dl\|dt\|em\|fieldset\|h\d\|hr\|i\|kbd\|li\|noscript\|ol\|p\|samp\|small\|span\|strong\|sub\|sup\|tt\|ul\|var\)$'
-			let attrs = coregroup
-		elseif tag == 'a'
-			let attrs = coregroup + focus + ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
-		elseif tag == 'area'
-			let attrs = coregroup + focus + ["shape", "coords", "href", "nohref", "alt"]
-		elseif tag == 'base'
-			let attrs = ["href", "id"]
-		elseif tag == 'blockquote'
-			let attrs = coregroup + ["cite"]
-		elseif tag == 'body'
-			let attrs = coregroup + ["onload", "onunload"]
-		elseif tag == 'br'
-			let attrs = coreattrs
-		elseif tag == 'button'
-			let attrs = coregroup + focus + ["name", "value", "type"]
-		elseif tag == '^\(col\|colgroup\)$'
-			let attrs = coregroup + ["span", "width", "align", "char", "charoff", "valign"]
-		elseif tag =~ '^\(del\|ins\)$'
-			let attrs = coregroup + ["cite", "datetime"]
-		elseif tag == 'form'
-			let attrs = coregroup + ["action", "method=\"get\" ", "method=\"post\" ", "enctype", "onsubmit", "onreset", "accept", "accept-charset"]
-		elseif tag == 'head'
-			let attrs = i18n + ["id", "profile"]
-		elseif tag == 'html'
-			let attrs = i18n + ["id", "xmlns"]
-		elseif tag == 'img'
-			let attrs = coregroup + ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"]
-		elseif tag == 'input'
-			let attrs = coregroup + ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"]
-		elseif tag == 'label'
-			let attrs = coregroup + ["for", "accesskey", "onfocus", "onblur"]
-		elseif tag == 'legend'
-			let attrs = coregroup + ["accesskey"]
-		elseif tag == 'link'
-			let attrs = coregroup + ["charset", "href", "hreflang", "type", "rel", "rev", "media"]
-		elseif tag == 'map'
-			let attrs = i18n + events + ["id", "class", "style", "title", "name"]
-		elseif tag == 'meta'
-			let attrs = i18n + ["id", "http-equiv", "content", "scheme", "name"]
-		elseif tag == 'title'
-			let attrs = i18n + ["id"]
-		elseif tag == 'object'
-			let attrs = coregroup + ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"]
-		elseif tag == 'optgroup'
-			let attrs = coregroup + ["disbled", "label"]
-		elseif tag == 'option'
-			let attrs = coregroup + ["disbled", "selected", "value", "label"]
-		elseif tag == 'param'
-			let attrs = ["id", "name", "value", "valuetype", "type"]
-		elseif tag == 'pre'
-			let attrs = coregroup + ["xml:space"]
-		elseif tag == 'q'
-			let attrs = coregroup + ["cite"]
-		elseif tag == 'script'
-			let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"]
-		elseif tag == 'select'
-			let attrs = coregroup + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
-		elseif tag == 'style'
-			let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"]
-		elseif tag == 'table'
-			let attrs = coregroup + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
-		elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
-			let attrs = coregroup + ["align", "char", "charoff", "valign"]
-		elseif tag == 'textarea'
-			let attrs = coregroup + ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"]
-		elseif tag =~ '^\(th\|td\)$'
-			let attrs = coregroup + ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"]
-		else
-			return []
+
+		" Load data {{{
+		if !exists("g:xmldata_xhtml10s")
+			runtime! autoload/xml/xhtml10s.vim
 		endif
+		" }}}
+		"
+		let attrs = keys(g:xmldata_xhtml10s[tag][1])
 
 		for m in sort(attrs)
 			if m =~ '^'.attr
-				if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
-					call add(res, m)
-				else
-					call add(res, m.'="')
-				endif
+				call add(res, m)
 			elseif m =~ attr
-				if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
-					call add(res2, m)
-				else
-					call add(res2, m.'="')
-				endif
+				call add(res2, m)
 			endif
 		endfor
-
-		return res + res2
+		let menu = res + res2
+		if has_key(g:xmldata_xhtml10s, 'vimxmlattrinfo')
+			let final_menu = []
+			for i in range(len(menu))
+				let item = menu[i]
+				if has_key(g:xmldata_xhtml10s['vimxmlattrinfo'], item)
+					let m_menu = g:xmldata_xhtml10s['vimxmlattrinfo'][item][0]
+					let m_info = g:xmldata_xhtml10s['vimxmlattrinfo'][item][1]
+					if m_menu !~ 'Bool'
+						let item .= '="'
+					endif
+				else
+					let m_menu = ''
+					let m_info = ''
+					let item .= '="'
+				endif
+				let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
+			endfor
+		else
+			let final_menu = map(menu, 'v:val."=\""')
+		endif
+		return final_menu
 
 	endif
 	" }}}
@@ -625,8 +566,25 @@
 			call add(res2, m)
 		endif
 	endfor
+	let menu = res + res2
+	if has_key(g:xmldata_xhtml10s, 'vimxmltaginfo')
+		let final_menu = []
+		for i in range(len(menu))
+			let item = menu[i]
+			if has_key(g:xmldata_xhtml10s['vimxmltaginfo'], item)
+				let m_menu = g:xmldata_xhtml10s['vimxmltaginfo'][item][0]
+				let m_info = g:xmldata_xhtml10s['vimxmltaginfo'][item][1]
+			else
+				let m_menu = ''
+				let m_info = ''
+			endif
+			let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
+		endfor
+	else
+		let final_menu = menu
+	endif
+	return final_menu
 
-	return res + res2
 
 	" }}}
   endif
diff --git a/runtime/autoload/javascriptcomplete.vim b/runtime/autoload/javascriptcomplete.vim
index 0163fd9..87e40f3 100644
--- a/runtime/autoload/javascriptcomplete.vim
+++ b/runtime/autoload/javascriptcomplete.vim
@@ -12,7 +12,7 @@
 	let compl_begin = col('.') - 2
 	" Bit risky but JS is rather limited language and local chars shouldn't
 	" fint way into names
-	while start >= 0 && line[start - 1] =~ '\w'
+	while start >= 0 && line[start - 1] =~ '\k'
 		let start -= 1
 	endwhile
 	let b:compl_context = getline('.')[0:compl_begin]
@@ -120,17 +120,17 @@
 		let stris = striprop + strimeth
 
 		" User created properties
-		let user_props1 = filter(copy(file), 'v:val =~ "this\\.\\w"')
+		let user_props1 = filter(copy(file), 'v:val =~ "this\\.\\k"')
 		let juser_props1 = join(user_props1, ' ')
 		let user_props1 = split(juser_props1, '\zethis\.')
 		unlet! juser_props1
-		call map(user_props1, 'matchstr(v:val, "this\\.\\zs\\w\\+\\ze")')
+		call map(user_props1, 'matchstr(v:val, "this\\.\\zs\\k\\+\\ze")')
 
-		let user_props2 = filter(copy(file), 'v:val =~ "\\.prototype\\.\\w"')
+		let user_props2 = filter(copy(file), 'v:val =~ "\\.prototype\\.\\k"')
 		let juser_props2 = join(user_props2, ' ')
 		let user_props2 = split(juser_props2, '\zeprototype\.')
 		unlet! juser_props2
-		call map(user_props2, 'matchstr(v:val, "prototype\\.\\zs\\w\\+\\ze")')
+		call map(user_props2, 'matchstr(v:val, "prototype\\.\\zs\\k\\+\\ze")')
 		let user_props = user_props1 + user_props2
 
 		" HTML DOM properties
@@ -394,11 +394,11 @@
 		"    for regexp "= /re/"
 		" 4. Make correction for Microsoft.XMLHTTP ActiveXObject
 		" 5. Repeat for external files
-		let object = matchstr(shortcontext, '\zs\w\+\ze\(\[.\{-}\]\)\?\.$')
+		let object = matchstr(shortcontext, '\zs\k\+\ze\(\[.\{-}\]\)\?\.$')
 		if len(object) > 0
 			let decl_line = search(object.'.\{-}=\s*new\s*', 'bn')
 			if decl_line > 0
-				let object_type = matchstr(getline(decl_line), object.'.\{-}=\s*new\s*\zs\w\+\ze')
+				let object_type = matchstr(getline(decl_line), object.'.\{-}=\s*new\s*\zs\k\+\ze')
 				if object_type == 'ActiveXObject' && matchstr(getline(decl_line), object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != ''
 						let object_type = 'XMLHttpRequest'
 				endif
@@ -413,7 +413,7 @@
 			if decl_line == 0 && exists("b:js_extfiles")
 				let dext_line = filter(copy(b:js_extfiles), 'v:val =~ "'.object.'.\\{-}=\\s*new\\s*"')
 				if len(dext_line) > 0
-					let object_type = matchstr(dext_line[-1], object.'.\{-}=\s*new\s*\zs\w\+\ze')
+					let object_type = matchstr(dext_line[-1], object.'.\{-}=\s*new\s*\zs\k\+\ze')
 					if object_type == 'ActiveXObject' && matchstr(dext_line[-1], object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != ''
 							let object_type = 'XMLHttpRequest'
 					endif
@@ -532,7 +532,7 @@
 	" constructs like: var var1, var2, var3 = "something";
 	for i in range(len(variables))
 		let comma_separated = split(variables[i], ',\s*')
-		call map(comma_separated, 'matchstr(v:val, "\\w\\+")')
+		call map(comma_separated, 'matchstr(v:val, "\\k\\+")')
 		let vars += comma_separated
 	endfor
 
@@ -540,11 +540,11 @@
 	unlet! vars
 
 	" Add "no var" variables.
-	let undeclared_variables = filter(copy(file), 'v:val =~ "^\\s*\\w\\+\\s*="')
+	let undeclared_variables = filter(copy(file), 'v:val =~ "^\\s*\\k\\+\\s*="')
 	let u_vars = []
 	for i in range(len(undeclared_variables))
 		let  split_equal = split(undeclared_variables[i], '\s*=')
-		call map(split_equal, 'matchstr(v:val, "\\w\\+$")')
+		call map(split_equal, 'matchstr(v:val, "\\k\\+$")')
 		let u_vars += split_equal
 	endfor
 
@@ -554,10 +554,20 @@
 	" Get functions
 	let functions = filter(copy(file), 'v:val =~ "^\\s*function\\s"')
 	let arguments = copy(functions)
-	call map(functions, 'matchstr(v:val, "^\\s*function\\s\\+\\zs\\w\\+")')
+	call map(functions, 'matchstr(v:val, "^\\s*function\\s\\+\\zs\\k\\+")')
 	call map(functions, 'v:val."("')
 	let functions = sort(functions)
 
+	" Create table to keep arguments for additional 'menu' info
+	let b:js_menuinfo = {}
+	for i in arguments
+		let g:ia = i
+		let f_elements = matchlist(i, 'function\s\+\(\k\+\)\s*(\(.\{-}\))')
+		if len(f_elements) == 3
+			let b:js_menuinfo[f_elements[1].'('] = f_elements[2]
+		endif
+	endfor
+
 	" Get functions arguments
 	call map(arguments, 'matchstr(v:val, "function.\\{-}(\\zs.\\{-}\\ze)")')
 	let jargs = join(arguments, ',')
@@ -590,7 +600,26 @@
 		endif
 	endfor
 
-	return res + res2
+	let menu = res + res2
+	let final_menu = []
+	for i in range(len(menu))
+		let item = menu[i]
+		if item =~ '($'
+			let kind = 'f'
+			if has_key(b:js_menuinfo, item)
+				let m_info = b:js_menuinfo[item]
+			else
+				let m_info = ''
+			endif
+		else
+			let kind = 'v'
+			let m_info = ''
+		endif
+		let final_menu += [{'word':item, 'menu':m_info, 'kind':kind}]
+	endfor
+	let g:fm = final_menu
+	return final_menu
+
 endfunction
 
 " vim:set foldmethod=marker:
diff --git a/runtime/autoload/xmlcomplete.vim b/runtime/autoload/xmlcomplete.vim
index 0d104a0..22e81a4 100644
--- a/runtime/autoload/xmlcomplete.vim
+++ b/runtime/autoload/xmlcomplete.vim
@@ -230,25 +230,42 @@
 
 		for m in sort(attrs)
 			if m =~ '^'.attr
-				if tag !~ '^[?!]' && len(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][m]) > 0 && g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][m][0] =~ '^BOOL$'
-					call add(res, m)
-				elseif m =~ '='
-					call add(res, m)
-				else
-					call add(res, m.'="')
-				endif
+				call add(res, m)
 			elseif m =~ attr
-				if tag !~ '^[?!]' && len(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][m]) > 0 && g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][m][0] =~ '^BOOL$'
-					call add(res, m)
-				elseif m =~ '='
-					call add(res, m)
-				else
-					call add(res2, m.'="')
-				endif
+				call add(res2, m)
 			endif
 		endfor
-
-		return res + res2
+		let menu = res + res2
+		let final_menu = []
+		if has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}, 'vimxmlattrinfo')
+			for i in range(len(menu))
+				let item = menu[i]
+				if has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmlattrinfo'], item)
+					let m_menu = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmlattrinfo'][item][0]
+					let m_info = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmlattrinfo'][item][1]
+				else
+					let m_menu = ''
+					let m_info = ''
+				endif
+				if tag !~ '^[?!]' && len(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][item]) > 0 && g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][item][0] =~ '^\(BOOL\|'.item.'\)$'
+					let item = item
+				else
+					let item .= '="'
+				endif
+				let final_menu += [{'word':item, 'menu':m_menu, 'info':m_info}]
+			endfor
+		else
+			for i in range(len(menu))
+				let item = menu[i]
+				if tag !~ '^[?!]' && len(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][item]) > 0 && g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[tag][1][item][0] =~ '^\(BOOL\|'.item.'\)$'
+					let item = item
+				else
+					let item .= '="'
+				endif
+				let final_menu += [item]
+			endfor
+		endif
+		return final_menu
 
 	endif
 	" Close tag
@@ -308,21 +325,36 @@
 	let tags = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}[opentag][0]
 	let context = substitute(context, '^\k*:', '', '')
 
-	if b:xml_namespace == 'DEFAULT'
-		let b:xml_namespace = ''
-	else
-		let b:xml_namespace .= ':'
-	endif
-
 	for m in tags
 		if m =~ '^'.context
-			call add(res, b:xml_namespace.m)
+			call add(res, m)
 		elseif m =~ context
-			call add(res2, b:xml_namespace.m)
+			call add(res2, m)
 		endif
 	endfor
-
-	return res + res2
+	let menu = res + res2
+	if has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}, 'vimxmltaginfo')
+		let final_menu = []
+		for i in range(len(menu))
+			let item = menu[i]
+			if has_key(g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmltaginfo'], item)
+				let m_menu = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmltaginfo'][item][0]
+				let m_info = g:xmldata{'_'.g:xmldata_connection[b:xml_namespace]}['vimxmltaginfo'][item][1]
+			else
+				let m_menu = ''
+				let m_info = ''
+			endif
+			if b:xml_namespace == 'DEFAULT'
+				let xml_namespace = ''
+			else
+				let xml_namespace = b:xml_namespace.':'
+			endif
+			let final_menu += [{'word':xml_namespace.item, 'menu':m_menu, 'info':m_info}]
+		endfor
+	else
+		let final_menu = menu
+	endif
+	return final_menu
 
   endif
 endfunction
