private Element requestLaunch(Connection connection, Element element) {
        FreeColServer freeColServer = getFreeColServer();

        // Check if launching player is an admin.
        ServerPlayer launchingPlayer = freeColServer.getPlayer(connection);
        if (!launchingPlayer.isAdmin()) {
            return DOMMessage.createError("server.onlyAdminCanLaunch",
                "Only the server admin can launch the game.");
        }

        if (launching) return null;
        launching = true;

        // Check that no two players have the same nation
        ArrayList<Nation> nations = new ArrayList<Nation>();
        for (Player player : freeColServer.getGame().getPlayers()) {
            final Nation nation = getGame().getSpecification()
                .getNation(player.getNationID());
            if (nations.contains(nation)) {
                return DOMMessage.createError("server.invalidPlayerNations",
                    "All players need to pick a unique nation before the game can start.");
            }
            nations.add(nation);
        }

        // Check if all players are ready.
        if (!freeColServer.getGame().isAllPlayersReadyToLaunch()) {
            return DOMMessage.createError("server.notAllReady",
                "Not all players are ready to begin the game!");
        }
        try {
            ((PreGameController)freeColServer.getController()).startGame();
        } catch (FreeColException e) {
            return DOMMessage.createError("server.errorStartingGame",
                "An error occurred while starting the game!");
        }

        return null;
    }