Re-restructure and fix not-working coroutines
Restructure and update tests