public void removeEventListener(IGameEventListener listener) {
		if (listener != null) {
			Iterator<Entry<GameEventType, Map<Integer, Set<IGameEventListener>>>> iterator = eventListeners.entrySet().iterator();
			while (iterator.hasNext()) {
				Map.Entry<GameEventType, Map<Integer, Set<IGameEventListener>>> entry = iterator.next();

				Iterator<Entry<Integer, Set<IGameEventListener>>> iterator2 = entry.getValue().entrySet().iterator();
				while (iterator2.hasNext()) {
					Map.Entry<Integer, Set<IGameEventListener>> entry2 = iterator2.next();
					Set<IGameEventListener> listeners = entry2.getValue();
					if (listeners.contains(listener)) {
						listeners.remove(listener);

						if (listeners.size() <= 0)
							iterator2.remove();

						if (LOGGER.isDebugEnabled())
							LOGGER.debug("Successfully removed listener '" + listener + "' of priority '" + entry2.getKey() + "'for type '" + entry.getKey() + "'");
					}
				}
				if (entry.getValue().size() <= 0) {
					iterator.remove();
					if (LOGGER.isDebugEnabled())
						LOGGER.debug("All listeners for type '" + entry.getKey() + "' were removed");

				}
			}
		}
	}