         div {}, i className: 'fas fa-angle-down'
 
       div className: 'beatmapsets-search__advanced',
-        el Beatmaps.SearchFilter,
-          filters: @props.filters
+        @renderFilter
           name: 'genre'
-          title: osu.trans('beatmaps.listing.search.filters.genre')
           options: filters.genres
-          default: @props.filterDefaults.genre
-          selected: @props.filters.genre
 
-        el Beatmaps.SearchFilter,
-          filters: @props.filters
+        @renderFilter
           name: 'language'
-          title: osu.trans('beatmaps.listing.search.filters.language')
           options: filters.languages
-          default: @props.filterDefaults.language
-          selected: @props.filters.language
 
-        el Beatmaps.SearchFilter,
-          filters: @props.filters
+        @renderFilter
+          multiselect: true
           name: 'extra'
-          title: osu.trans('beatmaps.listing.search.filters.extra')
           options: filters.extras
+
+        @renderFilter
           multiselect: true
-          selected: @props.filters.extra
+          name: 'rank'
+          options: filters.ranks
 
-        el Beatmaps.SearchFilter,
-          filters: @props.filters
-          name: 'rank'
-          title: osu.trans('beatmaps.listing.search.filters.rank')
-          options: filters.ranks
-          multiselect: true
-          selected: @props.filters.rank
-
-        el Beatmaps.SearchFilter,
-          filters: @props.filters
+        @renderFilter
           name: 'played'
-          title: osu.trans('beatmaps.listing.search.filters.played')
           options: filters.played
-          default: @props.filterDefaults.played
-          selected: @props.filters.played
 
 
   submit: (e) =>

        div className: 'beatmapsets-search__icon',
          i className: 'fas fa-search'

      el Beatmaps.SearchFilter,
        filters: @props.filters
        name: 'general'
        title: osu.trans('beatmaps.listing.search.filters.general')
        options: filters.general
        default: @props.filterDefaults.general
        multiselect: true
        selected: @props.filters.general

      el Beatmaps.SearchFilter,
        filters: @props.filters
        name: 'mode'
        title: osu.trans('beatmaps.listing.search.filters.mode')
        options: filters.modes
        default: @props.filterDefaults.mode
        selected: @props.filters.mode

      el Beatmaps.SearchFilter,
        filters: @props.filters
        name: 'status'
        title: osu.trans('beatmaps.listing.search.filters.status')
        options: filters.statuses
        default: @props.filterDefaults.status
        selected: @props.filters.status

      a
        className: 'beatmapsets-search__expand-link'

  onInput: (event) =>
    event.persist()
    @debouncedSubmit event


  renderFilter: ({ multiselect = false, name, options }) =>
    el Beatmaps.SearchFilter,
      filters: @props.filters
      name: name
      title: osu.trans("beatmaps.listing.search.filters.#{name}")
      options: options
      default: @props.filterDefaults[name]
      multiselect: multiselect
      selected: @props.filters[name]


  renderGuest: =>
