Index: trunk/src/org/openstreetmap/josm/actions/AbstractSelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AbstractSelectAction.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/actions/AbstractSelectAction.java	(revision 10356)
@@ -20,5 +20,5 @@
         putValue(NAME, tr("Select"));
         putValue(SHORT_DESCRIPTION,  tr("Set the selected elements on the map to the selected items in the list above."));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+        new ImageProvider("dialogs", "select").getResource().getImageIcon(this, true);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/SideButton.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 10356)
@@ -18,6 +18,8 @@
 import javax.swing.plaf.basic.BasicArrowButton;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageResource;
 
 /**
@@ -26,5 +28,4 @@
  */
 public class SideButton extends JButton implements Destroyable {
-    private static final int iconHeight = ImageProvider.ImageSizes.SIDEBUTTON.getImageSize();
 
     private transient PropertyChangeListener propertyChangeListener;
@@ -33,8 +34,16 @@
      * Constructs a new {@code SideButton}.
      * @param action action used to specify the new button
+     * @since 744
      */
     public SideButton(Action action) {
         super(action);
-        fixIcon(action);
+        ImageResource icon = (ImageResource) action.getValue("ImageResource");
+        if (icon != null) {
+            setIcon(icon.getImageIconBounded(
+                ImageProvider.ImageSizes.SIDEBUTTON.getImageDimension()));
+        } else { /* TODO: remove when calling code is fixed */
+            Main.warn("Old style SideButton usage for action " + action);
+            fixIcon(action);
+        }
         doStyle();
     }
@@ -44,4 +53,5 @@
      * @param action action used to specify the new button
      * @param usename use action name
+     * @since 2710
      */
     public SideButton(Action action, boolean usename) {
@@ -58,11 +68,14 @@
      * @param action action used to specify the new button
      * @param imagename image name in "dialogs" directory
+     * @since 2747
      */
     public SideButton(Action action, String imagename) {
         super(action);
-        setIcon(getScaledImage(ImageProvider.get("dialogs", imagename).getImage()));
+        ImageProvider prov = new ImageProvider("dialogs", imagename);
+        setIcon(prov.setSize(ImageProvider.ImageSizes.SIDEBUTTON).get());
         doStyle();
     }
 
+    @Deprecated
     private void fixIcon(Action action) {
         // need to listen for changes, so that putValue() that are called after the
@@ -79,20 +92,17 @@
             action.addPropertyChangeListener(propertyChangeListener);
         }
+        int iconHeight = ImageProvider.ImageSizes.SIDEBUTTON.getImageSize();
         Icon i = getIcon();
         if (i instanceof ImageIcon && i.getIconHeight() != iconHeight) {
-            setIcon(getScaledImage(((ImageIcon) i).getImage()));
+            Image im = ((ImageIcon) i).getImage();
+            int newWidth = im.getWidth(null) *  iconHeight / im.getHeight(null);
+            ImageIcon icon = new ImageIcon(im.getScaledInstance(newWidth, iconHeight, Image.SCALE_SMOOTH));
+            setIcon(icon);
         }
     }
 
     /**
-     * Scales the given image proportionally so that the height is "iconHeight"
-     * @param im original image
-     * @return scaled image
+     * Do the style settings for the side button layout
      */
-    private static ImageIcon getScaledImage(Image im) {
-        int newWidth = im.getWidth(null) *  iconHeight / im.getHeight(null);
-        return new ImageIcon(im.getScaledInstance(newWidth, iconHeight, Image.SCALE_SMOOTH));
-    }
-
     private void doStyle() {
         setLayout(new BorderLayout());
@@ -101,4 +111,10 @@
     }
 
+    /**
+     * Create the arrow for opening a drop-down menu
+     * @param listener listener to use for button actions (e.g. pressing)
+     * @return the created button
+     * @since 9668
+     */
     public BasicArrowButton createArrow(ActionListener listener) {
         setMargin(new Insets(0, 0, 0, 0));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 10356)
@@ -376,5 +376,5 @@
             putValue(NAME, tr("Select"));
             putValue(SHORT_DESCRIPTION, tr("Selects the objects that take part in this command (unless currently deleted)"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+            new ImageProvider("dialogs", "select").getResource().getImageIcon(this, true);
         }
 
@@ -411,5 +411,5 @@
             putValue(SHORT_DESCRIPTION,
                     tr("Selects the objects that take part in this command (unless currently deleted), then and zooms to it"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale", "selection"));
+            new ImageProvider("dialogs/autoscale", "selection").getResource().getImageIcon(this, true);
         }
 
@@ -447,10 +447,10 @@
                 putValue(NAME, tr("Undo"));
                 putValue(SHORT_DESCRIPTION, tr("Undo the selected and all later commands"));
-                putValue(SMALL_ICON, ImageProvider.get("undo"));
+                new ImageProvider("undo").getResource().getImageIcon(this, true);
             } else {
                 tree = redoTree;
                 putValue(NAME, tr("Redo"));
                 putValue(SHORT_DESCRIPTION, tr("Redo the selected and all earlier commands"));
-                putValue(SMALL_ICON, ImageProvider.get("redo"));
+                new ImageProvider("redo").getResource().getImageIcon(this, true);
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 10356)
@@ -434,5 +434,5 @@
             putValue(NAME, tr("Resolve"));
             putValue(SHORT_DESCRIPTION,  tr("Open a merge dialog of all selected items in the list above."));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "conflict"));
+            new ImageProvider("dialogs", "conflict").getResource().getImageIcon(this, true);
             putValue("help", ht("/Dialog/ConflictList#ResolveAction"));
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 10356)
@@ -141,5 +141,5 @@
                 putValue(NAME, tr("Add"));
                 putValue(SHORT_DESCRIPTION,  tr("Add filter."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "add"));
+                new ImageProvider("dialogs", "add").getResource().getImageIcon(this, true);
             }
 
@@ -156,5 +156,5 @@
                 putValue(NAME, tr("Edit"));
                 putValue(SHORT_DESCRIPTION, tr("Edit filter."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+                new ImageProvider("dialogs", "edit").getResource().getImageIcon(this, true);
             }
 
@@ -174,5 +174,5 @@
                 putValue(NAME, tr("Delete"));
                 putValue(SHORT_DESCRIPTION, tr("Delete filter."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+                new ImageProvider("dialogs", "delete").getResource().getImageIcon(this, true);
             }
 
@@ -189,5 +189,5 @@
                 putValue(NAME, tr("Up"));
                 putValue(SHORT_DESCRIPTION, tr("Move filter up."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "up"));
+                new ImageProvider("dialogs", "up").getResource().getImageIcon(this, true);
             }
 
@@ -205,5 +205,5 @@
                 putValue(NAME, tr("Down"));
                 putValue(SHORT_DESCRIPTION, tr("Move filter down."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "down"));
+                new ImageProvider("dialogs", "down").getResource().getImageIcon(this, true);
             }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10356)
@@ -299,5 +299,5 @@
             putValue(NAME, tr("Search"));
             putValue(SHORT_DESCRIPTION,   tr("Search for objects"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
+            new ImageProvider("dialogs", "search").getResource().getImageIcon(this, true);
             updateEnabledState();
         }
@@ -361,5 +361,5 @@
             putValue(NAME, tr("History"));
             putValue(SHORT_DESCRIPTION, tr("Display the history of the selected objects."));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "history"));
+            new ImageProvider("dialogs", "history").getResource().getImageIcon(this, true);
             updateEnabledState(model.getSize());
         }
@@ -401,5 +401,5 @@
             putValue(NAME, tr("Zoom to selection"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to selection"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale", "selection"));
+            new ImageProvider("dialogs/autoscale", "selection").getResource().getImageIcon(this, true);
             updateEnabledState();
         }
@@ -442,5 +442,5 @@
             putValue(NAME, tr("Zoom to selected element(s)"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to selected element(s)"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale", "selection"));
+            new ImageProvider("dialogs/autoscale", "selection").getResource().getImageIcon(this, true);
             updateEnabledState();
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 10356)
@@ -158,5 +158,5 @@
             putValue(NAME, tr("Select"));
             putValue(SHORT_DESCRIPTION, tr("Select objects submitted by this user"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+            new ImageProvider("dialogs", "select").getResource().getImageIcon(this, true);
             updateEnabledState();
         }
@@ -193,5 +193,5 @@
             putValue(NAME, tr("Show info"));
             putValue(SHORT_DESCRIPTION, tr("Launches a browser with information about the user"));
-            putValue(SMALL_ICON, ImageProvider.get("help/internet"));
+            new ImageProvider("help/internet").getResource().getImageIcon(this, true);
             updateEnabledState();
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 10356)
@@ -120,5 +120,5 @@
                 putValue(NAME, tr("Lookup"));
                 putValue(SHORT_DESCRIPTION, tr("Looks up the selected primitives in the error list."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
+                new ImageProvider("dialogs", "search").getResource().getImageIcon(this, true);
             }
 
@@ -141,5 +141,5 @@
                 putValue(NAME, tr("Fix"));
                 putValue(SHORT_DESCRIPTION,  tr("Fix the selected issue."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs", "fix"));
+                new ImageProvider("dialogs", "fix").getResource().getImageIcon(this, true);
             }
             @Override
@@ -156,5 +156,5 @@
                     putValue(NAME, tr("Ignore"));
                     putValue(SHORT_DESCRIPTION,  tr("Ignore the selected issue next time."));
-                    putValue(SMALL_ICON, ImageProvider.get("dialogs", "fix"));
+                    new ImageProvider("dialogs", "fix").getResource().getImageIcon(this, true);
                 }
                 @Override
Index: trunk/src/org/openstreetmap/josm/gui/help/ContextSensitiveHelpAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/help/ContextSensitiveHelpAction.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/gui/help/ContextSensitiveHelpAction.java	(revision 10356)
@@ -47,5 +47,5 @@
         putValue(SHORT_DESCRIPTION, tr("Show help information"));
         putValue(NAME, tr("Help"));
-        putValue(SMALL_ICON, ImageProvider.get("help"));
+        new ImageProvider("help").getResource().getImageIcon(this);
         this.helpTopic = helpTopic;
         setEnabled(!Main.isOffline(OnlineResource.JOSM_WEBSITE));
Index: trunk/src/org/openstreetmap/josm/tools/ImageResource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 10355)
+++ trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 10356)
@@ -92,4 +92,18 @@
         icon = getImageIconBounded(ImageProvider.ImageSizes.LARGEICON.getImageDimension());
         a.putValue(Action.LARGE_ICON_KEY, icon);
+        a.putValue("ImageResource", this);
+    }
+
+    /**
+     * Set both icons of an Action
+     * @param a The action for the icons
+     * @param addresource Adds an resource named "ImageResource" if <code>true</code>
+     * @since 10356
+     */
+    public void getImageIcon(AbstractAction a, boolean addresource) {
+        getImageIcon(a);
+        if (addresource) {
+            a.putValue("ImageResource", this);
+        }
     }
 
