new implementation with two asyncs