update and fix async