streamlined coroutine switching