async-only compatible