diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index 87924ca..4e047c1 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -63,6 +63,8 @@
 	int ncol;
 	Display *d;
 
+extern int _threaddebuglevel;
+_threaddebuglevel = ~0;
 	rfork(RFENVG|RFNAMEG);
 
 	ncol = -1;
diff --git a/src/libthread/channel.c b/src/libthread/channel.c
index 4f642c8..957a352 100644
--- a/src/libthread/channel.c
+++ b/src/libthread/channel.c
@@ -9,6 +9,16 @@
 int _threadhighnentry;
 int _threadnalt;
 
+static void
+setuserpc(ulong pc)
+{
+	Thread *t;
+
+	t = _threadgetproc()->thread;
+	if(t)
+		t->userpc = pc;
+}
+
 static int
 canexec(Alt *a)
 {
@@ -86,8 +96,8 @@
 	return c;
 }
 
-int
-alt(Alt *alts)
+static int
+_alt(Alt *alts)
 {
 	Alt *a, *xa;
 	Channel *volatile c;
@@ -197,6 +207,13 @@
 	return a - alts;
 }
 
+int
+alt(Alt *alts)
+{
+	setuserpc(getcallerpc(&alts));
+	return _alt(alts);
+}
+
 static int
 runop(int op, Channel *c, void *v, int nb)
 {
@@ -214,7 +231,7 @@
 	a[1].op = CHANEND;
 	if(nb)
 		a[1].op = CHANNOBLK;
-	switch(r=alt(a)){
+	switch(r=_alt(a)){
 	case -1:	/* interrupted */
 		return -1;
 	case 1:	/* nonblocking, didn't accomplish anything */
@@ -232,24 +249,28 @@
 int
 recv(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	return runop(CHANRCV, c, v, 0);
 }
 
 int
 nbrecv(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	return runop(CHANRCV, c, v, 1);
 }
 
 int
 send(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	return runop(CHANSND, c, v, 0);
 }
 
 int
 nbsend(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	return runop(CHANSND, c, v, 1);
 }
 
@@ -266,6 +287,7 @@
 int
 sendul(Channel *c, ulong v)
 {
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(ulong));
 	return send(c, &v);
 }
@@ -275,8 +297,9 @@
 {
 	ulong v;
 
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(ulong));
-	if(recv(c, &v) < 0)
+	if(runop(CHANRCV, c, &v, 0) < 0)
 		return ~0;
 	return v;
 }
@@ -284,8 +307,9 @@
 int
 sendp(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(void*));
-	return send(c, &v);
+	return runop(CHANSND, c, &v, 0);
 }
 
 void*
@@ -293,8 +317,9 @@
 {
 	void *v;
 
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(void*));
-	if(recv(c, &v) < 0)
+	if(runop(CHANRCV, c, &v, 0) < 0)
 		return nil;
 	return v;
 }
@@ -302,8 +327,9 @@
 int
 nbsendul(Channel *c, ulong v)
 {
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(ulong));
-	return nbsend(c, &v);
+	return runop(CHANSND, c, &v, 1);
 }
 
 ulong
@@ -311,8 +337,9 @@
 {
 	ulong v;
 
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(ulong));
-	if(nbrecv(c, &v) == 0)
+	if(runop(CHANRCV, c, &v, 1) == 0)
 		return 0;
 	return v;
 }
@@ -320,8 +347,9 @@
 int
 nbsendp(Channel *c, void *v)
 {
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(void*));
-	return nbsend(c, &v);
+	return runop(CHANSND, c, &v, 1);
 }
 
 void*
@@ -329,8 +357,9 @@
 {
 	void *v;
 
+	setuserpc(getcallerpc(&c));
 	channelsize(c, sizeof(void*));
-	if(nbrecv(c, &v) == 0)
+	if(runop(CHANRCV, c, &v, 1) == 0)
 		return nil;
 	return v;
 }
diff --git a/src/libthread/main.c b/src/libthread/main.c
index 5306147..96d9933 100644
--- a/src/libthread/main.c
+++ b/src/libthread/main.c
@@ -15,6 +15,13 @@
 extern void (*_sysfatal)(char*, va_list);
 
 void
+_threadstatus(int x)
+{
+	USED(x);
+	threadstatus();
+}
+
+void
 _threaddie(int x)
 {
 	extern char *_threadexitsallstatus;
@@ -38,6 +45,7 @@
 
 	signal(SIGTERM, _threaddie);
 	signal(SIGCHLD, _nop);
+	signal(SIGINFO, _threadstatus);
 //	rfork(RFREND);
 
 //_threaddebuglevel = (DBGSCHED|DBGCHAN|DBGREND)^~0;
diff --git a/src/libthread/sched.c b/src/libthread/sched.c
index 755fc28..250a19a 100644
--- a/src/libthread/sched.c
+++ b/src/libthread/sched.c
@@ -4,7 +4,6 @@
 
 //static Thread	*runthread(Proc*);
 
-#if 0
 static char *_psstate[] = {
 	"Dead",
 	"Running",
@@ -19,7 +18,6 @@
 		return "unknown";
 	return _psstate[s];
 }
-#endif
 
 void
 _schedinit(void *arg)
@@ -271,3 +269,15 @@
 	_sched();
 }
 
+void
+threadstatus(void)
+{
+	Proc *p;
+	Thread *t;
+
+	p = _threadgetproc();
+	for(t=p->threads.head; t; t=t->nextt)
+		fprint(2, "[%3d] %s userpc=%lux\n",
+			t->id, psstate(t->state), t->userpc);
+}
+	
diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h
index 590342a..e2e92a1 100644
--- a/src/libthread/threadimpl.h
+++ b/src/libthread/threadimpl.h
@@ -96,6 +96,7 @@
 
 	Chanstate	chan;		/* which channel operation is current */
 	Alt		*alt;			/* pointer to current alt structure (debugging) */
+	ulong		userpc;
 
 	void*	udata[NPRIV];	/* User per-thread data pointer */
 };
