diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
index 852e7da..2b2f553 100644
--- a/src/cmd/9term/9term.c
+++ b/src/cmd/9term/9term.c
@@ -835,7 +835,7 @@
 		return;
 	}
 
-	rawon = israw(sfd);
+	rawon = !isecho(sfd);
 	if(rawon && t.q0==t.nr){
 		addraw(&r, 1);
 		consread();
@@ -927,7 +927,7 @@
 	if(holdon)
 		return 0;
 
-	rawon = israw(sfd);
+	rawon = !isecho(sfd);
 	if(rawon) 
 		return t.nraw != 0;
 
@@ -946,12 +946,11 @@
 {
 	char buf[8000], *p;
 	int c, width, n;
-	int echo;
+	int s;
 
 	for(;;) {
 		if(!consready())
 			return;
-
 		n = sizeof(buf);
 		p = buf;
 		c = 0;
@@ -965,19 +964,22 @@
 			c = *p;
 			p += width;
 			n -= width;
-			rawon = israw(sfd);
+			rawon = !isecho(sfd);
 			if(!rawon && (c == '\n' || c == '\004' || c == '\x7F'))
 				break;
 		}
-		/* take out control-d when not doing a zero length write */
 		n = p-buf;
-		if(0) fprint(2, "write buf\n");
-		/* temporarily disable echo for buf. sensitive to race? Axel. */
-	//	echo = setecho(sfd, 0);
+
+		/*
+		 * We've been echoing, so make sure the terminal isn't
+		 * while we do the write.  This screws up if someone 
+		 * else tries to turn on echo at the same time (we'll turn it
+		 * off again after the write), but that's not too likely.
+		 */
+		s = setecho(sfd, 0);
 		if(write(rcfd, buf, n) < 0)
 			exits(0);
-	//	setecho(sfd, echo);
-/*		mallocstats(); */
+		setecho(sfd, s);
 	}
 }
 
@@ -1258,7 +1260,7 @@
 {
 	Rune *rbuf;
 
-	rawon = israw(sfd);
+	rawon = !isecho(sfd);
 	if(rawon && t.q0==t.nr){
 		addraw(r, n);
 		return;
diff --git a/src/cmd/9term/9term.h b/src/cmd/9term/9term.h
deleted file mode 100644
index 57a8359..0000000
--- a/src/cmd/9term/9term.h
+++ /dev/null
@@ -1,4 +0,0 @@
-extern int getpts(int[], char*);
-extern int childpty(int[], char*);
-extern void updatewinsize(int, int, int, int);
-extern int rcfd[];
diff --git a/src/cmd/9term/FreeBSD.c b/src/cmd/9term/FreeBSD.c
index 75a97a4..6dba6dd 100644
--- a/src/cmd/9term/FreeBSD.c
+++ b/src/cmd/9term/FreeBSD.c
@@ -1,10 +1,10 @@
 #include <u.h>
-#include "9term.h"
 #include <sys/types.h>
 #include <termios.h>
 #include <sys/termios.h>
 #include <libutil.h>
 #include <libc.h>
+#include "term.h"
 
 int
 getpts(int fd[], char *slave)
diff --git a/src/cmd/9term/Linux.c b/src/cmd/9term/Linux.c
index 823344c..eec79c2 100644
--- a/src/cmd/9term/Linux.c
+++ b/src/cmd/9term/Linux.c
@@ -1,63 +1 @@
-#include <u.h>
-#include <termios.h>
-#include <sys/termios.h>
-#include <pty.h>
-#include <libc.h>
-#include "9term.h"
-
-int
-getpts(int fd[], char *slave)
-{
-	openpty(&fd[1], &fd[0], slave, 0, 0);
-	return 0;
-}
-
-int
-childpty(int fd[], char *slave)
-{
-	int sfd;
-
-	close(fd[1]);
-	setsid();
-	sfd = open(slave, ORDWR);
-	if(sfd < 0)
-		sysfatal("open %s: %r\n", slave);
-	if(ioctl(sfd, TIOCSCTTY, 0) < 0)
-		fprint(2, "ioctl TIOCSCTTY: %r\n");
-	return sfd;
-}
-
-struct winsize ows;
-
-void
-updatewinsize(int row, int col, int dx, int dy)
-{
-	struct winsize ws;
-
-	ws.ws_row = row;
-	ws.ws_col = col;
-	ws.ws_xpixel = dx;
-	ws.ws_ypixel = dy;
-	if(ws.ws_row != ows.ws_row || ws.ws_col != ows.ws_col)
-	if(ioctl(rcfd[0], TIOCSWINSZ, &ws) < 0)
-		fprint(2, "ioctl: %r\n");
-	ows = ws;
-}
-
-
-int
-israw(int fd)
-{
-	return 0;
-/*
-	if(tcgetattr(fd, &ttmode) < 0)
-		fprint(2, "tcgetattr: %r\n");
-	return !(ttmode.c_lflag&(ICANON|ECHO));
-*/
-}
-
-int
-setecho(int fd, int on)
-{
-	return 0;
-}
+#include "bsdpty.c"
diff --git a/src/cmd/9term/OpenBSD.c b/src/cmd/9term/OpenBSD.c
index e4753de..ec8c5ef 100644
--- a/src/cmd/9term/OpenBSD.c
+++ b/src/cmd/9term/OpenBSD.c
@@ -1,11 +1,11 @@
 #include <u.h>
-#include "9term.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <termios.h>
 #include <sys/termios.h>
 #include <util.h>
 #include <libc.h>
+#include "term.h"
 
 int
 getpts(int fd[], char *slave)
diff --git a/src/cmd/9term/SunOS.c b/src/cmd/9term/SunOS.c
index 2522834..efc2a97 100644
--- a/src/cmd/9term/SunOS.c
+++ b/src/cmd/9term/SunOS.c
@@ -4,6 +4,8 @@
 #include <libc.h>
 #include "term.h"
 
+#define debug 0
+
 int
 getpts(int fd[], char *slave)
 {
@@ -55,72 +57,34 @@
 	ows = ws;
 }
 
-/*
- * israw has been inspired by Matty Farrow's 9term.
- * The code below is probably a gross simplification --
- * for the few cases tested it seems to be enough.
- * However, for example, Matty's code also looks at ISIG,
- * whereas, we do not (yet?). Axel.
- *
- *Note: I guess only the get/set terminal mode attribute
- * code needs to be here; the logic around it could be
- * elswhere (9term.c) - but if the code below is split,
- * the question is what a nice interface would be. Axel.
- */
-
 static struct termios ttmode;
 
 int
 israw(int fd)
 {
-	int e, c, i;
-
-	tcgetattr(fd, &ttmode);
-	c = (ttmode.c_lflag & ICANON) ? 1 : 0;
-	e = (ttmode.c_lflag & ECHO) ? 1 : 0;
-	i = (ttmode.c_lflag & ISIG) ? 1 : 0;
-
-	if(0) fprint(2, "israw: icanon=%d echo=%d isig=%d\n", c, e, i);
-
-	return !c || !e ;
+	if(tcgetattr(fd, &ttmode) < 0)
+		fprint(2, "tcgetattr: %r\n");
+	if(debug) fprint(2, "israw %c%c\n",
+		ttmode.c_lflag&ICANON ? 'c' : '-',
+		ttmode.c_lflag&ECHO ? 'e' : '-');
+	return !(ttmode.c_lflag&(ICANON|ECHO));
 }
 
-
 int
-setecho(int fd, int on)
+setecho(int fd, int newe)
 {
-	int e, c, i;
-	int oldecho;
+	int old;
 
-	tcgetattr(fd, &ttmode);
-	c = (ttmode.c_lflag & ICANON) ? 1 : 0;
-	e = (ttmode.c_lflag & ECHO) ? 1 : 0;
-	i = (ttmode.c_lflag & ISIG) ? 1 : 0;
-
-	if(0) fprint(2, "setecho(%d) pre: icanon=%d echo=%d isig=%d\n", on, c, e, i);
-
-	oldecho = e;
-
-	if (oldecho == on)
-		return  oldecho;
-
-	if (on) {
-		ttmode.c_lflag |= ECHO;
-		tcsetattr(fd, TCSANOW, &ttmode);
-	} else {
-		ttmode.c_lflag &= ~ECHO;
-		tcsetattr(fd, TCSANOW, &ttmode);
+	if(tcgetattr(fd, &ttmode) < 0)
+		fprint(2, "tcgetattr: %r\n");
+	old = (ttmode.c_lflag&ECHO)==ECHO;
+	if(old != newe){
+		if(newe)
+			ttmode.c_lflag |= ECHO;
+		else
+			ttmode.c_lflag &= ~ECHO;
+		if(tcsetattr(fd, TCSANOW, &ttmode) < 0)
+			fprint(2, "tcsetattr: %r\n");
 	}
-
-	if (0){
-		tcgetattr(fd, &ttmode);
-		c = (ttmode.c_lflag & ICANON) ? 1 : 0;
-		e =  (ttmode.c_lflag & ECHO) ? 1 : 0;
-		i = (ttmode.c_lflag & ISIG) ? 1 : 0;
-
-		fprint(2, "setecho(%d) post: icanon=%d echo=%d isig=%d\n", on, c, e, i);
-	}
-
-	return oldecho;
+	return old;
 }
-
diff --git a/src/cmd/9term/mkfile b/src/cmd/9term/mkfile
index 81af3bc..8b06911 100644
--- a/src/cmd/9term/mkfile
+++ b/src/cmd/9term/mkfile
@@ -13,3 +13,5 @@
 
 LDFLAGS=-L$X11/lib -lX11
 
+Linux.$O: bsdpty.c
+
diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c
index 499c591..4b32483 100644
--- a/src/cmd/9term/rcstart.c
+++ b/src/cmd/9term/rcstart.c
@@ -6,17 +6,10 @@
 #include <signal.h>
 #include "term.h"
 
-/*
- * Somehow we no longer automatically exit
- * when the shell exits; hence the SIGCHLD stuff.
- * Something that can be fixed? Axel.
- */
-static int pid;
-
 int
 rcstart(int argc, char **argv, int *pfd, int *tfd)
 {
-	int fd[2];
+	int fd[2], i, pid;
 	char *xargv[3];
 	char slave[256];
 	int sfd;
@@ -36,7 +29,6 @@
 	fd[0] = fd[1] = -1;
 	if(getpts(fd, slave) < 0)
 		sysfatal("getpts: %r\n");
-
 	switch(pid = fork()) {
 	case 0:
 		putenv("TERM", "9term");
@@ -44,7 +36,9 @@
 		dup(sfd, 0);
 		dup(sfd, 1);
 		dup(sfd, 2);
-		system("stty tabs -onlcr -echo erase '^h' intr '^?'");
+		system("stty tabs -onlcr onocr icanon echo erase '^h' intr '^?'");
+		for(i=3; i<100; i++)
+			close(i);
 		execvp(argv[0], argv);
 		fprint(2, "exec %s failed: %r\n", argv[0]);
 		_exits("oops");
@@ -54,10 +48,11 @@
 		break;
 	}
 	*pfd = fd[1];
-	if(tfd)
-		*tfd = fd[0];
-	else
-		close(fd[0]);
+	close(fd[0]);
+	if(tfd){
+		if((*tfd = open(slave, OREAD)) < 0)
+			sysfatal("parent open %s: %r", slave);
+	}
 	return pid;
 }
 
diff --git a/src/cmd/9term/term.h b/src/cmd/9term/term.h
index c35ff4a..4b5339c 100644
--- a/src/cmd/9term/term.h
+++ b/src/cmd/9term/term.h
@@ -3,5 +3,5 @@
 extern void updatewinsize(int, int, int, int);
 extern int rcfd;
 extern int rcstart(int, char*[], int*, int*);
-extern int israw(int);
+extern int isecho(int);
 extern int setecho(int, int);
