diff --git a/opentech/apply/dashboard/tables.py b/opentech/apply/dashboard/tables.py
index d51aa4b49db3d135a851fb1d47b287a5cccc8a2c..3fe68e7adea4225032c3ed54e4a17e3ee6c5d278 100644
--- a/opentech/apply/dashboard/tables.py
+++ b/opentech/apply/dashboard/tables.py
@@ -1,5 +1,6 @@
 import django_filters as filters
 import django_tables2 as tables
+from django_select2.forms import Select2MultipleWidget
 
 from wagtail.wagtailcore.models import Page
 
@@ -30,9 +31,15 @@ def get_used_funds(request):
     return Page.objects.filter(applicationsubmission__isnull=False).distinct()
 
 
+class Select2ModelMultipleChoiceFilter(filters.ModelMultipleChoiceFilter):
+    def __init__(self, *args, **kwargs):
+        kwargs.setdefault('widget', Select2MultipleWidget)
+        super().__init__(*args, **kwargs)
+
+
 class SubmissionFilter(filters.FilterSet):
-    round = filters.ModelMultipleChoiceFilter(queryset=get_used_rounds)
-    page = filters.ModelMultipleChoiceFilter(queryset=get_used_funds, label='Funds')
+    round = Select2ModelMultipleChoiceFilter(queryset=get_used_rounds)
+    page = Select2ModelMultipleChoiceFilter(queryset=get_used_funds, label='Funds')
 
     class Meta:
         model = ApplicationSubmission
diff --git a/opentech/apply/dashboard/templates/dashboard/dashboard.html b/opentech/apply/dashboard/templates/dashboard/dashboard.html
index 08ae363360542af9d06a1622d0f289f8ebef7909..e8ec362ed788416dfc6d13428c44d994ee47d6ed 100644
--- a/opentech/apply/dashboard/templates/dashboard/dashboard.html
+++ b/opentech/apply/dashboard/templates/dashboard/dashboard.html
@@ -24,3 +24,7 @@
     {% render_table table %}
 </div>
 {% endblock %}
+
+{% block extra_js %}
+    {{ filter.form.media }}
+{% endblock %}
diff --git a/opentech/settings/base.py b/opentech/settings/base.py
index 8fca9323f77f8c186adcac06bad7791f7b9a1fcb..7499a8eda9417a09e0fe25261cb474dc384b9d2d 100644
--- a/opentech/settings/base.py
+++ b/opentech/settings/base.py
@@ -58,6 +58,7 @@ INSTALLED_APPS = [
     'wagtailcaptcha',
     'django_tables2',
     'django_filters',
+    'django_select2',
     'addressfield',
 
     'django.contrib.admin',
diff --git a/opentech/urls.py b/opentech/urls.py
index 77fbcf1c9c77288cb42263b35e7a100a76c694b7..22c3889c8af9eab7aee4610cb49cfd108c1a32fd 100644
--- a/opentech/urls.py
+++ b/opentech/urls.py
@@ -24,6 +24,7 @@ urlpatterns = [
     url('^', include(apply_urls)),
     url('^', include('social_django.urls', namespace='social')),
     url(r'^tinymce/', include('tinymce.urls')),
+    url(r'^select2/', include('django_select2.urls')),
 ]
 
 
diff --git a/requirements.txt b/requirements.txt
index b8b5004d5c1306c6fb9a4c385bd1034944b3f991..497a0a0b9301df600ce0914bddf67b6fbe671f79 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,6 +20,7 @@ flake8
 social_auth_app_django==2.1.0
 django-tables2==1.17.1
 django-filter==1.1.0
+django_select2==6.0.1
 
 # Production dependencies
 dj-database-url==0.4.1