diff --git a/exec/ircd.js b/exec/ircd.js
index 0cc1546855890fbe75318b94629a64231a498474..d332790f1c8931b38d044d414186af8e3e67176a 100644
--- a/exec/ircd.js
+++ b/exec/ircd.js
@@ -104,6 +104,8 @@ function true_array_len(my_array) {
 }
 
 function ip_to_int(ip) {
+	if (!ip)
+		return 0;
 	var quads = ip.split(".");
 	var addr = (quads[0]&0xff)<<24;
 	addr|=(quads[1]&0xff)<<16;
diff --git a/exec/load/ircd_channel.js b/exec/load/ircd_channel.js
index 29db1e6eb320925390292b2b4746e973e97764d4..03a98f2aa1c820fbb148ef29e30ea0e46bb897b4 100644
--- a/exec/load/ircd_channel.js
+++ b/exec/load/ircd_channel.js
@@ -598,7 +598,7 @@ function IRCClient_do_join(chan_name,join_key) {
 		}
 		if (chan_name[0] != "&")
 			server_bcast_to_servers(":" + this.nick + " SJOIN " + Channels[chan].created + " " + Channels[chan].nam,BAHAMUT);
-			server_bcast_to_servers(":" + this.nick + " JOIN " + Channels[chan].created,DREAMFORGE);
+			server_bcast_to_servers(":" + this.nick + " JOIN " + Channels[chan].nam + " " + Channels[chan].created,DREAMFORGE);
 	} else {
 		// create a new channel
 		Channels[chan]=new Channel(chan);
diff --git a/exec/load/ircd_server.js b/exec/load/ircd_server.js
index a5760704b840489bb9614c8933528a34ef361e7b..7d794a88f23f43c0bdf0cca0f1f222bd83258cae 100644
--- a/exec/load/ircd_server.js
+++ b/exec/load/ircd_server.js
@@ -501,7 +501,8 @@ function Server_Work() {
 					}
 				}
 				var true_hops = parseInt(NewNick.hops)+1;
-				this.bcast_to_servers_raw("NICK " + NewNick.nick + " " + true_hops + " " + NewNick.created + " " + NewNick.get_usermode(true) + " " + NewNick.uprefix + " " + NewNick.hostname + " " + NewNick.servername + " 0 " + cmd[9] + " :" + NewNick.realname);
+				this.bcast_to_servers_raw("NICK " + NewNick.nick + " " + true_hops + " " + NewNick.created + " " + NewNick.get_usermode(true) + " " + NewNick.uprefix + " " + NewNick.hostname + " " + NewNick.servername + " 0 " + cmd[9] + " :" + NewNick.realname,BAHAMUT);
+				this.bcast_to_servers_raw("NICK " + NewNick.nick + " " + true_hops + " " + NewNick.created + " " + NewNick.uprefix + " " + NewNick.hostname + " " + NewNick.servername + " 0 :" + NewNick.realname,DREAMFORGE);
 			} else { // we're a user changing our nick.
 				var ctuc = cmd[1].toUpperCase();
 				if ((Users[ctuc])&&Users[ctuc].nick.toUpperCase() !=
@@ -871,7 +872,8 @@ function Server_Work() {
 				ThisOrigin.channels[chan.nam.toUpperCase()] = chan;
 				chan.users[ThisOrigin.id] = ThisOrigin;
 				ThisOrigin.bcast_to_channel(chan, "JOIN " + chan.nam, false);
-				this.bcast_to_servers_raw(":" + ThisOrigin.nick + " SJOIN " + chan.created + " " + chan.nam);
+				this.bcast_to_servers_raw(":" + ThisOrigin.nick + " SJOIN " + chan.created + " " + chan.nam,BAHAMUT);
+				this.bcast_to_servers_raw(":" + ThisOrigin.nick + " JOIN " + chan.nam,DREAMFORGE);
 			}
 			break;
 		case "SQUIT":
@@ -1008,7 +1010,6 @@ function Server_Work() {
 				var dest_server = searchbyserver(cmd[1]);
 				if (!dest_server)
 					break; // someone messed up.
-				log("dest_server: " + dest_server);
 				dest_server.rawout(":" + ThisOrigin.nick + " VERSION :" + dest_server.nick);
 			}
 			break;
@@ -1203,7 +1204,12 @@ function IRCClient_server_chan_info(sni_chan) {
 	if (this.type == DREAMFORGE) {
 		var df_chan_occs = sni_chan.occupants().split(' ');
 		for (dfocc in df_chan_occs) {
-			this.rawout(":" + df_chan_occs[dfocc] + " JOIN " + sni_chan.nam);
+			var cmember = df_chan_occs[dfocc];
+			if (cmember[0] == "@")
+				cmember = cmember.slice(1);
+			if (cmember[0] == "+")
+				cmember = cmember.slice(1);
+			this.rawout(":" + cmember + " JOIN " + sni_chan.nam);
 		}
 		this.ircout("MODE " + sni_chan.nam + " " + sni_chan.chanmode(true) + " " + sni_chan.created);
 	} else { /* Bahamut */
diff --git a/exec/load/ircd_unreg.js b/exec/load/ircd_unreg.js
index ecc187992dc2aaa8c7e7838a134f80d64e30d19f..b1815a91a103146770e7fd7bf4e7b46a1be4a435 100644
--- a/exec/load/ircd_unreg.js
+++ b/exec/load/ircd_unreg.js
@@ -380,7 +380,9 @@ function Unregistered_Welcome() {
 		") [" + this.ip + "] {" + hcc_counter + "}");
 	if (server.client_update != undefined)
 		server.client_update(this.socket, this.nick, this.hostname);
-	server_bcast_to_servers("NICK " + this.nick + " 1 " + new_user.created + " + " + this.uprefix + " " + this.hostname + " " + servername + " 0 " + ip_to_int(new_user.ip) + " :" + this.realname);
+	var nickstr = "NICK " + this.nick + " 1 " + new_user.created + " ";
+	server_bcast_to_servers(nickstr + "+ " + this.uprefix + " " + this.hostname + " " + servername + " 0 " + ip_to_int(new_user.ip) + " :" + this.realname,BAHAMUT);
+	server_bcast_to_servers(nickstr + this.uprefix + " " + this.hostname + " " + servername + " 0 " + " :" + this.realname,DREAMFORGE);
 	// we're no longer unregistered.
 	delete Unregistered[this.id];
 	delete this;