 
 extension MotionTransition {
     fileprivate func cleanupAnimation() {
-        Motion.delay(transitionDuration(using: transitionContext)) { [weak self] in
+        Motion.delay(transitionDuration(using: transitionContext) + modifiedDelay) { [weak self] in
             guard let s = self else {
                 return
             }

    }
    
    fileprivate func completeTransition() {
        fromViewController.motionDelegate?.motion?(transition: self, didTransition: toView, fromView: fromView)
        transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
    }
}

    }
}

extension UINavigationController: UINavigationControllerDelegate {
    open override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }

    @objc(navigationController:animationControllerForOperation:fromViewController:toViewController:)
    open func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
            return isMotionEnabled ? MotionTransition(isPresenting: operation == .push) : nil
    }
}

extension UITabBarController: UITabBarControllerDelegate {
    open func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
            return isMotionEnabled ? MotionTransition() : nil
    }
}

extension MotionTransition: UIViewControllerAnimatedTransitioning {
    @objc(animateTransition:)
    open func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        self.transitionContext = transitionContext
        prepareToViewController()
        prepareFromViewController()
        
        fromViewController.motionDelegate?.motion?(transition: self, willTransition: fromView, toView: toView)
        
        Motion.delay(modifiedDelay) { [weak self] in
            guard let s = self else {
                return
            }
            
            s.prepareContainerView()
            s.prepareTransitionSnapshot()
            s.prepareTransitionPairs()
            s.prepareTransitionView()
            s.prepareTransitionBackgroundView()
            s.prepareTransitionToView()
            s.prepareTransitionAnimation()
        }
    }
    
    @objc(transitionDuration:)
