         });
         
         // Tracking bounds tracks whether or not we need a tracking rectangle and whether or not it's active
-        let trackingBounds = Binding.computed({ () -> (NSRect, NeedsTracking) in
-            let boundsValue = bounds.value as! NSValue;
-            let boundsRect  = boundsValue.rectValue;
+        let trackingBounds = Binding.computed({ [unowned self] () -> (NSRect, NeedsTracking) in
+            let boundsRect  = self.reactiveBounds.value;
             return (boundsRect, needsTracking.value);
         });
         

    override public func mouseExited(theEvent: NSEvent)         { if mouseOver.value { mouseOver.value = false; } }
    
    ///
    /// Sets up the observers for this view
    ///
    private func setupObservers() {
        // TODO: currently keeping this in memory causes a self-reference (our 'keep self while binding active' policy causing us issues, I think)
        let bounds = self.bindKeyPath("frame");
        
        // Computed that works out whether or not we need a tracking rectangle
        enum NeedsTracking {
            case KeepTracking

    
    /// True if the right mouse button has been clicked over this view
    public let rightMouseDown = Binding.create(false);

    /// The bounds for this view (bound object)
    public let reactiveBounds = Binding.create(NSRect());
    
    /// The frame for this view (bound objects)
    public let reactiveFrame = Binding.create(NSRect());
    
    ///
    /// Updates mouse properties for this view from an event
