descendants() refactored