diff --git a/web/root/ecwebv3/lib/client.js b/web/root/ecwebv3/lib/client.js
index b57b08c950a2f1e75224f80a70307d541c3a7135..0c1cb996e2891244506053275e01fd5b16704ee6 100644
--- a/web/root/ecwebv3/lib/client.js
+++ b/web/root/ecwebv3/lib/client.js
@@ -154,7 +154,7 @@ function addReply(url, sub, thread, number) {
 	out += "<input type='hidden' name='postmessage' value='true' />";
 	out += "<input type='hidden' name='sub' value='" + sub + "' />";
 	out += "<input type='hidden' name='irt' value='" + number + "' />";
-	out += "To:<br /><input class='border' type='text' name='to' value='" + response.header.from + "' /><br />";
+	out += "To:<br /><input class='border' type='text' name='to' value='" + response.header.from + "'" + ((sub == "mail")?" readonly":"") + " /><br />";
 	out += "From:<br />";
 	out += "<select name='from'>";
 	out += "<option value='" + response.user.alias + "'>" + response.user.alias + "</option>";
@@ -180,7 +180,7 @@ function addPost(url, sub, alias, name, sig) {
 	out += "<input type='hidden' name='postmessage' value='true' />";
 	out += "<input type='hidden' name='sub' value='" + sub + "' />";
 	out += "<input type='hidden' name='irt' value='0' />";
-	out += "To:<br /><input class='border' type='text' name='to' value='All' /><br />";
+	out += "To:<br /><input class='border' type='text' name='to' value='" + ((sub == "mail")?"":"All") + "' /><br />";
 	out += "From:<br />";
 	out += "<select name='from'>";
 	out += "<option value='" + alias + "'>" + alias + "</option>";
diff --git a/web/root/ecwebv3/pages/002-forum.ssjs b/web/root/ecwebv3/pages/002-forum.ssjs
index 2923d25725553fd5527fd1eed378b436b73c0e54..2767d7e69f3379dc43009afc0ba1aad80250543a 100644
--- a/web/root/ecwebv3/pages/002-forum.ssjs
+++ b/web/root/ecwebv3/pages/002-forum.ssjs
@@ -15,7 +15,7 @@ if(http_request.query.hasOwnProperty('board')) {
 	print("</script>");
 }
 
-if(http_request.query.hasOwnProperty('sub')) {
+if(http_request.query.hasOwnProperty('sub') && http_request.query.sub != 'mail') {
 	print("<script type='text/javascript'>");
 	print("loadThreads('http://" + system.inet_addr + ":" + webIni.HTTPPort + "/forum-async.ssjs', '" + http_request.query.sub + "', " + ((http_request.query.hasOwnProperty('thread'))?false:true) + ");");
 	if(http_request.query.hasOwnProperty('thread'))
diff --git a/web/root/ecwebv3/pages/999-email.ssjs b/web/root/ecwebv3/pages/999-email.ssjs
new file mode 100644
index 0000000000000000000000000000000000000000..580965a1f91936c66401a8383be9aedabc010b24
--- /dev/null
+++ b/web/root/ecwebv3/pages/999-email.ssjs
@@ -0,0 +1,26 @@
+//HIDDEN
+// Private email page for ecwebv3
+// echicken -at- bbs.electronicchicken.com
+
+load('webInit.ssjs');
+load("../web/lib/forum.ssjs");
+
+if(user.alias != webIni.WebGuest) {
+
+	print("<span class='title'>Email</span><br /><br />");
+	print("<div class='border box msg'>");
+	print(format(	"<a class='ulLink' onclick='addPost(\"http://%s:%s/%s/forum-async.ssjs\", \"%s\", \"%s\", \"%s\", \"%s\")'>Compose a new email</a>",
+					system.inet_addr, webIni.HTTPPort, webIni.appendURL, "mail", user.alias, user.name, ""
+		)
+	);
+	print("<div id='sub-mail-newMsgBox'></div>");
+	print("</div>");
+	print("<div id='sub-mail' style='display:none;'></div>");
+	print("<div id='sub-mail-info' class='border box msg' style='display:none;'></div>");
+	print("<script type='text/javascript'>");
+	print("loadThreads('http://" + system.inet_addr + ":" + webIni.HTTPPort + "/forum-async.ssjs', 'mail', " + ((http_request.query.hasOwnProperty('thread'))?false:true) + ");");
+	if(http_request.query.hasOwnProperty('thread'))
+		print("loadThread('http://" + system.inet_addr + ":" + webIni.HTTPPort + "/forum-async.ssjs', 'mail', '" + http_request.query.thread + "', " + false + ");");
+	print("</script>");
+
+}
\ No newline at end of file