     }
     
     internal func didWrite(error:NSError?) {
-        self.writing = false
-        if let error = error {
-            Logger.debug("failed:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
-            if !self.writePromise.completed {
-                self.writePromise.failure(error)
-            }
-        } else {
-            Logger.debug("success:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
-            if !self.writePromise.completed {
-                self.writePromise.success(self)
+        self.ioQueue.async() {
+            self.writing = false
+            if let error = error {
+                Logger.debug("failed:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
+                if !self.writePromise.completed {
+                    self.writePromise.failure(error)
+                }
+            } else {
+                Logger.debug("success:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
+                if !self.writePromise.completed {
+                    self.writePromise.success(self)
+                }
             }
         }
     }

    
}

extension CBCharacteristic : CBCharacteristicWrappable {}

public class Characteristic {

        let promise = Promise<Characteristic>(queue:self.futureQueue)
        if self.canWrite {
            self.ioQueue.async() {
                self.writePromises.append(promise)
                self.writeParameters.append(WriteParameters(value:value, timeout:timeout, type:type))
                self.writeNext()
            }
        } else {
            promise.failure(BCError.characteristicWriteNotSupported)
