Index: /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilter.java	(revision 12473)
+++ /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilter.java	(revision 12474)
@@ -65,3 +65,8 @@
         return Objects.equals(filter, other.filter);
     }
+
+    @Override
+    public String toString() {
+        return "AutoFilter [label=" + label + ", description=" + description + ", filter=" + filter + ']';
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java	(revision 12473)
+++ /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java	(revision 12474)
@@ -34,5 +34,5 @@
             public synchronized void actionPerformed(ActionEvent e) {
                 AutoFilterManager afm = AutoFilterManager.getInstance();
-                if (afm.getCurrentAutoFilter() == filter) {
+                if (filter.equals(afm.getCurrentAutoFilter())) {
                     afm.setCurrentAutoFilter(null);
                     Main.map.filterDialog.getFilterModel().executeFilters();
Index: /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java	(revision 12473)
+++ /trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java	(revision 12474)
@@ -47,4 +47,8 @@
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
+import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
@@ -56,5 +60,5 @@
  * @since 12400
  */
-public final class AutoFilterManager implements ZoomChangeListener, MapModeChangeListener, DataSetListener, PreferenceChangedListener {
+public final class AutoFilterManager implements ZoomChangeListener, MapModeChangeListener, DataSetListener, PreferenceChangedListener, LayerChangeListener {
 
     /**
@@ -118,4 +122,5 @@
         Main.pref.addPreferenceChangeListener(this);
         NavigatableComponent.addZoomChangeListener(this);
+        Main.getLayerManager().addLayerChangeListener(this);
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED);
         registerAutoFilterRules(AutoFilterRule.defaultRules());
@@ -125,5 +130,10 @@
         if (enabledRule != null && Main.map != null
                 && enabledRule.getMinZoomLevel() <= Selector.GeneralSelector.scale2level(Main.map.mapView.getDist100Pixel())) {
+            // Retrieve the values from current rule visible on screen
             NavigableSet<String> values = getNumericValues(enabledRule.getKey(), enabledRule.getValueComparator());
+            // Make sure current auto filter button remains visible even if no data is found, to allow user to disable it
+            if (currentAutoFilter != null) {
+                values.add(currentAutoFilter.getFilter().text.split("=")[1]);
+            }
             if (!values.equals(buttons.keySet())) {
                 removeAllButtons();
@@ -397,3 +407,20 @@
         }
     }
+
+    @Override
+    public void layerAdded(LayerAddEvent e) {
+        // Do nothing
+    }
+
+    @Override
+    public void layerRemoving(LayerRemoveEvent e) {
+        if (Main.getLayerManager().getEditLayer() == null) {
+            resetCurrentAutoFilter();
+        }
+    }
+
+    @Override
+    public void layerOrderChanged(LayerOrderChangeEvent e) {
+        // Do nothing
+    }
 }
