         return Observable.create { observer in
             switch type {
             case .WithoutResponse:
+                self.peripheral.writeValue(data, forCharacteristic: characteristic.characteristic, type: type)
                 self.ensureValidPeripheralState(Observable.just(characteristic)).subscribe(observer)
             case .WithResponse:
+                self.peripheral.writeValue(data, forCharacteristic: characteristic.characteristic, type: type)
                 self.ensureValidPeripheralState(self.monitorWriteForCharacteristic(characteristic).take(1))
                     .subscribe(observer)
             }
-            self.peripheral.writeValue(data, forCharacteristic: characteristic.characteristic, type: type)
-            return NopDisposable.instance
-        }
-    }
-
-    /**
-     It connects to events of value updates for characteristics.
-     - Parameter characteristic: Characteristic to connect
-     - Returns: Stream of characteristic, for which value change was detected
+            return NopDisposable.instance
+        }
+    }
+
+    /**
+     Function that allow to monitor value updates for `Characteristic` instance.
+     - Parameter characteristic: Characteristic of which value changes should be monitored.
+     - Returns: Observable that emits `.Next` with `Characteristic` instance every time when value has changed.
+     It's **infinite** stream, so `.Complete` is never called.
      */
     public func monitorValueUpdateForCharacteristic(characteristic: Characteristic) -> Observable<Characteristic> {
         let observable = peripheral.rx_didUpdateValueForCharacteristic

    }

    /**
     Function that allow to monitor value updates for descriptor.
     - Parameter descriptor: Descriptor of which value changes should be monitored.
     - Returns: Observable that emits `.Next` with `Descriptor` instance every time when value has changed.
     It's **infinite** stream, so `.Complete` is never called.

    }

    /**
     Function that triggers included services discovery for specified services. Discovery is called after
     subscribtion to `Observable` is made.
     - Parameter includedServiceUUIDs: Identifiers of included services that should be discovered. If `nil` - all of the
     included services will be discovered. If you'll pass empty array - none of them will be discovered.
     - Returns: Observable that emits `Next` with array of `Service` instances, once they're discovered.
     Immediately after that `.Complete` is emitted.
     */
    public func discoverIncludedServices(includedServiceUUIDs: [CBUUID]?,
                                         forService service: Service) -> Observable<[Service]> {
