*     to make.
     */
    public boolean moveToDestination(Unit unit) {
        if (!requireOurTurn()) return false;
        if (unit.getTradeRoute() != null) return followTradeRoute(unit);
        gui.setActiveUnit(unit);
        Player player = freeColClient.getMyPlayer();
        Location destination;
        while (unit.getMovesLeft() > 0
            && unit.getState() != UnitState.SKIPPED) {
            // Look for valid destinations
            if ((destination = unit.getDestination()) == null) {
                break; // No destination
            } else if (destination instanceof Europe) {
                if (unit.isInEurope() || unit.isAtSea()) {
                    break; // Arrived in or between New World and Europe.
                }
            } else if (destination.getTile() == null) {
                break; // Not on the map, findPath* can not help.
            } else if (unit.getTile() == destination.getTile()) {
                break; // Arrived at on-map destination
            }

            // Find a path to the destination.
            PathNode path = unit.findPath(destination);
            if (path == null) {
                StringTemplate src = unit.getLocation()
                    .getLocationNameFor(player);
                StringTemplate dst = destination.getLocationNameFor(player);
                gui.showInformationMessage(unit,
                    StringTemplate.template("selectDestination.failed")
                        .addStringTemplate("%unit%", Messages.getLabel(unit))
                        .addStringTemplate("%location%", src)
                        .addStringTemplate("%destination%", dst));
                break;
            }

            // Try to follow the path.
            if (!followPath(unit, path)) break;
        }

        // Clear ordinary destinations if arrived.
        if ((destination = unit.getDestination()) != null) {
            if (unit.getTile() == null) {
                if (unit.getLocation() == destination) {
                    clearGotoOrders(unit);
                }
            } else if (unit.getTile() == destination.getTile()) {
                clearGotoOrders(unit);
                // Check cash-in, and if the unit has moves left
                // and was not set to SKIPPED by moveDirection,
                // then make sure it remains selected to show that
                // this unit could continue.
                if (!checkCashInTreasureTrain(unit)
                    && unit.getMovesLeft() > 0
                    && unit.getState() != UnitState.SKIPPED) {
                    gui.setActiveUnit(unit);
                    return true;
                }
            }
        }
        return false;
    }