properly recurse