Index: trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 9347)
+++ trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 9348)
@@ -93,36 +93,55 @@
     private final List<FilterInfo> disabledFilters = new ArrayList<>();
 
+    /**
+     * Clears the current filters, and adds the given filters
+     * @param filters the filters to add
+     * @throws ParseError if the search expression in one of the filters cannot be parsed
+     */
     public void update(Collection<Filter> filters) throws ParseError {
+        reset();
+        for (Filter filter : filters) {
+            add(filter);
+        }
+    }
+
+    /**
+     * Clears the filters in use.
+     */
+    public void reset() {
         hiddenFilters.clear();
         disabledFilters.clear();
-
-        for (Filter filter: filters) {
-
-            if (!filter.enable) {
-                continue;
-            }
-
-            FilterInfo fi = new FilterInfo(filter);
-            if (fi.isDelete) {
+    }
+
+    /**
+     * Adds a filter to the currently used filters
+     * @param filter the filter to add
+     * @throws ParseError if the search expression in the filter cannot be parsed
+     */
+    public void add(final Filter filter) throws ParseError {
+        if (!filter.enable) {
+            return;
+        }
+
+        FilterInfo fi = new FilterInfo(filter);
+        if (fi.isDelete) {
+            if (filter.hiding) {
+                // Remove only hide flag
+                hiddenFilters.add(fi);
+            } else {
+                // Remove both flags
+                disabledFilters.add(fi);
+                hiddenFilters.add(fi);
+            }
+        } else {
+            if (filter.mode == SearchMode.replace) {
                 if (filter.hiding) {
-                    // Remove only hide flag
-                    hiddenFilters.add(fi);
-                } else {
-                    // Remove both flags
-                    disabledFilters.add(fi);
-                    hiddenFilters.add(fi);
-                }
-            } else {
-                if (filter.mode == SearchMode.replace) {
-                    if (filter.hiding) {
-                        hiddenFilters.clear();
-                        disabledFilters.clear();
-                    }
-                }
-
-                disabledFilters.add(fi);
-                if (filter.hiding) {
-                    hiddenFilters.add(fi);
-                }
+                    hiddenFilters.clear();
+                    disabledFilters.clear();
+                }
+            }
+
+            disabledFilters.add(fi);
+            if (filter.hiding) {
+                hiddenFilters.add(fi);
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java	(revision 9347)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java	(revision 9348)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -58,14 +59,19 @@
 
     private void updateFilters() {
-        try {
-            filterMatcher.update(filters);
-            executeFilters();
-        } catch (ParseError e) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    e.getMessage(),
-                    tr("Error in filter"),
-                    JOptionPane.ERROR_MESSAGE);
-        }
+        filterMatcher.reset();
+        for (Filter filter : filters) {
+            try {
+                filterMatcher.add(filter);
+            } catch (ParseError e) {
+                JOptionPane.showMessageDialog(
+                        Main.parent,
+                        tr("<html>Error in filter <code>{0}</code>:<br>{1}", Utils.shortenString(filter.text, 80), e.getMessage()),
+                        tr("Error in filter"),
+                        JOptionPane.ERROR_MESSAGE);
+                filter.enable = false;
+                savePrefs();
+            }
+        }
+        executeFilters();
     }
 
