         func peripheralIsReady(toSendWriteWithoutResponse peripheralObject: CBPeripheral) {
             
             log("Peripheral \(peripheralObject.gattIdentifier.uuidString) is ready to send write without response")
-            
             let peripheral = Peripheral(peripheralObject)
-            if let continuation = self.central.continuation.isReadyToWriteWithoutResponse[peripheral] {
-                continuation.resume()
-                self.central.continuation.isReadyToWriteWithoutResponse[peripheral] = nil
+            guard let context = self.central.continuation.peripherals[peripheral] else {
+                assertionFailure("Missing context")
+                return
+            }
+            // possible nothing is waiting
+            guard case let .isReadyToWriteWithoutResponse(operation) = context.queue.current else {
+                return
+            }
+            self.central.dequeue(for: peripheral) { _ in
+                operation.continuation.resume()
             }
         }
         

        }
    }
    
    private func enqueue(_ operation: Operation, for peripheral: Peripheral) {
        let context = self.continuation.peripherals[peripheral] ?? PeripheralContinuationContext(self)
        context.queue.push(operation)
    }
    
    private func dequeue(for peripheral: Peripheral, _ body: (Operation) -> ()) {
        guard let context = self.central.continuation.peripherals[peripheral] else {
            assertionFailure("Missing context")
            return
        }

                    }
                }
            } else if characteristicObject.isNotifying {
                guard let stream = context.notificationStream[characteristic.id] else {
                    assertionFailure("Missing notification stream")
                    return
                }
