diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
index ffaf529..7d79cc3 100644
--- a/src/cmd/9term/9term.c
+++ b/src/cmd/9term/9term.c
@@ -20,7 +20,7 @@
 int noecho = 0;
 
 void servedevtext(void);
-void listenthread(void*);
+void listenproc(void*);
 void textthread(void*);
 
 typedef struct Text	Text;
@@ -249,7 +249,7 @@
 
 	initdraw(0, nil, "9term");
 	notify(hangupnote);
-	notifyatsig(SIGCHLD, 1);
+	noteenable("sys: child");
 	servedevtext();
 
 	mc = initmouse(nil, screen);
@@ -322,7 +322,7 @@
 		yield();
 
 		i = 1-i;	/* toggle */
-		n = threadread(rcfd, rcbuf[i].data, sizeof rcbuf[i].data);
+		n = read(rcfd, rcbuf[i].data, sizeof rcbuf[i].data);
 		if(n <= 0){
 			if(n < 0)
 				fprint(2, "9term: host read error: %r\n");
@@ -338,7 +338,7 @@
 hoststart(void)
 {
 	hostc = chancreate(sizeof(int), 0);
-	threadcreate(hostproc, hostc, 32*1024);
+	proccreate(hostproc, hostc, 32*1024);
 }
 
 void
@@ -1868,25 +1868,25 @@
 	}
 
 	putenv("text9term", buf);
-	threadcreate(listenthread, nil, STACK);
+	proccreate(listenproc, nil, STACK);
 	strcpy(thesocket, buf+5);
 	atexit(removethesocket);
 }
 
 void
-listenthread(void *arg)
+listenproc(void *arg)
 {
 	int fd;
 	char dir[100];
 
 	USED(arg);
 	for(;;){
-		fd = threadlisten(adir, dir);
+		fd = listen(adir, dir);
 		if(fd < 0){
 			close(afd);
 			return;
 		}
-		threadcreate(textthread, (void*)fd, STACK);
+		proccreate(textthread, (void*)fd, STACK);
 	}
 }
 
diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c
index ddaadb5..1aa46dc 100644
--- a/src/cmd/9term/rcstart.c
+++ b/src/cmd/9term/rcstart.c
@@ -4,19 +4,24 @@
 #include "term.h"
 
 static void
-sys(char *buf)
+sys(char *buf, int devnull)
 {
 	char buf2[100];
 	char *f[20];
 	int nf, pid;
 
+	notedisable("sys: child");
 	strcpy(buf2, buf);
 	nf = tokenize(buf2, f, nelem(f));
 	f[nf] = nil;
 	switch(pid = fork()){
 	case 0:
+		close(1);
+		open("/dev/null", OREAD);
+		close(2);
+		open("/dev/null", OREAD);
 		execvp(f[0], f);
-		_exits("oops");
+		_exit(2);
 	default:
 		waitpid();
 	}
@@ -43,18 +48,23 @@
 	 * fd0 is slave (tty), fd1 is master (pty)
 	 */
 	fd[0] = fd[1] = -1;
-	if(getpts(fd, slave) < 0)
+	if(getpts(fd, slave) < 0){
+		exit(3);
 		sysfatal("getpts: %r\n");
-	switch(pid = fork()) {
+	}
+	notedisable("sys: window size change");
+	pid = fork();
+	switch(pid){
 	case 0:
 		putenv("TERM", "9term");
 		sfd = childpty(fd, slave);
 		dup(sfd, 0);
 		dup(sfd, 1);
 		dup(sfd, 2);
-		sys("stty tabs -onlcr onocr icanon echo erase '^h' intr '^?'");
+		sys("stty tabs -onlcr icanon echo erase '^h' intr '^?'", 0);
+		sys("stty onocr", 1);	/* not available on mac */
 		if(noecho)
-			sys("stty -echo");
+			sys("stty -echo", 0);
 		for(i=3; i<100; i++)
 			close(i);
 		signal(SIGINT, SIG_DFL);
@@ -62,7 +72,7 @@
 		signal(SIGTERM, SIG_DFL);
 		execvp(argv[0], argv);
 		fprint(2, "exec %s failed: %r\n", argv[0]);
-		_exits("oops");
+		_exit(2);
 		break;
 	case -1:
 		sysfatal("proc failed: %r");
diff --git a/src/cmd/9term/win.c b/src/cmd/9term/win.c
index a92c165..d471f98 100644
--- a/src/cmd/9term/win.c
+++ b/src/cmd/9term/win.c
@@ -110,6 +110,20 @@
 }
 
 void
+hangupnote(void *a, char *msg)
+{
+	if(strcmp(msg, "hangup") == 0 && pid != 0){
+		postnote(PNGROUP, pid, "hangup");
+		noted(NDFLT);
+	}
+	if(strstr(msg, "child")){
+		/* bug: do better */
+		threadexitsall(0);
+	}
+	noted(NDFLT);
+}
+
+void
 threadmain(int argc, char **argv)
 {
 	int fd, id;
@@ -140,7 +154,10 @@
 		}
 	}
 
-	threadnotify(nopipes, 1);
+	notedisable("sys: write on closed pipe");
+	noteenable("sys: child");
+	notify(hangupnote);
+
 	if((fs = nsmount("acme", "")) == 0)
 		sysfatal("nsmount acme: %r");
 	ctlfd = fsopen(fs, "new/ctl", ORDWR|OCEXEC);
@@ -184,7 +201,7 @@
 	fswrite(ctlfd, buf, strlen(buf));
 	
 	updatewinsize(25, 80, 0, 0);
-	threadcreate(stdoutproc, nil, STACK);
+	proccreate(stdoutproc, nil, STACK);
 	stdinproc(nil);
 }
 
@@ -420,13 +437,12 @@
 	char x[16], hold[UTFmax];
 
 	USED(v);
-	threadnotify(nopipes, 1);
 	buf = malloc(8192+UTFmax+1);
 	npart = 0;
 	for(;;){
 		/* Let typing have a go -- maybe there's a rubout waiting. */
 		yield();
-		n = threadread(fd1, buf+npart, 8192);
+		n = read(fd1, buf+npart, 8192);
 		if(n < 0)
 			error(nil);
 		if(n == 0)
