Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 6024)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 6025)
@@ -66,4 +66,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -112,4 +113,6 @@
     private final AddSelectionToRelations addSelectionToRelations = new AddSelectionToRelations();
     
+    HighlightHelper highlightHelper = new HighlightHelper();
+    
     /**
      * Constructs <code>RelationListDialog</code>
@@ -183,5 +186,12 @@
     // inform all actions about list of relations they need
     private void updateActionsRelationLists() {
-        popupMenuHandler.setPrimitives(model.getSelectedRelations());
+        List<Relation> sel = model.getSelectedRelations();
+        popupMenuHandler.setPrimitives(sel);
+        
+        //update highlights
+        if (Main.isDisplayingMapView()) {
+            highlightHelper.highlightOnly(sel);
+            Main.map.mapView.repaint();
+        }
     }
     
@@ -298,4 +308,9 @@
             super(popupMenu);
         }
+
+        @Override
+        public void mouseExited(MouseEvent me) {
+            highlightHelper.clear();
+        }
         
         protected void setCurrentRelationAsSelection() {
@@ -306,5 +321,5 @@
             EditRelationAction.launchEditor(getSelected());
         }
-
+        
         @Override public void mouseClicked(MouseEvent e) {
             if (Main.main.getEditLayer() == null) return;
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 6024)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 6025)
@@ -67,4 +67,5 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.ListPopupMenu;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
@@ -186,4 +187,5 @@
      */
     class MouseEventHandler extends PopupMenuLauncher {
+        private final HighlightHelper helper = new HighlightHelper();
         
         public MouseEventHandler() {
@@ -193,11 +195,20 @@
         @Override
         public void mouseClicked(MouseEvent e) {
+            int idx = lstPrimitives.locationToIndex(e.getPoint());
+            if (idx < 0) return;
             if (isDoubleClick(e)) {
-                int idx = lstPrimitives.locationToIndex(e.getPoint());
-                if (idx < 0) return;
                 OsmDataLayer layer = Main.main.getEditLayer();
                 if (layer == null) return;
                 layer.data.setSelected(Collections.singleton((OsmPrimitive)model.getElementAt(idx)));
-            }
+            } else if (Main.isDisplayingMapView()) {
+                helper.highlightOnly((OsmPrimitive)model.getElementAt(idx));
+                Main.map.mapView.repaint();
+            }
+        }
+
+        @Override
+        public void mouseExited(MouseEvent me) {
+            helper.clear();
+            super.mouseExited(me);
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6024)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6025)
@@ -86,4 +86,5 @@
 import org.openstreetmap.josm.gui.tagging.TaggingPreset.PresetType;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
@@ -176,4 +177,6 @@
     private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
     
+    private final HighlightHelper highlightHelper= new HighlightHelper();
+    
     /**
      * The Add button (needed to be able to disable it)
@@ -255,5 +258,5 @@
         membershipTable.getSelectionModel().addListSelectionListener(deleteAction);
         
-
+        
         JScrollPane scrollPane = (JScrollPane) createLayout(bothTables, true, Arrays.asList(new SideButton[] {
                 this.btnAdd, this.btnEdit, this.btnDel
@@ -408,4 +411,22 @@
                 return row;
             }
+
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                //update highlights
+                if (Main.isDisplayingMapView()) {
+                    int row = membershipTable.rowAtPoint(e.getPoint());
+                    if (row>=0) {
+                        highlightHelper.highlightOnly((Relation) membershipTable.getValueAt(row, 0));
+                        Main.map.mapView.repaint();
+                    }
+                }
+                super.mouseClicked(e);
+            }
+
+            @Override
+            public void mouseExited(MouseEvent me) {
+                highlightHelper.clear();
+            }
         });
     }
Index: /trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java	(revision 6025)
+++ /trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java	(revision 6025)
@@ -0,0 +1,101 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.util;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+
+/**
+ * This class stores the set of highlited primitives and
+ * allows easy and fast change of highlighting
+ */
+public class HighlightHelper {
+    Set<OsmPrimitive> highlightedPrimitives = new HashSet<OsmPrimitive>();
+    
+    /**
+     * Highlight and remember given primitives
+     * @param prims - primitives to highlight/unhighlight
+     * @param flag - true to highlight
+     */
+    public void highlight(Collection <? extends OsmPrimitive> prims, boolean flag) {
+        for (OsmPrimitive p: prims) {
+            highlight(p, flag);
+        }
+    }
+    
+    /**
+     * Highlight and remember given primitives, forgetting previously highlighted by this instance
+     * @param prims - primitives to highlight/unhighlight
+     */
+    public void highlightOnly(Collection <? extends OsmPrimitive> prims) {
+        clear();
+        highlight(prims, true);
+    }
+    
+    /**
+     * Highlight and remember given primitive, forgetting previously highlighted by this instance
+     * @param p - primitives to highlight/unhighlight
+     */
+    public void highlightOnly(OsmPrimitive p) {
+        clear();
+        highlight(p, true);
+    }
+    
+    /**
+     * Highlight and remember given primitive
+     * @param prims - primitives to highlight/unhighlight
+     * @param flag - true to highlight
+     */
+    public void highlight(OsmPrimitive p, boolean flag) {
+        if (p instanceof Relation) {
+            for (OsmPrimitive m: ((Relation) p).getMemberPrimitives()) {
+                highlight(m, flag);
+            }
+        } else
+        if (flag) {
+            if (highlightedPrimitives.add(p)) {
+                p.setHighlighted(true);
+            }
+        } else {
+            if (highlightedPrimitives.remove(p)) {
+                p.setHighlighted(false);
+            }
+        }
+    }
+    
+    /**
+     * Clear highlighting of all remembered primitives
+     */
+    public void clear() {
+        for (OsmPrimitive p: highlightedPrimitives) {
+            p.setHighlighted(false);
+        }
+        highlightedPrimitives.clear();
+    }
+    
+    /**
+     * Slow method to import all currently highlighted primitives into this instance
+     */
+    public void findAllHighligted() {
+        DataSet ds = Main.main.getCurrentDataSet();
+        if (ds!=null) {
+            highlightedPrimitives.addAll( ds.allNonDeletedPrimitives() );
+        }
+    }
+    
+    /**
+     * Slow method to import all currently highlighted primitives into this instance
+     */
+    public static void clearAllHighligted() {
+        DataSet ds = Main.main.getCurrentDataSet();
+        if (ds!=null) {
+            for (OsmPrimitive p: ds.allNonDeletedPrimitives()) {
+                p.setHighlighted(false);
+            }
+        }
+    }
+}
