         }
     }
 
-    func write(anyValue:Any, afterWriteSucessCallback:(()->())? = nil, afterWriteFailedCallback:((error:NSError)->())? = nil) {
+    func write(stringValue:Dictionary<String, String>, afterWriteFailedCallback:((error:NSError)->())? = nil) {
+        if let value = self.profile.dataValue(stringValue) {
+            self.write(value, afterWriteFailedCallback)
+        } else {
+            NSException(name:"Characteristic write error", reason: "unable to serialize \(self.uuid.UUIDString)", userInfo: nil).raise()
+        }
+    }
+
+    func write(anyValue:Any, afterWriteSuccessCallback:()->(), afterWriteFailedCallback:((error:NSError)->())? = nil) {
         if let value = self.profile.dataValue(anyValue) {
+            
             self.write(value, afterWriteSucessCallback:afterWriteSuccessCallback, afterWriteFailedCallback:afterWriteFailedCallback)
         } else {
             NSException(name:"Characteristic write error", reason: "unable to serialize \(self.uuid.UUIDString)", userInfo: nil).raise()
         }
     }
 
+    func write(anyValue:Any, afterWriteFailedCallback:((error:NSError)->())? = nil) {
+        if let value = self.profile.dataValue(anyValue) {
+            self.write(value, afterWriteFailedCallback)
+        } else {
+            NSException(name:"Characteristic write error", reason: "unable to serialize \(self.uuid.UUIDString)", userInfo: nil).raise()
+        }
+    }
 
     // PRIVATE INTERFACE
     func timeoutRead(sequence:Int) {

        }
    }

    func write(value:NSData, afterWriteSucessCallback:(()->())? = nil, afterWriteFailedCallback:((error:NSError)->())? = nil) {
        if self.propertyEnabled(.Write) {
            self.afterWriteSuccessCallback = afterWriteSucessCallback
            self.afterWriteFailedCallback = afterWriteFailedCallback
            if afterWriteSucessCallback {
                self.service.perpheral.cbPeripheral.writeValue(value, forCharacteristic:self.cbCharacteristic, type:.WithResponse)
            } else {
                self.service.perpheral.cbPeripheral.writeValue(value, forCharacteristic:self.cbCharacteristic, type:.WithoutResponse)
            }
            self.writing = true
            ++self.writeSequence
            self.timeoutWrite(self.writeSequence)

    func didUpdate(error:NSError!) {
        self.reading = false
        if error {
            Logger.debug("Characteristic#didUpdate Failed:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
            if let afterUpdateFailedCallback = self.afterUpdateFailedCallback {
                CentralManager.asyncCallback(){afterUpdateFailedCallback(error:error)}
            }
        } else {
            Logger.debug("Characteristic#didUpdate Success:  uuid=\(self.uuid.UUIDString), name=\(self.name)")
            if let afterUpdateSuccessCallback = self.afterUpdateSuccessCallback {
                CentralManager.asyncCallback(afterUpdateSuccessCallback)
            }
