         forChangeType type: NSFetchedResultsChangeType,
         newIndexPath: NSIndexPath?) {
             
+            switch self.state {
+                
+            case .Initial: break // ignore, events will be called manually
+                
+            case .Loaded: break // no ongoing requests, should update from cache
+                
+            case .Refreshing: break // provide update animations
+                
+            case .LoadingCursor: return // ignore, will load more from server
+            }
+            
             switch type {
                 
             case .Insert:

    /// The cached search results.
    public private(set) var searchResults = [NSManagedObject]()
    
    public var event = QueryResultsControllerEvent()
    
    public private(set) var state = QueryResultsControllerState()
    
    // MARK: - Private Properties
    

    case Loading
}

public struct QueryResultsControllerEvent<T> {
    
    // Request Callback
    
    /// Informs the delegate that a search request has completed with the specified error (if any).
    public var didRefresh: (ErrorValue<[T]>) -> () = { (error) in }
    
    public var didLoadCursor: (ErrorValue<[T]>) -> () = { (error) in }
    
    // Change Notification Callbacks
    
    public var willChangeContent: () -> () = { }
    
    public var didChangeContent: () -> () = { }
    
    public var didInsert: ((index: Int) -> ()) = { (index) in }
    
