reordered recurse helpers