Index: trunk/src/org/openstreetmap/josm/gui/SideButton.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 4353)
+++ trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 4354)
@@ -4,4 +4,6 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Color;
+import java.awt.BorderLayout;
 import java.awt.Image;
 import java.awt.Insets;
@@ -9,7 +11,10 @@
 
 import javax.swing.Action;
+import javax.swing.BorderFactory;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
+import javax.swing.SwingConstants;
+import javax.swing.plaf.basic.BasicArrowButton;
 
 import org.openstreetmap.josm.Main;
@@ -46,5 +51,5 @@
         {
             Image im = ((ImageIcon) i).getImage();
-            setIcon(new ImageIcon(im.getScaledInstance(20 , 20, Image.SCALE_SMOOTH)));
+            setIcon(new ImageIcon(im.getScaledInstance(20, 20, Image.SCALE_SMOOTH)));
         }
     }
@@ -52,5 +57,5 @@
     public static ImageIcon makeIcon(String imagename) {
         Image im = ImageProvider.get("dialogs", imagename).getImage();
-        return new ImageIcon(im.getScaledInstance(20 , 20, Image.SCALE_SMOOTH));
+        return new ImageIcon(im.getScaledInstance(20, 20, Image.SCALE_SMOOTH));
     }
 
@@ -90,6 +95,15 @@
     private void doStyle()
     {
-        setMargin(new Insets(1,1,1,1));
+        setLayout(new BorderLayout());
         setIconTextGap(2);
+        setMargin(new Insets(-1,0,-1,0));
+    }
+
+    public void createArrow(ActionListener listener) {
+        setMargin(new Insets(0,0,0,0));
+        BasicArrowButton arrowButton = new BasicArrowButton(SwingConstants.SOUTH, null, null, Color.BLACK, null);
+        arrowButton.setBorder(BorderFactory.createEmptyBorder());
+        add(arrowButton, BorderLayout.EAST);
+        arrowButton.addActionListener(listener);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 4353)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 4354)
@@ -5,8 +5,5 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.awt.BorderLayout;
-import java.awt.Color;
 import java.awt.Component;
-import java.awt.GridLayout;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
@@ -16,4 +13,5 @@
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -27,14 +25,10 @@
 import javax.swing.AbstractAction;
 import javax.swing.AbstractListModel;
-import javax.swing.BorderFactory;
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.JButton;
 import javax.swing.JList;
 import javax.swing.JMenuItem;
-import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
 import javax.swing.ListSelectionModel;
-import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.event.ListDataEvent;
@@ -42,5 +36,4 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
-import javax.swing.plaf.basic.BasicArrowButton;
 
 import org.openstreetmap.josm.Main;
@@ -98,10 +91,7 @@
 
     /**
-     * Builds the panel with the list of selected OSM primitives
-     *
-     * @return the panel with the list of selected OSM primitives
-     */
-    protected JPanel buildListPanel() {
-        JPanel pnl = new JPanel(new BorderLayout());
+     * Builds the content panel for this dialog
+     */
+    protected void buildContentPanel() {
         DefaultListSelectionModel selectionModel  = new DefaultListSelectionModel();
         model = new SelectionListModel(selectionModel);
@@ -111,23 +101,9 @@
         lstPrimitives.setCellRenderer(new OsmPrimitivRenderer());
         lstPrimitives.setTransferHandler(null); // Fix #6290. Drag & Drop is not supported anyway and Copy/Paste is better propagated to main window
-        pnl.add(new JScrollPane(lstPrimitives), BorderLayout.CENTER);
-
-        return pnl;
-    }
-
-    /**
-     * Builds the row of action buttons at the bottom of this dialog
-     *
-     * @return the panel
-     */
-    protected JPanel buildActionPanel() {
-        JPanel pnl = new  JPanel(new GridLayout(1,2));
 
         // the select action
-        final JButton selectButton = new SideButton(actSelect = new SelectAction());
+        final SideButton selectButton = new SideButton(actSelect = new SelectAction());
         lstPrimitives.getSelectionModel().addListSelectionListener(actSelect);
-        pnl.add(selectButton);
-        BasicArrowButton selectionHistoryMenuButton = createArrowButton(selectButton);
-        selectionHistoryMenuButton.addActionListener(new ActionListener() {
+        selectButton.createArrow(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 SelectionHistoryPopup.launch(selectButton, model.getSelectionHistory());
@@ -136,9 +112,6 @@
 
         // the search button
-        final JButton searchButton = new SideButton(actSearch = new SearchAction());
-        pnl.add(searchButton);
-
-        BasicArrowButton searchHistoryMenuButton = createArrowButton(searchButton);
-        searchHistoryMenuButton.addActionListener(new ActionListener() {
+        final SideButton searchButton = new SideButton(actSearch = new SearchAction());
+        searchButton.createArrow(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 SearchPopupMenu.launch(searchButton);
@@ -146,17 +119,7 @@
         });
 
-        return pnl;
-    }
-
-    /**
-     * Builds the content panel for this dialog
-     *
-     * @return the content panel
-     */
-    protected JPanel buildContentPanel() {
-        JPanel pnl = new JPanel(new BorderLayout());
-        pnl.add(buildListPanel(), BorderLayout.CENTER);
-        pnl.add(buildActionPanel(), BorderLayout.SOUTH);
-        return pnl;
+        createLayout(lstPrimitives, true, Arrays.asList(new SideButton[] {
+            selectButton, searchButton
+        }));
     }
 
@@ -168,5 +131,5 @@
         );
 
-        add(buildContentPanel(), BorderLayout.CENTER);
+        buildContentPanel();
         model.addListDataListener(new TitleUpdater());
         actZoomToJOSMSelection = new ZoomToJOSMSelectionAction();
@@ -213,13 +176,4 @@
         DatasetEventManager.getInstance().removeDatasetListener(model);
     }
-
-    private BasicArrowButton createArrowButton(JButton parentButton) {
-        BasicArrowButton arrowButton = new BasicArrowButton(SwingConstants.SOUTH, null, null, Color.BLACK, null);
-        arrowButton.setBorder(BorderFactory.createEmptyBorder());
-        parentButton.setLayout(new BorderLayout());
-        parentButton.add(arrowButton, BorderLayout.EAST);
-        return arrowButton;
-    }
-
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 4353)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 4354)
@@ -671,6 +671,5 @@
             add(data, BorderLayout.CENTER);
         if(buttons != null && buttons.size() != 0) {
-            JPanel buttonsPanel = new JPanel();
-            buttonsPanel.setLayout(Main.pref.getBoolean("dialog.align.left", false)
+            JPanel buttonsPanel = new JPanel(Main.pref.getBoolean("dialog.align.left", false)
                 ? new FlowLayout(FlowLayout.LEFT) : new GridLayout(1,buttons.size()));
             for(SideButton button : buttons)
