      Present a viewcontroller and conditionally wrap it in a UINavigationController instance as needed
      **/
     
-    open func present(_ controller:UIViewController, animated:Bool = true, modalNavController:UINavigationController? = nil) {
+    open func present(_ controller:UIViewController, animated:Bool = true, modalNavController:UINavigationController? = nil, completionCallback: (() -> Void)? = nil) {
         guard let navController = navigationController else {
             fatalError("Router#navigationController has not been set to a UINavigationController instance")
         }

    @exception NavigationControllerNotProvided Thrown if url opens a `UIViewController` and navigationController has not been assigned
    @exception initializerNotFound Thrown if the mapped `UIViewController` instance does not implement -initWithRouteParams: or +allocWithRouteParams:
    */
    open func open(url: String, animated: Bool = true, extraParams: RoutableParams? = nil) {
        
        guard let params = routeParams(for: url, extraParams: extraParams), let options = params.routeOptions else {
            return
        }

        }
        
        if controller is UINavigationController {
            navController.present(controller, animated: animated, completion: completionCallback)
        } else {
            var wrapperController: UINavigationController
            if let navController = modalNavController {
