diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index 0493190..18765bc 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -67,6 +67,11 @@
 
 	loadfile = nil;
 	ARGBEGIN{
+	case 'D':
+		{extern int _threaddebuglevel;
+		_threaddebuglevel = ~0;
+		}
+		break;
 	case 'a':
 		globalautoindent = TRUE;
 		break;
@@ -643,6 +648,21 @@
 	alts[WCmd].op = CHANRCV;
 	alts[NWALT].op = CHANEND;
 
+	/*
+	 * BUG.  Actually there's no bug here but this is the
+	 * first place you'd look.  When a program is run,
+	 * it doesn't disappear from the main tag until the
+	 * mouse is moved or keyboard is hit.  This would
+	 * suggest that the WWait case isn't working right,
+	 * but what's actually going on is that the X11 code
+	 * is running a select-based threading loop that
+	 * doesn't get interrupted until there is data from X11.
+	 * This was done to make acme work on Suns and
+	 * other systems where our threading was sub-par.
+	 * Now that we've gotten pthreads working (sort of),
+	 * we might be able to fix this properly.
+	 * But the bug is in libdraw and libthread, not here.
+	 */
 	command = nil;
 	for(;;){
 		switch(alt(alts)){
diff --git a/src/cmd/acme/addr.c b/src/cmd/acme/addr.c
index 2a34474..4e31d6a 100644
--- a/src/cmd/acme/addr.c
+++ b/src/cmd/acme/addr.c
@@ -49,7 +49,7 @@
 }
 
 Range
-number(Mntdir *md, Text *t, Range r, int line, int dir, int size, int *evalp)
+number(uint showerr, Text *t, Range r, int line, int dir, int size, int *evalp)
 {
 	uint q0, q1;
 
@@ -82,7 +82,7 @@
 		break;
 	case Fore:
 		if(q1 > 0)
-			while(textreadc(t, q1-1) != '\n')
+			while(q1<t->file->b.nc && textreadc(t, q1-1) != '\n')
 				q1++;
 		q0 = q1;
 		goto Forward;
@@ -107,7 +107,7 @@
 	return range(q0, q1);
 
     Rescue:
-	if(md != nil)
+	if(showerr)
 		warning(nil, "address out of range\n");
 	*evalp = FALSE;
 	return r;
@@ -115,14 +115,15 @@
 
 
 Range
-regexp(Mntdir *md, Text *t, Range lim, Range r, Rune *pat, int dir, int *foundp)
+regexp(uint showerr, Text *t, Range lim, Range r, Rune *pat, int dir, int *foundp)
 {
 	int found;
 	Rangeset sel;
 	int q;
 
 	if(pat[0] == '\0' && rxnull()){
-		warning(md, "no previous regular expression\n");
+		if(showerr)
+			warning(nil, "no previous regular expression\n");
 		*foundp = FALSE;
 		return r;
 	}
@@ -137,16 +138,17 @@
 			q = Infinity;
 		else
 			q = lim.q1;
+warning(nil, "searching %d-%d\n", r.q1, q);
 		found = rxexecute(t, nil, r.q1, q, &sel);
 	}
-	if(!found && md==nil)
+	if(!found && showerr)
 		warning(nil, "no match for regexp\n");
 	*foundp = found;
 	return sel.r[0];
 }
 
 Range
-address(Mntdir *md, Text *t, Range lim, Range ar, void *a, uint q0, uint q1, int (*getc)(void*, uint),  int *evalp, uint *qp)
+address(uint showerr, Text *t, Range lim, Range ar, void *a, uint q0, uint q1, int (*getc)(void*, uint),  int *evalp, uint *qp)
 {
 	int dir, size, npat;
 	int prevc, c, nc, n;
@@ -175,7 +177,7 @@
 			if(q>=q1 && t!=nil && t->file!=nil)	/* rhs defaults to $ */
 				r.q1 = t->file->b.nc;
 			else{
-				nr = address(md, t, lim, ar, a, q, q1, getc, evalp, &q);
+				nr = address(showerr, t, lim, ar, a, q, q1, getc, evalp, &q);
 				r.q1 = nr.q1;
 			}
 			*qp = q;
@@ -184,7 +186,7 @@
 		case '-':
 			if(*evalp && (prevc=='+' || prevc=='-'))
 				if((nc=(*getc)(a, q))!='#' && nc!='/' && nc!='?')
-					r = number(md, t, r, 1, prevc, Line, evalp);	/* do previous one */
+					r = number(showerr, t, r, 1, prevc, Line, evalp);	/* do previous one */
 			dir = c;
 			break;
 		case '.':
@@ -222,7 +224,7 @@
 				n = n*10+(c-'0');
 			}
 			if(*evalp)
-				r = number(md, t, r, n, dir, size, evalp);
+				r = number(showerr, t, r, n, dir, size, evalp);
 			dir = None;
 			size = Line;
 			break;
@@ -255,7 +257,7 @@
 			pat = runerealloc(pat, npat+1);
 			pat[npat] = 0;
 			if(*evalp)
-				r = regexp(md, t, lim, r, pat, dir, evalp);
+				r = regexp(showerr, t, lim, r, pat, dir, evalp);
 			free(pat);
 			dir = None;
 			size = Line;
@@ -263,7 +265,7 @@
 		}
 	}
 	if(*evalp && dir != None)
-		r = number(md, t, r, 1, dir, Line, evalp);	/* do previous one */
+		r = number(showerr, t, r, 1, dir, Line, evalp);	/* do previous one */
 	*qp = q;
 	return r;
 }
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
index fe4b060..48a57dd 100644
--- a/src/cmd/acme/dat.h
+++ b/src/cmd/acme/dat.h
@@ -19,6 +19,7 @@
 	QWrdsel,
 	QWwrsel,
 	QWtag,
+	QWxdata,
 	QMAX,
 };
 
@@ -30,6 +31,7 @@
 	Infinity = 		0x7FFFFFFF,	/* huge value for regexp address */
 };
 
+#define Buffer AcmeBuffer
 typedef	struct	Block Block;
 typedef	struct	Buffer Buffer;
 typedef	struct	Command Command;
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index 37d5eda..85ef69a 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -342,7 +342,7 @@
 		return;
 	for(i=0; i<c->nw; i++){
 		w = c->w[i];
-		if(w->nopen[QWevent]+w->nopen[QWaddr]+w->nopen[QWdata] > 0){
+		if(w->nopen[QWevent]+w->nopen[QWaddr]+w->nopen[QWdata]+w->nopen[QWxdata] > 0){
 			warning(nil, "can't delete column; %.*S is running an external command\n", w->body.file->nname, w->body.file->name);
 			return;
 		}
@@ -1528,7 +1528,7 @@
 	if(ret >= 0){
 		if(cpid)
 			sendul(cpid, ret);
-		threadexits("");
+		threadexits(nil);
 	}
 	warning(nil, "exec rc: %r\n");
 
diff --git a/src/cmd/acme/fns.h b/src/cmd/acme/fns.h
index 2257d68..c61f96e 100644
--- a/src/cmd/acme/fns.h
+++ b/src/cmd/acme/fns.h
@@ -81,7 +81,7 @@
 void *emalloc(uint);
 void *erealloc(void*, uint);
 char	*estrdup(char*);
-Range		address(Mntdir*, Text*, Range, Range, void*, uint, uint, int (*)(void*, uint),  int*, uint*);
+Range		address(uint, Text*, Range, Range, void*, uint, uint, int (*)(void*, uint),  int*, uint*);
 int		rxexecute(Text*, Rune*, uint, uint, Rangeset*);
 int		rxbexecute(Text*, uint, Rangeset*);
 Window*	makenewwindow(Text *t);
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
index 50e6341..a095529 100644
--- a/src/cmd/acme/fsys.c
+++ b/src/cmd/acme/fsys.c
@@ -87,6 +87,7 @@
 	{ "rdsel",		QTFILE,		QWrdsel,		0400 },
 	{ "wrsel",		QTFILE,		QWwrsel,		0200 },
 	{ "tag",		QTAPPEND,	QWtag,		0600|DMAPPEND },
+	{ "xdata",		QTFILE,		QWxdata,		0600 },
 	{ nil, }
 };
 
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index f892640..d760745 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -591,7 +591,7 @@
 	e->u.at = t;
 	e->a0 = amin+1;
 	eval = FALSE;
-	address(nil, nil, range(-1,-1), range(0,0), t, e->a0, amax, tgetc, &eval, (uint*)&e->a1);
+	address(TRUE, nil, range(-1,-1), range(0,0), t, e->a0, amax, tgetc, &eval, (uint*)&e->a1);
 	return TRUE;
 
    Isntfile:
@@ -723,7 +723,7 @@
 		eval = FALSE;
 	else{
 		eval = TRUE;
-		r = address(nil, t, range(-1,-1), range(t->q0, t->q1), e->u.at, e->a0, e->a1, e->agetc, &eval, &dummy);
+		r = address(TRUE, t, range(-1,-1), range(t->q0, t->q1), e->u.at, e->a0, e->a1, e->agetc, &eval, &dummy);
 		if(eval == FALSE)
 			e->jump = FALSE;	/* don't jump if invalid address */
 	}
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c
index 5fc4c5a..5a2723a 100644
--- a/src/cmd/acme/xfid.c
+++ b/src/cmd/acme/xfid.c
@@ -103,13 +103,8 @@
 		q = FILE(x->f->qid);
 		switch(q){
 		case QWaddr:
-			if(w->nopen[q]++ == 0){
-				w->addr = range(0,0);
-				w->limit = range(-1,-1);
-			}
-			break;
-		case QWdata:
 			w->nopen[q]++;
+			w->limit = range(-1,-1);
 			break;
 		case QWevent:
 			if(w->nopen[q]++ == 0){
@@ -214,12 +209,13 @@
 			}
 			break;
 		case QWdata:
+		case QWxdata:
 			w->nomark = FALSE;
 			/* fall through */
 		case QWaddr:
 		case QWevent:	/* BUG: do we need to shut down Xfid? */
 			if(--w->nopen[q] == 0){
-				if(q == QWdata)
+				if(q == QWdata || q == QWxdata)
 					w->nomark = FALSE;
 				if(q==QWevent && !w->isdir && w->col!=nil){
 					w->filemenu = TRUE;
@@ -327,6 +323,15 @@
 		w->addr.q1 = w->addr.q0;
 		break;
 
+	case QWxdata:
+		/* BUG: what should happen if q1 > q0? */
+		if(w->addr.q0 > w->body.file->b.nc){
+			respond(x, &fc, Eaddr);
+			break;
+		}
+		w->addr.q0 += xfidruneread(x, &w->body, w->addr.q0, w->addr.q1);
+		break;
+
 	case QWtag:
 		xfidutfread(x, &w->tag, w->tag.file->b.nc, QWtag);
 		break;
@@ -398,7 +403,7 @@
 		t = &w->body;
 		wincommit(w, t);
 		eval = TRUE;
-		a = address(x->f->mntdir, t, w->limit, w->addr, r, 0, nr, rgetc, &eval, (uint*)&nb);
+		a = address(FALSE, t, w->limit, w->addr, r, 0, nr, rgetc, &eval, (uint*)&nb);
 		free(r);
 		if(nb < nr){
 			respond(x, &fc, Ebadaddr);
