         }
     }
     
-    private func _processNewItems(newItems: [T], clearCacheIfNewItems: Bool) {
+    private func _processNewItems(newItems: [T], clearCacheIfNewItemsAreDifferent: Bool) {
         if newItems == items {
             delegate?.itemsUpdated([], itemsDeleted: [])
             return
+        }
+        else if clearCacheIfNewItemsAreDifferent && items.count >= newItems.count {
+            let oldSlice = items[0..<newItems.count]
+            if newItems[0..<newItems.count] == oldSlice {
+                delegate?.itemsUpdated([], itemsDeleted: [])
+                return
+            }
         }
         let newSet = Set(newItems)
         let oldSet = Set(items)

        var indexPathsForInsertion: [NSIndexPath] = []
        var indexPathsForDeletion: [NSIndexPath] = []
        
        if clearCacheIfNewItems {
            indexPathsForInsertion = _indexesForItems(insertSet, inArray: newItems)
            let deleteSet = oldSet.subtract(newSet)
            indexPathsForDeletion = _indexesForItems(deleteSet, inArray: items)
            items = newItems
            cache?.clearCache()
            cache?.addItems(items)
        }

        request.fetchItems(success: { [weak self](newItems) -> () in
            if let strongSelf = self {
                if let items =  newItems as Any as? [T]{
                    strongSelf._processNewItems(items, clearCacheIfNewItemsAreDifferent: request.clearStaleDataOnCompletion)
                }
            }
        }) { (error) -> () in
            //TODO: call error callback
        }
    }
    
