diff --git a/src/screen.c b/src/screen.c
index 9005efa..f9ed5e1 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -6742,6 +6742,10 @@
     sattr_T	    *new_ScreenAttrs;
     unsigned	    *new_LineOffset;
     char_u	    *new_LineWraps;
+#ifdef FEAT_WINDOWS
+    char_u	    *new_TabPageIdxs;
+    tabpage_T	    *tp;
+#endif
     static int	    entered = FALSE;		/* avoid recursiveness */
     static int	    did_outofmem_msg = FALSE;	/* did outofmem message */
 
@@ -6788,10 +6792,10 @@
      * size is wrong.
      */
 #ifdef FEAT_WINDOWS
-    for (wp = firstwin; wp; wp = wp->w_next)
+    FOR_ALL_TAB_WINDOWS(tp, wp)
 	win_free_lsize(wp);
 #else
-	win_free_lsize(curwin);
+    win_free_lsize(curwin);
 #endif
 
     new_ScreenLines = (schar_T *)lalloc((long_u)(
@@ -6815,6 +6819,9 @@
     new_LineOffset = (unsigned *)lalloc((long_u)(
 					 Rows * sizeof(unsigned)), FALSE);
     new_LineWraps = (char_u *)lalloc((long_u)(Rows * sizeof(char_u)), FALSE);
+#ifdef FEAT_WINDOWS
+    new_TabPageIdxs = (char_u *)lalloc((long_u)(Columns * sizeof(char_u)), FALSE);
+#endif
 
     FOR_ALL_WINDOWS(wp)
     {
@@ -6836,6 +6843,9 @@
 	    || new_ScreenAttrs == NULL
 	    || new_LineOffset == NULL
 	    || new_LineWraps == NULL
+#ifdef FEAT_WINDOWS
+	    || new_TabPageIdxs == NULL
+#endif
 	    || outofmem)
     {
 	if (ScreenLines != NULL || !did_outofmem_msg)
@@ -6865,6 +6875,10 @@
 	new_LineOffset = NULL;
 	vim_free(new_LineWraps);
 	new_LineWraps = NULL;
+#ifdef FEAT_WINDOWS
+	vim_free(new_TabPageIdxs);
+	new_TabPageIdxs = NULL;
+#endif
     }
     else
     {
@@ -6956,6 +6970,9 @@
     ScreenAttrs = new_ScreenAttrs;
     LineOffset = new_LineOffset;
     LineWraps = new_LineWraps;
+#ifdef FEAT_WINDOWS
+    TabPageIdxs = new_TabPageIdxs;
+#endif
 
     /* It's important that screen_Rows and screen_Columns reflect the actual
      * size of ScreenLines[].  Set them before calling anything. */
@@ -7005,6 +7022,9 @@
     vim_free(ScreenAttrs);
     vim_free(LineOffset);
     vim_free(LineWraps);
+#ifdef FEAT_WINDOWS
+    vim_free(TabPageIdxs);
+#endif
 }
 
     void
@@ -8443,9 +8463,13 @@
     tabpage_T	*tp;
     int		tabwidth;
     int		col = 0;
+    int		scol;
     int		had_current = FALSE;
     int		attr;
     win_T	*wp;
+    win_T	*cwp;
+    int		wincount;
+    int		modified;
     int		c;
     int		len;
     int		attr_sel = hl_attr(HLF_TPS);
@@ -8460,13 +8484,16 @@
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
 	++tabcount;
 
-    tabwidth = Columns / tabcount;
+    tabwidth = (Columns - 1 + tabcount / 2) / tabcount;
     if (tabwidth < 6)
 	tabwidth = 6;
 
     attr = attr_nosel;
-    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+    tabcount = 0;
+    for (tp = first_tabpage; tp != NULL && col < Columns; tp = tp->tp_next)
     {
+	scol = col;
+
 	if (tp->tp_topframe == topframe)
 	{
 	    c = '/';
@@ -8486,21 +8513,55 @@
 	screen_putchar(' ', 0, col++, attr);
 
 	if (tp->tp_topframe == topframe)
-	    wp = curwin;
+	{
+	    cwp = curwin;
+	    wp = firstwin;
+	}
 	else
-	    wp = tp->tp_curwin;
-	if (buf_spname(wp->w_buffer) != NULL)
-	    STRCPY(NameBuff, buf_spname(wp->w_buffer));
+	{
+	    cwp = tp->tp_curwin;
+	    wp = tp->tp_firstwin;
+	}
+
+	modified = FALSE;
+	for (wincount = 0; wp != NULL; wp = wp->w_next, ++wincount)
+	    if (bufIsChanged(wp->w_buffer))
+		modified = TRUE;
+	if (modified || wincount > 1)
+	{
+	    if (wincount > 1)
+	    {
+		vim_snprintf((char *)NameBuff, MAXPATHL, "#%d", wincount);
+		len = STRLEN(NameBuff);
+		screen_puts_len(NameBuff, len, 0, col, attr);
+		col += len;
+	    }
+	    if (modified)
+		screen_puts_len((char_u *)"+", 2, 0, col++, attr);
+	    screen_putchar(' ', 0, col++, attr);
+	}
+
+	if (buf_spname(cwp->w_buffer) != NULL)
+	    STRCPY(NameBuff, buf_spname(cwp->w_buffer));
 	else
-	    home_replace(wp->w_buffer, wp->w_buffer->b_fname, NameBuff,
+	    home_replace(cwp->w_buffer, cwp->w_buffer->b_fname, NameBuff,
 							      MAXPATHL, TRUE);
 	trans_characters(NameBuff, MAXPATHL);
 	len = STRLEN(NameBuff);
-	if (len > tabwidth) /* TODO: multi-byte chars */
-	    len = tabwidth;
-	screen_puts_len(NameBuff, len, 0, col, attr);
-	col += len;
+	if (len > scol - col + tabwidth - 1) /* TODO: multi-byte chars */
+	    len = scol - col + tabwidth - 1;
+	if (len > 0)
+	{
+	    screen_puts_len(NameBuff, len, 0, col, attr);
+	    col += len;
+	}
 	screen_putchar(' ', 0, col++, attr);
+
+	/* Store the tab page number in TabPageIdxs[], so that jump_to_mouse()
+	 * knows where each one is. */
+	++tabcount;
+	while (scol < col)
+	    TabPageIdxs[scol++] = tabcount;
     }
 
     if (t_colors < 8)
@@ -8511,6 +8572,14 @@
     else
 	c = ' ';
     screen_fill(0, 1, col, (int)Columns, c, c, attr_fill);
+
+    /* Put an "X" for closing the current tab if there are several. */
+    if (first_tabpage->tp_next != NULL)
+	screen_putchar('X', 0, (int)Columns - 1, attr_nosel);
+
+    /* Clicking outside of tabs has no effect. */
+    while (scol < Columns)
+	TabPageIdxs[scol++] = 0xff;
 }
 #endif
 
