diff --git a/src/extern.h b/src/extern.h
index 71ce2f6..7700119 100644
--- a/src/extern.h
+++ b/src/extern.h
@@ -45,6 +45,7 @@ extern void  Finit __P((int));
 extern void  MakeNewEnv __P((void));
 extern char *MakeWinMsg __P((char *, struct win *, int));
 extern char *MakeWinMsgEv __P((char *, struct win *, int, int, struct event *, int));
+extern int   AddWinMsgRend __P((const char *, int));
 extern void  PutWinMsg __P((char *, int, int));
 extern void  WindowDied __P((struct win *, int, int));
 extern void  setbacktick __P((int, int, int, char **));
@@ -195,7 +196,7 @@ extern void  SetEscape __P((struct acluser *, int, int));
 extern void  DoScreen __P((char *, char **));
 extern int   IsNumColon __P((char *, int, char *, int));
 extern void  ShowWindows __P((int));
-extern char *AddWindows __P((char *, int, int, int));
+extern char *AddWindows __P((char *, int, int, int, int));
 extern char *AddWindowFlags __P((char *, int, struct win *));
 extern char *AddOtherUsers __P((char *, int, struct win *));
 extern int   WindowByNoN __P((char *));
diff --git a/src/process.c b/src/process.c
index 481f30b..72ea150 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5096,16 +5096,18 @@ int on;
 }
 
 char *
-AddWindows(buf, len, flags, where)
+AddWindows(buf, len, flags, where, attr)
 char *buf;
 int len;
 int flags;
 int where;
+int attr;
 {
   register char *s, *ss;
   register struct win **pp, *p;
   register char *cmd;
   int l;
+  int a;
 
   s = ss = buf;
   for (pp = ((flags & 4) && where >= 0) ? wtab + where + 1: wtab; pp < wtab + MAXWIN; pp++)
@@ -5130,6 +5132,14 @@ int where;
 	  *s++ = ' ';
 	  *s++ = ' ';
 	}
+      if ((((flags & 4) && where >= 0 && where < p->w_number) ||
+	  (!(flags & 4) && where >= 0 && p->w_number < where)) &&
+	  (flags & 8) && attr != -1)
+	a = 1;
+      else
+	a = 0;
+      if (a && (p->w_bell == BELL_DONE || p->w_bell == BELL_FOUND))
+	AddWinMsgRend(s, attr);
       sprintf(s, "%d", p->w_number);
       if (p->w_number == where)
         ss = s;
@@ -5145,6 +5155,8 @@ int where;
       *s++ = ' ';
       strncpy(s, cmd, l);
       s += l;
+      if (a && (p->w_bell == BELL_DONE || p->w_bell == BELL_FOUND))
+	AddWinMsgRend(s, -1);
     }
   *s = 0;
   return ss;
@@ -5243,7 +5255,7 @@ int where;
     return;
   if (where == -1 && D_fore)
     where = D_fore->w_number;
-  ss = AddWindows(buf, sizeof(buf), 0, where);
+  ss = AddWindows(buf, sizeof(buf), 0, where, -1);
   s = buf + strlen(buf);
   if (ss - buf > D_width / 2)
     {
diff --git a/src/screen.c b/src/screen.c
index d8e82f3..e4ee411 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2085,7 +2085,7 @@ static const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
 #endif
 
 static char winmsg_buf[MAXSTR];
-#define MAX_WINMSG_REND 16	/* rendition changes */
+#define MAX_WINMSG_REND 32	/* rendition changes */
 static int winmsg_rend[MAX_WINMSG_REND];
 static int winmsg_rendpos[MAX_WINMSG_REND];
 static int winmsg_numrend;
@@ -2332,6 +2332,22 @@ time_t now;
   return bt->result;
 }
 
+int
+AddWinMsgRend(str, r)
+const char *str;
+int r;
+{
+  if (winmsg_numrend >= MAX_WINMSG_REND || str < winmsg_buf ||
+      str >= winmsg_buf + MAXSTR)
+    return -1;
+
+  winmsg_rend[winmsg_numrend] = r;
+  winmsg_rendpos[winmsg_numrend] = str - winmsg_buf;
+  winmsg_numrend++;
+
+  return 0;
+}
+
 char *
 MakeWinMsgEv(str, win, esc, padlen, ev, rec)
 char *str;
@@ -2361,6 +2377,7 @@ int rec;
   int truncper = 0;
   int trunclong = 0;
   struct backtick *bt;
+  int attrflg = 0, attr = -1;
  
   if (winmsg_numrend >= 0)
     winmsg_numrend = 0;
@@ -2415,6 +2432,8 @@ int rec;
 	num = num * 10 + (*s++ - '0');
       if ((longflg = *s == 'L') != 0)
 	s++;
+      if ((attrflg = *s == 'B') != 0)
+	s++;
       switch (*s)
 	{
         case '?':
@@ -2587,7 +2606,8 @@ int rec;
 		oldfore = D_fore;
 		D_fore = win;
 	      }
-	    ss = AddWindows(p, l - 1, (*s == 'w' ? 0 : 1) | (longflg ? 0 : 2) | (plusflg ? 4 : 0), win ? win->w_number : -1);
+	    ss = AddWindows(p, l - 1, (*s == 'w' ? 0 : 1) | (longflg ? 0 : 2) | (plusflg ? 4 : 0) | (attr != -1 ? 8 : 0),
+		  win ? win->w_number : -1, attr);
 	    if (minusflg)
 	       *ss = 0;
 	    if (display)
@@ -2639,7 +2659,11 @@ int rec;
 		debug1("MakeWinMsg attrcolor %s\n", rbuf);
 	        if (i != 1 || rbuf[0] != '-')
 		  r = ParseAttrColor(rbuf, (char *)0, 0);
-	        if (r != -1 || (i == 1 && rbuf[0] == '-'))
+		if (r != -1 && attrflg)
+		  {
+		    attr = r;
+		  }
+		else if (r != -1 || (i == 1 && rbuf[0] == '-'))
 		  {
 		    winmsg_rend[winmsg_numrend] = r;
 		    winmsg_rendpos[winmsg_numrend] = p - winmsg_buf;
