The checking to set unchanged values is actually kind of expensive, especially for the non-CoreData situations (since calling -valueForKey will allocate objects for scalar properties) and it's rearely needed.  To speed things up, add a property on RKMappingOperation which indicates if the destination object came from a data source or not, then use that in the data source methods in order to determine whether to check for changed values.  CoreData will continue to use isTemporaryID for any managed objects, but we can now avoid checking for unchanged values in many cases.  Also, store the result from the data source once in the main method, instead of checking for every attribute.