diff --git a/src/cmd/page/filter.c b/src/cmd/page/filter.c
index 07c3df2..319cfb6 100644
--- a/src/cmd/page/filter.c
+++ b/src/cmd/page/filter.c
@@ -1,6 +1,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
diff --git a/src/cmd/page/gfx.c b/src/cmd/page/gfx.c
index 72254de..6a94703 100644
--- a/src/cmd/page/gfx.c
+++ b/src/cmd/page/gfx.c
@@ -5,6 +5,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
@@ -71,6 +72,8 @@
 static Image*	gfxdrawpage(Document *d, int page);
 static char*	gfxpagename(Document*, int);
 static int	spawnrc(char*, uchar*, int);
+static void	waitrc(void);
+static int	spawnpost(int);
 static int	addpage(Document*, char*);
 static int	rmpage(Document*, int);
 static int	genaddpage(Document*, char*, uchar*, int);
@@ -97,6 +100,7 @@
 	int i;
 
 	USED(b);
+
 	doc = emalloc(sizeof(*doc));
 	gfx = emalloc(sizeof(*gfx));
 	gfx->g = nil;
diff --git a/src/cmd/page/gs.c b/src/cmd/page/gs.c
index 524701e..2093af5 100644
--- a/src/cmd/page/gs.c
+++ b/src/cmd/page/gs.c
@@ -7,6 +7,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
@@ -134,7 +135,7 @@
 }
 
 int 
-spawngs(GSInfo *g)
+spawngs(GSInfo *g, char *safer)
 {
 	char *args[16];
 	char tb[32], gb[32];
@@ -158,7 +159,7 @@
 	nargs = 0;
 	args[nargs++] = "gs";
 	args[nargs++] = "-dNOPAUSE";
-	args[nargs++] = "-dSAFER";
+	args[nargs++] = safer;
 	args[nargs++] = "-sDEVICE=plan9";
 	args[nargs++] = "-sOutputFile=/fd/3";
 	args[nargs++] = "-dQUIET";
@@ -268,14 +269,11 @@
 	if(!Dx(bbox))
 		bbox = Rect(0, 0, 612, 792);	/* 8½×11 */
 
-	switch(landscape){
-	case 0:
-		pbox = bbox;
-		break;
-	case 1:
+	if(landscape)
 		pbox = Rect(bbox.min.y, bbox.min.x, bbox.max.y, bbox.max.x);
-		break;
-	}
+	else
+		pbox = bbox;
+
 	gscmd(gs, "/PageSize [%d %d]\n", Dx(pbox), Dy(pbox));
 	gscmd(gs, "/Margins [%d %d]\n", -pbox.min.x, -pbox.min.y);
 	gscmd(gs, "currentdevice putdeviceprops pop\n");
diff --git a/src/cmd/page/mkfile b/src/cmd/page/mkfile
index e8dbf52..0c4163a 100644
--- a/src/cmd/page/mkfile
+++ b/src/cmd/page/mkfile
@@ -14,7 +14,7 @@
 	util.$O\
 	view.$O\
 
-<$PLAN9/src//mkone
+<$PLAN9/src/mkone
 
 pdfprolog.c: pdfprolog.ps
 	cat pdfprolog.ps | sed 's/.*/"&\\n"/g' >pdfprolog.c
diff --git a/src/cmd/page/nrotate.c b/src/cmd/page/nrotate.c
index 2225ec3..65fe33a 100644
--- a/src/cmd/page/nrotate.c
+++ b/src/cmd/page/nrotate.c
@@ -15,6 +15,7 @@
 #include <libc.h>
 #include <bio.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include "page.h"
 
diff --git a/src/cmd/page/page.c b/src/cmd/page/page.c
index 3669ebf..4c76e03 100644
--- a/src/cmd/page/page.c
+++ b/src/cmd/page/page.c
@@ -1,6 +1,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
@@ -19,43 +20,6 @@
 int stdinfd;
 int truecolor;
 int imagemode;
-int notewatcher;
-int notegp;
-
-int
-watcher(void *v, char *x)
-{
-	USED(v);
-
-	if(strcmp(x, "die") != 0)
-		postnote(PNGROUP, notegp, x);
-	_exits(0);
-	return 0;
-}
-
-int
-bell(void *u, char *x)
-{
-	if(x && strcmp(x, "hangup") == 0)
-		_exits(0);
-
-	if(x && strstr(x, "die") == nil)
-		fprint(2, "postnote %d: %s\n", getpid(), x);
-
-	/* alarms come from the gs monitor */
-	if(x && strstr(x, "alarm")){
-		postnote(PNGROUP, getpid(), "die (gs error)");
-		postnote(PNPROC, notewatcher, "die (gs error)");
-	}
-
-	/* function mentions u so that it's in the stack trace */
-	if((u == nil || u != x) && doabort)
-		abort();
-
-/*	fprint(2, "exiting %d\n", getpid()); */
-	wexits("note");
-	return 0;
-}
 
 static int
 afmt(Fmt *fmt)
@@ -128,23 +92,7 @@
 		usage();
 	}ARGEND;
 
-	notegp = getpid();
-
-	switch(notewatcher = fork()){
-	case -1:
-		sysfatal("fork\n");
-		exits(0);
-	default:
-		break;
-	case 0:
-		atnotify(watcher, 1);
-		for(;;)
-			sleep(1000);
-		_exits(0);
-	}
-
 	rfork(RFNOTEG);
-	atnotify(bell, 1);
 
 	readstdin = 0;
 	if(imagemode == 0 && argc == 0){
@@ -159,6 +107,8 @@
 
 	fmtinstall('R', Rfmt);
 	fmtinstall('P', Pfmt);
+	if(mknewwindow)
+		newwin();
 
 	if(readstdin){
 		b = nil;
@@ -229,8 +179,5 @@
 void
 wexits(char *s)
 {
-	if(s && *s && strcmp(s, "note") != 0 && mknewwindow)
-		sleep(10*1000);
-	postnote(PNPROC, notewatcher, "die");
 	exits(s);
 }
diff --git a/src/cmd/page/page.h b/src/cmd/page/page.h
index aa19ff7..be54e38 100644
--- a/src/cmd/page/page.h
+++ b/src/cmd/page/page.h
@@ -1,5 +1,3 @@
-#include <cursor.h>
-
 typedef struct Document Document;
 
 struct Document {
@@ -44,6 +42,7 @@
 
 void rot180(Image*);
 Image *rot90(Image*);
+Image *rot270(Image*);
 Image *resample(Image*, Image*);
 
 /* ghostscript interface shared by ps, pdf */
@@ -57,7 +56,7 @@
 };
 void	waitgs(GSInfo*);
 int	gscmd(GSInfo*, char*, ...);
-int	spawngs(GSInfo*);
+int	spawngs(GSInfo*, char*);
 void	setdim(GSInfo*, Rectangle, int, int);
 int	spawnwriter(GSInfo*, Biobuf*);
 Rectangle	screenrect(void);
diff --git a/src/cmd/page/pdf.c b/src/cmd/page/pdf.c
index 44615a2..d723ad8 100644
--- a/src/cmd/page/pdf.c
+++ b/src/cmd/page/pdf.c
@@ -7,6 +7,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
@@ -97,14 +98,14 @@
 	d->pagename = pdfpagename;
 	d->fwdonly = 0;
 
-	if(spawngs(&pdf->gs) < 0)
+	if(spawngs(&pdf->gs, "-dDELAYSAFER") < 0)
 		return nil;
 
 	gscmd(&pdf->gs, "%s", pdfprolog);
 	waitgs(&pdf->gs);
 
 	setdim(&pdf->gs, Rect(0,0,0,0), ppi, 0);
-	gscmd(&pdf->gs, "(%s) (r) file pdfopen begin\n", fn);
+	gscmd(&pdf->gs, "(%s) (r) file { DELAYSAFER { .setsafe } if } stopped pop pdfopen begin\n", fn);
 	gscmd(&pdf->gs, "pdfpagecount PAGE==\n");
 	p = Brdline(&pdf->gs.gsrd, '\n');
 	npage = atoi(p);
@@ -121,11 +122,10 @@
 	pdf->pagebbox = emalloc(sizeof(Rectangle)*npage);
 	for(i=0; i<npage; i++) {
 		gscmd(&pdf->gs, "%d pdfgetpage\n", i+1);
-		pdf->pagebbox[i] = pdfbbox(&pdf->gs);
+		pdf->pagebbox[i] = pdfbbox(pdf);
 		if(Dx(pdf->pagebbox[i]) <= 0)
 			pdf->pagebbox[i] = bbox;
 	}
-
 	return d;
 }
 
@@ -149,6 +149,7 @@
 pdfpagename(Document *d, int page)
 {
 	static char str[15];
+	
 	USED(d);
 	sprint(str, "p %d", page+1);
 	return str;
diff --git a/src/cmd/page/ps.c b/src/cmd/page/ps.c
index 46ad5cd..cc6f3c5 100644
--- a/src/cmd/page/ps.c
+++ b/src/cmd/page/ps.c
@@ -7,6 +7,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include <ctype.h>
@@ -348,7 +349,7 @@
 	d->fwdonly = ps->clueless = dumb;
 	d->docname = argv[0];
 
-	if(spawngs(&ps->gs) < 0)
+	if(spawngs(&ps->gs, "-dSAFER") < 0)
 		return nil;
 
 	if(!cantranslate)
diff --git a/src/cmd/page/rotate.c b/src/cmd/page/rotate.c
index b295263..9e1c20d 100644
--- a/src/cmd/page/rotate.c
+++ b/src/cmd/page/rotate.c
@@ -15,6 +15,7 @@
 #include <libc.h>
 #include <bio.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include "page.h"
 
@@ -54,6 +55,7 @@
 	drawop(tmp, tmp->r, im, nil, im->r.min, S);
 
 	switch(axis){
+	default:
 	case Xaxis:
 		range = Rect(a, im->r.min.y,  c, im->r.max.y);
 		dr0 = range;
@@ -88,6 +90,7 @@
 	r0 = im->r;
 	r1 = im->r;
 	switch(axis) {
+	default:
 	case Xaxis:
 		r0.max.x = n;
 		r1.min.x = n;
@@ -245,6 +248,31 @@
 	return(tmp);
 }
 
+/* rotates an image 270 degrees clockwise */
+Image *
+rot270(Image *im)
+{
+	Image *tmp;
+	int i, j, dx, dy;
+
+	dx = Dx(im->r);
+	dy = Dy(im->r);
+	tmp = xallocimage(display, Rect(0, 0, dy, dx), im->chan, 0, DCyan);
+	if(tmp == nil) {
+		fprint(2, "out of memory during rot270: %r\n");
+		wexits("memory");
+	}
+
+	for(i = 0; i < dy; i++) {
+		for(j = 0; j < dx; j++) {
+			drawop(tmp, Rect(i, j, i+1, j+1), im, nil, Pt(dx-(j+1), i), S);
+		}
+	}
+	freeimage(im);
+
+	return(tmp);
+}
+
 /* from resample.c -- resize from → to using interpolation */
 
 
@@ -288,6 +316,7 @@
 	return i0(alpha*sqrt(1-(x*x/(tau*tau))))/i0(alpha);
 }
 
+
 void
 resamplex(uchar *in, int off, int d, int inx, uchar *out, int outx)
 {
diff --git a/src/cmd/page/util.c b/src/cmd/page/util.c
index 22832ba..2669df8 100644
--- a/src/cmd/page/util.c
+++ b/src/cmd/page/util.c
@@ -1,6 +1,7 @@
 #include <u.h>
 #include <libc.h>
 #include <draw.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include "page.h"
diff --git a/src/cmd/page/view.c b/src/cmd/page/view.c
index 92aedeb..4321f82 100644
--- a/src/cmd/page/view.c
+++ b/src/cmd/page/view.c
@@ -6,6 +6,7 @@
 #include <libc.h>
 #include <draw.h>
 #include <cursor.h>
+#include <cursor.h>
 #include <event.h>
 #include <bio.h>
 #include <plumb.h>
@@ -16,7 +17,7 @@
 Document *doc;
 Image *im;
 int page;
-int upside = 0;
+int angle = 0;
 int showbottom = 0;		/* on the next showpage, move the image so the bottom is visible. */
 
 Rectangle ulrange;	/* the upper left corner of the image must be in this rectangle */
@@ -156,8 +157,17 @@
 		im = tmp;
 	}
 
-	if(upside)
+	switch(angle){
+	case 90:
+		im = rot90(im);
+		break;
+	case 180:
 		rot180(im);
+		break;
+	case 270:
+		im = rot270(im);
+		break;
+	}
 
 	esetcursor(nil);
 	if(showbottom){
@@ -390,7 +400,7 @@
 				esetcursor(&reading);
 				rot180(im);
 				esetcursor(nil);
-				upside = !upside;
+				angle = (angle+180) % 360;
 				redraw(screen);
 				flushimage(display, 1);
 				break;
@@ -589,6 +599,7 @@
 					esetcursor(&reading);
 					im = rot90(im);
 					esetcursor(nil);
+					angle = (angle+90) % 360;
 					redraw(screen);
 					flushimage(display, 1);
 					break;
@@ -598,7 +609,7 @@
 					esetcursor(&reading);
 					rot180(im);
 					esetcursor(nil);
-					upside = !upside;
+					angle = (angle+180) % 360;
 					redraw(screen);
 					flushimage(display, 1);
 					break;
@@ -978,6 +989,67 @@
 	return v;
 }
 
+void
+newwin(void)
+{
+	char *srv, *mntsrv;
+	char spec[100];
+	int srvfd, cons, pid;
+
+	switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){
+	case -1:
+		fprint(2, "page: can't fork: %r\n");
+		wexits("no fork");
+	case 0:
+		break;
+	default:
+		wexits(0);
+	}
+
+	srv = rdenv("/env/wsys");
+	if(srv == 0){
+		mntsrv = rdenv("/mnt/term/env/wsys");
+		if(mntsrv == 0){
+			fprint(2, "page: can't find $wsys\n");
+			wexits("srv");
+		}
+		srv = malloc(strlen(mntsrv)+10);
+		sprint(srv, "/mnt/term%s", mntsrv);
+		free(mntsrv);
+		pid  = 0;			/* can't send notes to remote processes! */
+	}else
+		pid = getpid();
+	srvfd = open(srv, ORDWR);
+	free(srv);
+	if(srvfd == -1){
+		fprint(2, "page: can't open %s: %r\n", srv);
+		wexits("no srv");
+	}
+	sprint(spec, "new -pid %d", pid);
+	if(mount(srvfd, -1, "/mnt/wsys", 0, spec) == -1){
+		fprint(2, "page: can't mount /mnt/wsys: %r (spec=%s)\n", spec);
+		wexits("no mount");
+	}
+	close(srvfd);
+	unmount("/mnt/acme", "/dev");
+	bind("/mnt/wsys", "/dev", MBEFORE);
+	cons = open("/dev/cons", OREAD);
+	if(cons==-1){
+	NoCons:
+		fprint(2, "page: can't open /dev/cons: %r");
+		wexits("no cons");
+	}
+	dup(cons, 0);
+	close(cons);
+	cons = open("/dev/cons", OWRITE);
+	if(cons==-1)
+		goto NoCons;
+	dup(cons, 1);
+	dup(cons, 2);
+	close(cons);
+//	wctlfd = open("/dev/wctl", OWRITE);
+}
+
 Rectangle
 screenrect(void)
 {
@@ -1011,7 +1083,7 @@
 		case 0: 
 			dup(pfd[1], 0);
 			close(pfd[0]);
-			execl("/bin/page", "page", "-w", 0);
+			execl("/bin/page", "page", "-w", nil);
 			wexits("cannot exec in zerox: %r\n");
 		default:
 			close(pfd[1]);
