class SmartRegisterClients extends ArrayList<SmartRegisterClient> {

    public SmartRegisterClients applyFilterWithFP(final ServiceModeOption serviceModeOption,
                                                  SortOption sortOption, final FilterOption...
                                                          filterOptions) {
        SmartRegisterClients results = new SmartRegisterClients();

        Iterables.addAll(results, Iterables.filter(this, new Predicate<SmartRegisterClient>() {
            @Override
            public boolean apply(SmartRegisterClient client) {
                boolean isClientToBeFiltered = true;
                for (FilterOption filterOption : filterOptions) {
                    isClientToBeFiltered = isClientToBeFiltered && filterOption.filter(client);
                }
                return isClientToBeFiltered;
            }
        }));

        serviceModeOption.apply();
        return sortOption.sort(results);
    }

}