* @param destination The <code>Location</code> to be moved to.
     * @throws IllegalArgumentException if destination or unit are null.
     */
    public void moveTo(Unit unit, Location destination) {
        if (!requireOurTurn()) return;

        // Sanity check current state.
        if (unit == null || destination == null) {
            throw new IllegalArgumentException("moveTo null argument");
        } else if (destination instanceof Europe) {
            if (unit.isInEurope()) {
                gui.playSound("sound.event.illegalMove");
                return;
            }
        } else if (destination instanceof Map) {
            if (unit.getTile() != null
                && unit.getTile().getMap() == destination) {
                gui.playSound("sound.event.illegalMove");
                return;
            }
        } else if (destination instanceof Settlement) {
            if (unit.getTile() != null) {
                gui.playSound("sound.event.illegalMove");
                return;
            }
        }

        // Autoload emigrants?
        if (freeColClient.getClientOptions()
            .getBoolean(ClientOptions.AUTOLOAD_EMIGRANTS)
            && unit.isInEurope()) {
            for (Unit u : unit.getOwner().getEurope().getUnitList()) {
                if (!u.isNaval()
                    && u.getState() == UnitState.SENTRY
                    && unit.canAdd(u)) {
                    boardShip(u, unit);
                }
            }
        }

        if (askServer().moveTo(unit, destination)) {
            nextActiveUnit();
        }
    }