Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 13800)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 13802)
@@ -50,21 +50,6 @@
      */
     public void filterDisplayedPlugins(PluginInstallation status) {
-        if (status == null) {
-            displayedPlugins.clear();
-            displayedPlugins.addAll(availablePlugins);
-            this.filterStatus = null;
-            return;
-        }
-        displayedPlugins.clear();
-        for (PluginInformation pi: availablePlugins) {
-            boolean installed = currentActivePlugins.contains(pi.getName());
-            if (PluginInstallation.ALL == status
-            || (PluginInstallation.INSTALLED == status && installed)
-            || (PluginInstallation.AVAILABLE == status && !installed)) {
-                displayedPlugins.add(pi);
-            }
-        }
         filterStatus = status;
-        fireStateChanged();
+        doFilter();
     }
 
@@ -74,18 +59,24 @@
      */
     public void filterDisplayedPlugins(String filter) {
-        if (filter == null) {
-            displayedPlugins.clear();
-            displayedPlugins.addAll(availablePlugins);
-            this.filterExpression = null;
-            return;
-        }
+        filterExpression = filter;
+        doFilter();
+    }
+
+    private void doFilter() {
         displayedPlugins.clear();
         for (PluginInformation pi: availablePlugins) {
-            if (pi.matches(filter)) {
+            if ((filterStatus == null || matchesInstallationStatus(pi))
+             && (filterExpression == null || pi.matches(filterExpression))) {
                 displayedPlugins.add(pi);
             }
         }
-        filterExpression = filter;
         fireStateChanged();
+    }
+
+    private boolean matchesInstallationStatus(PluginInformation pi) {
+        boolean installed = currentActivePlugins.contains(pi.getName());
+        return PluginInstallation.ALL == filterStatus
+           || (PluginInstallation.INSTALLED == filterStatus && installed)
+           || (PluginInstallation.AVAILABLE == filterStatus && !installed);
     }
 
