public void notifyCommandListeners(final IIncomingCommand command)
	{
		cmdReadLock.lock();
		
		try
		{
			if(commandListeners.containsKey(command.getClass()))
			{
				for (IIncomingCommandListener listener : commandListeners.get(command.getClass()))
				{
					listener.receivedCommand(command);
				}
			}
			
			if(stateListeners.containsKey(command.getClass()))
			{
				State prevState = state.getState();
				
				if(command.updateState(state))
				{
					for (IStateChangeListener listener : stateListeners.get(command.getClass()))
					{
						listener.stateChanged(command, prevState, state.getState());
					}
				}
			}
			
		}
		finally
		{
			cmdReadLock.unlock();
		}
	}