updated to async