refactored with objc modern tool