using actions instead of coroutines