recursion cleanups