Index: /trunk/src/org/openstreetmap/josm/data/osm/Filters.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 3177)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Filters.java	(revision 3178)
@@ -1,5 +1,11 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trc;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
 
 import java.util.Collection;
@@ -8,4 +14,6 @@
 import java.util.Map;
 
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
 import javax.swing.table.AbstractTableModel;
 
@@ -27,5 +35,6 @@
 
     private List<Filter> filters = new LinkedList<Filter>();
-    public void filter(){
+
+    public void executeFilters(){
         Collection<OsmPrimitive> seld = new LinkedList<OsmPrimitive> ();
         Collection<OsmPrimitive> self = new LinkedList<OsmPrimitive> ();
@@ -56,5 +65,17 @@
     }
 
-    private void loadPrefs(){
+    public void clearFilterFlags() {
+        DataSet ds = Main.main.getCurrentDataSet();
+        if (ds != null) {
+            ds.setFiltered();
+            ds.setDisabled();
+        }
+        disabledCount = 0;
+        hiddenCount = 0;
+        Main.map.mapView.repaint();
+    }
+
+
+    private void loadPrefs() {
         Map<String,String> prefs = Main.pref.getAllPrefix("filters.filter");
         for (String value : prefs.values()) {
@@ -88,5 +109,5 @@
         filters.add(f);
         savePref(filters.size()-1);
-        filter();
+        executeFilters();
         fireTableRowsInserted(filters.size()-1, filters.size()-1);
     }
@@ -97,5 +118,5 @@
         savePref(i);
         savePref(i+1);
-        filter();
+        executeFilters();
         fireTableRowsUpdated(i, i+1);
     }
@@ -106,5 +127,5 @@
         savePref(i);
         savePref(i-1);
-        filter();
+        executeFilters();
         fireTableRowsUpdated(i-1, i);
     }
@@ -113,5 +134,5 @@
         filters.remove(i);
         savePrefs();
-        filter();
+        executeFilters();
         fireTableRowsDeleted(i, i);
     }
@@ -120,5 +141,5 @@
         filters.set(i, f);
         savePref(i);
-        filter();
+        executeFilters();
         fireTableRowsUpdated(i, i);
     }
@@ -171,24 +192,29 @@
         Filter f = filters.get(row);
         switch(column){
-        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);
-        break;
-        case 3: f.applyForChildren = (Boolean)aValue;
-        savePref(row);
-        filter();
-        break;
-        case 4: f.inverted = (Boolean)aValue;
-        savePref(row);
-        filter();
-        break;
+        case 0:
+            f.enable = (Boolean)aValue;
+            savePref(row);
+            executeFilters();
+            fireTableRowsUpdated(row, row);
+            break;
+        case 1:
+            f.hide = (Boolean)aValue;
+            savePref(row);
+            executeFilters();
+            break;
+        case 2:
+            f.text = (String)aValue;
+            savePref(row);
+            break;
+        case 3:
+            f.applyForChildren = (Boolean)aValue;
+            savePref(row);
+            executeFilters();
+            break;
+        case 4:
+            f.inverted = (Boolean)aValue;
+            savePref(row);
+            executeFilters();
+            break;
         }
         if(column!=0) {
@@ -215,3 +241,53 @@
         return null;
     }
+
+    private static class OSDLabel extends JLabel {
+        public OSDLabel(String text) {
+            super(text);
+            setOpaque(true);
+            setForeground(Color.black);
+            setBackground(new Color(0,0,0,0));
+            setFont(getFont().deriveFont(Font.PLAIN));
+            setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+        }
+
+        @Override
+        public void paintComponent(Graphics g) {
+            g.setColor(new Color(255, 255, 255, 140));
+            g.fillRoundRect(getX(), getY(), getWidth(), getHeight(), 10, 10);
+            super.paintComponent(g);
+        }
+    }
+
+    private OSDLabel lblOSD = new OSDLabel("");
+
+    public void drawOSDText(Graphics2D g) {
+        String message = "<html>"+tr("<h2>Filter active</h2>");
+
+        if (disabledCount == 0 && hiddenCount == 0)
+            return;
+
+        if (hiddenCount != 0) {
+            message += tr("<p><b>{0}</b> objects hidden", hiddenCount);
+        }
+
+        if (hiddenCount != 0 && disabledCount != 0) {
+            message += "<br>";
+        }
+
+        if (disabledCount != 0) {
+            message += tr("<b>{0}</b> objects disabled", disabledCount);
+        }
+
+        message += tr("</p><p>Close the filter dialog to see all objects.<p></html>");
+
+        lblOSD.setText(message);
+        lblOSD.setSize(lblOSD.getPreferredSize());
+
+        int dx = Main.map.mapView.getWidth() - lblOSD.getPreferredSize().width - 15;
+        int dy = 15;
+        g.translate(dx, dy);
+        lblOSD.paintComponent(g);
+        g.translate(-dx, -dy);
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 3177)
+++ /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 3178)
@@ -72,4 +72,5 @@
 
     public ConflictDialog conflictDialog;
+    public FilterDialog filterDialog;
     /**
      * The dialog that shows all relations and lets the user edit them.
@@ -156,5 +157,5 @@
         addToggleDialog(conflictDialog = new ConflictDialog());
         if(Main.pref.getBoolean("displayfilter", false)) {
-            addToggleDialog(new FilterDialog());
+            addToggleDialog(filterDialog = new FilterDialog());
         }
         addToggleDialog(new ChangesetDialog(this));
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3177)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3178)
@@ -585,4 +585,8 @@
         tempG.draw(border);
 
+        if (Main.map.filterDialog != null) {
+            Main.map.filterDialog.drawOSDText(tempG);
+        }
+
         if (playHeadMarker != null) {
             playHeadMarker.paint(tempG, this);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 3177)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 3178)
@@ -7,4 +7,5 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.Graphics2D;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -60,4 +61,5 @@
     public void showNotify() {
         DatasetEventManager.getInstance().addDatasetListener(listenerAdapter, FireMode.IN_EDT_CONSOLIDATED);
+        filters.executeFilters();
     }
 
@@ -65,4 +67,5 @@
     public void hideNotify() {
         DatasetEventManager.getInstance().removeDatasetListener(listenerAdapter);
+        filters.clearFilterFlags();
     }
 
@@ -76,5 +79,5 @@
                 if(filter != null){
                     filters.addFilter(filter);
-                    filters.filter();
+                    filters.executeFilters();
                 }
             }
@@ -91,5 +94,5 @@
                 if(filter != null){
                     filters.setFilter(index, filter);
-                    filters.filter();
+                    filters.executeFilters();
                 }
             }
@@ -188,5 +191,6 @@
 
     public void processDatasetEvent(AbstractDatasetChangedEvent event) {
-        filters.filter();
+        System.err.print("FilterDialog/processDatasetEvent");
+        filters.executeFilters();
     }
 
@@ -214,3 +218,7 @@
         setTitle("Filter Hidden:" + filters.hiddenCount + " Disabled:" + filters.disabledCount);
     }
+
+    public void drawOSDText(Graphics2D g) {
+        filters.drawOSDText(g);
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 3177)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 3178)
@@ -108,5 +108,5 @@
         setMinimumSize(new Dimension(0,0));
         this.preferredHeight = preferredHeight;
-        toggleAction = new ToggleDialogAction(this, name, "dialogs/"+iconName, tooltip, shortcut, iconName);
+        toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut, iconName);
         String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
         toggleAction.putValue("help", helpId.substring(0, helpId.length()-6));
@@ -136,28 +136,25 @@
      *
      */
-    public final static class ToggleDialogAction extends JosmAction {
-
-        private ToggleDialog dialog;
-
-        private ToggleDialogAction(ToggleDialog dialog, String name, String iconName, String tooltip, Shortcut shortcut, String prefname) {
+    public final class ToggleDialogAction extends JosmAction {
+
+        private ToggleDialogAction(String name, String iconName, String tooltip, Shortcut shortcut, String prefname) {
             super(name, iconName, tooltip, shortcut, false);
-            if (dialog == null)
-                throw new IllegalArgumentException("The ToggleDialog supplied for " + name + " cannot be null.");
-            this.dialog = dialog;
         }
 
         public void actionPerformed(ActionEvent e) {
-            dialog.toggleButtonHook();
-            if (dialog.isShowing) {
-                dialog.hideDialog();
-                dialog.dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
+            toggleButtonHook();
+            if (isShowing) {
+                hideDialog();
+                dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
+                hideNotify();
             } else {
-                dialog.showDialog();
-                if (dialog.isDocked && dialog.isCollapsed) {
-                    dialog.expand();
+                showDialog();
+                if (isDocked && isCollapsed) {
+                    expand();
                 }
-                if (dialog.isDocked) {
-                    dialog.dialogsPanel.reconstruct(Action.INVISIBLE_TO_DEFAULT, dialog);
+                if (isDocked) {
+                    dialogsPanel.reconstruct(Action.INVISIBLE_TO_DEFAULT, ToggleDialog.this);
                 }
+                showNotify();
             }
         }
@@ -166,5 +163,4 @@
         public void destroy() {
             super.destroy();
-            dialog = null;
         }
     }
@@ -185,5 +181,4 @@
         toggleAction.putValue("selected", false);
         toggleAction.putValue("selected", true);
-        showNotify();
     }
 
@@ -218,5 +213,4 @@
         setIsShowing(false);
         toggleAction.putValue("selected", false);
-        hideNotify();
     }
 
@@ -259,5 +253,4 @@
             setMinimumSize(new Dimension(Integer.MAX_VALUE,20));
             lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
-            hideNotify();
         }
         else throw new IllegalStateException();
@@ -275,5 +268,4 @@
             setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
             lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
-            showNotify();
         }
         else throw new IllegalStateException();
@@ -402,4 +394,5 @@
                             hideDialog();
                             dialogsPanel.reconstruct(Action.ELEMENT_SHRINKS, null);
+                            hideNotify();
                         }
                     }
@@ -441,4 +434,5 @@
                     } else {
                         hideDialog();
+                        hideNotify();
                     }
                 }
