added revised algorithm, Async2