Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 11992)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 11993)
@@ -1296,4 +1296,10 @@
 
     @Override
+    public Collection<? extends OsmPrimitive> getPreservedPrimitives() {
+        DataSet ds = getLayerManager().getEditDataSet();
+        return ds != null ? ds.getSelected() : null;
+    }
+
+    @Override
     public boolean layerIsSupported(Layer l) {
         return l instanceof OsmDataLayer;
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 11992)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 11993)
@@ -8,4 +8,6 @@
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
+import java.util.Collection;
+import java.util.Collections;
 
 import org.openstreetmap.josm.Main;
@@ -13,4 +15,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -201,3 +204,12 @@
         readPreferences();
     }
+
+    /**
+     * Gets a collection of primitives that should not be hidden by the filter.
+     * @return The primitives that the filter should not hide.
+     * @since 11993
+     */
+    public Collection<? extends OsmPrimitive> getPreservedPrimitives() {
+        return Collections.emptySet();
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 11992)
+++ /trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 11993)
@@ -6,4 +6,5 @@
 import java.util.List;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
 import org.openstreetmap.josm.actions.search.SearchCompiler;
@@ -224,5 +225,5 @@
     private static FilterType test(List<FilterInfo> filters, OsmPrimitive primitive, boolean hidden) {
 
-        if (primitive.isIncomplete())
+        if (primitive.isIncomplete() || Main.map.mapMode.getPreservedPrimitives().contains(primitive))
             return FilterType.NOT_FILTERED;
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 11992)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 11993)
@@ -29,4 +29,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.osm.Filter;
@@ -46,4 +47,6 @@
 import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -57,5 +60,5 @@
  * @author Petr_Dlouhý
  */
-public class FilterDialog extends ToggleDialog implements DataSetListener {
+public class FilterDialog extends ToggleDialog implements DataSetListener, MapModeChangeListener {
 
     private JTable userTable;
@@ -82,4 +85,5 @@
     public void showNotify() {
         DatasetEventManager.getInstance().addDatasetListener(this, FireMode.IN_EDT_CONSOLIDATED);
+        MapFrame.addMapModeChangeListener(this);
         filterModel.executeFilters();
     }
@@ -88,4 +92,5 @@
     public void hideNotify() {
         DatasetEventManager.getInstance().removeDatasetListener(this);
+        MapFrame.removeMapModeChangeListener(this);
         filterModel.clearFilterFlags();
         Main.map.mapView.repaint();
@@ -108,4 +113,7 @@
     };
 
+    /**
+     * Builds the GUI.
+     */
     protected void build() {
         userTable = new UserTable(filterModel);
@@ -375,6 +383,11 @@
     }
 
+    @Override
+    public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
+        filterModel.executeFilters();
+    }
+
     /**
-     * This method is intendet for Plugins getting the filtermodel and using .addFilter() to
+     * This method is intended for Plugins getting the filtermodel and using .addFilter() to
      * add a new filter.
      * @return the filtermodel
