     }
 
     //MARK: Characteristics
-
-    /**
-     Triggers characteristics discovery for specified service.
-
-    - parameter identifiers: Identifiers of wanted characteristics
-    - parameter service: Service which includes characteristics to be discovered
-    - returns: Stream of characteristics
-    */
+    /**
+     Function that triggers characteristics discovery for specified Services and identifiers. Discovery is called after
+     subscribtion to `Observable` is made.
+     - Parameter identifiers: Identifiers of characteristics that should be discovered. If `nil` - all of the 
+     characteristics will be discovered. If you'll pass empty array - none of them will be discovered.
+     - Returns: Observable that emits `Next` with array of `Characteristic` instances, once they're discovered.
+     Immediately after that `.Complete` is emitted.
+     */
     public func discoverCharacteristics(identifiers: [CBUUID]?, service: Service) -> Observable<[Characteristic]> {
         let observable = peripheral.rx_didDiscoverCharacteristicsForService
         .filter { $0.0 == service.service }

    }

    /**
     Writes given data to characteristic

     - parameter data: Data to be written to characteristic
     - parameter forCharacteristic: Characteristic into which data will be written
     - parameter type: Type of write operation
     - returns: Observable which emit characteristic to which value was written
     */
    public func writeValue(data: NSData,
                           forCharacteristic characteristic: Characteristic,

        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)
            }
            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
