I think you might want to make #find_with_descendants always return an array. Having a method that returns different types of objects based on the parameters tends to cause problems down the road (I've made this mistake many times, so please don't cite my code as examples)