initial asynchronous implementation