         }
         
         /// Returns an array where deletion/insertion pairs of the same element are replaced by `.Move` change.
-        func standardizeChanges(changes: [ItemChange<T>]) -> [ItemChange<T>] {
+        func standardizeChanges(changes: [ItemChange<Record>]) -> [ItemChange<Record>] {
             
             /// Returns a potential .Move or .Update if *change* has a matching change in *changes*:
             /// If *change* is a deletion or an insertion, and there is a matching inverse
             /// insertion/deletion with the same value in *changes*, a corresponding .Move or .Update is returned.
             /// As a convenience, the index of the matched change is returned as well.
-            func mergedChange(change: ItemChange<T>, inChanges changes: [ItemChange<T>]) -> (mergedChange: ItemChange<T>, mergedIndex: Int)? {
+            func mergedChange(change: ItemChange<Record>, inChanges changes: [ItemChange<Record>]) -> (mergedChange: ItemChange<Record>, mergedIndex: Int)? {
                 
                 /// Returns the changes between two rows: a dictionary [key: oldValue]
                 /// Precondition: both rows have the same columns

    
    // TODO: document that queue MUST be serial
    public convenience init<U>(_ database: DatabaseWriter, _ request: FetchRequest<U>, queue: dispatch_queue_t = dispatch_get_main_queue(), compareRecordsByPrimaryKey: Bool) {
        let request: FetchRequest<T> = FetchRequest(query: request.query) // Retype the fetch request
        let source = DatabaseSource.FetchRequest(request)
        if compareRecordsByPrimaryKey {
            self.init(database: database, source: source, queue: queue, isSameRecordBuilder: { db in try! T.primaryKeyComparator(db) })
        } else {
            self.init(database: database, source: source, queue: queue, isSameRecordBuilder: { _ in { _ in false } })
        }

    
    public weak var delegate: FetchedRecordsControllerDelegate?
    
    
    // Configuration: database
    
    /// The databaseWriter
