finish refactoring the async package