more async refactoring