public ICollection <RouteSelection> Select(ApplicationModel applicationModel)
        {
            ICollection <RouteSelection> routeSelections = ParentRouteSelector.Select(applicationModel);

            // Filter on controller level only
            if (string.IsNullOrEmpty(Action))
            {
                return(routeSelections
                       .Where(selection => !selection.ControllerModel.MatchesController(Controller, ControllerNamespace)).ToList());
            }

            // Filter actions on controller level
            routeSelections = routeSelections.Select(selection =>
            {
                if (selection.ControllerModel.MatchesController(Controller, ControllerNamespace))
                {
                    selection.ActionModels = selection.ActionModels
                                             .Where(action => !(action.MatchesActionName(Action) && action.MatchesActionArguments(ActionArguments))).ToList();
                }

                return(selection);
            }).ToList();

            if (FilterControllerOrActionWhenNoTranslatedRouteLeft)
            {
                return(routeSelections.Where(selection => selection.ControllerModel.IsOriginalModel(Localizer) &&
                                             (TranslatedRoutesRouteSelector.HasPartiallyTranslatedControllerOnlyAttributeRoute(selection.ControllerModel, selection.ActionModels,
                                                                                                                               Cultures, Localizer) ||
                                              TranslatedRoutesRouteSelector.HasPartiallyTranslatedActionAttributeRoutes(selection.ActionModels, Cultures,
                                                                                                                        Localizer))).Select(selection => new RouteSelection()
                {
                    ControllerModel = selection.ControllerModel,
                    ActionModels = selection.ActionModels
                                   .Where(action => TranslatedRoutesRouteSelector.IsPartiallyTranslatedAction(action, Cultures, Localizer)).ToList(),
                }).ToList());
            }

            if (FilterControllerOrActionWhenNoUntranslatedRouteLeft)
            {
                return(routeSelections.Where(selection => selection.ControllerModel.IsOriginalModel(Localizer) &&
                                             (UntranslatedRoutesRouteSelector.HasNotCompletelyTranslatedControllerAttributeRoute(selection.ControllerModel,
                                                                                                                                 Cultures.Single(), Localizer) ||
                                              UntranslatedRoutesRouteSelector.HasNotCompletelyTranslatedActionAttributeRoute(selection.ActionModels,
                                                                                                                             Cultures.Single(), Localizer))).Select(selection => new RouteSelection()
                {
                    ControllerModel = selection.ControllerModel,
                    ActionModels = selection.ActionModels
                                   .Where(action => UntranslatedRoutesRouteSelector.IsNotCompletelyTranslatedAction(action, Cultures.Single(),
                                                                                                                    Localizer)).ToList(),
                }).ToList());
            }

            return(routeSelections);
        }