implement asynchronous persist