         self.previous = nil
         self.intersectionInfo.neighbor = nil
     }
-}
-
-extension Vertex: Equatable {
-    public static func == (left: Vertex, right: Vertex) -> Bool {
+
+    static func == (left: Vertex, right: Vertex) -> Bool {
         return left === right
     }
 }

    private let path2: Path

    internal init(path1: Path, path2: Path, intersections: [PathIntersection]) {

        func intersectionVertexForPath(_ path: Path, at l: IndexedPathLocation) -> Vertex {
            let v = Vertex(location: path.point(at: l), isIntersection: true)
            return v
        }

        self.path1 = path1
        self.path2 = path2
        self.list1 = PathLinkedListRepresentation(path1)
        self.list2 = path1 !== path2 ? PathLinkedListRepresentation(path2) : self.list1
        intersections.forEach {
            let vertex1 = intersectionVertexForPath(path1, at: $0.indexedPathLocation1)
            let vertex2 = intersectionVertexForPath(path2, at: $0.indexedPathLocation2)
            connectNeighbors(vertex1, vertex2) // sets the vertex crossing neighbor pointer
            list1.insertIntersectionVertex(vertex1, at: $0.indexedPathLocation1)
            list2.insertIntersectionVertex(vertex2, at: $0.indexedPathLocation2)
        }
        // mark each intersection as either entry or exit
        let useRelativeWinding = (list1 === list2)

                assert(end !== list[location.elementIndex+1])
                end = end.next
            }
            insertIntersectionVertex(v, between: start, and: end, at: location.t, for: path.elementAtComponentIndex(location.componentIndex, elementIndex: location.elementIndex))
        }
        self.lists[location.componentIndex] = list
    }
