further async refactoring