public String passQuery(int otherServer, String query) {
		String server = my_tm.serverList.get(otherServer).getAddress();
		int port = my_tm.serverList.get(otherServer).getPort();
		Message msg = null;
		// Add coordinator's policy version
		query += " " + transactionPolicyVersion;
		try {
			// Check SocketList for an existing socket, else create and add new
			if (!sockList.hasSocket(otherServer)) {
				// Create new socket, add it to SocketGroup
				System.out.println("Connecting to " + server +
								   " on port " + port);
				Socket sock = new Socket(server, port);
				sockList.addSocketObj(otherServer, new SocketObject(sock,
																	new ObjectOutputStream(sock.getOutputStream()),
																	new ObjectInputStream(sock.getInputStream())));
				// Push policy update to a random server (PUSH == 1)
				if (!hasUpdated && my_tm.policyPush == 1) {
					if (otherServer == randomServer) {
						// Add a sentinel to end of query
						query += " P";
						hasUpdated = true; // This only needs to be done once
					}
				}
				// Send message
				msg = new Message(query);
				latencySleep(); // Simulate latency to other server
				sockList.get(otherServer).output.writeObject(msg);
				msg = (Message)sockList.get(otherServer).input.readObject();
				System.out.println("Server " + otherServer +
								   " says: " + msg.theMessage +
								   " for query " + query);
				if (msg.theMessage.indexOf("ABORT") != -1) {
					// ABORT message received
					return msg.theMessage;
				}
				// Otherwise there was an ACK - read policy used
				String vSplit[] = msg.theMessage.split(" ");
				if (Integer.parseInt(vSplit[1]) != transactionPolicyVersion) {
					// Inconsistent - abort
					return "ABORT TXN_CONSISTENCY_FAIL";
				}
				else { // No problem
					return msg.theMessage;
				}
			}
			
			// Send regular query
			msg = new Message(query);
			latencySleep(); // Simulate latency to other server
			sockList.get(otherServer).output.writeObject(msg);
			msg = (Message)sockList.get(otherServer).input.readObject();
			System.out.println("Server " + otherServer +
							   " says: " + msg.theMessage +
							   " for passed query " + query);
			return msg.theMessage;
		}
		catch (ConnectException ce) {
			System.err.println(ce.getMessage() +
							   ": Check server address and port number.");
			ce.printStackTrace(System.err);
		}
		catch (Exception e) {
			System.err.println("Error during passQuery(): " + e.getMessage());
			e.printStackTrace(System.err);
		}
		return "FAIL";
	}