async functions, new design