   }
 
   @discardableResult
-  public func push(_ url: URLConvertible, context: Any? = nil, from: UINavigationControllerType? = nil, animated: Bool = true) -> UIViewController? {
+  public func pushURL(_ url: URLConvertible, context: Any? = nil, from: UINavigationControllerType? = nil, animated: Bool = true) -> UIViewController? {
     guard let viewController = self.viewController(for: url, context: context) else { return nil }
-    return self.push(viewController, from: from, animated: animated)
+    return self.pushViewController(viewController, from: from, animated: animated)
   }
 
   @discardableResult
-  public func push(_ viewController: UIViewController, from: UINavigationControllerType? = nil, animated: Bool = true) -> UIViewController? {
+  public func pushViewController(_ viewController: UIViewController, from: UINavigationControllerType?, animated: Bool) -> UIViewController? {
     guard (viewController is UINavigationController) == false else { return nil }
     guard let navigationController = from ?? UIViewController.topMost?.navigationController else { return nil }
     guard self.delegate?.shouldPush(viewController: viewController, from: navigationController) != false else { return nil }

  /// - returns: A matching handler factory or `nil` if not matched.
  func handler(for url: URLConvertible, context: Any?) -> URLOpenHandler?

  @discardableResult
  func push(_ url: URLConvertible, context: Any?, from: UINavigationControllerType?, animated: Bool) -> UIViewController?

  @discardableResult
  func push(_ viewController: UIViewController, from: UINavigationControllerType?, animated: Bool) -> UIViewController?

  @discardableResult
  func present(_ url: URLConvertible, context: Any?, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?

  @discardableResult
  func present(_ viewController: UIViewController, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?

  @discardableResult
  func open(_ url: URLConvertible, context: Any?) -> Bool
}

extension NavigatorType {
  public func viewController(for url: URLConvertible) -> UIViewController? {

    return handler()
  }
}


// MARK: - Syntactic Sugars for Optional Parameters

extension NavigatorType {
  @discardableResult
  public func push(_ url: URLConvertible, context: Any? = nil, from: UINavigationControllerType? = nil, animated: Bool = true) -> UIViewController? {
    return self.pushURL(url, context: context, from: from, animated: animated)
  }

  @discardableResult
  public func push(_ viewController: UIViewController, from: UINavigationControllerType? = nil, animated: Bool = true) -> UIViewController? {
    return self.pushViewController(viewController, from: from, animated: animated)
  }

  @discardableResult
  public func present(_ url: URLConvertible, context: Any? = nil, wrap: UINavigationController.Type? = nil, from: UIViewControllerType? = nil, animated: Bool = true, completion: (() -> Void)? = nil) -> UIViewController? {
    return self.presentURL(url, context: context, wrap: wrap, from: from, animated: animated, completion: completion)
  }

  @discardableResult
  public func present(_ viewController: UIViewController, wrap: UINavigationController.Type? = nil, from: UIViewControllerType? = nil, animated: Bool = true, completion: (() -> Void)? = nil) -> UIViewController? {
    return self.presentViewController(viewController, wrap: wrap, from: from, animated: animated, completion: completion)
  }
}
#endif
