adapt for the latest async