Index: trunk/code/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c
===================================================================
--- trunk/code/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c	(revision 680)
+++ trunk/code/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c	(revision 681)
@@ -117,10 +117,18 @@
   *y = robot_y;
 }
 
+static void report_arrived() {
+  //usb_puts("requesting_abs_position\n");
+  ColonetRobotServerPacket pkt;
+  pkt.client_id = -1; //global
+  pkt.msg_code = ROBOT_REPORT_ARRIVED_AT_POSITION;
+  wl_send_global_packet(colonet_pgh.groupCode, 0, (char*)&pkt, sizeof(ColonetRobotServerPacket), 0);
+}
+
 void request_abs_position() {
   //usb_puts("requesting_abs_position\n");
   ColonetRobotServerPacket pkt;
-  pkt.client_id = -1;
+  pkt.client_id = -1; //global
   pkt.msg_code = ROBOT_REQUEST_POSITION_FROM_SERVER;
   wl_send_global_packet(colonet_pgh.groupCode, 0, (char*)&pkt, sizeof(ColonetRobotServerPacket), 0);
 }
@@ -238,6 +246,9 @@
               // Reached destination.
               motors_off();
               robot_state = NO_COMMAND;
+
+              // Notify server that robot arrived.
+              report_arrived();
             } else {
               // e is the error vector (where we want to go)
               //char buf[80];
Index: trunk/code/projects/colonet/server/colonet_wireless.cpp
===================================================================
--- trunk/code/projects/colonet/server/colonet_wireless.cpp	(revision 680)
+++ trunk/code/projects/colonet/server/colonet_wireless.cpp	(revision 681)
@@ -262,7 +262,7 @@
 static void handle_receive(char type, int source_robot, unsigned char* data, int len) {
   type = type; //TODO: This is just here to get rid of compiler warnings.
 
-  printf("***Got packet from robot***\n");
+  //printf("***Got packet from robot***\n");
 
   ColonetRobotServerPacket* pkt = (ColonetRobotServerPacket*)data;
 
Index: trunk/code/projects/colonet/server/ConnectionPool.cpp
===================================================================
--- trunk/code/projects/colonet/server/ConnectionPool.cpp	(revision 680)
+++ trunk/code/projects/colonet/server/ConnectionPool.cpp	(revision 681)
@@ -183,7 +183,7 @@
  * @brief Puts text into a write buffer that will be written to a client's file
  *  descriptor sometime when the client is ready to write.
  *
- * @param pool_index Index in the pool of the client to write to
+ * @param pool_index Index in the pool of the client to write to.  -1 for global.
  * @param message The message to be written
  * @param length The length of the message
  *
@@ -190,10 +190,6 @@
  * @return 0 on success, negative error code on failure
  */
 int ConnectionPool::write_to_client(int pool_index, char * message, int length) {
-  if (pool_index < 0 || pool_index >= next_available_slot) {
-    return ERROR_INVALID_CLIENT_ID;
-  }
-
   if (!message) {
     return ERROR_INVALID_MESSAGE;
   }
@@ -208,10 +204,21 @@
     return ERROR_NOT_ENOUGH_ROOM;
   }
 
-  //printf("Connection pool: attempting to write [%s], length %i to index %i.\n", message, length, pool_index);
+  if (pool_index == -1) {
+    // Global message.
+    for (int i = 0; i < number_clients_ready; i++) {
+      memcpy(write_buffer[i], message, length);
+      write_buffer_size[i] += length;
+    }
+  } else {
+    if (pool_index < 0 || pool_index >= next_available_slot) {
+      return ERROR_INVALID_CLIENT_ID;
+    }
 
-  memcpy(write_buffer[pool_index], message, length);
-  write_buffer_size[pool_index] += length;
+    //printf("Connection pool: attempting to write [%s], length %i to index %i.\n", message, length, pool_index);
+    memcpy(write_buffer[pool_index], message, length);
+    write_buffer_size[pool_index] += length;
+  }
 
   return 0;
 }
Index: trunk/code/projects/colonet/common/colonet_defs.h
===================================================================
--- trunk/code/projects/colonet/common/colonet_defs.h	(revision 680)
+++ trunk/code/projects/colonet/common/colonet_defs.h	(revision 681)
@@ -157,6 +157,7 @@
 #define SERVER_REPORT_VIRTUAL_WALL_LOWER 0x5B
 
 #define SERVER_CLEAR_VIRTUAL_WALL 0x5C
+#define ROBOT_REPORT_ARRIVED_AT_POSITION 0x5D
 
 ///////////////////////////
 //Colonet specific commands
Index: trunk/code/projects/colonet/client/ColonetServerInterface.java
===================================================================
--- trunk/code/projects/colonet/client/ColonetServerInterface.java	(revision 680)
+++ trunk/code/projects/colonet/client/ColonetServerInterface.java	(revision 681)
@@ -62,8 +62,8 @@
 	public static final String CLIENT_ASSIGN_ROBOT_ID = "87";
   public static final String CLIENT_SET_VIRTUAL_WALL = "89";
 	public static final String MOVE_TO_ABSOLUTE_POSITION = "83"; //0x53
-  
 
+
 	//Queue instructions
 	public static final String COLONET_QUEUE = "100";
 	public static final String QUEUE_UPDATE = "101";
@@ -371,7 +371,7 @@
 
 			sendData(MOVE_TO_ABSOLUTE_POSITION + " " + x_high + " " + x_low + " " + y_high + " " + y_low, "" + id);
 	}
-  
+
     /**
     * Establish a boundary for robot motion.
     */
