added two variants of async