 
 extension CloudKitOperation where T: CKFetchRecordsOperationType {
 
+    public typealias FetchRecordsPerRecordProgressBlock = (T.RecordID, Double) -> Void
+    public typealias FetchRecordsPerRecordCompletionBlock = (T.Record?, T.RecordID?, NSError?) -> Void
     public typealias FetchRecordsCompletionBlock = [T.RecordID: T.Record]? -> Void
 
     public var recordIDs: [T.RecordID]? {

// MARK: - CKQueryOperation

extension OPRCKOperation where T: CKQueryOperationType {

    typealias QueryCompletionBlock = T.QueryCursor? -> Void

    var query: T.Query? {
        get { return operation.query }

        set { operation.recordFetchedBlock = newValue }
    }

    func setQueryCompletionBlock(block: CloudKitOperation<T>.QueryCompletionBlock) {
        operation.queryCompletionBlock = { [unowned target] cursor, error in
            if let error = error, target = target as? GroupOperation {
                target.aggregateError(error)
