     // MARK: Transitioning
     //
     
+    /// Transition the page view controller to a new page.
+    ///
+    /// - parameter index:      The index of the new page.
+    /// - parameter animated:   Whether to animate the transition.
+    /// - parameter completion: The completion closure.
     public func transitionToPage(atIndex index: Int,
                                  animated: Bool,
                                  completion: PageTransitionCompletion? = nil) {
+        guard self.isTransitioning == false else { return }
+        
         if index != self.currentPageIndex {
             guard index >= 0 && index < self.viewControllers?.count ?? 0 else { return }
             guard let viewController = self.viewControllers?[index] else { return }
             
             let direction = NavigationDirection.forPage(index, previousPage: self.currentPageIndex)
+            self.isTransitioning = true
             self.pageViewController.setViewControllers([viewController],
                                                        direction: direction.pageViewControllerNavDirection,
                                                        animated: animated,

                        self.currentPageIndex = index
                    }
                    completion?(viewController, animated, finished)
            })
            
        } else {

    // MARK: Page management
    //
    
    
    /// Reload the view controllers in the page view controller. 
    /// This reloads the dataSource entirely, calling viewControllers(forPageboyViewController:)
    /// and defaultPageIndex(forPageboyViewController:).
    public func reloadPages() {
        self.reloadPages(reloadViewControllers: true)
    }
