     private var animatingToHiddenViews = [UIView]()
 
     public init(arrangedSubviews: [UIView] = []) {
-        self._arrangedSubviews = arrangedSubviews
         super.init(frame: CGRectZero)
-
         for arrangedSubview in arrangedSubviews {
             arrangedSubview.setTranslatesAutoresizingMaskIntoConstraints(false)
             addSubview(arrangedSubview)
         }
-        registerHiddenListeners()
-        registerHiddenListeners()
-    }
-    
-    private func registerHiddenListeners() {
-        for arrangedSubview in arrangedSubviews {
-            removeHiddenListener(arrangedSubview)
-            addHiddenListener(arrangedSubview)
+
+        // Closure to invoke didSet()
+        { self.arrangedSubviews = arrangedSubviews }()
+    }
+    
+    private func registerHiddenListeners(previousArrangedSubviews: [UIView]) {
+        previousArrangedSubviews.map {[weak self] in
+            self?.removeHiddenListener($0)
+        }
+
+        arrangedSubviews.map {[weak self] in
+            self?.addHiddenListener($0)
         }
     }
     

        }
    }
    
    public func addArrangedSubview(view: UIView) {
        _arrangedSubviews.append(view)
    }
    
    public func removeArrangedSubview(view: UIView) {
        if let index = find(_arrangedSubviews, view) {
            _arrangedSubviews.removeAtIndex(index)
        }
    }

    public func insertArrangedSubview(view: UIView, atIndex stackIndex: Int) {
        _arrangedSubviews.insert(view, atIndex: stackIndex)
    }

    override public func updateConstraints() {

struct TZAnimationDidStopQueueEntry: Equatable {
    let view: UIView
    let hidden: Bool
}

func ==(lhs: TZAnimationDidStopQueueEntry, rhs: TZAnimationDidStopQueueEntry) -> Bool {
