add sequential asynchronous  version