       } else {
          _transitionContexts[previousPage] = transitionContext
       }
+      
+      _transitionStateContext = nil
    }
    
    // MARK: - Init

      }
   }
   
   // MARK: - Private Properties
   private var _dataSource: DataSource! = nil
   
   // MARK: - Public Properties
   public fileprivate(set) var pages: [UIViewController] = [] {

}

extension ElementalPageViewController: UIPageViewControllerDelegate {
   public func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
      let nextViewController = pendingViewControllers.first
      let direction: UIPageViewControllerNavigationDirection = {
         guard let nextIndex = nextViewController?.view.tag else { return .forward }
         return nextIndex < currentIndex ? .reverse : .forward
      }()
      if let transitionViewController = _transitionState.nextViewController {
         cancelTransition(from: pageViewController.viewControllers?.first, to: transitionViewController, direction: _transitionState.direction, animated: true)
      }
      _transitionState.nextViewController = nextViewController
      _transitionState.direction = direction
      prepareForTransition(from: pageViewController.viewControllers?.first, to: nextViewController, direction: direction, animated: true)
   }

   public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
      guard let index = pageViewController.viewControllers?.first?.view.tag else { return }
      _setCurrentIndex(index)
      let previousViewController = previousViewControllers.first
      if previousViewController == pageViewController.viewControllers?.first, let transitionViewController = _transitionState.nextViewController {
         cancelTransition(from: previousViewController, to: transitionViewController, direction: _transitionState.direction, animated: true)
      } else {
         let direction: UIPageViewControllerNavigationDirection = {
            guard let previousIndex = previousViewController?.view.tag else { return .forward }
            return currentIndex < previousIndex ? .reverse : .forward
         }()
         recoverAfterTransition(from: previousViewController, to: pageViewController.viewControllers?.first, direction: direction, animated: true)
      }
      _transitionState.nextViewController = nil
      guard completed else { return }
      elementalDelegate?.elementalPageTransitionCompleted(index: index, destinationIndex: currentIndex, in: self)
   }
}
