diff --git a/exec/load/ircd/server.js b/exec/load/ircd/server.js
index 55a9082df019f1bfab1f17296879d38737805a9d..f0807ee7ccdda869845b0bcd29b2b9460c0c9abf 100644
--- a/exec/load/ircd/server.js
+++ b/exec/load/ircd/server.js
@@ -426,7 +426,7 @@ function Server_Work(cmdline) {
 			));
 			break;
 		}
-		if (parseInt(p[0]) == j)
+		if (parseInt(p[0]) == p[0])
 			p.shift();
 		if (p[0][0] == "#") {
 			/* Setting a channel mode */
@@ -439,13 +439,18 @@ function Server_Work(cmdline) {
 				));
 				break;
 			}
-			if (!j)
-				j = tmp.created;
 			p.shift();
 			origin.set_chanmode(tmp,p);
 			break;
 		}
 		/* Setting a user mode */
+		if (typeof origin.setusermode !== 'function') {
+			umode_notice(USERMODE_OPER,"Notice",format(
+				"Server %s sent non-channel MODE from invalid origin.",
+				this.nick
+			));
+			break;
+		}
 		tmp = origin.setusermode(p[1]);
 		if (tmp) {
 			this.bcast_to_servers_raw(format(
@@ -1475,6 +1480,17 @@ function IRCClient_server_chan_info(sni_chan) {
 	var modecounter=0;
 	var modestr="+";
 	var modeargs="";
+	for (i in MODE) {
+		if (MODE[i].state && (sni_chan.mode & i))
+			modestr += MODE[i].modechar;
+	}
+	if (modestr != "+") {
+		this.ircout(format("MODE %s %s",
+			sni_chan.nam,
+			modestr
+		));
+	}
+	modestr = "+";
 	for (i in sni_chan.modelist[CHANMODE_BAN]) {
 		modecounter++;
 		modestr += "b";