Programmers often use synchronization abstractions, such as mutex, semaphore, barriers, and count-down latches, to simplify their code. Despite much work in this area, only a few algorithms support both fair FIFO ordering of synchronization requests and abortability. Supporting such semantics is critical for coroutines, which abort frequently and are cheaper to suspend and resume than native threads. This talk introduces a new CancellableQueueSynchronizer (CQS) framework for Kotlin coroutines that enables simple yet efficient implementations of a wide range of fair and abortable synchronization primitives. Besides the algorithmic contribution, we also proved the correctness of all algorithms in Coq and compared them with the primitives in the standard Java library, demonstrating significant improvement.