                     } while true
                 }
             case .bound:
-                throw QueryPlanError.unimplemented("unimplemented: ?var :starpath* <bound>") // TODO: implement
+                let ipath = StarPathPlan(child: InversePathPlan(child: child), store: store)
+                return try ipath.evaluate(from: object, to: subject, in: graph)
             }
         }
     }

            }
            
            return AnyIterator(i.makeIterator())
        default:
            throw QueryPlanError.unexpectedError("Unexpected subject to PlusPathPlan")
        }
    }
}

    public var selfDescription: String { return "Plus" }
    public func evaluate(from subject: Node, to object: Node, in graph: Term) throws -> AnyIterator<SPARQLResultSolution<Term>> {
        switch subject {
        case .bound:
            var v = Set<Term>()
            let frontierNode : Node = .variable(".pp-plus", binding: true)
            for r in try child.evaluate(from: subject, to: frontierNode, in: graph) {
