message: always check for foreign endpoints on path
diff: return null;
  }
  + /**
  + * private
  + */
  + function getPointsOnPath(points: IPoint[], onPath: IPath, pathOffset: IPoint, popOptions: IIsPointOnPathOptions): IPoint[] {
  + const endpointsOnPath: IPoint[] = [];
  + points.forEach(p => {
  + if (measure.isPointOnPath(p, onPath, .000001, pathOffset, popOptions)) {
  + endpointsOnPath.push(p);
  + }
  + });
  + return endpointsOnPath;
  + }
  +
  /**
  * @private
  */
  return;
  }
  - var foreignPathEndPoints: IPoint[];
  + //this will cache the slope, to keep from being recalculated for each segment
  + var popOptions: IIsPointOnPathOptions = {};
  - for (var i = 0; i < segments.length; i++) {
  -
  - var pointsToCheck: IPoint[];
  var options: IPathIntersectionOptions = { path1Offset: crossedPath.offset, path2Offset: foreignWalkedPath.offset };
  - var foreignIntersection = path.intersection(segments[i].path, foreignPath, options);
  + var foreignIntersection = path.intersection(crossedPath.pathContext, foreignPath, options);
  + var intersectionPoints = foreignIntersection ? foreignIntersection.intersectionPoints : null;
  + var foreignPathEndPoints = point.fromPathEnds(foreignPath, foreignWalkedPath.offset);
  - if (foreignIntersection) {
  - pointsToCheck = foreignIntersection.intersectionPoints;
  + for (var i = 0; i < segments.length; i++) {
  + var pointsOfInterest = intersectionPoints ? foreignPathEndPoints.concat(intersectionPoints) : foreignPathEndPoints;
  + var pointsToCheck = getPointsOnPath(pointsOfInterest, segments[i].path, crossedPath.offset, popOptions);
  - } else if (options.out_AreOverlapped) {
  + if (options.out_AreOverlapped) {
  segments[i].overlapped = true;
  -
  overlappedSegments.push(segments[i]);
  -
  - if (!foreignPathEndPoints) {
  - //make sure endpoints are in absolute coords
  - foreignPathEndPoints = point.fromPathEnds(foreignPath, foreignWalkedPath.offset);
  - }
  -
  - pointsToCheck = foreignPathEndPoints;
  }
  if (pointsToCheck) {
  