 
 	public mutating func discover(vertex: SearchSpace.VertexId, _ graph: inout Graph) throws {
 		queue.add(vertex, with: PathLength.effectiveInfinity)  // Add to the back of the queue.
-		try visitor.discover(vertex: vertex, &graph)
+		try userVisitor.discover(vertex: vertex, &graph)
 	}
 
 	public mutating func examine(vertex: SearchSpace.VertexId, _ graph: inout Graph) throws {
-		try visitor.examine(vertex: vertex, &graph)
+		try userVisitor.examine(vertex: vertex, &graph)
 	}
 
 	public mutating func examine(edge: SearchSpace.EdgeId, _ graph: inout Graph) throws {
-		try visitor.examine(edge: edge, &graph)
+		try userVisitor.examine(edge: edge, &graph)
 	}
 
 	public mutating func treeEdge(_ edge: SearchSpace.EdgeId, _ graph: inout Graph) throws {
 		let decreased = relaxTarget(edge, &graph)
 		if decreased {
-			try visitor.edgeRelaxed(edge, &graph)
+			try userVisitor.edgeRelaxed(edge, &graph)
 		} else {
-			try visitor.edgeNotRelaxed(edge, &graph)
+			try userVisitor.edgeNotRelaxed(edge, &graph)
 		}
 	}
 
 	public mutating func grayDestination(_ edge: SearchSpace.EdgeId, _ graph: inout Graph) throws {
 		let decreased = relaxTarget(edge, &graph)
 		if decreased {
-			try visitor.edgeRelaxed(edge, &graph)
+			try userVisitor.edgeRelaxed(edge, &graph)
 		} else {
-			try visitor.edgeNotRelaxed(edge, &graph)
+			try userVisitor.edgeNotRelaxed(edge, &graph)
 		}
 	}
 
 	public mutating func blackDestination(_ edge: SearchSpace.EdgeId, _ graph: inout Graph) throws {
-		try visitor.edgeNotRelaxed(edge, &graph)
+		try userVisitor.edgeNotRelaxed(edge, &graph)
 	}
 
 	public mutating func finish(vertex: SearchSpace.VertexId, _ graph: inout Graph) throws {
-		try visitor.finish(vertex: vertex, &graph)
+		try userVisitor.finish(vertex: vertex, &graph)
 	}
 
 	/// Returns `true` if `edge` relaxes the distance to `graph.target(of: edge)`, false otherwise.

		EdgeLengths: GraphEdgePropertyMap,
		DistancesToVertex: MutableGraphVertexPropertyMap,
		ColorMap: MutableGraphVertexPropertyMap,
		Visitor: DijkstraVisitor
	>(
		_ graph: inout SearchSpace,
		visitor: inout Visitor,
		colorMap: inout ColorMap,
		distancesToVertex: inout DistancesToVertex,
		edgeLengths: EdgeLengths,

		SearchSpace.VertexId: IdIndexable,
		EdgeLengths.Graph == SearchSpace,
		EdgeLengths.Value == Distance,
		UserVisitor.Graph == SearchSpace
	{
		var colorMap = TableVertexPropertyMap(repeating: VertexColor.white, for: graph)
		var distancesToVertex = TableVertexPropertyMap(
