Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 7684)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 7687)
@@ -124,5 +124,10 @@
 
         public Icon getDisplayIcon() {
-            return ico != null ? ico : (Icon) action.getValue(Action.SMALL_ICON);
+            if(ico != null)
+                return ico;
+            Object o = action.getValue(Action.LARGE_ICON_KEY);
+            if(o == null)
+                o = action.getValue(Action.SMALL_ICON);
+            return (Icon) o;
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7684)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 7687)
@@ -11,4 +11,5 @@
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -143,16 +144,14 @@
      * Called from the XML parser to set the icon.
      * This task is performed in the background in order to speedup startup.
-     *
-     * FIXME for Java 1.6 - use 24x24 icons for LARGE_ICON_KEY (button bar)
-     * and the 16x16 icons for SMALL_ICON.
      */
     public void setIcon(final String iconName) {
+        File arch = TaggingPresetReader.getZipIcons();
+        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName);
-        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
         imgProv.setDirs(s);
         imgProv.setId("presets");
-        imgProv.setArchive(TaggingPresetReader.getZipIcons());
+        imgProv.setArchive(arch);
         imgProv.setOptional(true);
-        imgProv.setMaxWidth(16).setMaxHeight(16);
+        imgProv.setSize(ImageProvider.ImageSizes.SMALLICON);
         imgProv.getInBackground(new ImageProvider.ImageCallback() {
             @Override
@@ -167,4 +166,23 @@
                 } else {
                     Main.warn("Could not get presets icon " + iconName);
+                }
+            }
+        });
+        imgProv = new ImageProvider(iconName);
+        imgProv.setDirs(s);
+        imgProv.setId("presets");
+        imgProv.setArchive(arch);
+        imgProv.setOptional(true);
+        imgProv.setSize(ImageProvider.ImageSizes.LARGEICON);
+        imgProv.getInBackground(new ImageProvider.ImageCallback() {
+            @Override
+            public void finished(final ImageIcon result) {
+                if (result != null) {
+                    GuiHelper.runInEDT(new Runnable() {
+                        @Override
+                        public void run() {
+                            putValue(Action.LARGE_ICON_KEY, result);
+                        }
+                    });
                 }
             }
Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 7684)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 7687)
@@ -109,4 +109,19 @@
 
     /**
+     * Supported image sizes
+     * @since 7687
+     */
+    public static enum ImageSizes {
+        /* SMALL_ICON value of on Action */
+        SMALLICON,
+        /* LARGE_ICON_KEY value of on Action */
+        LARGEICON,
+        /* MAP icon */
+        MAP,
+        /* MAP icon maximum size*/
+        MAPMAX,
+    }
+
+    /**
      * Property set on {@code BufferedImage} returned by {@link #makeImageTransparent}.
      * @since 7132
@@ -218,4 +233,21 @@
 
     /**
+     * Convert enumarated size values to real numbers
+     * @return dimension of imagei
+     * @since 7687
+     */
+    public Dimension getImageSizes(ImageSizes size) {
+        int sizeval;
+        switch(size) {
+        case MAPMAX: sizeval = Main.pref.getInteger("iconsize.mapmax", 48); break;
+        case MAP: sizeval = Main.pref.getInteger("iconsize.mapmax", 16); break;
+        case LARGEICON: sizeval = Main.pref.getInteger("iconsize.largeicon", 24); break;
+        case SMALLICON: sizeval = Main.pref.getInteger("iconsize.smallicon", 16); break;
+        default: sizeval = Main.pref.getInteger("iconsize.default", 24); break;
+        }
+        return new Dimension(sizeval, sizeval);
+    }
+    
+    /**
      * Set the dimensions of the image.
      *
@@ -232,4 +264,15 @@
 
     /**
+     * Set the dimensions of the image.
+     *
+     * If not specified, the original size of the image is used.
+     * @return the current object, for convenience
+     * @since 7687
+     */
+    public ImageProvider setSize(ImageSizes size) {
+        return setSize(getImageSizes(size));
+    }
+
+    /**
      * @see #setSize
      * @return the current object, for convenience
@@ -262,4 +305,18 @@
         this.maxHeight = maxSize.height;
         return this;
+    }
+
+    /**
+     * Limit the maximum size of the image.
+     *
+     * It will shrink the image if necessary, but keep the aspect ratio.
+     * The given width or height can be -1 which means this direction is not bounded.
+     *
+     * 'size' and 'maxSize' are not compatible, you should set only one of them.
+     * @return the current object, for convenience
+     * @since 7687
+     */
+    public ImageProvider setMaxSize(ImageSizes size) {
+        return setMaxSize(getImageSizes(size));
     }
 
