--- bstack.c	Wed Dec 31 19:00:00 1969
+++ bstack.c	Mon Jan 14 22:06:07 2008
@@ -0,0 +1,45 @@
+void
+bstack(void) {
+    unsigned int i, j, n, nx, ny, nw, nh, mh, tw;
+    Client *c, *mc;
+
+    domwfact = dozoom = True;
+
+    nh = 0;
+
+    for(i = 0; i < mcount; i++) {
+        Monitor *m = &monitors[i];
+
+        for(n = 0, c = nexttiled(clients, m); c; c = nexttiled(c->next, m))
+            n++;
+
+        for(j = 0, c = mc = nexttiled(clients, m); c; c = nexttiled(c->next, m)) {
+            mh = (n == 1) ? m->wah : m->mwfact * m->wah;
+            tw = (n > 1) ? m->waw / (n - 1) : 0;
+            if(j == 0) {
+                nx = m->wax;
+                ny = m->way;
+                nh = mh - 2 * c->border;
+                nw = m->waw - 2 * c->border;
+            }
+            else {
+                if(j == 1) {
+                    nx = m->wax;
+                    ny += mc->h + 2 * mc->border;
+                    nh = (m->way + m->wah) - ny - 2 * c->border;
+                }
+                if(j + 1 == n)
+                    nw = (m->wax + m->waw) - nx - 2 * c->border;
+                else
+                    nw = tw - 2 * c->border;
+            }
+            resize(c, nx, ny, nw, nh, RESIZEHINTS);
+            if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)))
+                resize(c, nx, ny, nw, nh, False);
+            if(n > 1 && tw != m->waw)
+                nx = c->x + c->w + 2 * c->border;
+
+            j++;
+        }
+    }
+}
--- config.def.h	Mon Jan 14 22:06:07 2008
+++ config.def.h	Mon Jan 14 22:06:07 2008
@@ -30,10 +30,12 @@
 #define MWFACT			0.6	/* master width factor [0.1 .. 0.9] */
 #define RESIZEHINTS		True	/* False - respect size hints in tiled resizals */
 #define SNAP			32	/* snap pixel */
+#include "bstack.c"
 Layout layouts[] = {
 	/* symbol		function */
 	{ "[]=",		tile }, /* first entry is default */
 	{ "><>",		floating },
+    { "TTT",        bstack },
 };
 
 /* key definitions */
