Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1815)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1816)
@@ -16,4 +16,8 @@
 import java.awt.event.FocusEvent;
 import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -298,24 +302,6 @@
         memberTable = new MemberTable(memberTableModel);
 
-        ListSelectionModel lsm = memberTable.getSelectionModel();
-        lsm.addListSelectionListener(new ListSelectionListener() {
-            public void valueChanged(ListSelectionEvent e) {
-                ArrayList<OsmPrimitive> sel;
-                int cnt = memberTable.getSelectedRowCount();
-                if(cnt > 0) {
-                    sel = new ArrayList<OsmPrimitive>(cnt);
-                    for (int i : memberTable.getSelectedRows()) {
-                        sel.add(memberTableModel.getReferredPrimitive(i));
-                    }
-                } else {
-                    cnt = memberTable.getRowCount();
-                    sel = new ArrayList<OsmPrimitive>(cnt);
-                    for (int i = 0; i < cnt; ++i) {
-                        sel.add(memberTableModel.getReferredPrimitive(i));
-                    }
-                }
-                getLayer().data.setSelected(sel);
-            }
-        });
+        memberTable.getSelectionModel().addListSelectionListener(new SelectionSynchronizer());
+        memberTable.addMouseListener(new MemberTableDblClickAdapter());
 
         final JScrollPane scrollPane = new JScrollPane(memberTable);
@@ -334,5 +320,4 @@
         );
 
-
         GridBagConstraints gc = new GridBagConstraints();
         gc.gridx = 0;
@@ -364,23 +349,54 @@
         pnl.add(scrollPane, gc);
 
-        gc.gridx = 2;
+        JPanel pnl2 = new JPanel();
+        pnl2.setLayout(new GridBagLayout());
+
+        gc.gridx = 0;
+        gc.gridy = 0;
+        gc.gridheight  =1;
+        gc.gridwidth = 3;
+        gc.fill = GridBagConstraints.HORIZONTAL;
+        gc.anchor = GridBagConstraints.FIRST_LINE_START;
+        gc.weightx = 1.0;
+        gc.weighty = 0.0;
+        pnl2.add(new JLabel(tr("Selection")), gc);
+
+        gc.gridx = 0;
         gc.gridy = 1;
+        gc.gridheight  =1;
+        gc.gridwidth = 1;
+        gc.fill = GridBagConstraints.VERTICAL;
+        gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weightx = 0.0;
         gc.weighty = 1.0;
-        pnl.add(buildSelectionControlButtonPanel(), gc);
-
-        gc.gridx = 3;
+        pnl2.add(buildSelectionControlButtonPanel(), gc);
+
+        gc.gridx = 1;
         gc.gridy = 1;
-        gc.weightx = 0.4;
+        gc.weightx = 1.0;
         gc.weighty = 1.0;
-        pnl.add(buildSelectionTablePanel(), gc);
-
-        gc.gridx = 1;
-        gc.gridy = 2;
-        gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        pnl.add(buildButtonPanel(), gc);
-
-        return pnl;
+        gc.fill = GridBagConstraints.BOTH;
+        pnl2.add(buildSelectionTablePanel(), gc);
+
+        final JSplitPane splitPane = new  JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+        splitPane.setLeftComponent(pnl);
+        splitPane.setRightComponent(pnl2);
+        splitPane.setOneTouchExpandable(false);
+        addWindowListener(
+                new WindowAdapter() {
+                    @Override
+                    public void windowOpened(WindowEvent e) {
+                        // has to be called when the window is visible, otherwise
+                        // no effect
+                        splitPane.setDividerLocation(0.6);
+                    }
+                }
+        );
+
+        JPanel pnl3 = new JPanel();
+        pnl3.setLayout(new BorderLayout());
+        pnl3.add(splitPane, BorderLayout.CENTER);
+        pnl3.add(buildButtonPanel(), BorderLayout.SOUTH);
+        return pnl3;
     }
 
@@ -407,9 +423,18 @@
      */
     protected JSplitPane buildSplitPane() {
-        JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+        final JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
         pane.setTopComponent(buildTagEditorPanel());
         pane.setBottomComponent(buildMemberEditorPanel());
         pane.setOneTouchExpandable(true);
-        pane.setDividerLocation(150);
+        addWindowListener(
+                new WindowAdapter() {
+                    @Override
+                    public void windowOpened(WindowEvent e) {
+                        // has to be called when the window is visible, otherwise
+                        // no effect
+                        pane.setDividerLocation(0.3);
+                    }
+                }
+        );
         return pane;
     }
@@ -998,5 +1023,5 @@
         }
 
-        public void actionPerformed(ActionEvent e) {
+        public void run()  {
             int idx = memberTable.getSelectedRow();
             if (idx < 0) return;
@@ -1009,6 +1034,34 @@
         }
 
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled())
+                return;
+            run();
+        }
+
         public void valueChanged(ListSelectionEvent e) {
             refreshEnabled();
+        }
+    }
+
+    class MemberTableDblClickAdapter extends MouseAdapter {
+        @Override
+        public void mouseClicked(MouseEvent e) {
+            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
+                new EditAction().run();
+            }
+        }
+    }
+
+    class SelectionSynchronizer implements ListSelectionListener {
+        public void valueChanged(ListSelectionEvent e) {
+            ArrayList<OsmPrimitive> sel;
+            int cnt = memberTable.getSelectedRowCount();
+            if (cnt <=0) return;
+            sel = new ArrayList<OsmPrimitive>(cnt);
+            for (int i : memberTable.getSelectedRows()) {
+                sel.add(memberTableModel.getReferredPrimitive(i));
+            }
+            getLayer().data.setSelected(sel);
         }
     }
