add more documentation
add recursive test