change to use async api