overhaul, use tree instead of returning follow