     ///
     ///         This function should return true if the two records have the
     ///         same identity. For example, they have the same id.
-    public convenience init(_ db: DatabaseWriter, sql: String, arguments: StatementArguments? = nil, queue: dispatch_queue_t = dispatch_get_main_queue(), isSameRecord: ((Record, Record) -> Bool)? = nil) {
+    public convenience init(_ databaseWriter: DatabaseWriter, sql: String, arguments: StatementArguments? = nil, queue: dispatch_queue_t = dispatch_get_main_queue(), isSameRecord: ((Record, Record) -> Bool)? = nil) {
         let source: DatabaseSource<Record> = .SQL(sql, arguments)
-        self.init(db: db, source: source, queue: queue, isSameRecord: isSameRecord)
+        self.init(databaseWriter: databaseWriter, source: source, queue: queue, isSameRecord: isSameRecord)
     }
     
     /// Returns a fetched records controller initialized from a fetch request

    ///
    ///         This function should return true if the two records have the
    ///         same identity. For example, they have the same id.
    public convenience init<T>(_ db: DatabaseWriter, request: FetchRequest<T>, queue: dispatch_queue_t = dispatch_get_main_queue(), isSameRecord: ((Record, Record) -> Bool)? = nil) {
        // Retype the fetch request
        let request: FetchRequest<Record> = FetchRequest(query: request.query)
        let source = DatabaseSource.FetchRequest(request)
        self.init(db: db, source: source, queue: queue, isSameRecord: isSameRecord)
    }
    
    private convenience init(db: DatabaseWriter, source: DatabaseSource<Record>, queue: dispatch_queue_t, isSameRecord: ((Record, Record) -> Bool)?) {
        if let isSameRecord = isSameRecord {
            self.init(db: db, source: source, queue: queue, isSameRecordBuilder: { _ in isSameRecord })
        } else {
            self.init(db: db, source: source, queue: queue, isSameRecordBuilder: { _ in { _ in false } })
        }
    }
    
    private init(db: DatabaseWriter, source: DatabaseSource<Record>, queue: dispatch_queue_t, isSameRecordBuilder: (Database) -> (Record, Record) -> Bool) {
        self.source = source
        self.writer = db
        self.isSameRecord = { _ in return false }
        self.isSameRecordBuilder = isSameRecordBuilder
        self.queue = queue

        let semaphore = dispatch_semaphore_create(0)
        var fetchedItems: [Item<Record>]! = nil
        
        controller.databaseWriter.readFromWrite { db in
            let statement = try! controller.source.selectStatement(db)
            fetchedItems = Item<Record>.fetchAll(statement)
            
