diff --git a/xtrn/ecreader/ecReader.js b/xtrn/ecreader/ecReader.js
index cebec4947c6d72e630756df1295c8ecf4f0014aa..ccc5e0b342ab88e594026e0277c6ce30542f1c09 100644
--- a/xtrn/ecreader/ecReader.js
+++ b/xtrn/ecreader/ecReader.js
@@ -234,9 +234,9 @@ function showMessage(header) {
 				if(!mail)
 					bbs.post_msg(mb.cfg.code, WM_QUOTE, header);
 				else if(mail && header.from_net_type == NET_NONE)
-					bbs.email(parseInt(header.from_ext), WM_EMAIL|WM_QUOTE, "", "RE: " + header.subject);
+					bbs.email(parseInt(header.from_ext), WM_EMAIL|WM_QUOTE, "", header.subject);
 				else if(mail)
-					bbs.netmail(header.from_net_addr, WM_NETMAIL|WM_QUOTE, "RE: " + header.subject);
+					bbs.netmail(header.from_net_addr, WM_NETMAIL|WM_QUOTE, header.subject);
 				frame.draw();
 				retval = header;
 				userInput = "Q";
@@ -293,6 +293,11 @@ function showMessage(header) {
 				else
 					bodyFrame.scroll(0, bodyFrame.height);
 				break;
+			case KEY_DEL:
+				deleteMessage(header);
+				userInput = "Q";
+				retval = "REFRESH";
+				break;
 			default:
 				break;
 		}
@@ -307,6 +312,43 @@ function showMessage(header) {
 	return retval;
 }
 
+function deleteMessage(header) {
+	if(!mail && user.number == 1) {
+		msgBase.open();
+		msgBase.remove_msg(header.number);
+		msgBase.close();
+	} else if(mail) {
+		/*	Could verify again that mail is addressed to this user, but
+			they shouldn't have been able to select it otherwise. */
+		var mailBase = new MsgBase("mail");
+		mailBase.open();
+		mailBase.remove_msg(header.number);
+		mailBase.close();
+	} else {
+		return false;
+	}
+	return true;
+}
+
+function sendEmail() {
+	var ret = true;
+	console.putmsg(hfg + "Send email to: ");
+	var to = console.getstr('', 64, K_LINE);
+	if(to == "")
+		ret = false;
+	else if(system.matchuser(to) > 0)
+		bbs.email(system.matchuser(to, WM_EMAIL));
+	else if(netaddr_type(to) != NET_NONE)
+		bbs.netmail(to, WM_NETMAIL)
+	else
+		ret = false;
+	if(!ret) {
+		console.putmsg(hfg + "Invalid user or netmail/email address.");
+		console.crlf();
+		console.pause();
+	}
+}
+
 getList();
 var userInput = "";
 var r = "";
@@ -333,17 +375,31 @@ while(userInput != "Q") {
 		case "P":
 			frame.invalidate();
 			console.clear();
-			bbs.post_msg(msgBase.cfg.code);
+			if(!mail)
+				bbs.post_msg(msgBase.cfg.code);
+			else
+				sendEmail();
 			getList();
 			frame.draw();
+			break;
 		case "E":
 			mail = true;
 			getList();
 			break;
 		case KEY_DEL:
+			if(!(tree.currentItem instanceof Tree)) {
+				if(deleteMessage(tree.currentItem.args[0])) {
+					tree.currentTree.deleteItem();
+					getList();
+				}
+			}
 			break;
 		default:
+			if(tree.current === undefined)
+				break;
 			r = tree.getcmd(userInput);
+			if(r == "REFRESH")
+				getList();
 			while(r.hasOwnProperty("number")) {
 				frame.cycle();
 				if(r.hasOwnProperty('mail') && r.mail)