diff --git a/exec/load/ircd_server.js b/exec/load/ircd_server.js
index b30590fb54cf25fd1fc25be4a65f6a0c41fb6a45..37969af34f4cbeb9bc70f9ff3f9b15500029b72f 100644
--- a/exec/load/ircd_server.js
+++ b/exec/load/ircd_server.js
@@ -808,7 +808,8 @@ function Server_Work() {
 			}
 
 			if (cm_array.length < 1) {
-				umode_notice(USERMODE_OPER,"Notice","Server " + this.nick + " trying to SJOIN empty channel "
+				umode_notice(USERMODE_OPER,"Notice","Server " + this.nick
+					+ " trying to SJOIN empty channel "
 					+ cmd[2] + " post processing.");
 				break;
 			}
@@ -816,7 +817,7 @@ function Server_Work() {
 		}
 
 		var cn_tuc = cmd[2].toUpperCase();
-		var chan = Channels[cmd[2].toUpperCase()];
+		var chan = Channels[cn_tuc];
 		if (!chan) {
 			Channels[cn_tuc]=new Channel(cn_tuc);
 			chan = Channels[cn_tuc];
@@ -826,8 +827,7 @@ function Server_Work() {
 
 		if (cmd[3]) {
 			var bounce_modes = true;
-			if (!ThisOrigin.local ||
-			    (chan.created == parseInt(cmd[1])))
+			if (!ThisOrigin.local || (chan.created == parseInt(cmd[1])))
 				bounce_modes = false;
 			if (chan.created >= parseInt(cmd[1]))
 				this.set_chanmode(chan, mode_args, bounce_modes);
@@ -843,35 +843,45 @@ function Server_Work() {
 				var member_obj = cm_array[member].nick;
 				var is_voice = cm_array[member].isvoice;
 				var is_op = cm_array[member].isop;
+				log("***XXX*** ISOP?? " + cm_array[member].isop + " ***XXX***");
 
 				if (member_obj.channels[chan.nam.toUpperCase()])
 					continue;
 				member_obj.channels[chan.nam.toUpperCase()] = chan;
 				chan.users[member_obj.id] = member_obj;
-				member_obj.bcast_to_channel(chan, "JOIN " + chan.nam, false);
+				var joinstr = "JOIN " + chan.nam;
+				member_obj.bcast_to_channel(chan, joinstr, false);
+				member_obj.bcast_to_servers_raw(":" + member_obj.nick
+					+ " " + joinstr, DREAMFORGE);
 				if (chan.created >= parseInt(cmd[1])) {
 					if (is_op) {
-						chan.modelist[CHANMODE_OP][member_obj.id] = member_obj.id;
+						chan.modelist[CHANMODE_OP][member_obj.id]=member_obj.id;
 						push_sync_modes += "o";
 						push_sync_args += " " + member_obj.nick;
 						num_sync_modes++;
 						new_chan_members += "@";
 					}
 					if (num_sync_modes >= max_modes) {
-						this.bcast_to_channel(chan,"MODE " + chan.nam + " " + push_sync_modes + push_sync_args);
+						var mode1str = "MODE " + chan.nam + " "
+							+ push_sync_modes + push_sync_args;
+						this.bcast_to_channel(chan,mode1str);
+						this.bcast_to_servers(mode1str,DREAMFORGE);
 						push_sync_modes = "+";
 						push_sync_args = "";
 						num_sync_modes = 0;
 					}
 					if (is_voice) {
-						chan.modelist[CHANMODE_VOICE][member_obj.id] = member_obj;
+						chan.modelist[CHANMODE_VOICE][member_obj.id]=member_obj;
 						push_sync_modes += "v";
 						push_sync_args += " " + member_obj.nick;
 						num_sync_modes++;
 						new_chan_members += "+";
 					}
 					if (num_sync_modes >= max_modes) {
-						this.bcast_to_channel(chan,"MODE " + chan.nam + " " + push_sync_modes + push_sync_args);
+						var mode2str = "MODE " + chan.nam + " "
+							+ push_sync_modes + push_sync_args;
+						this.bcast_to_channel(chan,mode2str);
+						this.bcast_to_servers(mode2str,DREAMFORGE);
 						push_sync_modes = "+";
 						push_sync_args = "";
 						num_sync_modes = 0;
@@ -879,16 +889,23 @@ function Server_Work() {
 				}
 				new_chan_members += member_obj.nick;
 			}
-			if (num_sync_modes)
-				this.bcast_to_channel(chan, "MODE " + chan.nam + " " + push_sync_modes + push_sync_args);
+			if (num_sync_modes) {
+				var mode3str = "MODE " + chan.nam + " "
+					+ push_sync_modes + push_sync_args;
+				this.bcast_to_channel(chan, mode3str);
+				this.bcast_to_servers(mode3str,DREAMFORGE);
+			}
 
 			// Synchronize the TS to what we received.
 			if (chan.created > parseInt(cmd[1]))
 				chan.created = parseInt(cmd[1]);
 
-			/* XXX FIXME for dreamforge XXX */
-			this.bcast_to_servers_raw(":" + ThisOrigin.nick + " SJOIN " + chan.created + " " + chan.nam + " "
-				+ chan.chanmode(true) + " :" + new_chan_members)
+			this.bcast_to_servers_raw(":" + ThisOrigin.nick + " "
+				+ "SJOIN "
+				+ chan.created + " "
+				+ chan.nam + " "
+				+ chan.chanmode(true) + " "
+				+ ":" + new_chan_members,BAHAMUT)
 		} else {
 			if (ThisOrigin.server) {
 				umode_notice(USERMODE_OPER,"Notice", "Server " + ThisOrigin.nick