about to refactor async