                     block(keyPath: keyPath, object: object, change: change)
                 }
                 else {
-                    observing.observeValueForKeyPath?(keyPath, ofObject: object, change: change)
+                    observing.observeValueForKeyPath?(kvoHelper:self, keyPath: keyPath, ofObject: object, change: change)
                 }
             }
         }

    private var keys = [String]()
    private var blockMap = [String: KVObservingBlock]()
    private unowned let observer:NSObject
    private unowned let observed:NSObject
    
    public init(observer:NSObject) {
        
        self.observer = observer
        
        if let observing:KVObserving = self.observer as? KVObserving where observing.observableObject() != nil {
            observed = observing.observableObject()!
        }
        else {
            observed = NSObject()
        }
        
        super.init()
    }
    
    deinit {


@objc public protocol KVObserving {
    
    func observableObject(#kvoHelper:KVOHelper) -> NSObject?
    
    optional func observeValueForKeyPath(#kvoHelper:KVOHelper, keyPath: String, ofObject object: AnyObject, change: [NSObject: AnyObject])
    
}

