First Pass recursive tree traversal, somewhat shimmed, TODO: move some publics back to private