         return dataTask
     }
     
-    public func fetchResource<T: NSManagedObject>(resource: T, URLSession: NSURLSession? = nil, completionBlock: ((error: ErrorType?) -> Void)) -> NSURLSessionDataTask {
+    /** Convenience method for fetching the values of a cached entity. */
+    public func fetchResource<T: NSManagedObject>(resource: T, URLSession: NSURLSession? = nil, completionBlock: ((ErrorValue<T>) -> Void)) -> NSURLSessionDataTask {
         
         let entityName = resource.entity.name!
         
-        let resourceID = resource.valueForKey(self.resourceIDAttributeName) as! UInt
-        
-        return self.fetchEntity(entityName, resourceID: resourceID, URLSession: URLSession, completionBlock: { (error, managedObject) -> Void in
-            
-            completionBlock(error: error)
+        let resourceID = (resource as NSManagedObject).valueForKey(self.resourceIDAttributeName) as! UInt
+        
+        return self.fetchEntity(entityName, resourceID: resourceID, URLSession: URLSession, completionBlock: { (errorValue: ErrorValue<T>) -> Void in
+            
+            // forward
+            completionBlock(errorValue)
         })
     }
     
+    /** Fetches the entity from the server using the specified ```entityName``` and ```resourceID```. */
     public func fetchEntity<T: NSManagedObject>(name: String, resourceID: UInt, URLSession: NSURLSession? = nil, completionBlock: ((ErrorValue<T>) -> Void)) -> NSURLSessionDataTask {
         
         let entity = self.managedObjectModel.entitiesByName[name]! as NSEntityDescription

        
        for (key, jsonValue) in JSONObject {
            
            let attribute = entity.attributesByName[key] as? NSAttributeDescription
            
            if attribute != nil {
                
                let (newValue: AnyObject, valid) = managedObject.entity.attributeValueForJSONCompatibleValue(jsonValue, forAttribute: key)
                
                let currentValue: AnyObject? = managedObject.valueForKey(key)
                
                // set value if not current value
                if (newValue as? NSObject) != (currentValue as? NSObject) {

        
        let entityName = JSONValue.keys.first!
        
        // verify entity is same kind as destination entity
        let entity = self.managedObjectModel.entitiesByName[entityName]
        
        if entity == nil {
            
