         }
         present.start()
     }
+
+    func findViewControllerIn(viewController: UIViewController) -> UIViewController {
+
+        switch viewController {
+        case let navigationController as UINavigationController:
+            return navigationController.topViewController
+        default:
+            break
+        }
+
+        return viewController
+    }
 }
 
 public func animate() -> UIViewControllerAnimatedTransitioning? {

    }
}

extension Manager {

    // MARK: setup tasks before running

    private func setup(context: UIViewControllerContextTransitioning) {
        let fromViewController = context.viewControllerForKey(UITransitionContextFromViewControllerKey)
        let toViewController = context.viewControllerForKey(UITransitionContextToViewControllerKey)

        if let fromViewController = fromViewController, let toViewController = toViewController {
            _setupTasks(fromViewController: fromViewController, toViewController: toViewController)
        }
    }

    private func findViewControllerIn(viewController: UIViewController) -> UIViewController {

        switch viewController {
        case let navigationController as UINavigationController:
            return navigationController.topViewController
        default:
            break
        }

        return viewController
    }

    private func _setupTasks(#fromViewController: UIViewController, toViewController: UIViewController) {
        // before
        let fromViewController = findViewControllerIn(fromViewController)
        let toViewController = findViewControllerIn(toViewController)


    // MARK: run with animation tasks

    func startTransition(context: UIViewControllerContextTransitioning) {
        let fromViewController = context.viewControllerForKey(UITransitionContextFromViewControllerKey)
        let toViewController = context.viewControllerForKey(UITransitionContextToViewControllerKey)

