do everything asynchronously