exposed recursion