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

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

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