diff -Naur original/screen-4.0.3/screen.c screen-4.0.3/screen.c
--- original/screen-4.0.3/screen.c	2011-11-30 04:37:28.000000000 +0100
+++ screen-4.0.3/screen.c	2011-11-30 05:02:51.000000000 +0100
@@ -2025,11 +2025,11 @@
 static const char months[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
 #endif
 
-static char winmsg_buf[MAXSTR];
+char winmsg_buf[MAXSTR];
 #define MAX_WINMSG_REND 16	/* rendition changes */
-static int winmsg_rend[MAX_WINMSG_REND];
-static int winmsg_rendpos[MAX_WINMSG_REND];
-static int winmsg_numrend;
+int winmsg_rend[MAX_WINMSG_REND];
+int winmsg_rendpos[MAX_WINMSG_REND];
+int winmsg_numrend;
 
 static char *
 pad_expand(buf, p, numpad, padlen)
@@ -2294,6 +2294,7 @@
   int longflg;
   int minusflg;
   int plusflg;
+  int btitlesflg;
   int qmflag = 0, omflag = 0, qmnumrend = 0;
   char *qmpos = 0;
   int numpad = 0;
@@ -2356,6 +2357,8 @@
 	num = num * 10 + (*s++ - '0');
       if ((longflg = *s == 'L') != 0)
 	s++;
+      if ((btitlesflg = *s == 'T') != 0)
+	s++;
       switch (*s)
 	{
         case '?':
@@ -2528,7 +2531,7 @@
 		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) | (minusflg ? 8 : 0) | (btitlesflg ? 16 : 0), win ? win->w_number : -1);
 	    if (minusflg)
 	       *ss = 0;
 	    if (display)
diff -Naur original/screen-4.0.3/process.c screen-4.0.3/process.c 
--- original/screen-4.0.3/process.c	2011-11-30 04:37:28.000000000 +0100
+++ screen-4.0.3/process.c	2011-11-30 04:58:32.000000000 +0100
@@ -4742,6 +4742,12 @@
 int flags;
 int where;
 {
+  // MA: alt. pass (strlen(winmsg_buf) - strlen(p)) as buf offset
+  extern char winmsg_buf[];
+  // MA: could / should we use ApplyAttrColor() / SetRendition() instead?
+  extern int winmsg_rend[];
+  extern int winmsg_rendpos[];
+  extern int winmsg_numrend;
   register char *s, *ss;
   register struct win **pp, *p;
   register char *cmd;
@@ -4781,6 +4787,16 @@
           s = AddWindowFlags(s, len, p);
 	}
       *s++ = ' ';
+      if (flags & 16 && ((!(flags & 8)) ? : p->w_number < where))
+    {
+          // MA: feels safe atm, but winmsg_rendpos[] must be in asc. order
+          winmsg_rend[winmsg_numrend] = 1024; // %{+b}
+          winmsg_rendpos[winmsg_numrend] = strlen(winmsg_buf) - strlen(s);
+          winmsg_numrend++;
+          winmsg_rend[winmsg_numrend] = -1; // %{-}
+          winmsg_rendpos[winmsg_numrend] = l + strlen(winmsg_buf) - strlen(s);
+          winmsg_numrend++;
+    }
       strncpy(s, cmd, l);
       s += l;
     }
