Implement TailRecursiveVisitor, use it everywhere