diff --git a/memopol/filters.py b/memopol/filters.py
index f8c08d21838ec07231aa893dd0ee7567a59469ca..453731b72b5e0a6ba6271f8da455e716ae09c59a 100644
--- a/memopol/filters.py
+++ b/memopol/filters.py
@@ -1,5 +1,10 @@
 # coding: utf-8
 
+from dal.autocomplete import ModelSelect2
+
+import datetime
+
+from django.db.models import Q
 from django.utils.text import slugify
 
 from django_filters import FilterSet, MethodFilter, ModelChoiceFilter
@@ -8,11 +13,19 @@ from representatives.models import Chamber, Group, Representative
 
 
 def chamber_filter(qs, value):
-    return qs.filter(mandates__group__chamber=value)
+    today = datetime.date.today()
+    return qs.filter(
+        Q(mandates__end_date__gte=today) | Q(mandates__end_date__isnull=True),
+        mandates__group__chamber=value
+    )
 
 
 def group_filter(qs, value):
-    return qs.filter(mandates__group=value)
+    today = datetime.date.today()
+    return qs.filter(
+        Q(mandates__end_date__gte=today) | Q(mandates__end_date__isnull=True),
+        mandates__group=value
+    )
 
 
 class RepresentativeFilter(FilterSet):
@@ -25,6 +38,12 @@ class RepresentativeFilter(FilterSet):
     country = ModelChoiceFilter(queryset=Group.objects.filter(kind='country'),
                                 action=group_filter)
 
+    group = ModelChoiceFilter(queryset=Group.objects.exclude(
+                              kind__in=['chamber', 'country']),
+                              action=group_filter,
+                              widget=ModelSelect2(url='group-autocomplete'),
+                              label='Party, committee or delegation')
+
     class Meta:
         model = Representative
         fields = ['search', 'chamber', 'country']
diff --git a/memopol/urls.py b/memopol/urls.py
index 5f6e885fb6f5123cb3022d0f60f568a5c5257b30..2cf2f67848aac1dd58bdcb9e054fc163b28e1de8 100644
--- a/memopol/urls.py
+++ b/memopol/urls.py
@@ -6,6 +6,7 @@ from django.views import generic
 from views.dossier_ac import DossierAutocomplete, ProposalAutocomplete
 from views.dossier_detail import DossierDetail
 from views.dossier_list import DossierList
+from views.group_ac import GroupAutocomplete
 from views.group_list import GroupList
 from views.representative_detail import RepresentativeDetail
 from views.representative_list import RepresentativeList
@@ -58,6 +59,11 @@ urlpatterns = [
         RedirectGroupList.as_view(),
         name='group-list-redirect'
     ),
+    url(
+        r'^legislature/autocomplete/group/$',
+        GroupAutocomplete.as_view(),
+        name='group-autocomplete',
+    ),
     url(
         r'^votes/dossier/$',
         DossierList.as_view(),
diff --git a/memopol/views/group_ac.py b/memopol/views/group_ac.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e231b21a13f96a4387ec0e8f27f6dda157cda13
--- /dev/null
+++ b/memopol/views/group_ac.py
@@ -0,0 +1,20 @@
+# coding: utf-8
+
+from dal.autocomplete import Select2QuerySetView
+
+from django.db.models import Q
+
+from representatives.models import Group
+
+
+class GroupAutocomplete(Select2QuerySetView):
+    def get_queryset(self):
+        qs = Group.objects.exclude(kind__in=['chamber', 'country'])
+
+        if self.q:
+            qs = qs.filter(
+                Q(name__icontains=self.q) |
+                Q(abbreviation__icontains=self.q)
+            )
+
+        return qs
diff --git a/memopol/views/representative_list.py b/memopol/views/representative_list.py
index 82eda403c81f4681cdc027a94d01b59b59e012e4..9f700efa3ad87eeba48ae388f1dbebbd8b53e6cc 100644
--- a/memopol/views/representative_list.py
+++ b/memopol/views/representative_list.py
@@ -39,34 +39,6 @@ class RepresentativeList(CSVDownloadMixin, GridListMixin, PaginationMixin,
         self.current_filter = f
         return f.qs
 
-    def group_filter(self, qs):
-        group_kind = self.kwargs.get('group_kind', None)
-        chamber = self.kwargs.get('chamber', None)
-        group = self.kwargs.get('group', None)
-        today = datetime.date.today()
-
-        if group_kind and group:
-            if group.isnumeric():
-                group_qs = Group.objects.filter(
-                    id=int(group)
-                )
-            else:
-                group_qs = Group.objects.filter(
-                    name=group,
-                    kind=group_kind
-                )
-
-            if chamber:
-                group_qs = group_qs.filter(chamber__name=chamber)
-
-            qs = qs.filter(
-                models.Q(mandates__end_date__gte=today) |
-                models.Q(mandates__end_date__isnull=True),
-                mandates__group__in=group_qs
-            )
-
-        return qs
-
     def get_queryset(self):
         qs = super(RepresentativeList, self).get_queryset()
         if self.get_active_only():
diff --git a/templates/representatives/representative_list.haml b/templates/representatives/representative_list.haml
index 39f1789a9c15095fdc2835ce11c5472c59830218..620388405597234cac772062d833c5ccfbe2b7bd 100644
--- a/templates/representatives/representative_list.haml
+++ b/templates/representatives/representative_list.haml
@@ -8,7 +8,9 @@
 
   - block search
 
-    %form{action:'', method:'get'}
+    {{ filter.form.media }}
+
+    %form.filter-form{action:'', method:'get'}
       {{ filter.form.as_p }}
       %input{type:"submit", value:"Go"}