     let coinsPageIndex = 2
     let finalPageIndex = 3
     
+    // Whenever we're animating from page to page this is set to true
+    // to prevent additional taps on the Next button during the transition.
+    var isPaging: Bool = false {
+        didSet {
+            [topButton, bottomButton, skipButton, backButton].forEach { (button) in
+                button.isUserInteractionEnabled = !isPaging
+            }
+        }
+    }
+    
     var pageIndex: Int = 0 {
         didSet {
             // Show/hide the Back and Skip buttons.

                                    
            }, completion: { [weak self] _ in
                guard let `self` = self else { return }
                
                self.pageIndex += 1
                
                // Animate the Next button after the other animations are finished to give the video
                // clip a bit more time to finish. The first clip is a bit longer than the others and
                // includes a slick bitcoin transfer animation at the end.
                if self.pageIndex == 1 {
                    UIView.animate(withDuration: 0.5, delay: self.firstTransitionDelay, options: .curveEaseInOut, animations: { 
                        self.nextButtonAnimationConstraint?.constant = self.nextButtonVisibleYOffset
                        self.view.layoutIfNeeded()                    
                    })
                }
        })
    }

    }
        
    private func animateToNextPage() {
        guard !isPaging, pageIndex >= 0, pageIndex + 1 < pageCount else {
            return
        }
        
        isPaging = true
        
        let nextIndex = pageIndex + 1
        
