diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index 806eb52..768afd5 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	XHTML 1.0 Strict
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Now 20
+" Last Change:	2006 Jan 22
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -31,7 +31,7 @@
 	endif
 	if !exists("b:csscompl")
 		let b:compl_context = getline('.')[0:(compl_begin)]
-		let b:compl_context = matchstr(b:compl_context, '.*<\zs.*')
+		let b:compl_context = matchstr(b:compl_context, '.*\zs<.*')
 	else
 		let b:compl_context = getline('.')[0:compl_begin]
 	endif
@@ -42,12 +42,18 @@
     let res2 = []
 	" a:base is very short - we need context
 	let context = b:compl_context
-	unlet! b:compl_context
 	" Check if we should do CSS completion inside of <style> tag
 	if exists("b:csscompl")
 		unlet! b:csscompl
+		let context = b:compl_context
 		return csscomplete#CompleteCSS(0, context)
+	else
+		if len(b:compl_context) == 0 && !exists("b:entitiescompl")
+			return []
+		endif
+		let context = matchstr(b:compl_context, '.\zs.*')
 	endif
+	unlet! b:compl_context
 	" Make entities completion
 	if exists("b:entitiescompl")
 		unlet! b:entitiescompl
@@ -58,13 +64,25 @@
 
 	    let entities =  g:xmldata_xhtml10s['vimxmlentities']
 
-		for m in entities
-			if m =~ '^'.a:base
-				call add(res, m.';')
-			endif
-		endfor
+		if len(a:base) == 1
+			for m in entities
+				if m =~ '^'.a:base
+					call add(res, m.';')
+				endif
+			endfor
+			return res
+		else
+			for m in entities
+				if m =~? '^'.a:base
+					call add(res, m.';')
+				elseif m =~? a:base
+					call add(res2, m.';')
+				endif
+			endfor
 
-		return res
+			return res + res2
+		endif
+
 
 	endif
 	if context =~ '>'
@@ -76,6 +94,7 @@
 			return []
 		endif
 	endif
+	"if context !~ '<$'
 
 	" Set attribute groups
     let coreattrs = ["id", "class", "style", "title"] 
@@ -456,6 +475,13 @@
 	endif
 	" Deal with tag completion.
 	let opentag = xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
+	if opentag == ''
+		" Hack for sometimes failing GetLastOpenTag.
+		" As far as I tested fail isn't GLOT fault but problem
+		" of invalid document - not properly closed tags and other mish-mash.
+		" If returns empty string assume <body>. Safe bet.
+		let opentag = 'body'
+	endif
 
 	if !exists("g:xmldata_xhtml10s")
 		runtime! autoload/xml/xhtml10s.vim
diff --git a/src/getchar.c b/src/getchar.c
index c1c9bca..5da7537 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2365,7 +2365,7 @@
 		    colnr_T	col = 0, vcol;
 		    char_u	*ptr;
 
-		    if (p_smd)
+		    if (p_smd && msg_silent == 0)
 		    {
 			unshowmode(TRUE);
 			mode_deleted = TRUE;
@@ -2641,7 +2641,7 @@
      *	 if we return an ESC to exit insert mode, the message is deleted
      *	 if we don't return an ESC but deleted the message before, redisplay it
      */
-    if (advance && p_smd && (State & INSERT))
+    if (advance && p_smd && msg_silent == 0 && (State & INSERT))
     {
 	if (c == ESC && !mode_deleted && !no_mapping)
 	{
diff --git a/src/normal.c b/src/normal.c
index 310a6f0..4d105e7 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -1165,6 +1165,7 @@
      * Don't redraw the screen, it would remove the message.
      */
     if (       ((p_smd
+		    && msg_silent == 0
 		    && (restart_edit != 0
 #ifdef FEAT_VISUAL
 			|| (VIsual_active
@@ -1713,7 +1714,7 @@
 		setmouse();
 		mouse_dragging = 0;
 # endif
-		if (p_smd)
+		if (p_smd && msg_silent == 0)
 		    clear_cmdline = TRUE;   /* unshow visual mode later */
 #ifdef FEAT_CMDL_INFO
 		else
@@ -2947,7 +2948,8 @@
     }
 
     /* If Visual mode changed show it later. */
-    if (p_smd && (VIsual_active != old_active || VIsual_mode != old_mode))
+    if (p_smd && msg_silent == 0
+		  && (VIsual_active != old_active || VIsual_mode != old_mode))
 	redraw_cmdline = TRUE;
 #endif
 
@@ -3113,7 +3115,7 @@
 	curwin->w_cursor.coladd = 0;
 #endif
 
-    if (p_smd)
+    if (p_smd && msg_silent == 0)
 	clear_cmdline = TRUE;		/* unshow visual mode later */
 #ifdef FEAT_CMDL_INFO
     else
@@ -3644,7 +3646,7 @@
     };
 #endif
 
-    if (!p_sc)
+    if (!p_sc || msg_silent != 0)
 	return FALSE;
 
     if (showcmd_visual)
@@ -7138,7 +7140,7 @@
 #ifdef FEAT_MOUSE
 	    setmouse();
 #endif
-	    if (p_smd)
+	    if (p_smd && msg_silent == 0)
 		redraw_cmdline = TRUE;	    /* show visual mode later */
 	    /*
 	     * For V and ^V, we multiply the number of lines even if there
@@ -7235,7 +7237,7 @@
 #ifdef FEAT_MOUSE
     setmouse();
 #endif
-    if (p_smd)
+    if (p_smd && msg_silent == 0)
 	redraw_cmdline = TRUE;	/* show visual mode later */
 #ifdef FEAT_CLIPBOARD
     /* Make sure the clipboard gets updated.  Needed because start and
@@ -8280,7 +8282,7 @@
     if (cap->nchar == Ctrl_N || cap->nchar == Ctrl_G)
     {
 	clearop(cap->oap);
-	if (restart_edit != 0 && p_smd)
+	if (restart_edit != 0 && p_smd && msg_silent == 0)
 	    clear_cmdline = TRUE;		/* unshow mode later */
 	restart_edit = 0;
 #ifdef FEAT_CMDWIN
