    }
    
    private func _commonInit() {
+      showsPageIndicator = true
       delegate = self
-      dataSource = self
+      dataSource = _dataSource
    }
    
    // MARK: - Life Cycle

      self.currentIndex = currentIndex
      _transition(from: viewControllers?.first, to: pages.count > currentIndex ? pages[currentIndex] : nil, direction: direction, animated: animated, notifyDelegate: true, completion: completion)
   }

   public weak var elementalDelegate: ElementalPageViewControllerDelegate?
   

}

open class ElementalPageViewController: UIPageViewController {
   // MARK: - Nested Types
   private class DataSource: NSObject, UIPageViewControllerDataSource {
      // MARK: - Private Properties
      fileprivate unowned let _owner: ElementalPageViewController
      
      // MARK: - Init
      init(owner: ElementalPageViewController) {
         _owner = owner
      }
      
      // MARK: - UIPageViewControllerDataSource
      public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
         guard let index = _owner.pages.index(of: viewController), index < _owner.pages.count - 1 else { return nil }
         return _owner.pages[index + 1]
      }
      
      public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
         guard let index = _owner.pages.index(of: viewController), index > 0 else { return nil }
         return _owner.pages[index - 1]
      }
      
   }
   
   private class PageIndicatorDataSource: DataSource {
      // MARK: - UIPageViewControllerDataSource
      public func presentationCount(for pageViewController: UIPageViewController) -> Int {
         return _owner.pages.count
      }
      
      public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
         return _owner.currentIndex
      }
   }
   
   // MARK: - Private Properties
   private var _dataSource: DataSource! = nil
   
   // MARK: - Public Properties
   public fileprivate(set) var pages: [UIViewController] = [] {
      didSet {
