public List<Area> getBuildableAreasPlusUnits(Player player, List<Area> areasWithAVirtualUnit) {
		List<Area> result = new ArrayList<Area>();
		for (Area area : getAreas()) {
			int nbUnitsVirtuallyAddedToThisZone = 0;
			for (Area a : areasWithAVirtualUnit) {
				if (a == area) {
					nbUnitsVirtuallyAddedToThisZone++;
				}
			}

			if ((area.getUnitNumber() + nbUnitsVirtuallyAddedToThisZone) > area.getUnitLimit()) {
				throw new IllegalStateException("Too many units are going to be added to this area");
			}

			boolean isFull = (area.getUnitNumber() + nbUnitsVirtuallyAddedToThisZone) == area.getUnitLimit();

			if ((area.isEmpty() || area.isControlledBy(player)) && !isFull) {
				result.add(area);
			}
		}
		return result;
	}