updated for version 7.0060
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 0761a69..1e7267e 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3125,11 +3125,11 @@
 	line = sp->nextline;
 	sp->nextline = NULL;
 	++sourcing_lnum;
-#ifdef FEAT_PROFILE
-	if (do_profiling)
-	    script_line_start();
-#endif
     }
+#ifdef FEAT_PROFILE
+    if (line != NULL && do_profiling)
+	script_line_start();
+#endif
 
     /* Only concatenate lines starting with a \ when 'cpoptions' doesn't
      * contain the 'C' flag. */
@@ -3684,7 +3684,7 @@
     static void
 prt_get_attr(hl_id, pattr, modec)
     int			hl_id;
-    prt_text_attr_T*	pattr;
+    prt_text_attr_T	*pattr;
     int			modec;
 {
     int     colorindex;
@@ -3695,6 +3695,7 @@
     pattr->bold = (highlight_has_attr(hl_id, HL_BOLD, modec) != NULL);
     pattr->italic = (highlight_has_attr(hl_id, HL_ITALIC, modec) != NULL);
     pattr->underline = (highlight_has_attr(hl_id, HL_UNDERLINE, modec) != NULL);
+    pattr->undercurl = (highlight_has_attr(hl_id, HL_UNDERCURL, modec) != NULL);
 
 # ifdef FEAT_GUI
     if (gui.in_use)
diff --git a/src/gui_kde_x11.cc b/src/gui_kde_x11.cc
index 18a0c3f..3bb8076 100644
--- a/src/gui_kde_x11.cc
+++ b/src/gui_kde_x11.cc
@@ -840,6 +840,15 @@
 }//}}}
 
 /*
+ * Set the current text special color.
+ */
+    void
+gui_mch_set_sp_color(guicolor_T color)//{{{
+{
+    /* TODO */
+}//}}}
+
+/*
  * Use the blank mouse pointer or not.
  *
  * hide: TRUE = use blank ptr, FALSE = use parent ptr
diff --git a/src/gui_photon.c b/src/gui_photon.c
index d4360fe..293debe 100644
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -2114,6 +2114,11 @@
 }
 
     void
+gui_mch_set_sp_color(guicolor_T color)
+{
+}
+
+    void
 gui_mch_invert_rectangle(int row, int col, int nr, int nc)
 {
     PhRect_t rect;
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 8bcec1d..50c5e59 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1400,6 +1400,15 @@
     gui.currBgColor = color;
 }
 
+/*
+ * Set the current text special color.
+ */
+    void
+gui_mch_set_sp_color(guicolor_T color)
+{
+    gui.currSpColor = color;
+}
+
 #if defined(FEAT_MBYTE) && defined(FEAT_MBYTE_IME)
 /*
  * Multi-byte handling, originally by Sung-Hoon Baek.
@@ -2013,6 +2022,7 @@
 			 foptions, pcliprect, (char *)text, len, padding);
     }
 
+    /* Underline */
     if (flags & DRAW_UNDERL)
     {
 	hpen = CreatePen(PS_SOLID, 1, gui.currFgColor);
@@ -2029,6 +2039,21 @@
 	LineTo(s_hdc, FILL_X(col + len), y);
 	DeleteObject(SelectObject(s_hdc, old_pen));
     }
+
+    /* Undercurl */
+    if (flags & DRAW_UNDERC)
+    {
+	int			x;
+	int			offset;
+	const static int	val[8] = {1, 0, 0, 0, 1, 2, 2, 2 };
+
+	y = FILL_Y(row + 1) - 1;
+	for (x = FILL_X(col); x < FILL_X(col + len); ++x)
+	{
+	    offset = val[x % 8];
+	    SetPixel(s_hdc, x, y - offset, gui.currSpColor);
+	}
+    }
 }
 
 
@@ -4045,7 +4070,7 @@
 	cur_beval->x = pt.x;
 	cur_beval->y = pt.y;
 
-	TRACE0("BevalTimerProc: sending request");
+	// TRACE0("BevalTimerProc: sending request");
 
 	if (cur_beval->msgCB != NULL)
 	    (*cur_beval->msgCB)(cur_beval, 0);
@@ -4056,22 +4081,22 @@
 gui_mch_disable_beval_area(beval)
     BalloonEval	*beval;
 {
-    TRACE0("gui_mch_disable_beval_area {{{");
+    // TRACE0("gui_mch_disable_beval_area {{{");
     KillTimer(s_textArea, BevalTimerId);
-    TRACE0("gui_mch_disable_beval_area }}}");
+    // TRACE0("gui_mch_disable_beval_area }}}");
 }
 
     void
 gui_mch_enable_beval_area(beval)
     BalloonEval	*beval;
 {
-    TRACE0("gui_mch_enable_beval_area |||");
+    // TRACE0("gui_mch_enable_beval_area |||");
     if (beval == NULL)
 	return;
-    TRACE0("gui_mch_enable_beval_area {{{");
+    // TRACE0("gui_mch_enable_beval_area {{{");
     BevalTimerId = SetTimer(s_textArea, 0, p_bdlay / 2,
 						   (TIMERPROC)BevalTimerProc);
-    TRACE0("gui_mch_enable_beval_area }}}");
+    // TRACE0("gui_mch_enable_beval_area }}}");
 }
 
     void
@@ -4080,7 +4105,7 @@
     char_u	*mesg;
 {
     POINT   pt;
-    TRACE0("gui_mch_post_balloon {{{");
+    // TRACE0("gui_mch_post_balloon {{{");
     if (beval->showState == ShS_SHOWING)
 	return;
     GetCursorPos(&pt);
@@ -4093,7 +4118,7 @@
 	beval->showState = ShS_SHOWING;
 	make_tooltip(beval, mesg, pt);
     }
-    TRACE0("gui_mch_post_balloon }}}");
+    // TRACE0("gui_mch_post_balloon }}}");
 }
 
     BalloonEval *
@@ -4148,15 +4173,15 @@
     {
 	if (pnmh->code == TTN_SHOW)
 	{
-	    TRACE0("TTN_SHOW {{{");
-	    TRACE0("TTN_SHOW }}}");
+	    // TRACE0("TTN_SHOW {{{");
+	    // TRACE0("TTN_SHOW }}}");
 	}
 	else if (pnmh->code == TTN_POP) /* Before tooltip disappear */
 	{
-	    TRACE0("TTN_POP {{{");
+	    // TRACE0("TTN_POP {{{");
 	    delete_tooltip(cur_beval);
 	    gui_mch_enable_beval_area(cur_beval);
-	    TRACE0("TTN_POP }}}");
+	    // TRACE0("TTN_POP }}}");
 
 	    cur_beval->showState = ShS_NEUTRAL;
 	}
diff --git a/src/ops.c b/src/ops.c
index 78078c3..31c23bf 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2888,7 +2888,18 @@
 	    /* redisplay now, so message is not deleted */
 	    update_topline_redraw();
 	    if (yanklines == 1)
-		MSG(_("1 line yanked"));
+	    {
+#ifdef FEAT_VISUAL
+		if (oap->block_mode)
+		    MSG(_("block of 1 line yanked"));
+		else
+#endif
+		    MSG(_("1 line yanked"));
+	    }
+#ifdef FEAT_VISUAL
+	    else if (oap->block_mode)
+		smsg((char_u *)_("block of %ld lines yanked"), yanklines);
+#endif
 	    else
 		smsg((char_u *)_("%ld lines yanked"), yanklines);
 	}
diff --git a/src/screen.c b/src/screen.c
index d3c9552..4e7dcbe 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -5870,7 +5870,8 @@
 		out_str(T_MD);
 	    if ((attr & HL_STANDOUT) && T_SO != NULL)	/* standout */
 		out_str(T_SO);
-	    if ((attr & HL_UNDERLINE) && T_US != NULL)	/* underline */
+	    if ((attr & (HL_UNDERLINE | HL_UNDERCURL)) && T_US != NULL)
+						   /* underline or undercurl */
 		out_str(T_US);
 	    if ((attr & HL_ITALIC) && T_CZH != NULL)	/* italic */
 		out_str(T_CZH);
@@ -5965,7 +5966,7 @@
 		else
 		    out_str(T_SE);
 	    }
-	    if (screen_attr & HL_UNDERLINE)
+	    if (screen_attr & (HL_UNDERLINE | HL_UNDERCURL))
 	    {
 		if (STRCMP(T_UE, T_ME) == 0)
 		    do_ME = TRUE;
@@ -6856,7 +6857,7 @@
     int	    row;
     int	    col;
 {
-    char_u	    *p;
+    sattr_T	    *p;
     int		    i;
     int		    plan;
     int		    cost;
diff --git a/src/structs.h b/src/structs.h
index 71c692a..03379ad 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -778,6 +778,7 @@
 	{
 	    guicolor_T	    fg_color;	/* foreground color handle */
 	    guicolor_T	    bg_color;	/* background color handle */
+	    guicolor_T	    sp_color;	/* special color handle */
 	    GuiFont	    font;	/* font handle */
 #  ifdef FEAT_XFONTSET
 	    GuiFontset	    fontset;	/* fontset handle */
@@ -2055,6 +2056,7 @@
     int		bold;
     int		italic;
     int		underline;
+    int		undercurl;
 } prt_text_attr_T;
 
 /*
diff --git a/src/syntax.c b/src/syntax.c
index 5d08afa..003b624 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -40,6 +40,8 @@
     char_u	*sg_gui_fg_name;/* GUI foreground color name */
     guicolor_T	sg_gui_bg;	/* GUI background color handle */
     char_u	*sg_gui_bg_name;/* GUI background color name */
+    guicolor_T	sg_gui_sp;	/* GUI special color handle */
+    char_u	*sg_gui_sp_name;/* GUI special color name */
     GuiFont	sg_font;	/* GUI font handle */
 #ifdef FEAT_XFONTSET
     GuiFontset	sg_fontset;	/* GUI fontset handle */
@@ -70,9 +72,10 @@
  * following names, separated by commas (but no spaces!).
  */
 static char *(hl_name_table[]) =
-    {"bold", "standout", "underline", "italic", "reverse", "inverse", "NONE"};
+    {"bold", "standout", "underline", "undercurl",
+				      "italic", "reverse", "inverse", "NONE"};
 static int hl_attr_table[] =
-    {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_ITALIC, HL_INVERSE, HL_INVERSE, 0};
+    {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, 0};
 
 static int get_attr_entry  __ARGS((garray_T *table, attrentry_T *aep));
 static void syn_unadd_group __ARGS((void));
@@ -1848,7 +1851,7 @@
 	      {
 		syn_id = check_keyword_id(line, (int)current_col,
 					 &endcol, &flags, &next_list, cur_si);
-		if (syn_id)
+		if (syn_id != 0)
 		{
 		    if (push_current_state(KEYWORD_IDX) == OK)
 		    {
@@ -1893,7 +1896,7 @@
 	    }
 
 	    /*
-	     * 3. Check for patterns (only if not found a keyword).
+	     * 3. Check for patterns (only if no keyword found).
 	     */
 	    if (syn_id == 0 && syn_buf->b_syn_patterns.ga_len)
 	    {
@@ -6758,65 +6761,86 @@
 	else if (STRCMP(key, "GUIFG") == 0)
 	{
 #ifdef FEAT_GUI	    /* in non-GUI guifg colors are simply ignored */
-	  if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
-	  {
-	    if (!init)
-		HL_TABLE()[idx].sg_set |= SG_GUI;
-
-	    i = color_name2handle(arg);
-	    if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
+	    if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
 	    {
-		HL_TABLE()[idx].sg_gui_fg = i;
-		vim_free(HL_TABLE()[idx].sg_gui_fg_name);
-		if (STRCMP(arg, "NONE"))
-		    HL_TABLE()[idx].sg_gui_fg_name = vim_strsave(arg);
-		else
-		    HL_TABLE()[idx].sg_gui_fg_name = NULL;
+		if (!init)
+		    HL_TABLE()[idx].sg_set |= SG_GUI;
+
+		i = color_name2handle(arg);
+		if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
+		{
+		    HL_TABLE()[idx].sg_gui_fg = i;
+		    vim_free(HL_TABLE()[idx].sg_gui_fg_name);
+		    if (STRCMP(arg, "NONE"))
+			HL_TABLE()[idx].sg_gui_fg_name = vim_strsave(arg);
+		    else
+			HL_TABLE()[idx].sg_gui_fg_name = NULL;
 # ifdef FEAT_GUI_X11
-		if (is_menu_group)
-		    gui.menu_fg_pixel = i;
-		if (is_scrollbar_group)
-		    gui.scroll_fg_pixel = i;
+		    if (is_menu_group)
+			gui.menu_fg_pixel = i;
+		    if (is_scrollbar_group)
+			gui.scroll_fg_pixel = i;
 #  ifdef FEAT_BEVAL
-		if (is_tooltip_group)
-		    gui.tooltip_fg_pixel = i;
+		    if (is_tooltip_group)
+			gui.tooltip_fg_pixel = i;
 #  endif
-		do_colors = TRUE;
+		    do_colors = TRUE;
 # endif
+		}
 	    }
-	  }
 #endif
 	}
 	else if (STRCMP(key, "GUIBG") == 0)
 	{
 #ifdef FEAT_GUI	    /* in non-GUI guibg colors are simply ignored */
-	  if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
-	  {
-	    if (!init)
-		HL_TABLE()[idx].sg_set |= SG_GUI;
-
-	    i = color_name2handle(arg);
-	    if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
+	    if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
 	    {
-		HL_TABLE()[idx].sg_gui_bg = i;
-		vim_free(HL_TABLE()[idx].sg_gui_bg_name);
-		if (STRCMP(arg, "NONE"))
-		    HL_TABLE()[idx].sg_gui_bg_name = vim_strsave(arg);
-		else
-		    HL_TABLE()[idx].sg_gui_bg_name = NULL;
+		if (!init)
+		    HL_TABLE()[idx].sg_set |= SG_GUI;
+
+		i = color_name2handle(arg);
+		if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
+		{
+		    HL_TABLE()[idx].sg_gui_bg = i;
+		    vim_free(HL_TABLE()[idx].sg_gui_bg_name);
+		    if (STRCMP(arg, "NONE") != 0)
+			HL_TABLE()[idx].sg_gui_bg_name = vim_strsave(arg);
+		    else
+			HL_TABLE()[idx].sg_gui_bg_name = NULL;
 # ifdef FEAT_GUI_X11
-		if (is_menu_group)
-		    gui.menu_bg_pixel = i;
-		if (is_scrollbar_group)
-		    gui.scroll_bg_pixel = i;
+		    if (is_menu_group)
+			gui.menu_bg_pixel = i;
+		    if (is_scrollbar_group)
+			gui.scroll_bg_pixel = i;
 #  ifdef FEAT_BEVAL
-		if (is_tooltip_group)
-		    gui.tooltip_bg_pixel = i;
+		    if (is_tooltip_group)
+			gui.tooltip_bg_pixel = i;
 #  endif
-		do_colors = TRUE;
+		    do_colors = TRUE;
 # endif
+		}
 	    }
-	  }
+#endif
+	}
+	else if (STRCMP(key, "GUISP") == 0)
+	{
+#ifdef FEAT_GUI	    /* in non-GUI guisp colors are simply ignored */
+	    if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
+	    {
+		if (!init)
+		    HL_TABLE()[idx].sg_set |= SG_GUI;
+
+		i = color_name2handle(arg);
+		if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
+		{
+		    HL_TABLE()[idx].sg_gui_sp = i;
+		    vim_free(HL_TABLE()[idx].sg_gui_sp_name);
+		    if (STRCMP(arg, "NONE") != 0)
+			HL_TABLE()[idx].sg_gui_sp_name = vim_strsave(arg);
+		    else
+			HL_TABLE()[idx].sg_gui_sp_name = NULL;
+		}
+	    }
 #endif
 	}
 	else if (STRCMP(key, "START") == 0 || STRCMP(key, "STOP") == 0)
@@ -7035,6 +7059,9 @@
     HL_TABLE()[idx].sg_gui_bg = INVALCOLOR;
     vim_free(HL_TABLE()[idx].sg_gui_bg_name);
     HL_TABLE()[idx].sg_gui_bg_name = NULL;
+    HL_TABLE()[idx].sg_gui_sp = INVALCOLOR;
+    vim_free(HL_TABLE()[idx].sg_gui_sp_name);
+    HL_TABLE()[idx].sg_gui_sp_name = NULL;
     gui_mch_free_font(HL_TABLE()[idx].sg_font);
     HL_TABLE()[idx].sg_font = NOFONT;
 # ifdef FEAT_XFONTSET
@@ -7057,16 +7084,16 @@
 set_normal_colors()
 {
     if (set_group_colors((char_u *)"Normal",
-			       &gui.norm_pixel, &gui.back_pixel, FALSE, TRUE,
-			       FALSE))
+			     &gui.norm_pixel, &gui.back_pixel,
+			     FALSE, TRUE, FALSE))
     {
 	gui_mch_new_colors();
 	must_redraw = CLEAR;
     }
 #ifdef FEAT_GUI_X11
     if (set_group_colors((char_u *)"Menu",
-			 &gui.menu_fg_pixel, &gui.menu_bg_pixel, TRUE, FALSE,
-			 FALSE))
+			 &gui.menu_fg_pixel, &gui.menu_bg_pixel,
+			 TRUE, FALSE, FALSE))
     {
 # ifdef FEAT_MENU
 	gui_mch_new_menu_colors();
@@ -7085,8 +7112,8 @@
     }
 #endif
     if (set_group_colors((char_u *)"Scrollbar",
-		    &gui.scroll_fg_pixel, &gui.scroll_bg_pixel, FALSE, FALSE,
-		    FALSE))
+		    &gui.scroll_fg_pixel, &gui.scroll_bg_pixel,
+		    FALSE, FALSE, FALSE))
     {
 	gui_new_scrollbar_colors();
 	must_redraw = CLEAR;
@@ -7397,6 +7424,7 @@
 		       (table == &gui_attr_table
 			&& (aep->ae_u.gui.fg_color == gap->ae_u.gui.fg_color
 			    && aep->ae_u.gui.bg_color == gap->ae_u.gui.bg_color
+			    && aep->ae_u.gui.sp_color == gap->ae_u.gui.sp_color
 			    && aep->ae_u.gui.font == gap->ae_u.gui.font
 #  ifdef FEAT_XFONTSET
 			    && aep->ae_u.gui.fontset == gap->ae_u.gui.fontset
@@ -7464,6 +7492,7 @@
     {
 	gap->ae_u.gui.fg_color = aep->ae_u.gui.fg_color;
 	gap->ae_u.gui.bg_color = aep->ae_u.gui.bg_color;
+	gap->ae_u.gui.sp_color = aep->ae_u.gui.sp_color;
 	gap->ae_u.gui.font = aep->ae_u.gui.font;
 # ifdef FEAT_XFONTSET
 	gap->ae_u.gui.fontset = aep->ae_u.gui.fontset;
@@ -7656,21 +7685,24 @@
     char_u *
 highlight_color(id, what, modec)
     int		id;
-    char_u	*what;	/* "fg", "bg", "fg#" or "bg#" */
+    char_u	*what;	/* "fg", "bg", "sp", "fg#", "bg#" or "sp#" */
     int		modec;	/* 'g' for GUI, 'c' for cterm, 't' for term */
 {
     static char_u	name[20];
     int			n;
-    int			fg;
+    int			fg = FALSE;
+# ifdef FEAT_GUI
+    int			sp = FALSE;
+# endif
 
     if (id <= 0 || id > highlight_ga.ga_len)
 	return NULL;
 
     if (TOLOWER_ASC(what[0]) == 'f')
 	fg = TRUE;
-    else
-	fg = FALSE;
-#ifdef FEAT_GUI
+# ifdef FEAT_GUI
+    else if (TOLOWER_ASC(what[0]) == 's')
+	sp = TRUE;
     if (modec == 'g')
     {
 	/* return #RRGGBB form (only possible when GUI is running) */
@@ -7682,6 +7714,8 @@
 
 	    if (fg)
 		color = HL_TABLE()[id - 1].sg_gui_fg;
+	    else if (sp)
+		color = HL_TABLE()[id - 1].sg_gui_sp;
 	    else
 		color = HL_TABLE()[id - 1].sg_gui_bg;
 	    if (color == INVALCOLOR)
@@ -7695,9 +7729,11 @@
 	}
 	if (fg)
 	    return (HL_TABLE()[id - 1].sg_gui_fg_name);
+	if (sp)
+	    return (HL_TABLE()[id - 1].sg_gui_sp_name);
 	return (HL_TABLE()[id - 1].sg_gui_bg_name);
     }
-#endif
+# endif
     if (modec == 'c')
     {
 	if (fg)
@@ -7805,6 +7841,7 @@
      */
     if (sgp->sg_gui_fg == INVALCOLOR
 	    && sgp->sg_gui_bg == INVALCOLOR
+	    && sgp->sg_gui_sp == INVALCOLOR
 	    && sgp->sg_font == NOFONT
 # ifdef FEAT_XFONTSET
 	    && sgp->sg_fontset == NOFONTSET
@@ -7818,6 +7855,7 @@
 	at_en.ae_attr = sgp->sg_gui;
 	at_en.ae_u.gui.fg_color = sgp->sg_gui_fg;
 	at_en.ae_u.gui.bg_color = sgp->sg_gui_bg;
+	at_en.ae_u.gui.sp_color = sgp->sg_gui_sp;
 	at_en.ae_u.gui.font = sgp->sg_font;
 # ifdef FEAT_XFONTSET
 	at_en.ae_u.gui.fontset = sgp->sg_fontset;
@@ -7989,6 +8027,7 @@
 #ifdef FEAT_GUI
     HL_TABLE()[highlight_ga.ga_len].sg_gui_bg = INVALCOLOR;
     HL_TABLE()[highlight_ga.ga_len].sg_gui_fg = INVALCOLOR;
+    HL_TABLE()[highlight_ga.ga_len].sg_gui_sp = INVALCOLOR;
 #endif
     ++highlight_ga.ga_len;
 
@@ -8131,6 +8170,12 @@
 			    color_name2handle(HL_TABLE()[idx].sg_gui_bg_name);
 	didit = TRUE;
     }
+    if (HL_TABLE()[idx].sg_gui_sp_name != NULL)
+    {
+	HL_TABLE()[idx].sg_gui_sp =
+			    color_name2handle(HL_TABLE()[idx].sg_gui_sp_name);
+	didit = TRUE;
+    }
     if (didit)	/* need to get a new attr number */
 	set_hl_attr(idx);
 }
@@ -8222,6 +8267,8 @@
 				break;
 		    case 'u':	attr |= HL_UNDERLINE;
 				break;
+		    case 'c':	attr |= HL_UNDERCURL;
+				break;
 		    case ':':	++p;		    /* highlight group name */
 				if (attr || *p == NUL)	 /* no combinations */
 				    return FAIL;
@@ -8320,6 +8367,8 @@
 		hlt[hlcnt + i].sg_gui_fg = hlt[id - 1].sg_gui_fg;
 	    if (hlt[id - 1].sg_gui_bg != hlt[id_S - 1].sg_gui_bg)
 		hlt[hlcnt + i].sg_gui_bg = hlt[id - 1].sg_gui_bg;
+	    if (hlt[id - 1].sg_gui_sp != hlt[id_S - 1].sg_gui_sp)
+		hlt[hlcnt + i].sg_gui_sp = hlt[id - 1].sg_gui_sp;
 	    if (hlt[id - 1].sg_font != hlt[id_S - 1].sg_font)
 		hlt[hlcnt + i].sg_font = hlt[id - 1].sg_font;
 #   ifdef FEAT_XFONTSET
diff --git a/src/term.c b/src/term.c
index 3c0ecb0..2f9568a 100644
--- a/src/term.c
+++ b/src/term.c
@@ -182,6 +182,8 @@
     {(int)KS_SO,	IF_EB("\033|16h", ESC_STR "|16h")}, /* HL_STANDOUT */
     {(int)KS_UE,	IF_EB("\033|8H", ESC_STR "|8H")},   /* HL_UNDERLINE */
     {(int)KS_US,	IF_EB("\033|8h", ESC_STR "|8h")},   /* HL_UNDERLINE */
+    {(int)KS_UCE,	IF_EB("\033|8C", ESC_STR "|8C")},   /* HL_UNDERCURL */
+    {(int)KS_UCS,	IF_EB("\033|8c", ESC_STR "|8c")},   /* HL_UNDERCURL */
     {(int)KS_CZR,	IF_EB("\033|4H", ESC_STR "|4H")},   /* HL_ITALIC */
     {(int)KS_CZH,	IF_EB("\033|4h", ESC_STR "|4h")},   /* HL_ITALIC */
     {(int)KS_VB,	IF_EB("\033|f", ESC_STR "|f")},
@@ -195,7 +197,7 @@
     {(int)KS_CM,	IF_EB("\033|%d;%dM", ESC_STR "|%d;%dM")},
 # endif
 	/* there are no key sequences here, the GUI sequences are recognized
-	 * in check_termcodes() */
+	 * in check_termcode() */
 #endif
 
 #ifndef NO_BUILTIN_TCAPS
@@ -1248,6 +1250,8 @@
     {(int)KS_SO,	"[SO]"},
     {(int)KS_UE,	"[UE]"},
     {(int)KS_US,	"[US]"},
+    {(int)KS_UCE,	"[UCE]"},
+    {(int)KS_UCS,	"[UCS]"},
     {(int)KS_MS,	"[MS]"},
     {(int)KS_UT,	"[UT]"},
 #  ifdef TERMINFO
@@ -1644,7 +1648,8 @@
 				{KS_VS, "vs"}, {KS_ME, "me"}, {KS_MR, "mr"},
 				{KS_MD, "md"}, {KS_SE, "se"}, {KS_SO, "so"},
 				{KS_CZH,"ZH"}, {KS_CZR,"ZR"}, {KS_UE, "ue"},
-				{KS_US, "us"}, {KS_CM, "cm"}, {KS_SR, "sr"},
+				{KS_US, "us"}, {KS_UCE, "Ce"}, {KS_UCS, "Cs"},
+				{KS_CM, "cm"}, {KS_SR, "sr"},
 				{KS_CRI,"RI"}, {KS_VB, "vb"}, {KS_KS, "ks"},
 				{KS_KE, "ke"}, {KS_TI, "ti"}, {KS_TE, "te"},
 				{KS_BC, "bc"}, {KS_CSB,"Sb"}, {KS_CSF,"Sf"},
diff --git a/src/version.h b/src/version.h
index 7663875..4cf0316 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Mar 11)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Mar 11, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Mar 15)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Mar 15, compiled "