diff -r 6365c9425b48 config.default.h
--- a/config.default.h	Wed Feb 14 09:35:48 2007 +0100
+++ b/config.default.h	Wed Feb 14 14:12:21 2007 +0100
@@ -19,6 +19,8 @@ const char *tags[] = { "1", "2", "3", "4
 #define SELFGCOLOR		"#ffffff"
 
 #define MASTER			600		/* per thousand */
+#define MASTERTAGS \
+unsigned int mastertags[] = { 200, 800, MASTER, MASTER, MASTER, MASTER, MASTER, MASTER, MASTER };
 #define MODKEY			Mod1Mask
 #define NMASTER			1		/* clients in master area */
 #define SNAP			20		/* pixel */
diff -r 6365c9425b48 dwm.h
--- a/dwm.h	Wed Feb 14 09:35:48 2007 +0100
+++ b/dwm.h	Wed Feb 14 14:36:25 2007 +0100
@@ -87,6 +87,8 @@ extern int screen, sx, sy, sw, sh;		/* s
 extern int screen, sx, sy, sw, sh;		/* screen geometry */
 extern int wax, way, wah, waw;			/* windowarea geometry */
 extern unsigned int master, nmaster;		/* master percent, number of master clients */
+extern unsigned int mastermore; /* master percent for when viewing more tags at once */
+extern unsigned int *mastertag; /* mastertag is array of master percents for individual tags */
 extern unsigned int ntags, numlockmask;		/* number of tags, dynamic lock mask */
 extern void (*handler[LASTEvent])(XEvent *);	/* event handler */
 extern void (*arrange)(void);			/* arrange function, indicates mode  */
diff -r 6365c9425b48 main.c
--- a/main.c	Wed Feb 14 09:35:48 2007 +0100
+++ b/main.c	Wed Feb 14 14:13:42 2007 +0100
@@ -19,7 +19,7 @@
 
 char stext[256];
 int bh, bmw, screen, sx, sy, sw, sh, wax, way, waw, wah;
-unsigned int master, nmaster, ntags, numlockmask;
+unsigned int master, nmaster, mastermore, *mastertag, ntags, numlockmask;
 Atom wmatom[WMLast], netatom[NetLast];
 Bool running = True;
 Bool *seltag;
@@ -33,6 +33,8 @@ Window root, barwin;
 Window root, barwin;
 
 /* static */
+
+MASTERTAGS
 
 static int (*xerrorxlib)(Display *, XErrorEvent *);
 static Bool otherwm, readin;
@@ -58,6 +60,7 @@ cleanup(void) {
 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 	XSync(dpy, False);
 	free(seltag);
+  free(mastertag);
 }
 
 static void
@@ -132,7 +135,11 @@ setup(void) {
 	sx = sy = 0;
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
-	master = MASTER;
+	master = mastertags[0];
+  mastermore = MASTER;
+	mastertag = emallocz(sizeof(unsigned int) * ntags);
+  for(i =0; i < ntags; i++)
+    mastertag[i] = mastertags[i];
 	nmaster = NMASTER;
 	bmw = textw(TILESYMBOL) > textw(FLOATSYMBOL) ? textw(TILESYMBOL) : textw(FLOATSYMBOL);
 	/* bar */
diff -r 6365c9425b48 view.c
--- a/view.c	Wed Feb 14 09:35:48 2007 +0100
+++ b/view.c	Wed Feb 14 13:42:44 2007 +0100
@@ -33,6 +33,20 @@ togglemax(Client *c) {
 	}
 	resize(c, True);
 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+}
+
+static void
+doresize(unsigned int *pmaster, unsigned int i) {
+	if(i == 0)
+		*pmaster = MASTER;
+	else {
+		if(waw * (*pmaster + i) / 1000 >= waw - 2 * BORDERPX
+		|| waw * (*pmaster + i) / 1000 <= 2 * BORDERPX)
+			return;
+		*pmaster += i;
+	}
+  master = *pmaster;
+	arrange();
 }
 
 /* extern */
@@ -170,15 +184,16 @@ isvisible(Client *c) {
 
 void
 resizemaster(Arg *arg) {
-	if(arg->i == 0)
-		master = MASTER;
-	else {
-		if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX
-		|| waw * (master + arg->i) / 1000 <= 2 * BORDERPX)
-			return;
-		master += arg->i;
-	}
-	arrange();
+  int i, num = 0, cur;
+  for(i = 0; i < ntags; i++)
+    if(seltag[i]) {
+      cur = i;
+      num++;
+    }
+  if(num == 1)
+    doresize(&mastertag[cur], arg->i);
+  else
+    doresize(&mastermore, arg->i);
 }
 
 void
@@ -223,12 +238,23 @@ togglemode(Arg *arg) {
 
 void
 toggleview(Arg *arg) {
-	unsigned int i;
+	unsigned int i, num = 0, cur;
 
 	seltag[arg->i] = !seltag[arg->i];
 	for(i = 0; i < ntags && !seltag[i]; i++);
 	if(i == ntags)
 		seltag[arg->i] = True; /* cannot toggle last view */
+
+  for(i = 0; i < ntags; i++)
+    if(seltag[i]) {
+      cur = i;
+      num++;
+    }
+  if(num == 1)
+    master = mastertag[cur];
+  else
+    master = mastermore;
+
 	arrange();
 }
 
@@ -238,8 +264,10 @@ view(Arg *arg) {
 
 	for(i = 0; i < ntags; i++)
 		seltag[i] = (arg->i == -1) ? True : False;
-	if(arg->i >= 0 && arg->i < ntags)
+	if(arg->i >= 0 && arg->i < ntags) {
 		seltag[arg->i] = True;
+    master = mastertag[arg->i];
+  }
 	arrange();
 }
 
