implement asynchronous callback mechanism