why do we do this asynchronously?