             
             override func callback(change: [String : AnyObject]) {
                 if let old = change[NSKeyValueChangeOldKey], new = change[NSKeyValueChangeNewKey] {
-                    self.sink.put(old: old, new: new)
+                    self.put(old: old, new: new)
                 }
             }
         }

            
            override func callback(change: [String : AnyObject]) {
                if let old = change[NSKeyValueChangeOldKey] {
                    self.sink.put(old)
                }
            }
        }

    }
}

public class Observer<T> : Sink<T> {
    
    private let base: ObserverBase
    
    private init(object: NSObject, keyPath: String, options: NSKeyValueObservingOptions) {
        self.base = ObserverBase(object: object, keyPath: keyPath, options: options)
        super.init()
        self.base.callback = { [weak self] in self?.callback($0) }
    }
    
