reworked recurse(...)