Kotlin coroutines have gained a lot of traction since their stabilization. They are a lightweight, elegant and convenient solution for most of the asynchronous processing tasks. Using coroutines, developers can write code solving concurrency problems without drowning in the flood of callbacks. Since coroutines were stabilized only a year ago, there is a really good chance that your current project is based on some other library or framework for asynchronous processing. Does it mean that you cannot benefit from elegant, easy to reason code that coroutines bring to the table? In this talk, I am going to show you how you can bring powers of coroutines into your mature and borning framework. Or maybe your case is different and your project is already using lots of ‘async’s and ‘launch’es. Then you will see superpowers you can use to make your asynchronous code more readable and less repetitive.