Large refactoring to Async