public boolean moveUnit(Position from, Position to) {

		// Units teleport (no check of allowed path)
		if (!getUnitAt(from).getOwner().equals(player)) {
			return false;
		}
		if (!validPosition(to)) {
			return false;
		}

		if (getUnitAt(to) != null) {
			if (battleStrat.battle(from, to, this)) {
				// From wins battle
				winStrat.wonBattle(getUnitAt(from).getOwner()); // Notify
																// winning
																// strategy on
																// who won

				units.remove(to);
				units.put(to, units.get(from));
				units.remove(from);

				return true;
			} else {
				// From loses battles
				units.remove(from);
				return false;
			}
		}
		// If no battle occurs
		units.put(to, units.get(from)); // Add unit to hashmap on new position
		units.remove(from); // Remove unit from map at old position

		if (cities.containsKey(to)) {
			cities.remove(to); // Remove city from map
		}
		gameObserver.worldChangedAt(from);
		gameObserver.worldChangedAt(to);
		return true;
	}