added recurse keyword