         // We don't need to do this if the view is already visible.
         guard let actionsView = actionsView, actionsView.superview == nil else { return }
         
-        layoutActionsView()
         actionsView.swipeType = swipeType
-
-        contentView.addSubview(actionsView)
+        super.contentView.insertSubview(actionsView, belowSubview: privateContentView)
+        layoutSubviews()
     }
     
     // MARK: Opening & closing action pane
-    
-    func takeSwipeSnapshot() {
-        guard let snapshot = contentView.snapshotView(afterScreenUpdates: false) else {
-            return
-        }
-        swipeSnapshotView = snapshot
-        swipeSnapshotView?.backgroundColor = backgroundView?.backgroundColor
-        snapshot.frame = contentView.bounds
-        contentView.addSubview(snapshot)
-    }
-    
-    func removeSwipeSnapshot() {
-        swipeSnapshotView?.removeFromSuperview()
-        swipeSnapshotView = nil
-    }
     
     func openActionPane() {
         // Make sure we don't swipe twice on the same cell.

        saveButton.removeObserver(self, forKeyPath: "titleLabel.text", context: &kvoButtonTitleContext)
    }
    
    override open func sizeThatFits(_ size: CGSize, apply: Bool) -> CGSize {
        
        guard apply else {
            return super.sizeThatFits(size, apply: apply)
        }
        
        layoutActionsView()
        
        if let currentSnapshot = swipeSnapshotView, let actionsView = actionsView {
            currentSnapshot.removeFromSuperview()
            actionsView.removeFromSuperview()
            let newSnapshot = contentView.snapshotView(afterScreenUpdates: true) ?? UIView()
            newSnapshot.frame = contentView.bounds
            contentView.addSubview(newSnapshot)
            contentView.addSubview(actionsView)
            swipeSnapshotView = newSnapshot
        }
        
        return super.sizeThatFits(size, apply: apply)
    }
    
    func layoutActionsView() {
        let width = actionsView?.maximumWidth ?? 0
        actionsView?.frame = CGRect(x: contentView.bounds.width - width, y: 0, width: width, height: contentView.bounds.height)
        actionsView?.setNeedsLayout()
    }

    
    // MARK - View configuration
    // These properties can mutate with each use of the cell. They should be reset by the `reset` function. Call setsNeedLayout after adjusting any of these properties

        imageView.isOpaque = true
        saveButton.isOpaque = true
        
        super.contentView.addSubview(privateContentView)

        actionsView = CollectionViewCellActionsView(frame: CGRect.zero, cell: self)
        contentView.addSubview(imageView)
        contentView.addSubview(titleLabel)
