         /// Add an observer to invoke the will finish delegate method
         procedure.addWillFinishBlockObserver { [weak self] procedure, errors in
             if let queue = self {
-                self?.delegate?.procedureQueue(queue, willFinishOperation: procedure, withErrors: errors)
+                queue.delegate?.procedureQueue(queue, willFinishOperation: procedure, withErrors: errors)
             }
         }
 

     - parameter errors: an array of `Error`s.
     */
    func operationQueue(_ queue: OperationQueue, didFinishOperation operation: Operation)
}

/**

    func procedureQueue(_ queue: ProcedureQueue, willProduceOperation operation: Operation)
}

public extension ProcedureQueueDelegate {

    func procedureQueue(_ queue: ProcedureQueue, willAddOperation operation: Operation) { /* default no-op */ }

    func procedureQueue(_ queue: ProcedureQueue, willFinishOperation operation: Operation, withErrors errors: [Error]) { /* default no-op */ }

    func procedureQueue(_ queue: ProcedureQueue, willProduceOperation operation: Operation) { /* default no-op */ }
}

/**
 An `OperationQueue` subclass which supports the features of ProcedureKit. All functionality
 is achieved via the overridden functionality of `addOperation`.
