diff --git a/web/root/ecWeb/lib/forumLib.ssjs b/web/root/ecWeb/lib/forumLib.ssjs
index b53f6ce9bc612fce149f734d84a124e9b5a7013b..cfd47631bddd2b4f6d1447f83ca1a2732e234b9e 100644
--- a/web/root/ecWeb/lib/forumLib.ssjs
+++ b/web/root/ecWeb/lib/forumLib.ssjs
@@ -44,6 +44,10 @@ function linkify(body) {
 	return(body);
 }
 
+function clean_subject(subject) {
+	return html_encode(subject, true, true, false, false);
+}
+
 function webify(body) {
 	var ret='';
 
@@ -151,7 +155,7 @@ function webify(body) {
 
 	body=linkify(body);
 	body=body.replace(/\r\n$/,'');
-	body=body.replace(/(\r?\n)/g, "<br />");
+	body=body.replace(/(\r?\n)/g, "<br>");
 	body=body.replace(/'/g,'&rsquo;');
 	return body;
 }
@@ -161,10 +165,10 @@ function printBoards() {
 
 	for(mg in msg_area.grp_list) {
 		print("<div class='standardBorder standardPadding underMargin subBoardHeaderColor'>");
-		print("<div class='headingFont'><a class=ulLink href='javascript:toggleVisibility(\"grp" + msg_area.grp_list[mg].number + "\")'>" + msg_area.grp_list[mg].name + "</a></div>");
+		print("<div class='headingFont'><a class=ulLink href='javascript:toggleVisibility(\"grp" + msg_area.grp_list[mg].number + "\")'>" + clean_subject(msg_area.grp_list[mg].name) + "</a></div>");
 		print("<div id=stats" + msg_area.grp_list[mg].number + "></div>");
 		print("</div>");
-		print("<div id=grp" + msg_area.grp_list[mg].number + " style=display:none;>");
+		print("<div id=grp" + msg_area.grp_list[mg].number + " style=display:none>");
 		var a = 0;
 		var b = 0;
 		for(sb in msg_area.grp_list[mg].sub_list) {
@@ -173,18 +177,18 @@ function printBoards() {
 			msgBase.open();
 			b = b + msgBase.total_msgs;
 			print("<div class='standardBorder standardPadding underMargin treeIndent messageBoxColor'>");
-			print("<a class=ulLink href=./pages.ssjs?page=" + webIni.forumPage + "&action=viewSubBoard&subBoard=" + msg_area.grp_list[mg].sub_list[sb].code + ">" + msg_area.grp_list[mg].sub_list[sb].name + "</a><br />");
+			print('<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + "&amp;action=viewSubBoard&amp;subBoard=" + clean_subject(msg_area.grp_list[mg].sub_list[sb].code) + '">' + clean_subject(msg_area.grp_list[mg].sub_list[sb].name) + "</a><br>");
 			print(msgBase.total_msgs + " messages");
 			if(msgBase.last_msg > 0) {
 				var header = msgBase.get_msg_header(msgBase.last_msg);
 				if(!header) continue;
-				print("<br />Latest: " + header.subject + ", by: " + header.from + " on " + system.timestr(header.when_written_time));
+				print("<br>Latest: " + clean_subject(header.subject) + ", by: " + clean_subject(header.from) + " on " + system.timestr(header.when_written_time));
 			}
 			print("</div>");
 			msgBase.close();
 		}
 		print("</div>");
-		print("<script language=javascript type=text/javascript>document.getElementById('stats" + msg_area.grp_list[mg].number + "').innerHTML = '" + msg_area.grp_list[mg].description + "<br />" + b + " messages in " + a + " sub-boards';</script>");
+		print("<script type='text/javascript'>document.getElementById('stats" + msg_area.grp_list[mg].number + "').innerHTML = '" + clean_subject(msg_area.grp_list[mg].description) + "<br>" + b + " messages in " + a + " sub-boards';</script>");
 	}
 }
 
@@ -201,7 +205,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 
 	var msgBase = new MsgBase(subBoardCode);
 	if(!msgBase.open() || msgBase.last_msg < 1) {
-		if(!newOnly) print("<br />There are no messages to show in this sub-board.");
+		if(!newOnly) print("<br>There are no messages to show in this sub-board.");
 		return;
 	}
 	var msgBase_last_msg=msgBase.last_msg;
@@ -212,7 +216,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 	}
 	if(subBoardCode != 'mail' && !user.compare_ars(msgBase.cfg.ars)) return; // 'mail' does not have a .cfg.
 	var header, body, msg, mm = msgBase.first_msg, reply = '', messageThreads = new Object(), threadedMessages = new Object();
-	print('<div id=' + subBoardCode + '-headerBox class="subBoardHeaderColor standardBorder standardMargin standardPadding headingFont">');
+	print('<div id=' + clean_subject(subBoardCode) + '-headerBox class="subBoardHeaderColor standardBorder standardMargin standardPadding headingFont">');
 
 	if(subBoardCode == 'mail') {
 		print('Private Mail');
@@ -223,38 +227,38 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 	print('</div>');
 
 	if(newOnly) {
-		print('<script language=javascript type=text/javascript>');
+		print('<script type="text/javascript">');
 		print('document.getElementById("' + subBoardCode + '-headerBox").onclick = function() { toggleVisibility("subBoardContainer-' + subBoardCode + '"); updatePointer("' + subBoardCode + '", "' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs", "' + mg + '", "' + sb + '"); };');
 		print('</script>');
-		print('<div id=subBoardContainer-' + subBoardCode + ' style=display:none;>');
+		print('<div id=subBoardContainer-' + clean_subject(subBoardCode) + ' style=display:none>');
 	}
 
 	if(subBoardCode == 'mail' || user.compare_ars(msgBase.cfg.post_ars)) {
 		print('<div class="messageBoxColor standardBorder standardMargin standardPadding treeIndent">');
 
 		if(webIni.maxMessages > 0 && !http_request.query.hasOwnProperty('showAll')) {
-			print('Recent messages (<a class=ulLink href=' + eval(webIni.webUrl) + 'pages.ssjs?page=' + webIni.forumPage +'&action=viewSubBoard&subBoard=' + subBoardCode + '&showAll=true>Show all</a>)');
+			print('Recent messages (<a class=ulLink href=' + eval(webIni.webUrl) + 'pages.ssjs?page=' + webIni.forumPage +'&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;showAll=true>Show all</a>)');
 		} else {
 			print('All messages');
 			webIni.maxMessages = 0;
 		}
 
-		print(' - <a class=ulLink onclick=toggleVisibility(\'newMessage-' + subBoardCode + '\')>Post a new message</a><br />');
-		print('<div style=display:none; id=newMessage-' + subBoardCode + '>');
-		print('<br /><form id=newMessageForm-' + subBoardCode + ' action=none method=post>');
-		print('To:<br /><input type=text name=to size=50 value="All" onkeypress=noReturn(event) /><br /><br />');
-		print('From:<br /><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br /><br />');
-		print('Subject:<br /><input type=text size=50 name=subject onkeypress=noReturn(event) /><br /><br />');
-		print('<textarea class="standardBorder" name=body cols=80 rows=20>' + sig + '</textarea><br />');
-		print('<input type=button value=Submit onclick=submitForm("newMessageForm-' + subBoardCode + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","newMessageForm-' + subBoardCode + '") />');
-		print('<input type=hidden name=subBoard value=' + subBoardCode + ' />');
-		print('<input type=hidden name=irtMessage value=none />');
+		print(' - <a class=ulLink onclick=toggleVisibility(\'newMessage-' + clean_subject(subBoardCode) + '\')>Post a new message</a><br>');
+		print('<div style=display:none; id=newMessage-' + clean_subject(subBoardCode) + '>');
+		print('<br><form id=newMessageForm-' + clean_subject(subBoardCode) + ' action=none method=post>');
+		print('To:<br><input type=text name=to size=50 value="All" onkeypress=noReturn(event)><br><br>');
+		print('From:<br><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br><br>');
+		print('Subject:<br><input type=text size=50 name=subject onkeypress=noReturn(event)><br><br>');
+		print('<textarea class="standardBorder" name=body cols=80 rows=20>' + sig + '</textarea><br>');
+		print('<input type=button value=Submit onclick=submitForm("newMessageForm-' + clean_subject(subBoardCode) + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","newMessageForm-' + clean_subject(subBoardCode) + '")>');
+		print('<input type=hidden name=subBoard value=' + clean_subject(subBoardCode) + '>');
+		print('<input type=hidden name=irtMessage value=none>');
 		print('</form></div></div>');
 	}
 
 	if(webIni.maxMessages > 0 && (msgBase_last_msg - webIni.maxMessages) > 0) mm = msgBase_last_msg - webIni.maxMessages;
 
-	print('<script language=javascript type=text/javascript>');
+	print('<script type="text/javascript">');
 	print('function toggle_quote(container) {');
 	print('	for(child in container.childNodes) {');
 	print('		if(container.childNodes[child].nodeName=="BLOCKQUOTE") {');
@@ -306,29 +310,29 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 		/* Set 'msg' to contain a formatted version of the current 
 		   message 'm' which will later be appended to the appropriate
 		   thread (or used to create a new one.) */
-		msg = '<a name=' + header.number + '></a>';
-		msg += '<div id=' + subBoardCode + header.number + ' class="messageBoxColor standardBorder standardPadding underMargin subTreeIndent messageFont">';
-		msg += 'From <b>' + header.from + '</b> to <b>' + header.to + '</b> on <b>' + system.timestr(header.when_written_time) + '</b>';
-		msg += '<br /><br />' + webify(body) + '<br />';
+		msg = '<a name=' + header.number + '><\\/a>';
+		msg += '<div id=' + clean_subject(subBoardCode) + header.number + ' class="messageBoxColor standardBorder standardPadding underMargin subTreeIndent messageFont">';
+		msg += 'From <b>' + header.from + '<\\/b> to <b>' + header.to + '<\\/b> on <b>' + system.timestr(header.when_written_time) + '<\\/b>';
+		msg += '<br><br>' + webify(body).replace(/<\//g,'<\\\/') + '<br>';
 
 		if(subBoardCode == 'mail' || canPost) {
-			msg += '<a class=ulLink onclick=toggleVisibility("' + subBoardCode + '-reply-' + header.number + '")>Reply</a> - ';
+			msg += '<a class=ulLink onclick=toggleVisibility("' + clean_subject(subBoardCode) + '-reply-' + header.number + '")>Reply<\\/a> - ';
 			/* Set 'reply' to contain a (non-submittable) reply form, which
 			   will be appended to 'msg' (above) further along. The submit
 			   button of this form is just a regular button that triggers
 			   the submitForm() function from lib/clientLib.js which sends
 			   the form data to the server via an XMLHttpRequest(). This 
 			   way we don't have to migrate away from the page (bad.) */
-			reply = '<div style=display:none;margin-top:10px; id=' + subBoardCode + '-reply-' + header.number + '>';
-			reply += '<form id=' + subBoardCode + '-replyForm-' + header.number + ' action=none method=post>';
-			reply += 'To:<br /><input type=text name=to size=50 value="' + header.from + '" onkeypress=noReturn(event) /><br /><br />';
-			reply += 'From:<br /><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br /><br />';
-			reply += '<textarea class="standardBorder" name=body cols=80 rows=20>' + quote_msg(body, line_length=79, prefix="> ").replace(/\n|\r\n/g, "&#13;&#10;").replace(/'/g, '&rsquo;') + '&#13;&#10;' + sig + '</textarea><br />';
-			reply += '<input type=button value=Submit onclick=submitForm("' + subBoardCode + '-replyForm-' + header.number + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","' + subBoardCode + '-reply-' + header.number + '") />';
-			reply += '<input type=hidden name=subject value="' + header.subject + '" />';
-			reply += '<input type=hidden name=subBoard value=' + subBoardCode + ' />';
-			reply += '<input type=hidden name=irtMessage value=' + header.number + ' />';
-			reply += '</form><br /></div>';
+			reply = '<div style=display:none;margin-top:10px; id=' + clean_subject(subBoardCode) + '-reply-' + header.number + '>';
+			reply += '<form id=' + clean_subject(subBoardCode) + '-replyForm-' + header.number + ' action=none method=post>';
+			reply += 'To:<br><input type=text name=to size=50 value="' + header.from + '" onkeypress=noReturn(event)><br><br>';
+			reply += 'From:<br><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br><br>';
+			reply += '<textarea class="standardBorder" name=body cols=80 rows=20>' + quote_msg(body, line_length=79, prefix="> ").replace(/\n|\r\n/g, "&#13;&#10;").replace(/'/g, '&rsquo;') + '&#13;&#10;' + sig + '</textarea><br>';
+			reply += '<input type=button value=Submit onclick=submitForm("' + clean_subject(subBoardCode) + '-replyForm-' + header.number + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","' + clean_subject(subBoardCode) + '-reply-' + header.number + '")>';
+			reply += '<input type=hidden name=subject value="' + clean_subject(header.subject) + '">';
+			reply += '<input type=hidden name=subBoard value=' + clean_subject(subBoardCode) + '>';
+			reply += '<input type=hidden name=irtMessage value=' + header.number + '>';
+			reply += '</form><br></div>';
 		}
 
 		if(header.thread_back > 0 && threadedMessages.hasOwnProperty(header.thread_back) && messageThreads.hasOwnProperty(threadedMessages[header.thread_back])) {
@@ -338,10 +342,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 			messageThreads[threadedMessages[header.thread_back]]['replies']++;
 			messageThreads[threadedMessages[header.thread_back]]['latestAuthor'] = header.from;
 			messageThreads[threadedMessages[header.thread_back]]['latestNumber'] = header.number;
-			msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '>Thread URL</a>';
-			msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '#' + header.number + '>Message URL</a>';
-			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_back]]["number"]+ '")>Collapse Thread</a><br />' + reply + '</div>';
-			print("<script language=javascript type=text/javascript>");
+			msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '">Thread URL<\\/a>';
+			msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '#' + header.number + '">Message URL<\\/a>';
+			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_back]]["number"]+ '")>Collapse Thread<\\/a><br>' + reply + '<\\/div>';
+			print("<script type='text/javascript'>");
 			print("threadContainer" + messageThreads[threadedMessages[header.thread_back]]['number'] + ".innerHTML += '" + msg + "';");
 			print("</script>");
 		} else if(header.thread_next > 0 && threadedMessages.hasOwnProperty(header.thread_next) && messageThreads.hasOwnProperty(threadedMessages[header.thread_next])) {
@@ -351,10 +355,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 			messageThreads[threadedMessages[header.thread_next]]['replies']++;
 			messageThreads[threadedMessages[header.thread_next]]['latestAuthor'] = header.from;
 			messageThreads[threadedMessages[header.thread_next]]['latestNumber'] = header.number;
-			msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '>Thread URL</a>';
-			msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '#' + header.number + '>Message URL</a>';
-			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_next]]["number"]+ '")>Collapse Thread</a>' + reply + '</div>';
-			print("<script language=javascript type=text/javascript>");
+			msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '">Thread URL<\\/a>';
+			msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '#' + header.number + '">Message URL<\\/a>';
+			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_next]]["number"]+ '")>Collapse Thread<\\/a>' + reply + '<\\/div>';
+			print("<script type='text/javascript'>");
 			print("threadContainer" + messageThreads[threadedMessages[header.thread_next]]['number'] + ".innerHTML += '" + msg + "';");
 			print("</script>");
 		} else {
@@ -368,10 +372,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 					messageThreads[t]['replies']++;
 					messageThreads[t]['latestAuthor'] = header.from;
 					messageThreads[t]['latestNumber'] = header.number;
-					msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[t]["threadID"] + '>Thread URL</a>';
-					msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[t]["threadID"] + '#' + header.number + '>Message URL</a>';
-					msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[t]["number"]+ '")>Collapse Thread</a>' + reply + '</div>';
-					print("<script language=javascript type=text/javascript>");
+					msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[t]["threadID"] + '">Thread URL<\\/a>';
+					msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + messageThreads[t]["threadID"] + '#' + header.number + '">Message URL<\\/a>';
+					msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[t]["number"]+ '")>Collapse Thread<\\/a>' + reply + '<\\/div>';
+					print("<script type='text/javascript'>");
 					print("threadContainer" + messageThreads[t]['number'] + ".innerHTML += '" + msg + "';");
 					print("</script>");
 					break; // Need not waste time on any more message threads if a match was found.
@@ -385,10 +389,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 			// This message is not associated with any existing threads based on the above criteria - time to create a new one
 			messageThreads[threadNumber] = { 'number' : threadNumber, 'newest' : header.when_written_time, 'subject' : header.subject, 'replies' : 0, 'latestAuthor' : '', 'latestNumber' : header.number, 'threadID' : header.number };
 			threadedMessages[header.number] = threadNumber;
-			print("<script language=javascript type=text/javascript>");
+			print("<script type='text/javascript'>");
 			print("var threadHeader" + threadNumber + " = document.createElement('div');");
 			print("threadHeader" + threadNumber + ".id = 'threadHeader" + threadNumber + "';");
-			print("threadHeader" + threadNumber + ".innerHTML += '<a name=" + header.number + "></a><a class=\"ulLink headingFont\" href=javascript:toggleVisibility(\"threadContainer" + threadNumber + "\")>" + html_encode(header.subject, false, false, false, false).replace(/'/g, "&apos;") + "</a><br />Started by " + header.from + " on " + system.timestr(parseInt(header.when_written_time)) + "';");
+			print("threadHeader" + threadNumber + ".innerHTML += '<a name=" + header.number + "><\\/a><a class=\"ulLink headingFont\" href=javascript:toggleVisibility(\"threadContainer" + threadNumber + "\")>" + clean_subject(header.subject, false, false, false, false).replace(/'/g, "&apos;") + "<\\/a><br>Started by " + header.from + " on " + system.timestr(parseInt(header.when_written_time)) + "';");
 			print("var threadContainer" + threadNumber + " = document.createElement('div');");
 			print("threadContainer" + threadNumber + ".id = 'threadContainer" + threadNumber + "';");
 
@@ -398,9 +402,9 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 				print("threadContainer" + threadNumber + ".style.display = 'none';");
 			}
 
-			msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + header.number + '>Thread URL</a>';
-			msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + header.number + '#' + header.number + '>Message URL</a>';
-			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + threadNumber  + '")>Collapse Thread</a>' + reply + '</div>';
+			msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + header.number + '">Thread URL<\\/a>';
+			msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&amp;action=viewSubBoard&amp;subBoard=' + clean_subject(subBoardCode) + '&amp;thread=' + header.number + '#' + header.number + '">Message URL<\\/a>';
+			msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + threadNumber  + '")>Collapse Thread<\\/a>' + reply + '<\\/div>';
 			print("threadContainer" + threadNumber + ".innerHTML += '" + msg + "';");
 			print("</script>");
 			threadNumber++;
@@ -408,7 +412,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 
 	}
 
-	print("<div id=threadBox-" + subBoardCode + "></div>");
+	print("<div id=threadBox-" + clean_subject(subBoardCode) + "></div>");
 	var newestDates = new Array();
 	for(var t in messageThreads) newestDates.push(messageThreads[t]['newest']);
 	newestDates = newestDates.sort(sortnumber);
@@ -418,13 +422,13 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb)
 		for(var t in messageThreads) {
 			if(messageThreads[t]['newest'] != newestDates[d]) continue;
 			if(newOnly && messageThreads[t]['latestNumber'] <= scanPointer) continue;
-			print("<script language=javascript type=text/javascript>");
+			print("<script type='text/javascript'>");
 			print("threadHeader" + t + ".className += 'messageBoxColor standardBorder standardPadding underMargin treeIndent';");
 
 			if(messageThreads[t]['replies'] != 1) {
-				print("threadHeader" + t + ".innerHTML += '<br />" + messageThreads[t]['replies'] + " replies';");
+				print("threadHeader" + t + ".innerHTML += '<br>" + messageThreads[t]['replies'] + " replies';");
 			} else {
-				print("threadHeader" + t + ".innerHTML += '<br />" + messageThreads[t]['replies'] + " reply';");
+				print("threadHeader" + t + ".innerHTML += '<br>" + messageThreads[t]['replies'] + " reply';");
 			}
 
 			if(messageThreads[t]['replies'] > 0) print("threadHeader" + t + ".innerHTML += ', latest by " + messageThreads[t]['latestAuthor'] + " on " + system.timestr(messageThreads[t]['newest']) + "';");
@@ -462,5 +466,5 @@ function newMessageScan() {
 			}
 		}
 	}
-	if(threadNumber < 1) print("<br />No new messages.");
+	if(threadNumber < 1) print("<br>No new messages.");
 }