public Set<Region> getAllConnectedRegions() {
		// Evaluate on first call
		if (allConnectedRegions == null) {
			allConnectedRegions = new HashSet<Region>();
			LinkedList<Region> unexplored = new LinkedList<Region>();
			unexplored.add(this);
			while (!unexplored.isEmpty()) {
				Region current = unexplored.remove();
				if (allConnectedRegions.add(current)) {
					unexplored.addAll(current.getConnectedRegions());
				}
			}
		}
		return Collections.unmodifiableSet(allConnectedRegions);
	}