add async processing