Simplified architecture, should now correctly use coroutines.