diff --git a/exec/ircd.js b/exec/ircd.js
index bdad8e6bf484485811082bed4b025848dca3b977..640c7658f3a8fd993765a608857dc35681047c9f 100644
--- a/exec/ircd.js
+++ b/exec/ircd.js
@@ -561,7 +561,7 @@ function search_nickbuf(bufnick) {
 	return 0;
 }
 
-function IRCClient_tweaktmpmode(tmp_bit) {
+function IRCClient_tweaktmpmode(tmp_bit,chan) {
 	if ((!chan.ismode(this.id,CHANLIST_OP)) && (!this.server) && (!this.parent)) {
 		this.numeric482(chan.nam);
 		return 0;
@@ -575,7 +575,7 @@ function IRCClient_tweaktmpmode(tmp_bit) {
 	}
 }
 
-function IRCClient_tweaktmpmodelist(tmp_cl,tmp_ncl) {
+function IRCClient_tweaktmpmodelist(tmp_cl,tmp_ncl,chan) {
 	if ((!chan.ismode(this.id,CHANLIST_OP)) &&
 	    (!this.server) && (!this.parent)) {
 		this.numeric482(chan.nam);
@@ -848,7 +848,6 @@ Channels = new Array;
 hcc_total = 0;
 hcc_users = 0;
 hcc_counter = 0;
-time_offset = 0;
 server_uptime = time();
 
 WhoWasHistory = new Array;
@@ -1900,61 +1899,61 @@ function IRCClient_set_chanmode(chan,modeline,bounce_modes) {
 					addbits|=CHANMODE_BAN; // list bans
 					break;
 				}
-				this.tweaktmpmodelist(CHANLIST_BAN,CHANLIST_UNBAN);
+				this.tweaktmpmodelist(CHANLIST_BAN,CHANLIST_UNBAN,chan);
 				mode_args_counter++;
 				break;
 			case "i":
-				this.tweaktmpmode(CHANMODE_INVITE);
+				this.tweaktmpmode(CHANMODE_INVITE,chan);
 				break;
 			case "k":
 				if(cm_args.length > mode_args_counter) {
-					this.tweaktmpmode(CHANMODE_KEY);
+					this.tweaktmpmode(CHANMODE_KEY,chan);
 					state_arg[CHANMODE_KEY]=cm_args[mode_args_counter];
 					mode_args_counter++;
 				}
 				break;
 			case "l":
 				if (add && (cm_args.length > mode_args_counter)) {
-					this.tweaktmpmode(CHANMODE_LIMIT);
+					this.tweaktmpmode(CHANMODE_LIMIT,chan);
 					regexp = "^[0-9]{1,4}$";
 					if(cm_args[mode_args_counter].match(regexp))
 						state_arg[CHANMODE_LIMIT]=cm_args[mode_args_counter];
 					mode_args_counter++;
 				} else if (!add) {
-					this.tweaktmpmode(CHANMODE_LIMIT);
+					this.tweaktmpmode(CHANMODE_LIMIT,chan);
 					if (cm_args.length > mode_args_counter)
 						mode_args_counter++;
 				}
 				break;
 			case "m":
-				this.tweaktmpmode(CHANMODE_MODERATED);
+				this.tweaktmpmode(CHANMODE_MODERATED,chan);
 				break;
 			case "n":
-				this.tweaktmpmode(CHANMODE_NOOUTSIDE);
+				this.tweaktmpmode(CHANMODE_NOOUTSIDE,chan);
 				break;
 			case "o":
 				if (cm_args.length <= mode_args_counter)
 					break;
-				this.tweaktmpmodelist(CHANLIST_OP,CHANLIST_DEOP);
+				this.tweaktmpmodelist(CHANLIST_OP,CHANLIST_DEOP,chan);
 				mode_args_counter++;
 				break;
 			case "p":
 				if( (add && !(chan.mode&CHANMODE_SECRET) ||
 				     (delbits&CHANMODE_SECRET) ) || (!add) )
-					this.tweaktmpmode(CHANMODE_PRIVATE);
+					this.tweaktmpmode(CHANMODE_PRIVATE,chan);
 				break;
 			case "s":
 				if( (add && !(chan.mode&CHANMODE_PRIVATE) ||
 				     (delbits&CHANMODE_PRIVATE) ) || (!add) )
-					this.tweaktmpmode(CHANMODE_SECRET);
+					this.tweaktmpmode(CHANMODE_SECRET,chan);
 				break;
 			case "t":
-				this.tweaktmpmode(CHANMODE_TOPIC);
+				this.tweaktmpmode(CHANMODE_TOPIC,chan);
 				break;
 			case "v":
 				if (cm_args.length <= mode_args_counter)
 					break;
-				this.tweaktmpmodelist(CHANLIST_VOICE,CHANLIST_DEVOICE);
+				this.tweaktmpmodelist(CHANLIST_VOICE,CHANLIST_DEVOICE,chan);
 				mode_args_counter++;
 				break;
 			default:
@@ -3396,9 +3395,10 @@ function IRCClient_registered_commands(command, cmdline) {
 
 // Server connections are ConnType 5
 function IRCClient_server_commands(origin, command, cmdline) {
-	var ThisOrigin = searchbyserver(origin);
-	if (!ThisOrigin)
-		ThisOrigin = searchbynick(origin);
+	if (ThisOrigin.match(/[.]/))
+		var ThisOrigin = searchbyserver(origin);
+	else
+		var ThisOrigin = searchbynick(origin);
 	if (!ThisOrigin) { // FIXME: SQUIT if it looks like a server prefix.
 		oper_notice("Notice","Server " + this.nick + " trying to pass message for non-existent origin " + origin);
 		this.rawout("KILL " + origin + " :" + servername + " (" + origin + "(?) <- " + this.nick + ")");