 
 // MARK: - <TransactionObserverType>
 extension FetchedResultsController : TransactionObserverType {
-    public func databaseDidChangeWithEvent(event: DatabaseEvent) { }
+    public func databaseDidChangeWithEvent(event: DatabaseEvent) {
+        if let observedTables = observedTables where observedTables.contains(event.tableName) {
+            fetchedResultsDidChange = true
+        }
+    }
+    
     public func databaseWillCommit() throws { }
-    public func databaseDidRollback(db: Database) { }
+    
+    public func databaseDidRollback(db: Database) {
+        fetchedResultsDidChange = false
+    }
+    
     public func databaseDidCommit(db: Database) {
-        let newResults = source.fetchAll(db)
+        guard fetchedResultsDidChange else {
+            return
+        }
+        
+        let statement = try! source.selectStatement(db)
+        let newResults = T.fetchAll(statement)
         
         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
             let oldResults = self.fetchedResults!

    }

    // MARK: - Not public
    
    func fetch() -> [T] {
        return source.fetchAll(database)
    }
    
    private static func computeChanges(fromRows s: [T], toRows t: [T]) -> [ResultChange<T>] {
        

    }
    
    public func performFetch() {
        try! database.read { db in
            let statement = try self.source.selectStatement(db)
            self.observedTables = statement.sourceTables
            self.fetchedResults = T.fetchAll(statement)
        }
    }
    
    
