Index: src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 2130)
+++ src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(working copy)
@@ -5,14 +5,19 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 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;
 import java.awt.GridLayout;
@@ -37,7 +42,7 @@
  *
  * @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();
     private SideButton addButton;
@@ -120,8 +125,8 @@
     }
 
     protected String[] columnToolTips = {
-        tr("Filter elements"),
-        tr("Disable elements"),
+        tr("Enable filter"),
+        tr("Hide elements"),
         tr("Apply also for children"),
         tr("Inverse filter"),
         null,
@@ -144,7 +149,9 @@
                };
            }
         };   
-  
+
+        filters.addTableModelListener(this);
+
         userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
         userTable.getColumnModel().getColumn(0).setMaxWidth(1);
@@ -159,6 +166,11 @@
         userTable.getColumnModel().getColumn(4).setResizable(false);
         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);
 
         // -- the button row
@@ -186,4 +198,27 @@
    public void dataChanged(OsmDataLayer l){
       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: src/org/openstreetmap/josm/data/osm/Filters.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Filters.java	(revision 2130)
+++ src/org/openstreetmap/josm/data/osm/Filters.java	(working copy)
@@ -20,6 +20,8 @@
  */
 public class Filters extends AbstractTableModel{
 
+   public int disabledCount, hiddenCount;
+
    public Filters(){
       loadPrefs();
    }
@@ -31,21 +33,23 @@
       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){
                      return o.isDisabled();
                   }
                });
+               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);
       Main.map.mapView.repaint();
@@ -133,7 +137,7 @@
    }
 
    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];
    }
 
@@ -142,7 +146,13 @@
       return classes[column];
    }
 
+   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;
    }
@@ -150,33 +160,35 @@
    public void setValueAt(Object aValue, int row, int column){
       Filter f = filters.get(row);
       switch(column){
-         case 0: f.filtered = (Boolean)aValue;
+         case 0: f.enable = (Boolean)aValue;
                  savePref(row);
                  filter();
-                 return;
-         case 1: f.disabled = (Boolean)aValue;
+                 fireTableRowsUpdated(row, row);
+                 break;
+         case 1: f.hide = (Boolean)aValue;
                  savePref(row);
                  filter();
-                 return;
+                 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);
    }
 
    public Object getValueAt(int row, int column){
       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;
          case 4: return f.inverted;
Index: src/org/openstreetmap/josm/data/osm/Filter.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Filter.java	(revision 2130)
+++ src/org/openstreetmap/josm/data/osm/Filter.java	(working copy)
@@ -10,8 +10,8 @@
  */
 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;
    public Filter() {
@@ -33,8 +33,8 @@
       if(prfs[2].equals("in_selection")) mode = SearchMode.in_selection;
       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]);
 
@@ -43,7 +43,7 @@
    public String getPrefString(){
       return version + ";" + 
           text + ";" + mode + ";" + caseSensitive + ";" + regexSearch + ";" +
-          "legacy" + ";" + filtered + ";" + disabled + ";" + 
+          "legacy" + ";" + enable + ";" + hide + ";" + 
           inverted + ";" + applyForChildren;
    }
 }
