slight refactoring
add preload_descendants and find_with_descendants