diff --git a/exec/ircd.js b/exec/ircd.js
index b4f5efd6a80019b822ed9d46b8ea4a9bb994fbb4..4c734298052abd44050b93adbb6a342e398743dd 100644
--- a/exec/ircd.js
+++ b/exec/ircd.js
@@ -15,7 +15,7 @@
 //
 // Synchronet IRC Daemon as per RFC 1459, link compatible with Bahamut 1.4
 //
-// Copyright 2003-2008 Randolph Erwin Sommerfeld <sysop@rrx.ca>
+// Copyright 2003-2009 Randolph Erwin Sommerfeld <sysop@rrx.ca>
 //
 
 load("sbbsdefs.js");
@@ -206,6 +206,7 @@ while (!server.terminated) {
 				+ open_plines[pl].local_port);
 			var client_sock=open_plines[pl].accept();
 			if(client_sock) {
+				client_sock.nonblocking = true;
 				if (!client_sock.remote_ip_address) {
 					log(LOG_DEBUG,"Socket has no IP address.  Closing.");
 					client_sock.close();
@@ -229,15 +230,6 @@ while (!server.terminated) {
 		}
 	}
 
-	// Check for ping timeouts
-	// FIXME: In the future these just need to be maps.  This is stupid.
-	for(this_sock in Selectable_Sockets) {
-		if (Selectable_Sockets_Map[this_sock]) {
-			Selectable_Sockets_Map[this_sock].check_timeout();
-			Selectable_Sockets_Map[this_sock].check_queues();
-		}
-	}
-
 	// Check for pending DNS hostname resolutions.
 	for(this_unreg in Unregistered) {
 		if (Unregistered[this_unreg] &&
@@ -256,6 +248,15 @@ while (!server.terminated) {
 		rebuild_socksel_array = false;
 	}
 
+	/* Check for ping timeouts and process queues. */
+	/* FIXME/TODO: These need to be changed to a mapping system ASAP. */
+	for(this_sock in Selectable_Sockets) {
+		if (Selectable_Sockets_Map[this_sock]) {
+			Selectable_Sockets_Map[this_sock].check_timeout();
+            Selectable_Sockets_Map[this_sock].check_queues();
+        }
+    }
+
 	// do some work.
 	if (Selectable_Sockets.length) {
 		var readme = socket_select(Selectable_Sockets, 1 /*secs*/);
@@ -303,6 +304,7 @@ while (!server.terminated) {
 			connect_to_server(CLines[thisCL]);
 		}
 	}
+
 }
 
 // End of our run, so terminate everything before we go.
@@ -930,8 +932,7 @@ function rawout(str) {
 		return 0;
 	}
 
-	if (this.sendq.bytes || !sendsock.send(str + "\r\n"))
-		this.sendq.add(str);
+	this.sendq.add(str);
 }
 
 function originatorout(str,origin) {
@@ -957,8 +958,7 @@ function originatorout(str,origin) {
 		return 0;
 	}
 
-	if (this.sendq.bytes || !sendsock.send(send_data + "\r\n"))
-		this.sendq.add(send_data);
+	this.sendq.add(send_data);
 }
 
 function ircout(str) {
@@ -978,8 +978,7 @@ function ircout(str) {
 	}
 
 	send_data = ":" + servername + " " + str;
-	if (this.sendq.bytes || !sendsock.send(send_data + "\r\n"))
-		this.sendq.add(send_data);
+	this.sendq.add(send_data);
 }
 
 function Queue_Add(str) {
@@ -1613,7 +1612,7 @@ function IRCClient_do_info() {
 		" (" + this.uprefix + "@" + this.hostname + ") [" +
 		this.servername + "]");
 	this.numeric(371, ":--=-=-=-=-=-=-=-=-=*[ The Synchronet IRCd v1.3a ]*=-=-=-=-=-=-=-=-=--");
-	this.numeric(371, ":  IRCd Copyright 2003-2008 by Randolph E. Sommerfeld <cyan@rrx.ca>");
+	this.numeric(371, ":  IRCd Copyright 2003-2009 by Randolph E. Sommerfeld <cyan@rrx.ca>");
 	this.numeric(371, ":" + system.version_notice + " " + system.copyright + ".");
 	this.numeric(371, ":--=-=-=-=-=-=-=-=-( A big thanks to the following )-=-=-=-=-=-=-=-=--");
 	this.numeric(371, ":DigitalMan (Rob Swindell): Resident coder god, various hacking all");
@@ -2870,7 +2869,8 @@ function IRCClient_check_timeout() {
 }
 
 function IRCClient_check_queues() {
-	if (this.sendq.bytes && this.socket.send(this.sendq.queue[0] + "\r\n")) {
+	if (this.sendq.bytes && this.socket.poll(0,true /*write?*/)>=1) {
+		this.socket.send(this.sendq.queue[0] + "\r\n");
 		this.sendq.bytes -= this.sendq.queue[0].length;
 		this.sendq.queue.shift();
 	}