update and make it async