 		return nil
 	}
 
-	private func sortOrderIsAffected(by object: E, against snapshot: [String: AnyObject]) -> Bool {
+	private func sortOrderIsAffected(by object: E, comparingWithSnapshotAt objectCacheIndex: DictionaryIndex<NSManagedObjectID, [String: AnyObject]>) -> Bool {
+		let snapshot = objectCache[objectCacheIndex].1
+
 		for key in sortKeysInSections {
 			if let index = snapshot.indexForKey(key) {
 				if !object.valueForKeyPath(key)!.isEqual(snapshot[index].1) {

					preconditionFailure("current section name is supposed to exist, but not found.")
				}

				guard !sortOrderIsAffected(by: object, against: objectCache[cacheIndex].1) else {
					guard let objectIndex = sections[currentSectionIndex].storage.index(of: object.objectID,
					                                                                    using: objectSortDescriptors,
					                                                                    with: objectCache) else {
																																								preconditionFailure("An object should be in section \(currentSectionIndex), but it cannot be found. (ID: \(object.objectID.URIRepresentation()))")
					}

					sortOrderAffectingIndexPaths.insert(objectIndex, intoSetAt: currentSectionIndex)

						guard let objectIndex = sections[previousSectionIndex].storage.index(of: object.objectID,
						                                                                     using: objectSortDescriptors,
						                                                                     with: objectCache) else {
							preconditionFailure("An object should be in section \(previousSectionIndex), but it cannot be found. (ID: \(object.objectID.URIRepresentation()))")
						}

						sectionChangedIndexPaths.insert(objectIndex, intoSetAt: previousSectionIndex)
