private void growObstaclesPass() {
		// grow obstacles
		for (int i = 0; i < userObstacles.size(); i++)
			((Obstacle) userObstacles.get(i)).growVertices();

		// go through paths and test segments
		for (int i = 0; i < workingPaths.size(); i++) {
			Path path = (Path) workingPaths.get(i);

			for (int e = 0; e < path.excludedObstacles.size(); e++)
				((Obstacle) path.excludedObstacles.get(e)).exclude = true;

			if (path.grownSegments.size() == 0) {
				for (int s = 0; s < path.segments.size(); s++)
					testOffsetSegmentForIntersections(
							(Segment) path.segments.get(s), -1, path);
			} else {
				int counter = 0;
				List currentSegments = new ArrayList(path.grownSegments);
				for (int s = 0; s < currentSegments.size(); s++)
					counter += testOffsetSegmentForIntersections(
							(Segment) currentSegments.get(s), s + counter, path);
			}

			for (int e = 0; e < path.excludedObstacles.size(); e++)
				((Obstacle) path.excludedObstacles.get(e)).exclude = false;

		}

		// revert obstacles
		for (int i = 0; i < userObstacles.size(); i++)
			((Obstacle) userObstacles.get(i)).shrinkVertices();
	}