initial async rewrite