diff --git a/src/libventi/cache.c b/src/libventi/cache.c
index e8241aa..09ca5ea 100644
--- a/src/libventi/cache.c
+++ b/src/libventi/cache.c
@@ -429,7 +429,6 @@
 	vtzeroextend(type, b->data, n, c->blocksize);
 	b->iostate = BioVenti;
 	b->nlock = 1;
-	b->decrypted = 0;
 	return b;
 }
 
diff --git a/src/libventi/client.c b/src/libventi/client.c
index ddee7cc..bb102c9 100644
--- a/src/libventi/client.c
+++ b/src/libventi/client.c
@@ -22,16 +22,16 @@
 	}
 	if(chattyventi)
 		fprint(2, "%s <- %F\n", argv0, in);
-	if(in->type == VtRerror){
+	if(in->msgtype == VtRerror){
 		werrstr(in->error);
 		vtfcallclear(in);
 		packetfree(p);
 		return -1;
 	}
-	if(in->type != ou->type+1){
+	if(in->msgtype != ou->msgtype+1){
 		werrstr("type mismatch: sent %c%d got %c%d",
-			"TR"[ou->type&1], ou->type>>1,
-			"TR"[in->type&1], in->type>>1);
+			"TR"[ou->msgtype&1], ou->msgtype>>1,
+			"TR"[in->msgtype&1], in->msgtype>>1);
 		vtfcallclear(in);
 		packetfree(p);
 		return -1;
@@ -46,7 +46,7 @@
 	VtFcall tx, rx;
 
 	memset(&tx, 0, sizeof tx);
-	tx.type = VtThello;
+	tx.msgtype = VtThello;
 	tx.version = z->version;
 	tx.uid = z->uid;
 	if(tx.uid == nil)
@@ -68,8 +68,8 @@
 		return packetalloc();
 
 	memset(&tx, 0, sizeof tx);
-	tx.type = VtTread;
-	tx.dtype = type;
+	tx.msgtype = VtTread;
+	tx.blocktype = type;
 	tx.count = n;
 	memmove(tx.score, score, VtScoreSize);
 	if(vtfcallrpc(z, &tx, &rx) < 0)
@@ -114,8 +114,8 @@
 		memmove(score, vtzeroscore, VtScoreSize);
 		return 0;
 	}
-	tx.type = VtTwrite;
-	tx.dtype = type;
+	tx.msgtype = VtTwrite;
+	tx.blocktype = type;
 	tx.data = p;
 	if(ventidoublechecksha1)
 		packetsha1(p, score);
@@ -148,7 +148,7 @@
 {
 	VtFcall tx, rx;
 
-	tx.type = VtTsync;
+	tx.msgtype = VtTsync;
 	return vtfcallrpc(z, &tx, &rx);
 }
 
@@ -157,7 +157,7 @@
 {
 	VtFcall tx, rx;
 
-	tx.type = VtTping;
+	tx.msgtype = VtTping;
 	return vtfcallrpc(z, &tx, &rx);
 }
 
diff --git a/src/libventi/fcall.c b/src/libventi/fcall.c
index 9e2fefa..9f721b4 100644
--- a/src/libventi/fcall.c
+++ b/src/libventi/fcall.c
@@ -10,13 +10,13 @@
 
 	p = packetalloc();
 
-	buf[0] = f->type;
+	buf[0] = f->msgtype;
 	buf[1] = f->tag;
 	packetappend(p, buf, 2);
 
-	switch(f->type){
+	switch(f->msgtype){
 	default:
-		werrstr("vtfcallpack: unknown packet type %d", f->type);
+		werrstr("vtfcallpack: unknown packet type %d", f->msgtype);
 		goto Err;
 
 	case VtRerror:
@@ -56,7 +56,7 @@
 
 	case VtTread:
 		packetappend(p, f->score, VtScoreSize);
-		buf[0] = vttodisktype(f->dtype);
+		buf[0] = vttodisktype(f->blocktype);
 		if(~buf[0] == 0)
 			goto Err;
 		buf[1] = 0;
@@ -70,7 +70,7 @@
 		break;
 
 	case VtTwrite:
-		buf[0] = vttodisktype(f->dtype);
+		buf[0] = vttodisktype(f->blocktype);
 		if(~buf[0] == 0)
 			goto Err;
 		buf[1] = 0;
@@ -108,12 +108,12 @@
 	if(packetconsume(p, buf, 2) < 0)
 		return -1;
 
-	f->type = buf[0];
+	f->msgtype = buf[0];
 	f->tag = buf[1];
 
-	switch(f->type){
+	switch(f->msgtype){
 	default:
-		werrstr("vtfcallunpack: unknown bad packet type %d", f->type);
+		werrstr("vtfcallunpack: unknown bad packet type %d", f->msgtype);
 		vtfcallclear(f);
 		return -1;
 
@@ -165,8 +165,8 @@
 		if(packetconsume(p, f->score, VtScoreSize) < 0
 		|| packetconsume(p, buf, 4) < 0)
 			goto Err;
-		f->dtype = vtfromdisktype(buf[0]);
-		if(~f->dtype == 0)
+		f->blocktype = vtfromdisktype(buf[0]);
+		if(~f->blocktype == 0)
 			goto Err;
 		f->count = (buf[2] << 8) | buf[3];
 		break;
@@ -179,8 +179,8 @@
 	case VtTwrite:
 		if(packetconsume(p, buf, 4) < 0)
 			goto Err;
-		f->dtype = vtfromdisktype(buf[0]);
-		if(~f->dtype == 0)
+		f->blocktype = vtfromdisktype(buf[0]);
+		if(~f->blocktype == 0)
 			goto Err;
 		f->data = packetalloc();
 		packetconcat(f->data, p);
diff --git a/src/libventi/fcallfmt.c b/src/libventi/fcallfmt.c
index 23e13ef..9b493f9 100644
--- a/src/libventi/fcallfmt.c
+++ b/src/libventi/fcallfmt.c
@@ -12,9 +12,9 @@
 		fmtprint(f, "<nil fcall>");
 		return 0;
 	}
-	switch(t->type){
+	switch(t->msgtype){
 	default:
-		return fmtprint(f, "%c%d tag %ud", "TR"[t->type&1], t->type>>1, t->tag);
+		return fmtprint(f, "%c%d tag %ud", "TR"[t->msgtype&1], t->msgtype>>1, t->tag);
 	case VtRerror:
 		return fmtprint(f, "Rerror tag %ud error %s", t->tag, t->error);
 	case VtTping:
@@ -40,11 +40,11 @@
 	case VtRauth1:
 		return fmtprint(f, "Rauth1 tag %ud auth %.*H", t->tag, t->nauth, t->auth);
 	case VtTread:
-		return fmtprint(f, "Tread tag %ud score %V dtype %d count %d", t->tag, t->score, t->dtype, t->count);
+		return fmtprint(f, "Tread tag %ud score %V blocktype %d count %d", t->tag, t->score, t->blocktype, t->count);
 	case VtRread:
 		return fmtprint(f, "Rread tag %ud count %d", t->tag, packetsize(t->data));
 	case VtTwrite:
-		return fmtprint(f, "Twrite tag %ud dtype %d count %d", t->tag, t->dtype, packetsize(t->data));
+		return fmtprint(f, "Twrite tag %ud blocktype %d count %d", t->tag, t->blocktype, packetsize(t->data));
 	case VtRwrite:
 		return fmtprint(f, "Rwrite tag %ud score %V", t->tag, t->score);
 	case VtTsync:
diff --git a/src/libventi/server.c b/src/libventi/server.c
index ddaa97f..1fb3c14 100644
--- a/src/libventi/server.c
+++ b/src/libventi/server.c
@@ -151,7 +151,7 @@
 		if(chattyventi)
 			fprint(2, "%s <- %F\n", argv0, &r->tx);
 		packetfree(p);
-		if(r->tx.type == VtTgoodbye)
+		if(r->tx.msgtype == VtTgoodbye)
 			break;
 		r->rx.tag = r->tx.tag;
 		r->sc = sc;
@@ -195,7 +195,7 @@
 	sc = r->sc;
 	if(r->rx.tag != r->tx.tag)
 		abort();
-	if(r->rx.type != r->tx.type+1 && r->rx.type != VtRerror)
+	if(r->rx.msgtype != r->tx.msgtype+1 && r->rx.msgtype != VtRerror)
 		abort();
 	if(chattyventi)
 		fprint(2, "%s -> %F\n", argv0, &r->rx);
diff --git a/src/libventi/srvhello.c b/src/libventi/srvhello.c
index 0af5a32..ca34221 100644
--- a/src/libventi/srvhello.c
+++ b/src/libventi/srvhello.c
@@ -17,9 +17,9 @@
 	}
 	packetfree(p);
 
-	if(tx.type != VtThello){
+	if(tx.msgtype != VtThello){
 		vtfcallclear(&tx);
-		werrstr("bad packet type %d; want Thello %d", tx.type, VtThello);
+		werrstr("bad packet type %d; want Thello %d", tx.msgtype, VtThello);
 		return -1;
 	}
 	if(tx.tag != 0){
@@ -38,7 +38,7 @@
 	vtfcallclear(&tx);
 
 	memset(&rx, 0, sizeof rx);
-	rx.type = VtRhello;
+	rx.msgtype = VtRhello;
 	rx.tag = tx.tag;
 	rx.sid = "anonymous";
 	if((p = vtfcallpack(&rx)) == nil)
