                 continue
             }
             
-            guard let value = child.value as? CKRecordValue else {
-                continue
+            if let value = child.value as? NSString {
+                modified[label] = value
+            } else if let value = child.value as? NSNumber {
+                modified[label] = value
+            } else if let value = child.value as? NSDate {
+                modified[label] = value
+            } else if let value = child.value as? CLLocation {
+                modified[label] = value
+            } else {
+                Logging.log("Could not cast \(child) value")
             }
-            
-            modified[label] = value
         }
         
         let operation = CKModifyRecordsOperation(recordsToSave: [modified], recordIDsToDelete: nil)

            Logging.log("Have \(self.records.count) records")
            
            self.handleResultWithError(error) {
                self.perform(query, limit: limit)
            }
        }
        
        Cloud.container.publicCloudDatabase.addOperation(fetchOperation)
    }
}

}

public extension CloudRequest {
    public final func cloud(fetch recordName: String, predicate: NSPredicate = NSPredicate(format: "TRUEPREDICATE"), inDatabase db: UsedDatabase = .Private) {
        let query = CKQuery(recordType: recordName, predicate: predicate)
        perform(query, inDatabase: db)
    }
    
    public final func cloud(fetchFirst recordName: String, predicate: NSPredicate = NSPredicate(format: "TRUEPREDICATE"), sort: [NSSortDescriptor] = [], inDatabase db: UsedDatabase = .Private) {
        Logging.log("Fetch first \(recordName). Predicate: \(predicate)")
        let query = CKQuery(recordType: recordName, predicate: predicate)
        query.sortDescriptors = sort
        perform(query, limit: 1, inDatabase: db)
    }
    
    private final func perform(query: CKQuery, limit: Int? = nil, inDatabase db: UsedDatabase) {
        Logging.log("Fetch \(query.recordType)")
        
        let fetchOperation = CKQueryOperation(query: query)
