         @noescape detailDeriviationClosure detailClosure: (transitionId: TransitionId, transitionsHandler: TransitionsHandler) -> UIViewController,
         animator: TransitionsAnimator)
     {
-        let masterNavigation = UINavigationController()
-        let detailNavigation = UINavigationController()
-        
-        let splitViewController = UISplitViewController()
-        splitViewController.viewControllers = [masterNavigation, detailNavigation]
-        
-        let masterTransitionsHandler = masterNavigation.wrappedInNavigationTransitionsHandler()
-        let detailTransitionsHandler = detailNavigation.wrappedInNavigationTransitionsHandler()
+        presentModalMasterDetailViewControllerDerivedFrom(
+            masterDeriviationClosure: masterClosure,
+            detailDeriviationClosure: detailClosure,
+            animator: animator,
+            masterNavigationController: UINavigationController(),
+            detailNavigationController: UINavigationController(),
+            splitViewController: UISplitViewController()
+        )
+    }
+    
+    func presentModalMasterDetailViewControllerDerivedFrom(
+        @noescape masterDeriviationClosure masterClosure: (transitionId: TransitionId, transitionsHandler: TransitionsHandler) -> UIViewController,
+        @noescape detailDeriviationClosure detailClosure: (transitionId: TransitionId, transitionsHandler: TransitionsHandler) -> UIViewController,
+        animator: TransitionsAnimator,
+        masterNavigationController: UINavigationController,
+        detailNavigationController: UINavigationController,
+        splitViewController: UISplitViewController)
+    {
+        splitViewController.viewControllers = [masterNavigationController, detailNavigationController]
+        
+        let masterTransitionsHandler = masterNavigationController.wrappedInNavigationTransitionsHandler()
+        let detailTransitionsHandler = detailNavigationController.wrappedInNavigationTransitionsHandler()
         let splitViewTransitionsHandler = splitViewController.wrappedInSplitViewTransitionsHandler()
         
         splitViewTransitionsHandler.masterTransitionsHandler = masterTransitionsHandler

            transitionId: generatedTransitionId,
            transitionsHandler: navigationTransitionsHandler)
        
        let resetContext = ForwardTransitionContext(
            resetingWithViewController: viewController,
            transitionsHandler: navigationTransitionsHandler,
            animator: animator,
            transitionId: generatedTransitionId)
        
        navigationTransitionsHandler.resetWithTransition(context: resetContext)
        
        let modalContext = ForwardTransitionContext(
            presentingModalViewController: viewController,

    func presentModalViewControllerDerivedFrom(
        @noescape closure: (transitionId: TransitionId, transitionsHandler: TransitionsHandler) -> UIViewController,
        animator: TransitionsAnimator)
    
    func presentModalViewControllerDerivedFrom(
        @noescape closure: (transitionId: TransitionId, transitionsHandler: TransitionsHandler) -> UIViewController,
        animator: TransitionsAnimator,
        navigationController: UINavigationController)

    func presentPopoverFromRect(
        rect: CGRect,
