Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 3355)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.actions.ParameterizedAction;
 import org.openstreetmap.josm.actions.ActionParameter.SearchSettingsActionParameter;
+import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Filter;
@@ -157,8 +158,8 @@
         bg.add(in_selection);
 
-        JCheckBox caseSensitive = new JCheckBox(tr("case sensitive"), initialValues.caseSensitive);
+        final JCheckBox caseSensitive = new JCheckBox(tr("case sensitive"), initialValues.caseSensitive);
         JCheckBox allElements = new JCheckBox(tr("all objects"), initialValues.allElements);
         allElements.setToolTipText(tr("Also include incomplete and deleted objects in search."));
-        JCheckBox regexSearch   = new JCheckBox(tr("regular expression"), initialValues.regexSearch);
+        final JCheckBox regexSearch   = new JCheckBox(tr("regular expression"), initialValues.regexSearch);
 
         JPanel left = new JPanel(new GridBagLayout());
@@ -218,5 +219,23 @@
                     initialValues instanceof Filter ? tr("Submit filter") : tr("Start Search"),
                             tr("Cancel")}
-        );
+        ) {
+            @Override
+            protected void buttonAction(int buttonIndex, ActionEvent evt) {
+                if (buttonIndex == 0) {
+                    try {
+                        SearchCompiler.compile(hcbSearchString.getText(), caseSensitive.isSelected(), regexSearch.isSelected());
+                        super.buttonAction(buttonIndex, evt);
+                    } catch (ParseError e) {
+                        JOptionPane.showMessageDialog(
+                                Main.parent,
+                                tr("Search expression is not valid: \n\n {0}", e.getMessage()),
+                                tr("Invalid search expression"),
+                                JOptionPane.ERROR_MESSAGE);
+                    }
+                } else {
+                    super.buttonAction(buttonIndex, evt);
+                }
+            }
+        };
         dialog.setButtonIcons(new String[] {"dialogs/search.png", "cancel.png"});
         dialog.configureContextsensitiveHelp("/Action/Search", true /* show help button */);
@@ -282,8 +301,9 @@
 
             Collection<OsmPrimitive> all;
-            if(s.allElements)
+            if(s.allElements) {
                 all = Main.main.getCurrentDataSet().allPrimitives();
-            else
+            } else {
                 all = Main.main.getCurrentDataSet().allNonDeletedCompletePrimitives();
+            }
             for (OsmPrimitive osm : all) {
                 if (s.mode == SearchMode.replace) {
@@ -415,9 +435,9 @@
         public SearchSetting() {
             this("", SearchMode.replace, false /* case insensitive */,
-            false /* no regexp */, false /* only useful primitives */);
+                    false /* no regexp */, false /* only useful primitives */);
         }
 
         public SearchSetting(String text, SearchMode mode, boolean caseSensitive,
-        boolean regexSearch, boolean allElements) {
+                boolean regexSearch, boolean allElements) {
             this.caseSensitive = caseSensitive;
             this.regexSearch = regexSearch;
@@ -429,5 +449,5 @@
         public SearchSetting(SearchSetting original) {
             this(original.text, original.mode, original.caseSensitive,
-            original.regexSearch, original.allElements);
+                    original.regexSearch, original.allElements);
         }
 
@@ -436,10 +456,10 @@
             String cs = caseSensitive ?
                     /*case sensitive*/  trc("search", "CS") :
-                    /*case insensitive*/  trc("search", "CI");
-            String rx = regexSearch ? (", " +
-                    /*regex search*/ trc("search", "RX")) : "";
-            String all = allElements ? (", " +
-                    /*all elements*/ trc("search", "A")) : "";
-            return "\"" + text + "\" (" + cs + rx + all + ", " + mode + ")";
+                        /*case insensitive*/  trc("search", "CI");
+                    String rx = regexSearch ? (", " +
+                            /*regex search*/ trc("search", "RX")) : "";
+                    String all = allElements ? (", " +
+                            /*all elements*/ trc("search", "A")) : "";
+                    return "\"" + text + "\" (" + cs + rx + all + ", " + mode + ")";
         }
 
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 3355)
@@ -75,5 +75,5 @@
     }
 
-    private static class Not extends Match {
+    public static class Not extends Match {
         private final Match match;
         public Not(Match match) {this.match = match;}
Index: /trunk/src/org/openstreetmap/josm/data/osm/Filter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 3355)
@@ -11,16 +11,17 @@
     private static final String version = "1";
 
-    public Boolean enable = true;
-    public Boolean hiding = false;
-    public Boolean inverted = false;
+    public boolean enable = true;
+    public boolean hiding = false;
+    public boolean inverted = false;
+
     public Filter() {
         super("", SearchMode.add, false, false, false);
     }
     public Filter(String text, SearchMode mode, boolean caseSensitive,
-    boolean regexSearch, boolean allElements) {
+            boolean regexSearch, boolean allElements) {
         super(text, mode, caseSensitive, regexSearch, allElements);
     }
 
-    public Filter(String prefText){
+    public Filter(String prefText) {
         super("", SearchMode.add, false, false, false);
         String[] prfs = prefText.split(";");
@@ -49,8 +50,8 @@
     public String getPrefString(){
         return version + ";" +
-            text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" +
-            "legacy" + ";" + enable + ";" + hiding + ";" +
-            inverted + ";" +
-            "false"; // last parameter is not used any more (was: applyForChildren)
+        text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" +
+        "legacy" + ";" + enable + ";" + hiding + ";" +
+        inverted + ";" +
+        "false"; // last parameter is not used any more (was: applyForChildren)
     }
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 3355)
+++ /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 3355)
@@ -0,0 +1,76 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.openstreetmap.josm.actions.search.SearchCompiler;
+import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
+import org.openstreetmap.josm.actions.search.SearchCompiler.Match;
+import org.openstreetmap.josm.actions.search.SearchCompiler.Not;
+import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
+
+public class FilterMatcher {
+
+    private static class FilterInfo {
+        final Match match;
+        final boolean isDelete;
+
+        FilterInfo(Filter filter) throws ParseError {
+            if (filter.mode == SearchMode.remove || filter.mode == SearchMode.in_selection) {
+                isDelete = true;
+            } else {
+                isDelete = false;
+            }
+
+            Match compiled = SearchCompiler.compile(filter.text, filter.caseSensitive, filter.regexSearch);
+            this.match = filter.inverted?new Not(compiled):compiled;
+        }
+    }
+
+    private final List<FilterInfo> hiddenFilters = new ArrayList<FilterInfo>();
+    private final List<FilterInfo> disabledFilters = new ArrayList<FilterInfo>();
+
+    public void update(Collection<Filter> filters) throws ParseError {
+        hiddenFilters.clear();
+        disabledFilters.clear();
+
+        for (Filter filter: filters) {
+
+            if (!filter.enable) {
+                continue;
+            }
+
+            List<FilterInfo> list = filter.hiding?hiddenFilters:disabledFilters;
+
+            if (filter.mode == SearchMode.replace) {
+                // No point in evalutaing filter when value will get replaced anyway (and yes, there is no point in using replace mode with filters)
+                list.clear();
+            }
+
+            list.add(new FilterInfo(filter));
+        }
+    }
+
+    private boolean test(List<FilterInfo> filters, OsmPrimitive primitive) {
+        boolean selected = false;
+        for (FilterInfo fi: filters) {
+            if (fi.isDelete && selected && fi.match.match(primitive)) {
+                selected = false;
+            } else if (!fi.isDelete && !selected && fi.match.match(primitive)) {
+                selected = true;
+            }
+        }
+        return selected;
+    }
+
+    public boolean isHidden(OsmPrimitive primitive) {
+        return test(hiddenFilters, primitive);
+    }
+
+    public boolean isDisabled(OsmPrimitive primitive) {
+        return test(disabledFilters, primitive);
+    }
+
+}
Index: /trunk/src/org/openstreetmap/josm/data/osm/Filters.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 3355)
@@ -16,9 +16,9 @@
 import javax.swing.BorderFactory;
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.table.AbstractTableModel;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.search.SearchAction;
-import org.openstreetmap.josm.tools.Property;
+import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
 
 /**
@@ -37,5 +37,20 @@
     }
 
-    private List<Filter> filters = new LinkedList<Filter>();
+    private final List<Filter> filters = new LinkedList<Filter>();
+    private final 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);
+        }
+    }
+
 
     /**
@@ -69,164 +84,36 @@
 
         final Collection<OsmPrimitive> all = ds.allNonDeletedCompletePrimitives();
-        // temporary set to collect the primitives returned by the search engine
-        final Collection<OsmPrimitive> collect = new HashSet<OsmPrimitive>();
-
-        // an auxiliary property to collect the results of the search engine
-        class CollectProperty implements Property<OsmPrimitive,Boolean> {
-            boolean collectValue;
-            boolean hidden;
-
-            /**
-             * Depending on the parameters, there are 4 different instances
-             * of this class.
-             *
-             * @param collectValue
-             *          If true: collect only those primitives that are added
-             *              by the search engine.
-             *          If false: Collect only those primitives that are removed
-             *              by the search engine.
-             * @param hidden Whether the property refers to primitives that
-             *          are disabled and hidden or to primitives
-             *          that are disabled only.
-             */
-            public CollectProperty(boolean collectValue, boolean hidden) {
-                this.collectValue = collectValue;
-                this.hidden = hidden;
-            }
-
-            public Boolean get(OsmPrimitive osm) {
-                if (hidden)
-                    return osm.isDisabledAndHidden();
-                else
-                    return osm.isDisabled();
-            }
-
-            public void set(OsmPrimitive osm, Boolean value) {
-                if (collectValue == value.booleanValue()) {
-                    collect.add(osm);
-                }
-            }
-        }
-
-        clearFilterFlags();
-
-        for (Filter flt : filters){
-            if (flt.enable) {
-                collect.clear();
-                // Decide, whether primitives are collected that are added to the current
-                // selection or those that are removed from the current selection
-                boolean collectValue = flt.mode == SearchAction.SearchMode.replace || flt.mode == SearchAction.SearchMode.add;
-                Property<OsmPrimitive,Boolean> collectProp = new CollectProperty(collectValue, flt.hiding);
-
-                SearchAction.getSelection(flt, all, collectProp);
-
-                switch (flt.mode) {
-                case replace:
-                    for (OsmPrimitive osm : all) {
-                        osm.unsetDisabledState();
+
+        for (OsmPrimitive primitive: all) {
+            if (filterMatcher.isHidden(primitive)) {
+                primitive.setDisabledState(true);
+            } else if (filterMatcher.isDisabled(primitive)) {
+                primitive.setDisabledState(false);
+            } else {
+                primitive.unsetDisabledState();
+            }
+        }
+
+        for (OsmPrimitive primitive: all) {
+            if (primitive instanceof Way && primitive.isDisabled()) {
+                Way w = (Way)primitive;
+                for (Node n: w.getNodes()) {
+
+                    if (n.isTagged()) {
+                        continue;
                     }
-                case add:
-                    if (!flt.inverted) {
-                        for (OsmPrimitive osm : collect) {
-                            osm.setDisabledState(flt.hiding);
-                        }
-
-                        // Find child nodes of hidden ways and add them to the hidden nodes
-                        for (OsmPrimitive osm : collect) {
-                            if (osm instanceof Way) {
-                                nodes:
-                                    for (Node n : ((Way)osm).getNodes()) {
-                                        // if node is already disabled, there is nothing to do
-                                        if (n.isDisabledAndHidden() || (!flt.hiding && n.isDisabled())) {
-                                            continue;
-                                        }
-
-                                        // if the node is tagged, don't disable it
-                                        if (n.isTagged()) {
-                                            continue;
-                                        }
-
-                                        // if the node has undisabled parent ways, don't disable it
-                                        for (OsmPrimitive ref : n.getReferrers()) {
-                                            if (ref instanceof Way) {
-                                                if (!ref.isDisabled()) {
-                                                    continue nodes;
-                                                }
-                                                if (flt.hiding && !ref.isDisabledAndHidden()) {
-                                                    continue nodes;
-                                                }
-                                            }
-                                        }
-                                        n.setDisabledState(flt.hiding);
-                                    }
-                            }
-                        }
-                    } else { // inverted filter in add mode
-                        // update flags, except for nodes
-                        for (OsmPrimitive osm : collect) {
-                            if (!(osm instanceof Node)) {
-                                osm.setDisabledState(flt.hiding);
-                            }
-                        }
-
-                        // update flags for nodes
-                        nodes:
-                            for (OsmPrimitive osm : collect) {
-                                if (osm instanceof Node) {
-                                    // if node is already disabled, there is nothing to do
-                                    if (osm.isDisabledAndHidden() || (!flt.hiding && osm.isDisabled())) {
-                                        continue;
-                                    }
-
-                                    // if the node has undisabled parent ways, don't disable it
-                                    for (OsmPrimitive ref : osm.getReferrers()) {
-                                        if (ref instanceof Way) {
-                                            if (!ref.isDisabled()) {
-                                                continue nodes;
-                                            }
-                                            if (flt.hiding && !ref.isDisabledAndHidden()) {
-                                                continue nodes;
-                                            }
-                                        }
-                                    }
-                                    osm.setDisabledState(flt.hiding);
-                                }
-                            }
-                    }
-                    break;
-                case remove:
-                case in_selection:
-                    if (!flt.inverted) {
-                        // make the described primitive undisabled again
-                        for (OsmPrimitive osm : collect) {
-                            osm.unsetDisabledState();
-                        }
-
-                        // Undisable the child nodes of undisabled ways
-                        for (OsmPrimitive osm : collect) {
-                            if (osm instanceof Way) {
-                                for (Node n : ((Way) osm).getNodes()) {
-                                    n.unsetDisabledState();
-                                }
-                            }
-                        }
-                    } else { // inverted filter in remove mode
-                        // make the described primitive undisabled again
-                        for (OsmPrimitive osm : collect) {
-                            osm.unsetDisabledState();
-                        }
-
-                        // Undisable the child nodes of undisabled ways
-                        for (OsmPrimitive osm : collect) {
-                            if (osm instanceof Way) {
-                                for (Node n : ((Way) osm).getNodes()) {
-                                    n.unsetDisabledState();
-                                }
-                            }
+
+                    boolean disabled = w.isDisabled();
+                    boolean hidden = w.isDisabledAndHidden();
+                    for (OsmPrimitive ref: n.getReferrers()) {
+                        if (ref instanceof Way) {
+                            disabled = disabled && ref.isDisabled();
+                            hidden = hidden && ref.isDisabledAndHidden();
                         }
                     }
-                    break;
-                default:
-                    throw new IllegalStateException();
+
+                    if (disabled) {
+                        n.setDisabledState(hidden);
+                    }
                 }
             }
@@ -269,26 +156,28 @@
 
     private void loadPrefs() {
-        Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
+        Map<String, String> prefs = Main.pref.getAllPrefix("filters.filter");
         for (String value : prefs.values()) {
             filters.add(new Filter(value));
         }
-    }
-
-    private void savePrefs(){
-        Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
+        updateFilters();
+    }
+
+    private void savePrefs() {
+        Map<String, String> prefs = Main.pref.getAllPrefix("filters.filter");
         for (String key : prefs.keySet()) {
             String[] sts = key.split("\\.");
-            if (sts.length != 3)throw new Error("Incompatible filter preferences");
+            if (sts.length != 3)
+                throw new Error("Incompatible filter preferences");
             Main.pref.put("filters.filter." + sts[2], null);
         }
 
         int i = 0;
-        for (Filter flt : filters){
+        for (Filter flt : filters) {
             Main.pref.put("filters.filter." + i++, flt.getPrefString());
         }
     }
 
-    private void savePref(int i){
-        if(i >= filters.size()) {
+    private void savePref(int i) {
+        if (i >= filters.size()) {
             Main.pref.put("filters.filter." + i, null);
         } else {
@@ -297,128 +186,140 @@
     }
 
-    public void addFilter(Filter f){
+    public void addFilter(Filter f) {
         filters.add(f);
-        savePref(filters.size()-1);
-        executeFilters();
-        fireTableRowsInserted(filters.size()-1, filters.size()-1);
-    }
-
-    public void moveDownFilter(int i){
-        if(i >= filters.size()-1) return;
-        filters.add(i+1, filters.remove(i));
+        savePref(filters.size() - 1);
+        updateFilters();
+        fireTableRowsInserted(filters.size() - 1, filters.size() - 1);
+    }
+
+    public void moveDownFilter(int i) {
+        if (i >= filters.size() - 1)
+            return;
+        filters.add(i + 1, filters.remove(i));
         savePref(i);
-        savePref(i+1);
-        executeFilters();
-        fireTableRowsUpdated(i, i+1);
-    }
-
-    public void moveUpFilter(int i){
-        if(i == 0) return;
-        filters.add(i-1, filters.remove(i));
+        savePref(i + 1);
+        updateFilters();
+        fireTableRowsUpdated(i, i + 1);
+    }
+
+    public void moveUpFilter(int i) {
+        if (i == 0)
+            return;
+        filters.add(i - 1, filters.remove(i));
         savePref(i);
-        savePref(i-1);
-        executeFilters();
-        fireTableRowsUpdated(i-1, i);
-    }
-
-    public void removeFilter(int i){
+        savePref(i - 1);
+        updateFilters();
+        fireTableRowsUpdated(i - 1, i);
+    }
+
+    public void removeFilter(int i) {
         filters.remove(i);
         savePrefs();
-        executeFilters();
+        updateFilters();
         fireTableRowsDeleted(i, i);
     }
 
-    public void setFilter(int i, Filter f){
+    public void setFilter(int i, Filter f) {
         filters.set(i, f);
         savePref(i);
-        executeFilters();
+        updateFilters();
         fireTableRowsUpdated(i, i);
     }
 
-    public Filter getFilter(int i){
+    public Filter getFilter(int i) {
         return filters.get(i);
     }
 
-    public int getRowCount(){
+    public int getRowCount() {
         return filters.size();
     }
 
-    public int getColumnCount(){
+    public int getColumnCount() {
         return 5;
     }
 
     @Override
-    public String getColumnName(int column){
+    public String getColumnName(int column) {
         String[] names = { /* translators notes must be in front */
-                /* column header: enable filter */             trc("filter","E"),
-                /* column header: hide filter */               trc("filter", "H"),
-                /* column header: filter text */               trc("filter", "Text"),
-                /* column header: inverted filter */           trc("filter", "I"),
-                /* column header: filter mode */               trc("filter", "M")
-        };
+                /* column header: enable filter */trc("filter", "E"),
+                /* column header: hide filter */trc("filter", "H"),
+                /* column header: filter text */trc("filter", "Text"),
+                /* column header: inverted filter */trc("filter", "I"),
+                /* column header: filter mode */trc("filter", "M") };
         return names[column];
     }
 
     @Override
-    public Class<?> getColumnClass(int column){
+    public Class<?> getColumnClass(int column) {
         Class<?>[] classes = { Boolean.class, Boolean.class, String.class, Boolean.class, String.class };
         return classes[column];
     }
 
-    public boolean isCellEnabled(int row, int column){
-        if(!filters.get(row).enable && column!=0) return false;
+    public boolean isCellEnabled(int row, int column) {
+        if (!filters.get(row).enable && column != 0)
+            return false;
         return true;
     }
 
     @Override
-    public boolean isCellEditable(int row, int column){
-        if(!filters.get(row).enable && column!=0) return false;
-        if(column < 4)return true;
+    public boolean isCellEditable(int row, int column) {
+        if (!filters.get(row).enable && column != 0)
+            return false;
+        if (column < 4)
+            return true;
         return false;
     }
 
     @Override
-    public void setValueAt(Object aValue, int row, int column){
+    public void setValueAt(Object aValue, int row, int column) {
         Filter f = filters.get(row);
-        switch(column){
+        switch (column) {
         case 0:
-            f.enable = (Boolean)aValue;
+            f.enable = (Boolean) aValue;
             savePref(row);
-            executeFilters();
+            updateFilters();
             fireTableRowsUpdated(row, row);
             break;
         case 1:
-            f.hiding = (Boolean)aValue;
+            f.hiding = (Boolean) aValue;
             savePref(row);
-            executeFilters();
+            updateFilters();
             break;
         case 2:
-            f.text = (String)aValue;
+            f.text = (String) aValue;
             savePref(row);
             break;
         case 3:
-            f.inverted = (Boolean)aValue;
+            f.inverted = (Boolean) aValue;
             savePref(row);
-            executeFilters();
+            updateFilters();
             break;
         }
-        if(column!=0) {
+        if (column != 0) {
             fireTableCellUpdated(row, column);
         }
     }
 
-    public Object getValueAt(int row, int column){
+    public Object getValueAt(int row, int column) {
         Filter f = filters.get(row);
-        switch(column){
-        case 0: return f.enable;
-        case 1: return f.hiding;
-        case 2: return f.text;
-        case 3: return f.inverted;
+        switch (column) {
+        case 0:
+            return f.enable;
+        case 1:
+            return f.hiding;
+        case 2:
+            return f.text;
+        case 3:
+            return f.inverted;
         case 4:
-            switch(f.mode){ /* translators notes must be in front */
-            case replace:      /* filter mode: replace */      return trc("filter", "R");
-            case add:          /* filter mode: add */          return trc("filter", "A");
-            case remove:       /* filter mode: remove */       return trc("filter", "D");
-            case in_selection: /* filter mode: in selection */ return trc("filter", "F");
+            switch (f.mode) { /* translators notes must be in front */
+            case replace: /* filter mode: replace */
+                return trc("filter", "R");
+            case add: /* filter mode: add */
+                return trc("filter", "A");
+            case remove: /* filter mode: remove */
+                return trc("filter", "D");
+            case in_selection: /* filter mode: in selection */
+                return trc("filter", "F");
             }
         }
@@ -434,5 +335,5 @@
             setOpaque(true);
             setForeground(Color.black);
-            setBackground(new Color(0,0,0,0));
+            setBackground(new Color(0, 0, 0, 0));
             setFont(getFont().deriveFont(Font.PLAIN));
             setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
@@ -450,5 +351,5 @@
 
     public void drawOSDText(Graphics2D g) {
-        String message = "<html>"+tr("<h2>Filter active</h2>");
+        String message = "<html>" + tr("<h2>Filter active</h2>");
 
         if (disabledCount == 0 && disabledAndHiddenCount == 0)
Index: /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 3355)
@@ -291,7 +291,7 @@
      * @param evt the button event
      */
-    protected void buttonAction(int i, ActionEvent evt) {
+    protected void buttonAction(int buttonIndex, ActionEvent evt) {
         String a = evt.getActionCommand();
-        result = i+1;
+        result = buttonIndex+1;
         setVisible(false);
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 3354)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 3355)
@@ -80,5 +80,4 @@
                 if(filter != null){
                     filters.addFilter(filter);
-                    filters.executeFilters();
                 }
             }
@@ -95,5 +94,4 @@
                 if(filter != null){
                     filters.setFilter(index, filter);
-                    filters.executeFilters();
                 }
             }
