added batch processing (via concurrency)