adding asynchronous functionality