             self.timeoutWrite(self.writeSequence, timeout:parameters.timeout)
         }
     }
+    
+    private func readNext() {
+        if self.reading == false && self.readParameters.count > 0 {
+            Logger.debug("read characteristic \(self.uuid.UUIDString)")
+            let parameters = self.readParameters[0]
+            self.readParameters.removeAtIndex(0)
+            self.readValueForCharacteristic()
+            self.reading = true
+            ++self.readSequence
+            self.timeoutRead(self.readSequence, timeout:parameters.timeout)
+        }
+    }
 }

    }
    
    public func read(timeout:Double = 10.0) -> Future<Characteristic> {
        self.readPromise = Promise<Characteristic>(queue:self.futureQueue)
        if self.canRead {
            Logger.debug("read characteristic \(self.uuid.UUIDString)")
            self.readValueForCharacteristic()
            self.reading = true
            ++self.readSequence
            self.timeoutRead(self.readSequence, timeout:timeout)
        } else {
            self.readPromise.failure(BCError.characteristicReadNotSupported)
        }
        return self.readPromise.future
    }

    public func writeData(value:NSData, timeout:Double = 10.0, type:CBCharacteristicWriteType = .WithResponse) -> Future<Characteristic> {

    let type : CBCharacteristicWriteType
}

struct ReadParameters {
    let timeout : Double
}

extension CBCharacteristic : CBCharacteristicWrappable {}

public class Characteristic {

    private var notificationStateChangedPromise : Promise<Characteristic>
    private var readPromises = [Promise<Characteristic>]()
    private var writePromises = [Promise<Characteristic>]()
    private var notificationUpdatePromise : StreamPromise<Characteristic>?
    
    private var writeParameters = [WriteParameters]()
    private var readParameters = [ReadParameters]()
    
    private weak var _service : Service?
    
