                     }) { (finished: Bool) in
                         animation.completion?()
                         if index == lastAnimatedItemIndex {
-                            self.itemsAnimationDidStop()
+                            self.openAnimationDidStop()
                         }
                     }
                 } else {
                     item.center = center
                     item.alpha = 1.0
-                    if index == lastAnimatedItemIndex {
-                        self.itemsAnimationDidStop()
+                    if self.overlayAnimationType == .none && index == lastAnimatedItemIndex {
+                        self.openAnimationDidStop()
                     }
                 }
                 

                animation.animation?()
            }, completion: { (finished: Bool) in
                animation.completion?()
            })
        } else {
            self.backgroundView.frame = CGRect(origin: .zero, size: self.frame.size)

    }
    
    
    /* Items management */
    
    open func add(item: UPActionButtonItem) {
        add(item: item, computeSize: true)
    }
    
    open func add(items: [UPActionButtonItem]) {
        items.forEach({ self.add(item: $0, computeSize: false) })
        computeOpenSize()
    }
    
    open func remove(item: UPActionButtonItem) {
        remove(item: item, computeSize: true)
    }
    
    open func remove(itemAt index: Int) {
        guard index >= 0 && index < items.count else { return }
        
        remove(item: items[index], computeSize: true)
    }
    
    open func removeAllItems() {
        items.forEach({ self.remove(item: $0, computeSize: false) })
        computeOpenSize()
    }
    
    
    /* Interactions */
    
    open func toggle() {
        if isOpen {
            close()
        } else {
            open()
        }
    }
    
    open func open() {
        guard !isOpen && !isAnimatingOpenClose else { return }
        
        delegate?.actionButtonWillOpen?(self)
        
        isAnimatingOpenClose = true
        animatedItemTag = 0
        
        expandContainers()
        expandOverlay()
        expandItems()
        transitionButtonTitle()
    }
    
    open func close() {
        guard isOpen && !isAnimatingOpenClose else { return }
        
        delegate?.actionButtonWillClose?(self)
        
        isAnimatingOpenClose = true
        animatedItemTag = 0
        
        reduceOverlay()
        reduceItems()
        transitionButtonTitle()
    }
    
    
