obviated the coroutine based utility functions