completionHandler should handled in main queue by default