Use instancetype to support custom subclasses