Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 5719)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 5720)
@@ -698,5 +698,5 @@
         private ArrayList<Relation> filteredRelations;
         private DefaultListSelectionModel selectionModel;
-        //private SearchCompiler.Match filter;
+        private SearchCompiler.Match filter;
 
         public RelationListModel(DefaultListSelectionModel selectionModel) {
@@ -727,5 +727,4 @@
                 fireContentsChanged(this,0,getSize());
                 return;
-
             }
             for (Relation r: relations) {
@@ -737,4 +736,5 @@
             fireIntervalAdded(this, 0, getSize());
             setSelectedRelations(sel);
+            updateFilteredRelations();
         }
 
@@ -767,4 +767,5 @@
                 fireIntervalAdded(this, 0, getSize());
                 setSelectedRelations(sel);
+                updateFilteredRelations();
             }
         }
@@ -818,13 +819,21 @@
             return ret;
         }
+        
+        private void updateFilteredRelations() {
+            if (filter != null) {
+                filteredRelations = new ArrayList<Relation>(Utils.filter(relations, new Predicate<Relation>() {
+                    @Override
+                    public boolean evaluate(Relation r) {
+                        return filter.match(r);
+                    }
+                }));
+            } else if (filteredRelations != null) {
+                filteredRelations = null;
+            }
+        }
 
         public void setFilter(final SearchCompiler.Match filter) {
-            //this.filter = filter;
-            this.filteredRelations = new ArrayList<Relation>(Utils.filter(relations, new Predicate<Relation>() {
-                @Override
-                public boolean evaluate(Relation r) {
-                    return filter.match(r);
-                }
-            }));
+            this.filter = filter;
+            updateFilteredRelations();
             List<Relation> sel = getSelectedRelations();
             fireContentsChanged(this, 0, getSize());
@@ -864,8 +873,8 @@
                     continue;
                 }
-                if (relations.get(i).isNew()) {
+                if (getVisibleRelation(i).isNew()) {
                     continue;
                 }
-                ret.add(relations.get(i));
+                ret.add(getVisibleRelation(i));
             }
             return ret;
@@ -884,5 +893,5 @@
                     continue;
                 }
-                ret.add(relations.get(i));
+                ret.add(getVisibleRelation(i));
             }
             return ret;
