     class func keyPathsForValuesAffectingIsFinished() -> Set<NSObject> {
         return ["state"]
     }
-        
+    
+    class func keyPathsForValuesAffectingIsCancelled() -> Set<NSObject> {
+        return ["cancelledState"]
+    }
+    
     // MARK: State Management
     
     private enum State: Int, Comparable {

    
    private var _internalErrors = [NSError]()
    override public func cancel() {
        super.cancel()
        if state > .Ready {
            finish()
        }

    override public var finished: Bool {
        return state == .Finished
    }
    
    var _cancelled = false {
        willSet {
            willChangeValueForKey("cancelledState")
        }
        
        didSet {
            didChangeValueForKey("cancelledState")
        }
    }
    
    override public var cancelled: Bool {
        return _cancelled
    }

    
    private func evaluateConditions() {
        assert(state == .Pending && !cancelled, "evaluateConditions() was called out-of-order")
