       }
 
       if let contextualNextPage = nextPage as? ElementalContextual, let nextPage = nextPage {
+         if _transitionState.nextViewController == nextPage {
+            _transitionStateContext = context
+         }
          if let oldContext = _transitionContexts[nextPage]?.context, let context = context {
             contextualNextPage.changeContext(from: oldContext, to: context)
          } else if let oldContext = _transitionContexts[nextPage]?.context {

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


public protocol ElementalPage {
   func willAppear(inPageViewController pageViewController: ElementalPageViewController)
   func cancelAppear(inPageViewController pageViewController: ElementalPageViewController)
   func didAppear(inPageViewController pageViewController: ElementalPageViewController)
   func willDisappear(fromPageViewController pageViewController: ElementalPageViewController)
   func cancelDisappear(fromPageViewController pageViewController: ElementalPageViewController)
   func didDisappear(fromPageViewController pageViewController: ElementalPageViewController)
}

public extension ElementalPage {
   func willAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func cancelAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func didAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func willDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
   func cancelDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
   func didDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
}

