Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3218)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3219)
@@ -25,5 +25,4 @@
 import java.util.Comparator;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -82,5 +81,4 @@
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
@@ -199,5 +197,5 @@
         List<AutoCompletionListItem> keyList = autocomplete.getKeys();
         Collections.sort(keyList, defaultACItemComparator);
-        
+
         final AutoCompletingComboBox keys = new AutoCompletingComboBox();
         keys.setPossibleACItems(keyList);
@@ -231,8 +229,8 @@
         });
         values.setEditable(true);
-        
+
         List<AutoCompletionListItem> valueList = autocomplete.getValues(key);
         Collections.sort(valueList, defaultACItemComparator);
-        
+
         values.setPossibleACItems(valueList);
         Map<String, Integer> m=(Map<String, Integer>)propertyData.getValueAt(row, 1);
@@ -419,5 +417,5 @@
             @Override public void focusGained(FocusEvent e) {
                 String key = keys.getEditor().getItem().toString();
-                
+
                 List<AutoCompletionListItem> valueList = autocomplete.getValues(key);
                 Collections.sort(valueList, defaultACItemComparator);
@@ -535,5 +533,10 @@
                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
                 if (c instanceof JLabel) {
-                    ((JLabel)c).setText(((Relation)value).getDisplayName(DefaultNameFormatter.getInstance()));
+                    JLabel label = (JLabel)c;
+                    Relation r = (Relation)value;
+                    label.setText(r.getDisplayName(DefaultNameFormatter.getInstance()));
+                    if (r.isFiltered()) {
+                        label.setFont(label.getFont().deriveFont(Font.ITALIC));
+                    }
                 }
                 return c;
@@ -546,5 +549,7 @@
                     boolean isSelected, boolean hasFocus, int row, int column) {
                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
+                boolean isFiltered = (((Relation)table.getValueAt(row, 0))).isFiltered();
                 if (c instanceof JLabel) {
+                    JLabel label = (JLabel)c;
                     Collection<RelationMember> col = (Collection<RelationMember>) value;
 
@@ -560,5 +565,8 @@
                     }
 
-                    ((JLabel)c).setText(text);
+                    label.setText(text);
+                    if (isFiltered) {
+                        label.setFont(label.getFont().deriveFont(Font.ITALIC));
+                    }
                 }
                 return c;
@@ -800,14 +808,11 @@
         for (OsmPrimitive primitive: newSelection) {
             for (OsmPrimitive ref: primitive.getReferrers()) {
-                if (ref instanceof Relation && !ref.isFiltered() && !ref.isIncomplete() && !ref.isDeleted()) {
+                if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) {
                     Relation r = (Relation) ref;
+                    Collection<RelationMember> members = new ArrayList<RelationMember>();
+                    roles.put(r, members);
                     for (RelationMember m : r.getMembers()) {
                         if (m.getMember() == primitive) {
-                            Collection<RelationMember> value = roles.get(r);
-                            if (value == null) {
-                                value = new HashSet<RelationMember>();
-                                roles.put(r, value);
-                            }
-                            value.add(m);
+                            members.add(m);
                         }
                     }
@@ -816,6 +821,17 @@
         }
 
-        for (Entry<Relation, Collection<RelationMember>> e : roles.entrySet()) {
-            membershipData.addRow(new Object[]{e.getKey(), e.getValue()});
+        List<Relation> sortedRelations = new ArrayList<Relation>(roles.keySet());
+        Collections.sort(sortedRelations, new Comparator<Relation>() {
+            public int compare(Relation o1, Relation o2) {
+                int comp = Boolean.valueOf(o1.isFiltered()).compareTo(o2.isFiltered());
+                if (comp == 0) {
+                    comp = o1.getDisplayName(DefaultNameFormatter.getInstance()).compareTo(o2.getDisplayName(DefaultNameFormatter.getInstance()));
+                }
+                return comp;
+            }}
+        );
+
+        for (Relation r: sortedRelations) {
+            membershipData.addRow(new Object[]{r, roles.get(r)});
         }
 
