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

        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)
        }

        }
    }
    
    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)
