Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 8323)
@@ -687,5 +687,5 @@
      * Replies the length of the longest segement of the way, in metres, as computed by {@link LatLon#greatCircleDistance}.
      * @return The length of the segment, in metres
-     * @since 4138
+     * @since 8320
      */
     public double getLongestSegmentLength() {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 8323)
@@ -80,5 +80,7 @@
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -673,7 +675,6 @@
 
             JMenu setMenu = new JMenu(tr("Style settings"));
-            setMenu.setIcon(ImageProvider.overlay(ImageProvider.get("preference"),
-                ImageProvider.get("dialogs/mappaint", "pencil"),
-                ImageProvider.OverlayPosition.SOUTHEAST));
+            setMenu.setIcon(new ImageProvider("preference").setMaxSize(ImageSizes.POPUPMENU).addOverlay(
+                new ImageOverlay(new ImageProvider("dialogs/mappaint", "pencil"), 0.5, 0.5, 1.0, 1.0)).get());
             setMenu.setToolTipText(tr("Customize the style"));
             add(setMenu);
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 8323)
@@ -50,5 +50,7 @@
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Utils;
@@ -426,10 +428,8 @@
             dlg.setContent("<html>" + message + "</html>");
             dlg.setButtonIcons(new Icon[] {
-                    ImageProvider.get("ok"),
-                    ImageProvider.get("cancel"),
-                    ImageProvider.overlay(
-                            ImageProvider.get("upload"),
-                            new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
-                            ImageProvider.OverlayPosition.SOUTHEAST)});
+                    new ImageProvider("ok").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
             dlg.setToolTipTexts(new String[] {
                     tr("Return to the previous dialog to enter a more descriptive comment"),
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 8323)
@@ -90,5 +90,7 @@
 import org.openstreetmap.josm.tools.FilteredCollection;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
@@ -286,21 +288,20 @@
     }
 
-    protected Icon getBaseIcon() {
-        return ImageProvider.get("layer", "osmdata_small");
-    }
-
-    /**
-     * TODO: @return Return a dynamic drawn icon of the map data. The icon is
-     *         updated by a background thread to not disturb the running programm.
-     */
-    @Override public Icon getIcon() {
-        Icon baseIcon = getBaseIcon();
+    /**
+     * Return the image provider to get the base icon
+     * @return image provider class which can be modified
+     * @since 8323
+     */
+    protected ImageProvider getBaseIconProvider() {
+        return new ImageProvider("layer", "osmdata_small");
+    }
+
+    @Override
+    public Icon getIcon() {
+        ImageProvider base = getBaseIconProvider().setMaxSize(ImageSizes.LAYER);
         if (isUploadDiscouraged()) {
-            return ImageProvider.overlay(baseIcon,
-                    new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(8, 8, Image.SCALE_SMOOTH)),
-                    ImageProvider.OverlayPosition.SOUTHEAST);
-        } else {
-            return baseIcon;
-        }
+            base.addOverlay(new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0));
+        }
+        return base.get();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 8323)
@@ -47,5 +47,7 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageOverlay;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
 import org.openstreetmap.josm.tools.LanguageInfo;
 
@@ -156,9 +158,7 @@
         dlg.setContent(content);
         dlg.setButtonIcons(new Icon[] {
-                ImageProvider.get("cancel"),
-                ImageProvider.overlay(
-                        ImageProvider.get("upload"),
-                        new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
-                        ImageProvider.OverlayPosition.SOUTHEAST)});
+                    new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
+                    new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
         dlg.setToolTipTexts(new String[] {
                 tr("Cancel"),
Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 8322)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 8323)
@@ -130,10 +130,18 @@
         /** map icon maximum size */
         MAPMAX,
+        /** cursor icon size */
+        CURSOR,
+        /** cursor overlay icon size */
+        CURSOROVERLAY,
         /** menu icon size */
-        CURSOR,
-        /** Cursor overlay icon size */
-        CURSOROVERLAY,
-        /** Cursor icon size */
         MENU,
+        /** menu icon size in popup menus
+         * @since 8323
+         */
+        POPUPMENU,
+        /** Layer list icon size
+         * @since 8323
+         */
+        LAYER
     }
 
@@ -332,4 +340,5 @@
         case MAPMAX: sizeval = Main.pref.getInteger("iconsize.mapmax", 48); break;
         case MAP: sizeval = Main.pref.getInteger("iconsize.mapmax", 16); break;
+        case POPUPMENU: /* POPUPMENU is LARGELICON - only provided in case of future changes */
         case LARGEICON: sizeval = Main.pref.getInteger("iconsize.largeicon", 24); break;
         case MENU: /* MENU is SMALLICON - only provided in case of future changes */
@@ -337,4 +346,5 @@
         case CURSOROVERLAY: /* same as cursor - only provided in case of future changes */
         case CURSOR: sizeval = Main.pref.getInteger("iconsize.cursor", 32); break;
+        case LAYER: sizeval = Main.pref.getInteger("iconsize.layer", 16); break;
         default: sizeval = Main.pref.getInteger("iconsize.default", 24); break;
         }
