diff --git a/src/GvimExt/GvimExt.reg b/src/GvimExt/GvimExt.reg
index 604e911..b592345 100644
--- a/src/GvimExt/GvimExt.reg
+++ b/src/GvimExt/GvimExt.reg
@@ -15,6 +15,6 @@
 [HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
    "path"="gvim.exe"
 
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0b]
-   "DisplayName"="Vim 7.0b: Edit with Vim popup menu entry"
+[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0c]
+   "DisplayName"="Vim 7.0c: Edit with Vim popup menu entry"
    "UninstallString"="uninstal.exe"
diff --git a/src/Makefile b/src/Makefile
index 5ac4cee..15d954d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -880,7 +880,7 @@
 
 ### Vim version (adjusted by a script)
 VIMMAJOR = 7
-VIMMINOR = 0b
+VIMMINOR = 0c
 
 ### Location of Vim files (should not need to be changed, and  {{{1
 ### some things might not work when they are changed!)
diff --git a/src/feature.h b/src/feature.h
index a92fedd..5d395d7 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -753,7 +753,8 @@
 /*
  * GUI tabline
  */
-#if defined(FEAT_GUI_GTK) && defined(FEAT_WINDOWS)
+#if defined(FEAT_WINDOWS) && (defined(FEAT_GUI_GTK) \
+	|| (defined(FEAT_GUI_MSWIN) && WINVER > 0x0400))
 # define FEAT_GUI_TABLINE
 #endif
 
diff --git a/src/gui.c b/src/gui.c
index c086de0..af64844 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1142,6 +1142,11 @@
 	text_area_y = TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT;
 #endif
 
+#if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_MSWIN)
+    if (gui_has_tabline())
+	text_area_y += TABLINE_HEIGHT;
+#endif
+
 #if defined(FEAT_TOOLBAR) && (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA))
     if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
     {
@@ -1223,6 +1228,10 @@
 	base_height += gui.toolbar_height;
 #  endif
 # endif
+# if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_MSWIN)
+    if (gui_has_tabline())
+    	base_height += TABLINE_HEIGHT;
+# endif
 # ifdef FEAT_FOOTER
     if (vim_strchr(p_go, GO_FOOTER) != NULL)
 	base_height += gui.footer_height;
@@ -3924,6 +3933,11 @@
 # endif
 #endif
 
+#if defined(FEAT_GUI_TABLINE) && defined(FEAT_GUI_MSWIN)
+	    if (gui_has_tabline())
+		y += TABLINE_HEIGHT;
+#endif
+
 #ifdef FEAT_WINDOWS
 	    if (wp->w_winrow == 0)
 #endif
diff --git a/src/gui.h b/src/gui.h
index 6544244..76ff315 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -158,6 +158,10 @@
 #endif
 #define TOOLBAR_BORDER_HEIGHT	12  /* room above+below buttons for MSWindows */
 
+#ifdef FEAT_GUI_MSWIN
+# define TABLINE_HEIGHT 24
+#endif
+
 #if defined(NO_CONSOLE) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
 # define NO_CONSOLE_INPUT	/* use no_console_input() to check if there
 				   is no console input possible */
diff --git a/src/gui_mac.icns b/src/gui_mac.icns
index b65fa11..8405dc1 100644
--- a/src/gui_mac.icns
+++ b/src/gui_mac.icns
Binary files differ
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 12d6071..b25f50d 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -297,6 +297,10 @@
 static int get_toolbar_bitmap(vimmenu_T *menu);
 #endif
 
+#ifdef FEAT_GUI_TABLINE
+static void initialise_tabline(void);
+#endif
+
 #ifdef FEAT_MBYTE_IME
 static LRESULT _OnImeComposition(HWND hwnd, WPARAM dbcs, LPARAM param);
 static char_u *GetResultStr(HWND hwnd, int GCS, int *lenp);
@@ -760,10 +764,11 @@
     case WM_SETTINGCHANGE:
 	return _OnSettingChange((UINT)wParam);
 
-#ifdef FEAT_TOOLBAR
+#if defined(FEAT_TOOLBAR) || defined(FEAT_GUI_TABLINE)
     case WM_NOTIFY:
 	switch (((LPNMHDR) lParam)->code)
 	{
+# ifdef FEAT_TOOLBAR
 	    case TTN_NEEDTEXT:
 		{
 		    LPTOOLTIPTEXT	lpttt;
@@ -785,7 +790,20 @@
 		    }
 		}
 		break;
+# endif
+# ifdef FEAT_GUI_TABLINE
+	    case TCN_SELCHANGE:
+		if (gui_mch_showing_tabline()
+				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+		    send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
+		break;
+# endif
 	    default:
+# ifdef FEAT_GUI_TABLINE
+		if (gui_mch_showing_tabline()
+				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+		    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+# endif
 		break;
 	}
 	break;
@@ -831,6 +849,19 @@
 	    result = MyWindowProc(hwnd, uMsg, wParam, lParam);
 	    if (result == HTCLIENT)
 	    {
+#ifdef FEAT_GUI_TABLINE
+		if (gui_mch_showing_tabline())
+		{
+		    int  yPos = GET_Y_LPARAM(lParam);
+		    RECT rct;
+
+		    /* If the cursor is on the GUI tabline, don't process this
+		     * event */
+		    GetWindowRect(s_textArea, &rct);
+		    if (yPos < rct.top)
+			return result;
+		}
+#endif
 		gui_mch_get_winpos(&x, &y);
 		xPos -= x;
 
@@ -1280,6 +1311,12 @@
      */
     initialise_toolbar();
 #endif
+#ifdef FEAT_GUI_TABLINE
+    /*
+     * Create the tabline
+     */
+    initialise_tabline();
+#endif
 #ifdef MSWIN_FIND_REPLACE
     /*
      * Initialise the dialog box stuff
@@ -3884,6 +3921,18 @@
 }
 #endif
 
+#if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+    static void
+initialise_tabline(void)
+{
+    InitCommonControls();
+
+    s_tabhwnd = CreateWindow(WC_TABCONTROL, "", WS_CHILD|TCS_FOCUSNEVER,
+	    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+	    CW_USEDEFAULT, s_hwnd, NULL, s_hinst, NULL);
+}
+#endif
+
 #if defined(FEAT_OLE) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Make the GUI window come to the foreground.
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 35c215a..b586af8 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -28,7 +28,7 @@
 #ifndef __MINGW32__
 # include <shellapi.h>
 #endif
-#if defined(FEAT_TOOLBAR) || defined(FEAT_BEVAL)
+#if defined(FEAT_TOOLBAR) || defined(FEAT_BEVAL) || defined(FEAT_GUI_TABLINE)
 # include <commctrl.h>
 #endif
 #ifdef WIN16
@@ -170,6 +170,11 @@
 static HWND		s_toolbarhwnd = NULL;
 #endif
 
+#ifdef FEAT_GUI_TABLINE
+static HWND		s_tabhwnd = NULL;
+static int		showing_tabline = 0;
+#endif
+
 static WPARAM		s_wParam = 0;
 static LPARAM		s_lParam = 0;
 
@@ -1105,6 +1110,20 @@
 	SendMessage(s_toolbarhwnd, WM_SIZE,
 		(WPARAM)0, (LPARAM)(w + ((long)(TOOLBAR_BUTTON_HEIGHT+8)<<16)));
 #endif
+#if defined(FEAT_GUI_TABLINE)
+    if (showing_tabline)
+    {
+	int top = 0;
+
+#ifdef FEAT_TOOLBAR
+	if (vim_strchr(p_go, GO_TOOLBAR) != NULL)
+	    top = TOOLBAR_BUTTON_HEIGHT + TOOLBAR_BORDER_HEIGHT;
+#endif
+
+	MoveWindow(s_tabhwnd, 0, top, w, TABLINE_HEIGHT, TRUE);
+    }
+#endif
+
     /* When side scroll bar is unshown, the size of window will change.
      * then, the text area move left or right. thus client rect should be
      * forcely redraw. (Yasuhiro Matsumoto) */
@@ -2156,6 +2175,95 @@
 
 #endif
 
+#if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+/*
+ * Show or hide the tabline.
+ */
+    void
+gui_mch_show_tabline(int showit)
+{
+    if (s_tabhwnd == NULL)
+	return;
+
+    if (!showit != !showing_tabline)
+    {
+	if (showit)
+	    ShowWindow(s_tabhwnd, SW_SHOW);
+	else
+	    ShowWindow(s_tabhwnd, SW_HIDE);
+	showing_tabline = showit;
+    }
+}
+
+/*
+ * Return TRUE when tabline is displayed.
+ */
+    int
+gui_mch_showing_tabline(void)
+{
+    return s_tabhwnd != NULL && showing_tabline;
+}
+
+/*
+ * Update the labels of the tabline.
+ */
+    void
+gui_mch_update_tabline(void)
+{
+    tabpage_T	*tp;
+    TCITEM	tie;
+    int		nr = 0;
+    int		curtabidx = 0;
+    RECT	rc;
+
+    if (s_tabhwnd == NULL)
+	return;
+
+    tie.mask = TCIF_TEXT;
+    tie.iImage = -1;
+
+    /* Add a label for each tab page.  They all contain the same text area. */
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
+    {
+	if (tp == curtab)
+	    curtabidx = nr;
+
+	if (!TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+	{
+	    /* Add the tab */
+	    tie.pszText = "-Empty-";
+	    TabCtrl_InsertItem(s_tabhwnd, nr, &tie);
+	}
+
+	get_tabline_label(tp);
+	tie.pszText = NameBuff;
+	TabCtrl_SetItem(s_tabhwnd, nr, &tie);
+    }
+
+    /* Remove any old labels. */
+    while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+	TabCtrl_DeleteItem(s_tabhwnd, nr);
+
+    if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
+	TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
+}
+
+/*
+ * Set the current tab to "nr".  First tab is 1.
+ */
+    void
+gui_mch_set_curtab(nr)
+    int		nr;
+{
+    if (s_tabhwnd == NULL)
+	return;
+
+    if (TabCtrl_GetCurSel(s_tabhwnd) != nr)
+	TabCtrl_SetCurSel(s_tabhwnd, nr);
+}
+
+#endif
+
 /*
  * ":simalt" command.
  */
diff --git a/src/message.c b/src/message.c
index d25d485..481236b 100644
--- a/src/message.c
+++ b/src/message.c
@@ -4167,8 +4167,13 @@
 		    {
 			/* memchr on HP does not like n > 2^31  !!! */
 			char *q = memchr(str_arg, '\0',
+#if SIZEOF_INT <= 2
+				precision
+#else
 				precision <= (size_t)0x7fffffffL ? precision
-						       : (size_t)0x7fffffffL);
+						       : (size_t)0x7fffffffL
+#endif
+						       );
 			str_arg_l = (q == NULL) ? precision : q - str_arg;
 		    }
 		    break;
diff --git a/src/misc1.c b/src/misc1.c
index 00921dc..1628642 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3112,6 +3112,7 @@
 {
     int	n = 0;
     int	c;
+    int typed = 0;
 
     if (mouse_used != NULL)
 	*mouse_used = FALSE;
@@ -3134,11 +3135,16 @@
 	{
 	    n = n * 10 + c - '0';
 	    msg_putchar(c);
+	    ++typed;
 	}
 	else if (c == K_DEL || c == K_KDEL || c == K_BS || c == Ctrl_H)
 	{
+	    if (typed > 0)
+	    {
+		MSG_PUTS("\b \b");
+		--typed;
+	    }
 	    n /= 10;
-	    MSG_PUTS("\b \b");
 	}
 #ifdef FEAT_MOUSE
 	else if (mouse_used != NULL && c == K_LEFTMOUSE)
diff --git a/src/option.c b/src/option.c
index 4b669be..e4195cf 100644
--- a/src/option.c
+++ b/src/option.c
@@ -438,6 +438,16 @@
 # define ISP_LATIN1 (char_u *)"@,161-255"
 #endif
 
+/* The 16 bit MS-DOS version is low on space, make the string as short as
+ * possible when compiling with few features. */
+#if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL)
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine"
+#else
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+#endif
+
 /*
  * options[] is initialized here.
  * The order of the options MUST be alphabetic for ":set all" and findoption().
@@ -1284,8 +1294,7 @@
 			    {(char_u *)FALSE, (char_u *)0L}},
     {"highlight",   "hl",   P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
 			    (char_u *)&p_hl, PV_NONE,
-			    {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine",
-				(char_u *)0L}},
+			    {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}},
     {"history",	    "hi",   P_NUM|P_VIM,
 			    (char_u *)&p_hi, PV_NONE,
 			    {(char_u *)0L, (char_u *)20L}},
diff --git a/src/proto/gui_w16.pro b/src/proto/gui_w16.pro
index 4ca3ded..6a22c3e 100644
--- a/src/proto/gui_w16.pro
+++ b/src/proto/gui_w16.pro
@@ -34,6 +34,10 @@
 extern long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
 extern void gui_mch_activate_window __ARGS((void));
 extern void gui_mch_show_toolbar __ARGS((int showit));
+extern void gui_mch_show_tabline __ARGS((int showit));
+extern int gui_mch_showing_tabline __ARGS((void));
+extern void gui_mch_update_tabline __ARGS((void));
+extern void gui_mch_set_curtab __ARGS((int nr));
 extern void ex_simalt __ARGS((exarg_T *eap));
 extern void gui_mch_find_dialog __ARGS((exarg_T *eap));
 extern void gui_mch_replace_dialog __ARGS((exarg_T *eap));
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index 9e41156..731636d 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -34,6 +34,10 @@
 extern long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
 extern void gui_mch_activate_window __ARGS((void));
 extern void gui_mch_show_toolbar __ARGS((int showit));
+extern void gui_mch_show_tabline __ARGS((int showit));
+extern int gui_mch_showing_tabline __ARGS((void));
+extern void gui_mch_update_tabline __ARGS((void));
+extern void gui_mch_set_curtab __ARGS((int nr));
 extern void ex_simalt __ARGS((exarg_T *eap));
 extern void gui_mch_find_dialog __ARGS((exarg_T *eap));
 extern void gui_mch_replace_dialog __ARGS((exarg_T *eap));
diff --git a/src/spell.c b/src/spell.c
index c2bf58d..32ce2b4 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -4667,7 +4667,6 @@
     char_u	*ae_flags;	/* flags on the affix (can be NULL) */
     char_u	*ae_cond;	/* condition (NULL for ".") */
     regprog_T	*ae_prog;	/* regexp program for ae_cond or NULL */
-    char_u	ae_nocomp;	/* word with affix not compoundable */
 };
 
 #ifdef FEAT_MBYTE
@@ -5474,7 +5473,6 @@
 		    && itemcnt >= 5)
 	    {
 		affentry_T	*aff_entry;
-		int		nocomp = FALSE;
 		int		upper = FALSE;
 		int		lasti = 5;
 
@@ -5492,7 +5490,6 @@
 						    sizeof(affentry_T), TRUE);
 		if (aff_entry == NULL)
 		    break;
-		aff_entry->ae_nocomp = nocomp;
 
 		if (STRCMP(items[2], "0") != 0)
 		    aff_entry->ae_chop = getroom_save(spin, items[2]);
diff --git a/src/undo.c b/src/undo.c
index 8d23e77..efbd4cc 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -1387,7 +1387,7 @@
     if (time(NULL) - tt >= 100)
     {
 	curtime = localtime(&tt);
-	(void)strftime((char *)buf, buflen, "%T", curtime);
+	(void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
     }
     else
 #endif
diff --git a/src/version.h b/src/version.h
index 965ee83..ce5ff07 100644
--- a/src/version.h
+++ b/src/version.h
@@ -19,9 +19,9 @@
 #define VIM_VERSION_MINOR_STR		"0"
 #define VIM_VERSION_100	    (VIM_VERSION_MAJOR * 100 + VIM_VERSION_MINOR)
 
-#define VIM_VERSION_BUILD		 257
-#define VIM_VERSION_BUILD_BCD		0x101
-#define VIM_VERSION_BUILD_STR		"257"
+#define VIM_VERSION_BUILD		 258
+#define VIM_VERSION_BUILD_BCD		0x102
+#define VIM_VERSION_BUILD_STR		"258"
 #define VIM_VERSION_PATCHLEVEL		 0
 #define VIM_VERSION_PATCHLEVEL_STR	"0"
 /* Used by MacOS port should be one of: development, alpha, beta, final */
@@ -33,8 +33,8 @@
  * VIM_VERSION_MEDIUM is used for the startup-screen.
  * VIM_VERSION_LONG is used for the ":version" command and "Vim -h".
  */
-#define VIM_VERSION_NODOT	"vim70b"
-#define VIM_VERSION_SHORT	"7.0b"
-#define VIM_VERSION_MEDIUM	"7.0b BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0b BETA (2006 Mar 26)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0b BETA (2006 Mar 26, compiled "
+#define VIM_VERSION_NODOT	"vim70c"
+#define VIM_VERSION_SHORT	"7.0c"
+#define VIM_VERSION_MEDIUM	"7.0c BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0c BETA (2006 Mar 27)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0c BETA (2006 Mar 27, compiled "
