public void update(final Protocol update)
	{
		switch(update.command) {
		case USERSINROOM:
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					String room = update.textField;
					synchronized(messagePane) {
						int tabIndex = messagePane.indexOfTab(room);
						if (tabIndex != -1) {
							ConversationPanel convo = (ConversationPanel) messagePane.getComponentAt(tabIndex);
							convo.update(update);
						}
					}
				}
			});
			break;
		case TRANSCRIPT:
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					String room = update.nameField;
					synchronized(messagePane) {
						int tabIndex = messagePane.indexOfTab(room);
						if (tabIndex != -1) {
							ConversationPanel convo = (ConversationPanel) messagePane.getComponentAt(tabIndex);
							convo.update(update);
						}
					}
				}
			});
			break;

		case USERLIST:
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					for (int i = 0; i < messagePane.getTabCount(); i++) {
						ConversationPanel convo = (ConversationPanel) messagePane.getComponentAt(i);
						convo.update(update);
					}
				}
			});
			break;

		case COLOR_CLICK: 
			//perform coloring updates
			break;

		case COLOR_MOVE: 
			//perform coloring updates
			//System.err.println("in chat->COLOR_MOVE");
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					String room = update.nameField;
					synchronized(messagePane) {
						int tabIndex = messagePane.indexOfTab(room);
						if(tabIndex != -1 ){
							ConversationPanel convo = (ConversationPanel) messagePane.getComponentAt(tabIndex);
							convo.update(update);
						}
					}
				}
			});
			break;

		default:
			System.err.println("Warning, client cannot parse command, "+update.command);
			break;
		}
	}