I started calling this NSObject just to make clear that we don't know what type it is until we check isKindOfClass. But maybe its just more confusing and adds a ton of casts throughout the code. It can stay this way.