Index: trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 2144)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 2145)
@@ -141,9 +141,9 @@
                 : (add.isSelected() ? SearchAction.SearchMode.add
                 : (remove.isSelected() ? SearchAction.SearchMode.remove : SearchAction.SearchMode.in_selection));
-        if(initialValues instanceof Filter){
-           return new Filter(input.getText(), mode, caseSensitive.isSelected(), regexSearch.isSelected());
-        } else {
-           return new SearchSetting(input.getText(), mode, caseSensitive.isSelected(), regexSearch.isSelected());
-        }
+        initialValues.text = input.getText();
+        initialValues.mode = mode;
+        initialValues.caseSensitive = caseSensitive.isSelected();
+        initialValues.regexSearch = regexSearch.isSelected();
+        return initialValues;
     }
 
@@ -179,8 +179,8 @@
             String searchText = s.text;
             if(s instanceof Filter){
-               searchText = ((Filter)s).inverted ? "-" : "";
-               searchText = searchText + "(" + ((Filter)s).text + ")" + (((Filter)s).applyForChildren ? ("| child (" + ((Filter)s).text + ")"): "");
+               searchText = "(" + s.text + ")" + (((Filter)s).applyForChildren ? ("| child (" + s.text + ")"): "");
+               searchText = (((Filter)s).inverted ? "-" : "") + "(" +  searchText + ")";
             }
-            /*System.out.println(searchText);  */
+            System.out.println(searchText);
             SearchCompiler.Match matcher = SearchCompiler.compile(searchText, s.caseSensitive, s.regexSearch);
             foundMatches = 0;
Index: trunk/src/org/openstreetmap/josm/data/osm/Filter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 2144)
+++ trunk/src/org/openstreetmap/josm/data/osm/Filter.java	(revision 2145)
@@ -11,6 +11,6 @@
 public class Filter extends SearchSetting {
    private final String version = "1";
-   public Boolean filtered = false;
-   public Boolean disabled = true;
+   public Boolean enable = true;
+   public Boolean hide = false;
    public Boolean inverted = false;
    public Boolean applyForChildren = true;
@@ -34,6 +34,6 @@
       caseSensitive = Boolean.parseBoolean(prfs[3]);
       regexSearch = Boolean.parseBoolean(prfs[4]);
-      filtered = Boolean.parseBoolean(prfs[6]);
-      disabled = Boolean.parseBoolean(prfs[7]);
+      enable = Boolean.parseBoolean(prfs[6]);
+      hide = Boolean.parseBoolean(prfs[7]);
       inverted = Boolean.parseBoolean(prfs[8]);
       applyForChildren = Boolean.parseBoolean(prfs[9]);
@@ -44,5 +44,5 @@
       return version + ";" + 
           text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" +
-          "legacy" + ";" + filtered + ";" + disabled + ";" + 
+          "legacy" + ";" + enable + ";" + hide + ";" + 
           inverted + ";" + applyForChildren;
    }
Index: trunk/src/org/openstreetmap/josm/data/osm/Filters.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 2144)
+++ trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 2145)
@@ -21,4 +21,6 @@
 public class Filters extends AbstractTableModel{
 
+   public int disabledCount, hiddenCount;
+
    public Filters(){
       loadPrefs();
@@ -29,15 +31,9 @@
       Collection<OsmPrimitive> seld = new LinkedList<OsmPrimitive> ();
       Collection<OsmPrimitive> self = new LinkedList<OsmPrimitive> ();
+      if(Main.main.getCurrentDataSet() == null)return;
       Main.main.getCurrentDataSet().setFiltered();
       Main.main.getCurrentDataSet().setDisabled();
       for (Filter flt : filters){
-            if(flt.filtered){
-               SearchAction.getSelection(flt, self, new Function(){
-                  public Boolean isSomething(OsmPrimitive o){
-                     return o.isFiltered();
-                  }
-               });
-            } 
-            if(flt.disabled) {
+            if(flt.enable){
                SearchAction.getSelection(flt, seld, new Function(){
                   public Boolean isSomething(OsmPrimitive o){
@@ -45,6 +41,15 @@
                   }
                });
+               if(flt.hide) {
+                  SearchAction.getSelection(flt, self, new Function(){
+                     public Boolean isSomething(OsmPrimitive o){
+                        return o.isFiltered();
+                     }
+                  });
+               }
             }
       }
+      disabledCount = seld.size() - self.size();
+      hiddenCount = self.size();
       Main.main.getCurrentDataSet().setFiltered(self);
       Main.main.getCurrentDataSet().setDisabled(seld);
@@ -134,5 +139,5 @@
 
    public String getColumnName(int column){
-      String[] names = { tr("F"), tr("D"), tr("Text"), tr("C"), tr("I"), tr("M") };
+      String[] names = { tr("E"), tr("H"), tr("Text"), tr("C"), tr("I"), tr("M") };
       return names[column];
    }
@@ -143,5 +148,11 @@
    }
 
+   public boolean isCellEnabled(int row, int column){
+      if(!filters.get(row).enable && column!=0) return false;
+      return true;
+   }
+
    public boolean isCellEditable(int row, int column){
+      if(!filters.get(row).enable && column!=0) return false;
       if(column < 5)return true;
       return false;
@@ -151,24 +162,26 @@
       Filter f = filters.get(row);
       switch(column){
-         case 0: f.filtered = (Boolean)aValue;
-                 savePref(row);
-                 filter();
-                 return;
-         case 1: f.disabled = (Boolean)aValue;
-                 savePref(row);
-                 filter();
-                 return;
+         case 0: f.enable = (Boolean)aValue;
+                 savePref(row);
+                 filter();
+                 fireTableRowsUpdated(row, row);
+                 break;
+         case 1: f.hide = (Boolean)aValue;
+                 savePref(row);
+                 filter();
+                 break;
          case 2: f.text = (String)aValue;
                  savePref(row);
-                 return;
+                 break;
          case 3: f.applyForChildren = (Boolean)aValue;
                  savePref(row);
                  filter();
-                 return;
+                 break;
          case 4: f.inverted = (Boolean)aValue;
                  savePref(row);
                  filter();
-                 return;
-      }
+                 break;
+      }
+      if(column!=0)fireTableCellUpdated(row, column);
    }
 
@@ -176,6 +189,6 @@
       Filter f = filters.get(row);
       switch(column){
-         case 0: return f.filtered;
-         case 1: return f.disabled;
+         case 0: return f.enable;
+         case 1: return f.hide;
          case 2: return f.text;
          case 3: return f.applyForChildren;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 2144)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 2145)
@@ -6,12 +6,17 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.JTable;
 import javax.swing.table.JTableHeader;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.event.TableModelListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.table.TableCellRenderer;
 import javax.swing.ListSelectionModel;
 import javax.swing.JPopupMenu;
-import javax.swing.table.AbstractTableModel;
 import javax.swing.JScrollPane;
 
+import java.awt.Component;
 import java.awt.FlowLayout;
 import java.awt.BorderLayout;
@@ -38,5 +43,5 @@
  * @author Petr_Dlouhý
  */
-public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener {
+public class FilterDialog extends ToggleDialog implements DataChangeListener, LayerChangeListener, TableModelListener {
     private JTable userTable;
     private Filters filters = new Filters();
@@ -121,9 +126,9 @@
 
     protected String[] columnToolTips = {
-        tr("Filter elements"),
-        tr("Disable elements"),
+        tr("Enable filter"),
+        tr("Hide elements"),
+        null,
         tr("Apply also for children"),
         tr("Inverse filter"),
-        null,
         tr("Filter mode")
     };
@@ -145,5 +150,7 @@
            }
         };   
-  
+
+        filters.addTableModelListener(this);
+
         userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
@@ -160,4 +167,9 @@
         userTable.getColumnModel().getColumn(5).setResizable(false);
 
+        userTable.setDefaultRenderer(Boolean.class, new BooleanRenderer());
+        userTable.setDefaultRenderer(String.class, new StringRenderer());
+
+        tableChanged(null);
+
         pnl.add(new JScrollPane(userTable), BorderLayout.CENTER);
 
@@ -187,3 +199,26 @@
       filters.filter();
    }
+
+   class StringRenderer extends DefaultTableCellRenderer {
+      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
+         Filters model = (Filters)table.getModel();
+         Component cell = (Component)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+         cell.setEnabled(model.isCellEnabled(row, column));
+         return cell;
+      }
+   }
+
+   class BooleanRenderer extends JCheckBox implements TableCellRenderer {
+      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
+         Filters model = (Filters)table.getModel();
+         setSelected((Boolean)value);
+         setEnabled(model.isCellEnabled(row, column));
+         setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+         return this;
+      }
+   }
+
+   public void tableChanged(TableModelEvent e){
+      setTitle("Filter Hidden:" + filters.hiddenCount + " Disabled:" + filters.disabledCount);
+   }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 2144)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 2145)
@@ -750,5 +750,5 @@
         if (Main.main.getCurrentDataSet() != null) {
             for (Relation r : Main.main.getCurrentDataSet().relations) {
-                if (!r.isFiltered() && r.isUsable()) {
+                if (!r.isFiltered() && !r.incomplete && !r.isDeleted()) {
                     for (RelationMember m : r.getMembers()) {
                         if (newSelection.contains(m.getMember())) {
