Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1777)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1778)
@@ -1,6 +1,6 @@
 package org.openstreetmap.josm.gui.dialogs;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.marktr;
 
 import java.awt.BorderLayout;
@@ -13,5 +13,7 @@
 import java.util.Collections;
 
+import javax.swing.AbstractAction;
 import javax.swing.DefaultListModel;
+import javax.swing.JButton;
 import javax.swing.JList;
 import javax.swing.JPanel;
@@ -20,4 +22,5 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.DeleteCommand;
@@ -33,4 +36,5 @@
 import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -54,27 +58,19 @@
     private JList displaylist = new JList(list);
 
-    private SideButton sbEdit = new SideButton(marktr("Edit"), "edit", "Selection", tr( "Open an editor for the selected relation"), new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-            Relation toEdit = getSelected();
-            if (toEdit == null)
-                return;
-            RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, null).setVisible(true);
-        }
-    });
-
-    private SideButton sbDel = new SideButton(marktr("Delete"), "delete", "Selection", tr("Delete the selected relation"), new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-            Relation toDelete = getSelected();
-            if (toDelete == null)
-                return;
-
-            Main.main.undoRedo.add(
-                    new DeleteCommand(Collections.singleton(toDelete)));
-        }
-    });
-
+    /** the edit action */
+    private EditAction editAction;
+    /** the delete action */
+    private DeleteAction deleteAction;
+
+
+    /**
+     * constructor
+     */
     public RelationListDialog() {
         super(tr("Relations"), "relationlist", tr("Open a list of all relations."),
                 Shortcut.registerShortcut("subwindow:relations", tr("Toggle: {0}", tr("Relations")), KeyEvent.VK_R, Shortcut.GROUP_LAYER), 150);
+
+        // create the list of relations
+        //
         displaylist.setCellRenderer(new OsmPrimitivRenderer());
         displaylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -86,9 +82,9 @@
             }
         });
-
         add(new JScrollPane(displaylist), BorderLayout.CENTER);
 
+        // create the panel with buttons
+        //
         JPanel buttonPanel = new JPanel(new GridLayout(1,4));
-
         buttonPanel.add(new SideButton(marktr("New"), "addrelation", "Selection", tr("Create a new relation"), new ActionListener() {
             public void actionPerformed(ActionEvent e) {
@@ -98,16 +94,27 @@
         }), GBC.std());
 
-        buttonPanel.add(sbEdit, GBC.std());
-
-        buttonPanel.add(sbDel, GBC.eol());
+        // the edit action
+        //
+        editAction = new EditAction();
+        displaylist.addListSelectionListener(editAction);
+        displaylist.addMouseListener(new MouseAdapter(){
+            @Override public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
+                    editAction.run();
+                }
+            }
+        });
+        buttonPanel.add(new JButton(editAction), GBC.std());
+
+        // the delete action
+        //
+        deleteAction = new DeleteAction();
+        displaylist.addListSelectionListener(deleteAction);
+        buttonPanel.add(new JButton(deleteAction), GBC.eol());
+        add(buttonPanel, BorderLayout.SOUTH);
+
+        // register as layer listener
+        //
         Layer.listeners.add(this);
-        add(buttonPanel, BorderLayout.SOUTH);
-
-        displaylist.addListSelectionListener(new ListSelectionListener() {
-            public void valueChanged(ListSelectionEvent e) {
-                sbEdit.setEnabled(getSelected() != null);
-                sbDel.setEnabled(getSelected() != null);
-            }
-        });
     }
 
@@ -134,7 +141,4 @@
             setTitle(tr("Relations"), false);
         }
-
-        sbEdit.setEnabled(list.size() > 0);
-        sbDel.setEnabled(list.size() > 0);
     }
 
@@ -155,4 +159,5 @@
         }
     }
+
     public void layerAdded(Layer a) {
         if (a instanceof OsmDataLayer) {
@@ -160,4 +165,5 @@
         }
     }
+
     public void dataChanged(OsmDataLayer l) {
         updateList();
@@ -220,3 +226,62 @@
         }
     }
+
+    /**
+     * The edit action
+     *
+     */
+    class EditAction extends AbstractAction implements ListSelectionListener, Runnable{
+        public EditAction() {
+            putValue(SHORT_DESCRIPTION,tr( "Open an editor for the selected relation"));
+            putValue(NAME, tr("Edit"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+            setEnabled(false);
+        }
+
+        public void run() {
+            if (!isEnabled()) return;
+            Relation toEdit = getSelected();
+            if (toEdit == null)
+                return;
+            RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, null).setVisible(true);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            run();
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
+        }
+    }
+
+    /**
+     * The delete action
+     *
+     */
+    class DeleteAction extends AbstractAction implements ListSelectionListener, Runnable {
+        public DeleteAction() {
+            putValue(SHORT_DESCRIPTION,tr("Delete the selected relation"));
+            putValue(NAME, tr("Delete"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+            setEnabled(false);
+        }
+
+        public void run() {
+            if (!isEnabled()) return;
+            Relation toDelete = getSelected();
+            if (toDelete == null)
+                return;
+            Main.main.undoRedo.add(
+                    new DeleteCommand(Collections.singleton(toDelete)));
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            run();
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
+        }
+    }
 }
