also works without async