diff --git a/src/libventi/client.c b/src/libventi/client.c
index c16fe48..b9e866f 100644
--- a/src/libventi/client.c
+++ b/src/libventi/client.c
@@ -2,11 +2,15 @@
 #include <libc.h>
 #include <venti.h>
 
+int ventidoublechecksha1 = 1;
+
 static int
 vtfcallrpc(VtConn *z, VtFcall *ou, VtFcall *in)
 {
 	Packet *p;
 
+	if(chattyventi)
+		fprint(2, "%s -> %F\n", argv0, ou);
 	p = vtfcallpack(ou);
 	if(p == nil)
 		return -1;
@@ -16,6 +20,8 @@
 		packetfree(p);
 		return -1;
 	}
+	if(chattyventi)
+		fprint(2, "%s <- %F\n", argv0, in);
 	if(in->type == VtRerror){
 		werrstr(in->error);
 		vtfcallclear(in);
@@ -70,11 +76,13 @@
 		packetfree(rx.data);
 		return nil;
 	}
-	packetsha1(rx.data, tx.score);
-	if(memcmp(score, tx.score, VtScoreSize) != 0){
-		werrstr("read asked for %V got %V", score, tx.score);
-		packetfree(rx.data);
-		return nil;
+	if(ventidoublechecksha1){
+		packetsha1(rx.data, tx.score);
+		if(memcmp(score, tx.score, VtScoreSize) != 0){
+			werrstr("read asked for %V got %V", score, tx.score);
+			packetfree(rx.data);
+			return nil;
+		}
 	}
 
 	return rx.data;
@@ -102,12 +110,15 @@
 	tx.type = VtTwrite;
 	tx.dtype = type;
 	tx.data = p;
-	packetsha1(p, score);
+	if(ventidoublechecksha1)
+		packetsha1(p, score);
 	if(vtfcallrpc(z, &tx, &rx) < 0)
 		return -1;
-	if(memcmp(score, rx.score, VtScoreSize) != 0){
-		werrstr("sha1 hash mismatch: want %V got %V", score, rx.score);
-		return -1;
+	if(ventidoublechecksha1){
+		if(memcmp(score, rx.score, VtScoreSize) != 0){
+			werrstr("sha1 hash mismatch: want %V got %V", score, rx.score);
+			return -1;
+		}
 	}
 	return 0;
 }
diff --git a/src/libventi/conn.c b/src/libventi/conn.c
index 3fa6fbe..3f41979 100644
--- a/src/libventi/conn.c
+++ b/src/libventi/conn.c
@@ -3,6 +3,8 @@
 #include <venti.h>
 #include "queue.h"
 
+int chattyventi;
+
 VtConn*
 vtconn(int infd, int outfd)
 {
diff --git a/src/libventi/packet.c b/src/libventi/packet.c
index 7ca6be8..a10b7b4 100644
--- a/src/libventi/packet.c
+++ b/src/libventi/packet.c
@@ -113,7 +113,7 @@
 	p->last = nil;
 	p->next = nil;
 
-if(0)fprint(2, "packetalloc %p from %08lux %08lux %08lux\n", p, *((uint*)&p+2), *((uint*)&p+3), *((uint*)&p+4));
+//if(0)fprint(2, "packetalloc %p from %08lux %08lux %08lux\n", p, *((uint*)&p+2), *((uint*)&p+3), *((uint*)&p+4));
 
 	return p;
 }
@@ -196,6 +196,7 @@
 	Packet *pp;
 	Frag *f, *ff;
 
+	if(0) fprint(2, "packetsplit %p %d\n", p, n);
 	NOTFREE(p);
 	if(n < 0 || n > p->size) {
 		werrstr(EPacketSize);
@@ -235,6 +236,7 @@
 int
 packetconsume(Packet *p, uchar *buf, int n)
 {
+	if(0) fprint(2, "packetconsume %p %d\n", p, n);
 	NOTFREE(p);
 	if(buf && packetcopy(p, buf, 0, n) < 0)
 		return -1;
@@ -246,6 +248,7 @@
 {
 	Frag *f, *ff;
 
+	if(0) fprint(2, "packettrim %p %d %d\n", p, offset, n);
 	NOTFREE(p);
 	if(offset < 0 || offset > p->size) {
 		werrstr(EPacketOffset);
@@ -341,6 +344,7 @@
 	Mem *m;
 	Frag *f;
 
+	if(0) fprint(2, "packettrailer %p %d\n", p, n);
 	NOTFREE(p);
 	if(n <= 0 || n > MaxFragSize) {
 		werrstr(EPacketSize);
@@ -603,7 +607,7 @@
 packetsize(Packet *p)
 {
 	NOTFREE(p);
-	if(0) {
+	if(1) {
 		Frag *f;
 		int size = 0;
 	
diff --git a/src/libventi/rpc.c b/src/libventi/rpc.c
index c6119e4..a391453 100644
--- a/src/libventi/rpc.c
+++ b/src/libventi/rpc.c
@@ -3,6 +3,9 @@
  * could turn this into a generic library routine rather
  * than keep it Venti specific.  A user-level 9P client
  * could use something like this too.
+ * 
+ * (Actually it does - this should be replaced with libmux,
+ * which should be renamed librpcmux.)
  *
  * This is a little more complicated than it might be
  * because we want it to work well within and without libthread.
diff --git a/src/libventi/send.c b/src/libventi/send.c
index a72a6c2..fd6fa57 100644
--- a/src/libventi/send.c
+++ b/src/libventi/send.c
@@ -59,7 +59,9 @@
 	while(size < 2) {
 		b = packettrailer(p, MaxFragSize);
 		assert(b != nil);
+		if(0) fprint(2, "%d read hdr\n", getpid());
 		n = read(z->infd, b, MaxFragSize);
+		if(0) fprint(2, "%d got %d (%r)\n", getpid(), n);
 		if(n <= 0)
 			goto Err;
 		size += n;
@@ -72,13 +74,18 @@
 	size -= 2;
 
 	while(size < len) {
-		n = len - size;
-		if(n > MaxFragSize)
+	//	n = len - size;
+	//	if(n > MaxFragSize)
 			n = MaxFragSize;
 		b = packettrailer(p, n);
-		if(readn(z->infd, b, n) != n)
+		if(0) fprint(2, "%d read body %d\n", getpid(), n);
+		n = read(z->infd, b, n);
+		if(0) fprint(2, "%d got %d (%r)\n", getpid(), n);
+		if(n > 0)
+			size += n;
+		packettrim(p, 0, size);
+		if(n <= 0)
 			goto Err;
-		size += n;
 	}
 	p = packetsplit(p, len);
 	return p;
diff --git a/src/libventi/server.c b/src/libventi/server.c
index 837cbf4..8aa9579 100644
--- a/src/libventi/server.c
+++ b/src/libventi/server.c
@@ -102,7 +102,12 @@
 	Packet *p;
 	VtReq *r;
 	int fd;
+static int first=1;
 
+if(first){
+	first=0;
+	fmtinstall('F', vtfcallfmt);
+}
 	r = nil;
 	sc = v;
 	sc->c = nil;
@@ -139,6 +144,8 @@
 			fprint(2, "bad packet on %s: %r\n", sc->dir);
 			continue;
 		}
+		if(chattyventi)
+			fprint(2, "%s <- %F\n", argv0, &r->tx);
 		packetfree(p);
 		if(r->tx.type == VtTgoodbye)
 			break;
@@ -182,6 +189,8 @@
 		abort();
 	if(r->rx.type != r->tx.type+1 && r->rx.type != VtRerror)
 		abort();
+	if(chattyventi)
+		fprint(2, "%s -> %F\n", argv0, &r->rx);
 	if((p = vtfcallpack(&r->rx)) == nil){
 		fprint(2, "fcallpack on %s: %r\n", sc->dir);
 		packetfree(p);
