diff --git a/results_feed/lib/src/model/commit.dart b/results_feed/lib/src/model/commit.dart
index fa20e26..83a8f5e 100644
--- a/results_feed/lib/src/model/commit.dart
+++ b/results_feed/lib/src/model/commit.dart
@@ -153,8 +153,9 @@
   }
 
   bool show(Filter filter) =>
-      filter.allGroups ||
+      filter.configurationGroups.isEmpty && filter.configurations.isEmpty ||
       configurations.any((configuration) =>
+          filter.configurations.contains(configuration) ||
           filter.configurationGroups.any(configuration.startsWith));
 }
 
diff --git a/results_feed/lib/src/services/filter_component.dart b/results_feed/lib/src/services/filter_component.dart
index 1a88f7a..e8497a2 100644
--- a/results_feed/lib/src/services/filter_component.dart
+++ b/results_feed/lib/src/services/filter_component.dart
@@ -67,13 +67,6 @@
   }
 
   void onSelectionChange(_) {
-    if (groupSelector.selectedValues.isEmpty) {
-      // Do not allow deselecting the last selected group.
-      // Selecting synchronously or with Future.microtask don't show in UI.
-      final recheck = service.filter.configurationGroups.first;
-      Future(() => groupSelector.select(recheck));
-      return;
-    }
     final values = groupSelector.selectedValues.toList();
     service.filter = filter.copy(configurationGroups: values);
     filter.updateUrl();
diff --git a/results_feed/lib/src/services/filter_service.dart b/results_feed/lib/src/services/filter_service.dart
index 1570063..8fe78c3 100644
--- a/results_feed/lib/src/services/filter_service.dart
+++ b/results_feed/lib/src/services/filter_service.dart
@@ -5,36 +5,39 @@
 import 'dart:html';
 
 class Filter {
+  final List<String> configurations;
   final List<String> configurationGroups;
   final bool showLatestFailures;
   final bool showUnapprovedOnly;
 
-  const Filter._(this.configurationGroups, this.showLatestFailures,
-      this.showUnapprovedOnly);
-  Filter(this.configurationGroups, this.showLatestFailures,
+  const Filter._(this.configurations, this.configurationGroups,
+      this.showLatestFailures, this.showUnapprovedOnly);
+  Filter(this.configurations, this.configurationGroups, this.showLatestFailures,
       this.showUnapprovedOnly);
 
-  static const defaultFilter = Filter._(allConfigurationGroups,
-      defaultShowLatestFailures, defaultShowUnapprovedOnly);
+  static const defaultFilter =
+      Filter._([], [], defaultShowLatestFailures, defaultShowUnapprovedOnly);
 
   Filter copy(
-          {List<String> configurationGroups,
+          {List<String> configurations,
+          List<String> configurationGroups,
           bool showLatestFailures,
           bool showUnapprovedOnly}) =>
       Filter(
+          configurations ?? this.configurations,
           configurationGroups ?? this.configurationGroups,
           showLatestFailures ?? this.showLatestFailures,
           showUnapprovedOnly ?? this.showUnapprovedOnly);
 
-  bool get allGroups =>
-      configurationGroups.length == allConfigurationGroups.length;
-
   String fragment() => [
         if (showLatestFailures != defaultShowLatestFailures)
           'showLatestFailures=$showLatestFailures',
         if (showUnapprovedOnly != defaultShowUnapprovedOnly)
           'showUnapprovedOnly=$showUnapprovedOnly',
-        if (!allGroups) 'configurationGroups=${configurationGroups.join(',')}'
+        if (configurations.isNotEmpty)
+          'configurations=${configurations.join(',')}',
+        if (configurationGroups.isNotEmpty)
+          'configurationGroups=${configurationGroups.join(',')}'
       ].join('&');
 
   void updateUrl() {
@@ -43,7 +46,7 @@
 
   factory Filter.fromUrl() {
     final fragment = Uri.parse(window.location.href).fragment;
-    Filter result = defaultFilter;
+    var result = defaultFilter;
     if (fragment.isEmpty) return result;
     for (final setting in fragment.split('&')) {
       final key = setting.split('=').first;
@@ -52,6 +55,9 @@
         result = result.copy(showLatestFailures: value == 'true');
       } else if (key == 'showUnapprovedOnly') {
         result = result.copy(showUnapprovedOnly: value == 'true');
+      } else if (key == 'configurations') {
+        final configurations = value.split(',');
+        result = result.copy(configurations: configurations);
       } else if (key == 'configurationGroups') {
         final configurationGroups = value.split(',');
         result = result.copy(configurationGroups: configurationGroups);
