diff --git a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
index fcc52a6..94a7ec4 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
@@ -92,39 +92,45 @@ public class FilterMatcher {
     private final List<FilterInfo> hiddenFilters = new ArrayList<>();
     private final List<FilterInfo> disabledFilters = new ArrayList<>();
 
-    public void update(Collection<Filter> filters) throws ParseError {
+    public void reset() {
         hiddenFilters.clear();
         disabledFilters.clear();
+    }
 
-        for (Filter filter: filters) {
+    public void add(final Filter filter) throws ParseError {
+        if (!filter.enable) {
+            return;
+        }
 
-            if (!filter.enable) {
-                continue;
-            }
-
-            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);
-                }
+        FilterInfo fi = new FilterInfo(filter);
+        if (fi.isDelete) {
+            if (filter.hiding) {
+                // Remove only hide flag
+                hiddenFilters.add(fi);
             } else {
-                if (filter.mode == SearchMode.replace) {
-                    if (filter.hiding) {
-                        hiddenFilters.clear();
-                        disabledFilters.clear();
-                    }
-                }
-
+                // Remove both flags
                 disabledFilters.add(fi);
+                hiddenFilters.add(fi);
+            }
+        } else {
+            if (filter.mode == SearchMode.replace) {
                 if (filter.hiding) {
-                    hiddenFilters.add(fi);
+                    hiddenFilters.clear();
+                    disabledFilters.clear();
                 }
             }
+
+            disabledFilters.add(fi);
+            if (filter.hiding) {
+                hiddenFilters.add(fi);
+            }
+        }
+    }
+
+    public void update(Collection<Filter> filters) throws ParseError {
+        reset();
+        for (Filter filter : filters) {
+            add(filter);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
index 3b546d4..d71b87a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
@@ -29,6 +29,7 @@ import org.openstreetmap.josm.data.osm.FilterMatcher;
 import org.openstreetmap.josm.data.osm.FilterWorker;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  *
@@ -57,16 +58,21 @@ public class FilterTableModel extends AbstractTableModel {
     private final transient FilterMatcher filterMatcher = new FilterMatcher();
 
     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();
     }
 
     public void executeFilters() {
