public void startGame(final AbstractGame game) throws GameAlreadyActiveException {
		synchronized (this) {
			if (this.activeGame != null) {
				throw new GameAlreadyActiveException();
			}
			this.activeGame = game;
		}
		
		this.executor.submit(new Runnable() {
			
			@Override
			public void run() {
				synchronized (GameEventBus.this) {
					for (GameEventListener l : listeners ) {
						try {
							l.onGameStarted(game);
						}
						catch (RuntimeException e) {
							logger.warn(e.getMessage());
							logger.debug(e.getMessage(), e);
						}
					}

					try {
						EventEngine engine = EventEngine.instance();
						engine.registerListener(game);
						engine.start();
					} catch (InitializationException | AlreadyRunningException e) {
						logger.warn(e.getMessage(), e);
					}
					
				}
			}
		});
	}