public boolean moveUnit( Position from, Position to ) {
        Unit u = unitMap.get( from );

        if ( isMovable(u) && isLegalMove( from, to )) {


            if (isOccupied(to)){

                if (unitMap.get( to ).getOwner() != u.getOwner()){
                    unitAttack( from, to );
                    notifyWorldChangeAt(from);
                    notifyWorldChangeAt(to);
                    return true;
                }
            } else {
                u = decrementMoveCount( u );
                unitMap.put( to, u );
                unitMap.remove( from );
                takeCityAt( to, u.getOwner() );
                notifyWorldChangeAt(from);
                notifyWorldChangeAt(to);
                return true;
            }
        }
        return false;
    }