docs: private RoadSegment removeRoadSegmentAt(RoadPath path, int index, PathIterator iterator) {
  		final int pathIndex = this.paths.indexOf(path);
  		assert pathIndex >= 0 && pathIndex < this.paths.size();
  		assert index >= 0 && index < path.size();
  		final RoadPath syncPath;
  		final RoadSegment sgmt;
  		if (index == 0 || index == path.size() - 1) {
  			// Remove one of the bounds of the path. if cause
  			// minimal insertion changes in the clustered road-path
  			sgmt = path.remove(index);
  		} else {
  			// Split the path somewhere between the first and last positions
  			sgmt = path.get(index);
  			assert sgmt != null;
  			final RoadPath rest = path.splitAfter(sgmt);
  			path.remove(sgmt);
  			if (rest != null && !rest.isEmpty()) {
  				// put back the rest of the segments
  				this.paths.add(pathIndex + 1, rest);
  			}
  		}
  		--this.segmentCount;
  		if (path.isEmpty()) {
  			this.paths.remove(path);
  			if (pathIndex > 0) {
  				syncPath = this.paths.get(pathIndex - 1);
  			} else {
  				syncPath = null;
  			}
  		} else {
  			syncPath = path;
  		}
  		if (iterator != null) {
  			iterator.reset(syncPath);
  		}
  		return sgmt;
  	}