diff --git a/qchess/qchess.cgi b/qchess/qchess.cgi
index 4b8e34c779d30b648100cdb9cfd6c075aa96dcde..035dce094e05fba13aeb1733fabd6ae059de7735 100755
--- a/qchess/qchess.cgi
+++ b/qchess/qchess.cgi
@@ -157,13 +157,17 @@ def main(argv):
 		elif request == "start":
 			print "New game."
 			args = path+"qchess.py --no-graphics"
-			if mode == None or mode == "bishop":
-				args += " @fifo:../qchess-cgi-data/"+client+" @internal:AgentBishop --log=../qchess-cgi-data/"+client+".log"
-			if mode == "random":
+			if mode == "black":
+				args += " @internal:AgentBishop @fifo:../qchess-cgi-data/"+client
+			elif mode == None or mode == "bishop":
+				args += " @fifo:../qchess-cgi-data/"+client+" @internal:AgentBishop"
+			elif mode == "random":
 				args += " @fifo:../qchess-cgi-data/"+client+" @internal:AgentRandom"
 			elif mode == "eigengame":
 				args += " --server=progcomp.ucc.asn.au @fifo:../qchess-cgi-data/"+client
 
+			args += " --log=@../qchess-cgi-data/"+client+".log";
+
 			os.system("echo '"+args+"' | at now")
 
 		#	subprocess.Popen(args)
diff --git a/qchess/qchess.py b/qchess/qchess.py
index da4cab7d8b2e2bb37cb10010c5682af3a21f7bab..1dd8691002816907f2fb979b0ed015a46ff08fc9 100755
--- a/qchess/qchess.py
+++ b/qchess/qchess.py
@@ -722,7 +722,15 @@ class FifoPlayer(Player):
 		Player.__init__(self, name, colour)
 		os.mkfifo(self.name+".in")
 		os.mkfifo(self.name+".out")
-		
+
+		try:
+			self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
+		except:
+			raise Exception("FIFO_TIMEOUT")
+		else:
+			self.fifo_out.write("START "+colour+"\n")
+			self.fifo_out.close()
+
 		
 		
 		
@@ -2995,4 +3003,4 @@ if __name__ == "__main__":
 		
 
 # --- main.py --- #
-# EOF - created from make on Thursday 20 June  18:09:07 WST 2013
+# EOF - created from make on Friday 21 June  18:15:14 WST 2013
diff --git a/qchess/src/player.py b/qchess/src/player.py
index fffa73855df09f31f61bfd967764214e47541c78..37cca6797ca0f750391846703a943390c28b75e0 100644
--- a/qchess/src/player.py
+++ b/qchess/src/player.py
@@ -97,7 +97,15 @@ class FifoPlayer(Player):
 		Player.__init__(self, name, colour)
 		os.mkfifo(self.name+".in")
 		os.mkfifo(self.name+".out")
-		
+
+		try:
+			self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
+		except:
+			raise Exception("FIFO_TIMEOUT")
+		else:
+			self.fifo_out.write("START "+colour+"\n")
+			self.fifo_out.close()
+
 		
 		
 		
diff --git a/web/qwebchess/js.js b/web/qwebchess/js.js
index 53e92884fe7c331a1e637bea6b06fcac9adf3f15..8099802ec34a1ea0b136b57b429b8cd08e924922 100644
--- a/web/qwebchess/js.js
+++ b/web/qwebchess/js.js
@@ -6,7 +6,7 @@
  */
 
 pieceSelected = ""; // currently selected piece
-playerColour = "W"; // colour of this player
+playerColour = ""; // colour of this player
 
 // Unicode representations of chess pieces
 pieceChar = {"W" : { "p" : "\u2659", "h" : "\u2658", "b" : "\u2657", "r" : "\u2656", "q" : "\u2655", "k" : "\u2654", "?" : "?"},
@@ -32,9 +32,9 @@ $(document).ready(function()
 			$("#status").html("white SELECT?");
 			$("#start").html("Quit Game");
 			pieceSelected = "";
-			canClick = true;
+			canClick = false;
 			$.ajax({url : "/cgi-bin/qchess.cgi", data : {r : "force_quit"}, success : function() {}});
-			$.ajax({url : "/cgi-bin/qchess.cgi", data : {r : "start"}}).done(function(data) {$(this).update(data)});
+			$.ajax({url : "/cgi-bin/qchess.cgi", data : {r : "start", m : "black"}}).done(function(data) {$(this).update(data)});
 		
 				
 		}
@@ -44,6 +44,7 @@ $(document).ready(function()
 			$("#welcome").show();
 			$("#status").html("Game over");
 			$("#start").html("New Game");
+			canClick = false;
 			$.ajax({url : "/cgi-bin/qchess.cgi", data : {r : "quit"}, success : function() {console.log("Quit game");}});
 		}
 	});
@@ -283,12 +284,25 @@ $(document).ready(function()
 			}
 			else switch (lines[i])
 			{
+	
 				case "SELECT?":
 					pieceSelected = "";
 				case "MOVE?":
 				case "":
 				case "New game.":
 					break;
+				case "START white":
+					if (playerColour == "")
+					{
+						playerColour = "W";
+						break;
+					}
+				case "START black":
+					if (playerColour == "")
+					{
+						playerColour = "B";
+						break;
+					}
 				default:
 					alert("Game ends: " + lines[i]);
 					gameStarted = false;