 
 // MARK: PageViewControllerDelegate
 public protocol PageViewControllerDelegate {
+
+  // Called when the view controller changes to another page
   func pageViewController(pageViewController: PageViewController, didTransitionToIndex: Int)
+
+  // Called when the view controller prepares for a segue, to allow parent view controller to inject
+  // properties into child view controller
+  func pageViewController(pageViewController: PageViewController,
+                          prepareForSegue segue: UIStoryboardSegue, sender: AnyObject?)
+
 }
 
 public class PageViewController: UIPageViewController {
 
+  // Dynamic so it can be observable
   private dynamic var _selectedIndex: Int = 0
 
   public var selectedIndex: Int {

    }
  }

  public var pageViewControllers: [UIViewController] = [] {
    didSet {
      guard let firstViewController = pageViewControllers.first else {
        setViewControllers(nil, direction: .Forward, animated: false, completion: nil)
        return
      }
      setViewControllers([firstViewController], direction: .Forward, animated: false,
                         completion: nil)
    }
  }

  public var pageViewControllerDelegate: PageViewControllerDelegate?

  override init(transitionStyle style: UIPageViewControllerTransitionStyle,
                                navigationOrientation: UIPageViewControllerNavigationOrientation,
                                options: [String : AnyObject]?) {
    super.init(transitionStyle: style, navigationOrientation: navigationOrientation,
               options: options)
    commonSetup()

      return (self?.rx_observe(Int.self, "_selectedIndex") ?? Observable.empty())
        .map { index in
          index ?? 0
      }
    }

    let bindingObserver = UIBindingObserver(UIElement: self) {
