public Element handle(FreeColServer server, Player player,
                          Connection connection) {
        ServerPlayer serverPlayer = server.getPlayer(connection);
        Game game = server.getGame();

        Unit unit;
        try {
            unit = player.getFreeColGameObject(unitId, Unit.class);
        } catch (Exception e) {
            return DOMMessage.clientError(e.getMessage());
        }

        Tile tile;
        try {
            tile = unit.getNeighbourTile(directionString);
        } catch (Exception e) {
            return DOMMessage.clientError(e.getMessage());
        }

        IndianSettlement is = tile.getIndianSettlement();
        if (is == null) {
            return DOMMessage.clientError("There is no native settlement at: "
                + tile.getId());
        }

        MoveType type;
        Player enemy = game.getFreeColGameObject(enemyId, Player.class);
        if (enemy == null) {
            return DOMMessage.clientError("Not a player: " + enemyId);
        } else if (enemy == player) {
            return DOMMessage.clientError("Inciting against oneself!");
        } else if (!enemy.isEuropean()) {
            return DOMMessage.clientError("Inciting against non-European!");
        } else if ((type = unit.getMoveType(is.getTile()))
            != MoveType.ENTER_INDIAN_SETTLEMENT_WITH_MISSIONARY) {
            return DOMMessage.clientError("Unable to enter "
                + is.getName() + ": " + type.whyIllegal());
        }

        int gold;
        try {
            gold = Integer.parseInt(goldString);
        } catch (NumberFormatException e) {
            return DOMMessage.clientError("Bad gold: " + goldString);
        }

        // Valid, proceed to incite.
        return server.getInGameController()
            .incite(serverPlayer, unit, is, enemy, gold);
    }