Cleaner recursion