more updates
diff --git a/src/cmd/acme/mail/dat.h b/src/cmd/acme/mail/dat.h
index 1b37496..01d685b 100644
--- a/src/cmd/acme/mail/dat.h
+++ b/src/cmd/acme/mail/dat.h
@@ -61,6 +61,7 @@
 	uchar	tagposted;
 	uchar	recursed;
 	uchar	level;
+	uint		replywinid;
 
 	/* header info */
 	char		*from;
diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c
index 55a65b4..0d894d9 100644
--- a/src/cmd/acme/mail/mesg.c
+++ b/src/cmd/acme/mail/mesg.c
@@ -347,6 +347,11 @@
 	free(d);
 	data = emalloc(len+1);
 	len = fsreadn(fid, data, len);
+	if(len <= 0){
+		fsclose(fid);
+		free(data);
+		return nil;
+	}
 	fsclose(fid);
 	if(np != nil)
 		*np = len;
diff --git a/src/cmd/acme/mail/reply.c b/src/cmd/acme/mail/reply.c
index c28e15f..a44441c 100644
--- a/src/cmd/acme/mail/reply.c
+++ b/src/cmd/acme/mail/reply.c
@@ -70,12 +70,25 @@
 void
 mkreply(Message *m, char *label, char *to, Plumbattr *attr, char *quotetext)
 {
+	char buf[100];
+	CFid *fd;
 	Message *r;
 	char *dir, *t;
 	int quotereply;
 	Plumbattr *a;
 
 	quotereply = (label[0] == 'Q');
+	
+	if(quotereply && m && m->replywinid > 0){
+		snprint(buf, sizeof buf, "%d/body", m->replywinid);
+		if((fd = fsopen(acmefs, buf, OWRITE)) != nil){
+			dir = estrstrdup(mbox.name, m->name);
+			quote(m, fd, dir, quotetext);
+			free(dir);
+			return;
+		}
+	}
+	
 	r = emalloc(sizeof(Message));
 	r->isreply = 1;
 	if(m != nil)
@@ -90,6 +103,8 @@
 	r->name = emalloc(strlen(mbox.name)+strlen(label)+10);
 	sprint(r->name, "%s%s%d", mbox.name, label, ++replyid);
 	r->w = newwindow();
+	if(m)
+		m->replywinid = r->w->id;
 	winname(r->w, r->name);
 	ctlprint(r->w->ctl, "cleartag");
 	wintagwrite(r->w, "fmt Look Post Undo", 4+5+5+4);