      It's **infinite** stream, so `.Complete` is never called.
      */
     public func monitorWrite(for characteristic: Characteristic) -> Observable<Characteristic> {
-        return peripheral
+        let observable =  peripheral
             .rx_didWriteValueForCharacteristic
             .filter { return $0.0 == characteristic.characteristic }
             .map { (_, error) -> Characteristic in

        }
        .take(1)

        return .create { observer in
            let disposable = self.ensureValidPeripheralState(for: observable).subscribe(observer)
            self.peripheral.discoverServices(serviceUUIDs)
            return disposable
        }
    }

    /**

     `.Complete` is emitted.
     */
    public func readValue(for descriptor: Descriptor) -> Observable<Descriptor> {
        let observable = self.monitorValueUpdate(for: descriptor).take(1)
        return ensureValidStateAndCallIfNecessary(
            for: observable,
            call: { self.peripheral.readValue(for: descriptor.descriptor) }
        )
    }

    /**
