Use instancetype keyword to allow subclassing