Index: trunk/src/org/openstreetmap/josm/actions/AboutAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 10428)
@@ -103,5 +103,5 @@
         JPanel panel = new JPanel(new GridBagLayout());
         panel.setPreferredSize(new Dimension(890, 300));
-        panel.add(new JLabel("", new ImageProvider("logo.svg").setSize(ImageProvider.ImageSizes.ABOUT_LOGO).get(),
+        panel.add(new JLabel("", ImageProvider.get("logo.svg", ImageProvider.ImageSizes.ABOUT_LOGO),
                 JLabel.CENTER), GBC.std().insets(0, 5, 0, 0));
         panel.add(about, GBC.std().fill());
Index: trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 10428)
@@ -73,5 +73,5 @@
         super(name);
         if (icon != null)
-            icon.getResource().attachImageIcon(this);
+            icon.getResource().attachImageIcon(this, true);
         setHelpId();
         sc = shortcut;
Index: trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 10428)
@@ -26,5 +26,5 @@
         putValue(SHORT_DESCRIPTION, tr("Upload note changes to server"));
         putValue(NAME, tr("Upload notes"));
-        putValue(SMALL_ICON, ImageProvider.get("upload"));
+        new ImageProvider("upload").getResource().attachImageIcon(this, true);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java	(revision 10428)
@@ -70,5 +70,5 @@
 
         NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Create new note"), tr("Create note"));
-        dialog.showNoteDialog(tr("Enter a detailed comment to create a note"), NotesDialog.ICON_NEW);
+        dialog.showNoteDialog(tr("Enter a detailed comment to create a note"), ImageProvider.get("dialogs/notes", "note_new"));
 
         if (dialog.getValue() != 1) {
Index: trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java	(revision 10428)
@@ -24,5 +24,5 @@
         putValue(SHORT_DESCRIPTION, tr("Delete the selected relation"));
         putValue(NAME, tr("Delete"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java	(revision 10428)
@@ -22,5 +22,5 @@
     public DuplicateRelationAction() {
         putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window"));
-        putValue(SMALL_ICON, ImageProvider.get("duplicate"));
+        new ImageProvider("duplicate").getResource().attachImageIcon(this, true);
         putValue(NAME, tr("Duplicate"));
     }
Index: trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java	(revision 10428)
@@ -32,5 +32,5 @@
         putValue(NAME, tr("Edit"));
         putValue(SHORT_DESCRIPTION, tr("Call relation editor for selected relation"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+        new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java	(revision 10428)
@@ -26,5 +26,5 @@
         putValue(SHORT_DESCRIPTION, add ? tr("Add the selected relations to the current selection") :
             tr("Set the current selection to the list of selected relations"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+        new ImageProvider("dialogs", "select").getResource().attachImageIcon(this, true);
         putValue(NAME, add ? tr("Select relation (add)") : tr("Select relation"));
         this.add = add;
Index: trunk/src/org/openstreetmap/josm/gui/SideButton.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/SideButton.java	(revision 10428)
@@ -56,9 +56,7 @@
      */
     public SideButton(Action action, boolean usename) {
-        super(action);
+        this(action);
         if (!usename) {
             setText(null);
-            fixIcon(action);
-            doStyle();
         }
     }
@@ -72,6 +70,5 @@
     public SideButton(Action action, String imagename) {
         super(action);
-        ImageProvider prov = new ImageProvider("dialogs", imagename);
-        setIcon(prov.setSize(ImageProvider.ImageSizes.SIDEBUTTON).get());
+        setIcon(ImageProvider.get("dialogs", imagename, ImageProvider.ImageSizes.SIDEBUTTON));
         doStyle();
     }
Index: trunk/src/org/openstreetmap/josm/gui/SplashScreen.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 10428)
@@ -68,5 +68,5 @@
 
         // Add the logo
-        JLabel logo = new JLabel(new ImageProvider("logo.svg").setSize(ImageProvider.ImageSizes.SPLASH_LOGO).get());
+        JLabel logo = new JLabel(ImageProvider.get("logo.svg", ImageProvider.ImageSizes.SPLASH_LOGO));
         GridBagConstraints gbc = new GridBagConstraints();
         gbc.gridheight = 2;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 10428)
@@ -298,5 +298,5 @@
             putValue(NAME, tr("Select"));
             putValue(SHORT_DESCRIPTION, tr("Select all objects assigned to the currently selected changesets"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+            new ImageProvider("dialogs", "select").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
@@ -351,5 +351,5 @@
             putValue(NAME, tr("Download"));
             putValue(SHORT_DESCRIPTION, tr("Download information about the selected changesets from the OSM server"));
-            putValue(SMALL_ICON, ImageProvider.get("download"));
+            new ImageProvider("download").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
@@ -388,5 +388,5 @@
             putValue(NAME, tr("Close open changesets"));
             putValue(SHORT_DESCRIPTION, tr("Closes the selected open changesets"));
-            putValue(SMALL_ICON, ImageProvider.get("closechangeset"));
+            new ImageProvider("closechangeset").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
@@ -423,5 +423,5 @@
             putValue(NAME, tr("Show info"));
             putValue(SHORT_DESCRIPTION, tr("Open a web page for each selected changeset"));
-            putValue(SMALL_ICON, ImageProvider.get("help/internet"));
+            new ImageProvider("help/internet").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
@@ -463,5 +463,5 @@
             putValue(NAME, tr("Details"));
             putValue(SHORT_DESCRIPTION, tr("Opens the Changeset Manager window for the selected changesets"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/changeset", "changesetmanager"));
+            new ImageProvider("dialogs/changeset", "changesetmanager").getResource().attachImageIcon(this, true);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 10428)
@@ -342,5 +342,5 @@
             putValue(NAME, tr("On/Off"));
             putValue(SHORT_DESCRIPTION, tr("Turn selected styles on or off"));
-            putValue(SMALL_ICON, ImageProvider.get("apply"));
+            new ImageProvider("apply").getResource().attachImageIcon(this);
             updateEnabledState();
         }
@@ -380,5 +380,5 @@
             increment = isDown ? 1 : -1;
             putValue(NAME, isDown ? tr("Down") : tr("Up"));
-            putValue(SMALL_ICON, isDown ? ImageProvider.get("dialogs", "down") : ImageProvider.get("dialogs", "up"));
+            new ImageProvider("dialogs", isDown ? "down" : "up").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, isDown ? tr("Move the selected entry one row down.") : tr("Move the selected entry one row up."));
             updateEnabledState();
@@ -415,5 +415,5 @@
             putValue(NAME, tr("Reload from file"));
             putValue(SHORT_DESCRIPTION, tr("reload selected styles from file"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
+            new ImageProvider("dialogs", "refresh").getResource().attachImageIcon(this);
             setEnabled(getEnabledState());
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(revision 10428)
@@ -6,5 +6,4 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.Image;
 import java.awt.event.ActionEvent;
 import java.awt.event.MouseAdapter;
@@ -56,24 +55,4 @@
  */
 public class NotesDialog extends ToggleDialog implements LayerChangeListener {
-
-    /** Small icon size for use in graphics calculations */
-    public static final int ICON_SMALL_SIZE = 16;
-    /** 24x24 icon for unresolved notes */
-    public static final ImageIcon ICON_OPEN = ImageProvider.get("dialogs/notes", "note_open");
-    /** 16x16 icon for unresolved notes */
-    public static final ImageIcon ICON_OPEN_SMALL =
-            new ImageIcon(ICON_OPEN.getImage().getScaledInstance(ICON_SMALL_SIZE, ICON_SMALL_SIZE, Image.SCALE_SMOOTH));
-    /** 24x24 icon for resolved notes */
-    public static final ImageIcon ICON_CLOSED = ImageProvider.get("dialogs/notes", "note_closed");
-    /** 16x16 icon for resolved notes */
-    public static final ImageIcon ICON_CLOSED_SMALL =
-            new ImageIcon(ICON_CLOSED.getImage().getScaledInstance(ICON_SMALL_SIZE, ICON_SMALL_SIZE, Image.SCALE_SMOOTH));
-    /** 24x24 icon for new notes */
-    public static final ImageIcon ICON_NEW = ImageProvider.get("dialogs/notes", "note_new");
-    /** 16x16 icon for new notes */
-    public static final ImageIcon ICON_NEW_SMALL =
-            new ImageIcon(ICON_NEW.getImage().getScaledInstance(ICON_SMALL_SIZE, ICON_SMALL_SIZE, Image.SCALE_SMOOTH));
-    /** Icon for note comments */
-    public static final ImageIcon ICON_COMMENT = ImageProvider.get("dialogs/notes", "note_comment");
 
     private NoteTableModel model;
@@ -257,9 +236,9 @@
                 ImageIcon icon;
                 if (note.getId() < 0) {
-                    icon = ICON_NEW_SMALL;
+                    icon = ImageProvider.get("dialogs/notes", "note_new", ImageProvider.ImageSizes.SMALLICON);
                 } else if (note.getState() == State.CLOSED) {
-                    icon = ICON_CLOSED_SMALL;
+                    icon = ImageProvider.get("dialogs/notes", "note_closed", ImageProvider.ImageSizes.SMALLICON);
                 } else {
-                    icon = ICON_OPEN_SMALL;
+                    icon = ImageProvider.get("dialogs/notes", "note_open", ImageProvider.ImageSizes.SMALLICON);
                 }
                 jlabel.setIcon(icon);
@@ -313,5 +292,5 @@
             putValue(SHORT_DESCRIPTION, tr("Add comment"));
             putValue(NAME, tr("Comment"));
-            putValue(SMALL_ICON, ICON_COMMENT);
+            new ImageProvider("dialogs/notes", "note_comment").getResource().attachImageIcon(this, true);
         }
 
@@ -327,5 +306,5 @@
             }
             NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Comment on note"), tr("Add comment"));
-            dialog.showNoteDialog(tr("Add comment to note:"), NotesDialog.ICON_COMMENT);
+            dialog.showNoteDialog(tr("Add comment to note:"), ImageProvider.get("dialogs/notes", "note_comment"));
             if (dialog.getValue() != 1) {
                 return;
@@ -345,5 +324,5 @@
             putValue(SHORT_DESCRIPTION, tr("Close note"));
             putValue(NAME, tr("Close"));
-            putValue(SMALL_ICON, ICON_CLOSED);
+            new ImageProvider("dialogs/notes", "note_closed").getResource().attachImageIcon(this, true);
         }
 
@@ -351,5 +330,5 @@
         public void actionPerformed(ActionEvent e) {
             NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Close note"), tr("Close note"));
-            dialog.showNoteDialog(tr("Close note with message:"), NotesDialog.ICON_CLOSED);
+            dialog.showNoteDialog(tr("Close note with message:"), ImageProvider.get("dialogs/notes", "note_closed"));
             if (dialog.getValue() != 1) {
                 return;
@@ -370,5 +349,5 @@
             putValue(SHORT_DESCRIPTION, tr("Create a new note"));
             putValue(NAME, tr("Create"));
-            putValue(SMALL_ICON, ICON_NEW);
+            new ImageProvider("dialogs/notes", "note_new").getResource().attachImageIcon(this, true);
         }
 
@@ -390,5 +369,5 @@
             putValue(SHORT_DESCRIPTION, tr("Reopen note"));
             putValue(NAME, tr("Reopen"));
-            putValue(SMALL_ICON, ICON_OPEN);
+            new ImageProvider("dialogs/notes", "note_open").getResource().attachImageIcon(this, true);
         }
 
@@ -396,5 +375,5 @@
         public void actionPerformed(ActionEvent e) {
             NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Reopen note"), tr("Reopen note"));
-            dialog.showNoteDialog(tr("Reopen note with message:"), NotesDialog.ICON_OPEN);
+            dialog.showNoteDialog(tr("Reopen note with message:"), ImageProvider.get("dialogs/notes", "note_open"));
             if (dialog.getValue() != 1) {
                 return;
@@ -416,5 +395,5 @@
             putValue(SHORT_DESCRIPTION, tr("Sort notes"));
             putValue(NAME, tr("Sort"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort"));
+            new ImageProvider("dialogs", "sort").getResource().attachImageIcon(this, true);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10428)
@@ -357,5 +357,5 @@
             putValue(SHORT_DESCRIPTION, tr("Create a new relation"));
             putValue(NAME, tr("New"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "addrelation"));
+            new ImageProvider("dialogs", "addrelation").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 10428)
@@ -507,5 +507,5 @@
 
             // scale down the dialog icon
-            ImageIcon icon = new ImageProvider("dialogs", iconName).setSize(ImageProvider.ImageSizes.SMALLICON).get();
+            ImageIcon icon = ImageProvider.get("dialogs", iconName, ImageProvider.ImageSizes.SMALLICON);
             lblTitle = new JLabel("", icon, JLabel.TRAILING);
             lblTitle.setIconTextGap(8);
@@ -545,5 +545,5 @@
             // show the pref button if applicable
             if (preferenceClass != null) {
-                JButton pref = new JButton(new ImageProvider("preference").setSize(ImageProvider.ImageSizes.SMALLICON).get());
+                JButton pref = new JButton(ImageProvider.get("preference", ImageProvider.ImageSizes.SMALLICON));
                 pref.setToolTipText(tr("Open preferences for this panel"));
                 pref.setBorder(BorderFactory.createEmptyBorder());
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java	(revision 10428)
@@ -51,5 +51,5 @@
         this.model = model;
         putValue(NAME, tr("Activate"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "activate"));
+        new ImageProvider("dialogs", "activate").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Activate the selected layer"));
         multikeyShortcut = Shortcut.registerShortcut("core_multikey:activateLayer", tr("Multikey: {0}",
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerAction.java	(revision 10428)
@@ -31,5 +31,5 @@
     public DeleteLayerAction(LayerListModel model) {
         this.model = model;
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
+        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Delete the selected layers."));
         putValue(NAME, tr("Delete"));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 10428)
@@ -63,5 +63,5 @@
         content.setLayout(new GridBagLayout());
 
-        putValue(SMALL_ICON, ImageProvider.get("dialogs/layerlist", "visibility"));
+        new ImageProvider("dialogs/layerlist", "visibility").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Change visibility of the selected layer."));
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MergeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MergeAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MergeAction.java	(revision 10428)
@@ -60,5 +60,5 @@
         this.model = model;
         putValue(NAME, tr("Merge"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "mergedown"));
+        new ImageProvider("dialogs", "mergedown").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Merge this layer into another layer"));
         putValue("help", HelpUtil.ht("/Dialog/LayerList#MergeLayer"));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveDownAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveDownAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveDownAction.java	(revision 10428)
@@ -24,5 +24,5 @@
         this.model = model;
         putValue(NAME, tr("Move down"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "down"));
+        new ImageProvider("dialogs", "down").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Move the selected layer one row down."));
         updateEnabledState();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveUpAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveUpAction.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/MoveUpAction.java	(revision 10428)
@@ -24,5 +24,5 @@
         this.model = model;
         putValue(NAME, tr("Move up"));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "up"));
+        new ImageProvider("dialogs", "up").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Move the selected layer one row up."));
         updateEnabledState();
Index: trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java	(revision 10428)
@@ -33,5 +33,5 @@
         super(tr("Open Recent"));
         setToolTipText(tr("List of recently opened files"));
-        setIcon(new ImageProvider("openrecent").setSize(ImageProvider.ImageSizes.MENU).get());
+        setIcon(ImageProvider.get("openrecent", ImageProvider.ImageSizes.MENU));
         putClientProperty("help", ht("/Action/OpenRecent"));
 
Index: trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 10428)
@@ -384,11 +384,8 @@
         private final transient Image save = ImageProvider.get("save").getImage();
         private final transient Image upld = ImageProvider.get("upload").getImage();
-        private final transient Image saveDis = new BufferedImage(ICON_SIZE, ICON_SIZE, BufferedImage.TYPE_4BYTE_ABGR);
-        private final transient Image upldDis = new BufferedImage(ICON_SIZE, ICON_SIZE, BufferedImage.TYPE_4BYTE_ABGR);
+        private final transient Image saveDis = new ImageProvider("save").setDisabled(true).get().getImage();
+        private final transient Image upldDis = new ImageProvider("upload").setDisabled(true).get().getImage();
 
         SaveAndProceedAction() {
-            // get disabled versions of icons
-            new JLabel(ImageProvider.get("save")).getDisabledIcon().paintIcon(new JPanel(), saveDis.getGraphics(), 0, 0);
-            new JLabel(ImageProvider.get("upload")).getDisabledIcon().paintIcon(new JPanel(), upldDis.getGraphics(), 0, 0);
             initForSaveAndExit();
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 10428)
@@ -37,8 +37,10 @@
 import org.openstreetmap.josm.gui.io.UploadNoteLayerTask;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiSizesHelper;
 import org.openstreetmap.josm.io.NoteExporter;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.ColorHelper;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
@@ -107,4 +109,7 @@
     @Override
     public void paint(Graphics2D g, MapView mv, Bounds box) {
+        final int iconHeight = GuiSizesHelper.getSizeDpiAdjusted( ImageProvider.ImageSizes.SMALLICON.getVirtualHeight() );
+        final int iconWidth  = GuiSizesHelper.getSizeDpiAdjusted( ImageProvider.ImageSizes.SMALLICON.getVirtualWidth() );
+
         for (Note note : noteData.getNotes()) {
             Point p = mv.getPoint(note.getLatLon());
@@ -112,9 +117,9 @@
             ImageIcon icon;
             if (note.getId() < 0) {
-                icon = NotesDialog.ICON_NEW_SMALL;
+                icon = ImageProvider.get("dialogs/notes", "note_new", ImageProvider.ImageSizes.SMALLICON);
             } else if (note.getState() == State.CLOSED) {
-                icon = NotesDialog.ICON_CLOSED_SMALL;
+                icon = ImageProvider.get("dialogs/notes", "note_closed", ImageProvider.ImageSizes.SMALLICON);
             } else {
-                icon = NotesDialog.ICON_OPEN_SMALL;
+                icon = ImageProvider.get("dialogs/notes", "note_open", ImageProvider.ImageSizes.SMALLICON);
             }
             int width = icon.getIconWidth();
@@ -151,9 +156,9 @@
 
             g.setColor(ColorHelper.html2color(Main.pref.get("color.selected")));
-            g.drawRect(p.x - (NotesDialog.ICON_SMALL_SIZE / 2), p.y - NotesDialog.ICON_SMALL_SIZE,
-                    NotesDialog.ICON_SMALL_SIZE - 1, NotesDialog.ICON_SMALL_SIZE - 1);
-
-            int tx = p.x + (NotesDialog.ICON_SMALL_SIZE / 2) + 5;
-            int ty = p.y - NotesDialog.ICON_SMALL_SIZE - 1;
+            g.drawRect(p.x - (iconWidth / 2), p.y - iconHeight,
+                    iconWidth - 1, iconHeight - 1);
+
+            int tx = p.x + (iconWidth / 2) + 5;
+            int ty = p.y - iconHeight - 1;
             g.translate(tx, ty);
 
@@ -180,5 +185,5 @@
     @Override
     public Icon getIcon() {
-        return NotesDialog.ICON_OPEN_SMALL;
+        return ImageProvider.get("dialogs/notes", "note_open", ImageProvider.ImageSizes.SMALLICON);
     }
 
@@ -243,9 +248,10 @@
         double snapDistance = 10;
         double minDistance = Double.MAX_VALUE;
+        final int iconHeight = GuiSizesHelper.getSizeDpiAdjusted( ImageProvider.ImageSizes.SMALLICON.getVirtualHeight() );
         Note closestNote = null;
         for (Note note : noteData.getNotes()) {
             Point notePoint = Main.map.mapView.getPoint(note.getLatLon());
             //move the note point to the center of the icon where users are most likely to click when selecting
-            notePoint.setLocation(notePoint.getX(), notePoint.getY() - NotesDialog.ICON_SMALL_SIZE / 2);
+            notePoint.setLocation(notePoint.getX(), notePoint.getY() - iconHeight / 2);
             double dist = clickPoint.distanceSq(notePoint);
             if (minDistance > dist && clickPoint.distance(notePoint) < snapDistance) {
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 10428)
@@ -86,5 +86,5 @@
     public MapPaintMenu() {
         super(tr("Map Paint Styles"));
-        setIcon(new ImageProvider("dialogs", "mapstyle").setSize(ImageProvider.ImageSizes.MENU).get());
+        setIcon(ImageProvider.get("dialogs", "mapstyle", ImageProvider.ImageSizes.MENU));
         MapPaintStyles.addMapPaintSylesUpdateListener(this);
         putClientProperty("help", ht("/Dialog/MapPaint"));
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 10428)
@@ -512,5 +512,5 @@
 
                     if (iconName != null && !iconName.isEmpty()) {
-                        icon = new ImageProvider("preferences", iconName).setSize(ImageProvider.ImageSizes.SETTINGS_TAB).get();
+                        icon = ImageProvider.get("preferences", iconName, ImageProvider.ImageSizes.SETTINGS_TAB);
                     }
                     if (settingsInitialized.contains(tps)) {
Index: trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java	(revision 10428)
@@ -180,5 +180,5 @@
             mi.setText(label);
             if (iconName != null && Main.pref.getBoolean("text.popupmenu.useicons", true)) {
-                ImageIcon icon = new ImageProvider(iconName).setSize(ImageProvider.ImageSizes.SMALLICON).get();
+                ImageIcon icon = ImageProvider.get(iconName, ImageProvider.ImageSizes.SMALLICON);
                 if (icon != null) {
                     mi.setIcon(icon);
Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 10428)
@@ -272,4 +272,6 @@
     /** ordered list of overlay images */
     protected List<ImageOverlay> overlayInfo;
+    /** <code>true</code> if icon must be grayed out */
+    protected boolean isDisabled = false;
 
     private static SVGUniverse svgUniverse;
@@ -351,4 +353,5 @@
         this.additionalClassLoaders = image.additionalClassLoaders;
         this.overlayInfo = image.overlayInfo;
+        this.isDisabled = image.isDisabled;
     }
 
@@ -601,4 +604,16 @@
 
     /**
+     * Set, if image must be filtered to grayscale so it will look like disabled icon.
+     *
+     * @param disabled true, if image must be grayed out for disabled state
+     * @return the current object, for convenience
+     * @since 10428
+     */
+    public ImageProvider setDisabled(boolean disabled) {
+        this.isDisabled = disabled;
+        return this;
+    }
+
+    /**
      * Execute the image request and scale result.
      * @return the requested image or null if the request failed
@@ -606,6 +621,8 @@
     public ImageIcon get() {
         ImageResource ir = getResource();
-        if (ir == null)
+
+        if (ir == null) {
             return null;
+        }
         if (virtualMaxWidth != -1 || virtualMaxHeight != -1)
             return ir.getImageIconBounded(new Dimension(virtualMaxWidth, virtualMaxHeight));
@@ -638,4 +655,7 @@
             ir = new ImageResource(ir, overlayInfo);
         }
+        if (isDisabled) {
+            ir.setDisabled(true);
+        }
         return ir;
     }
@@ -718,4 +738,18 @@
 
     /**
+     * Load an image from directory with a given file name and size.
+     *
+     * @param subdir subdirectory the image lies in
+     * @param name The icon name (base name with or without '.png' or '.svg' extension)
+     * @param size Target icon size
+     * @return The requested Image.
+     * @throws RuntimeException if the image cannot be located
+     * @since 10428
+     */
+    public static ImageIcon get(String subdir, String name, ImageSizes size) {
+        return new ImageProvider(subdir, name).setSize(size).get();
+    }
+
+    /**
      * Load an empty image with a given size.
      *
@@ -741,4 +775,17 @@
     public static ImageIcon getIfAvailable(String subdir, String name) {
         return new ImageProvider(subdir, name).setOptional(true).get();
+    }
+
+    /**
+     * Load an image with a given file name and size.
+     *
+     * @param name The icon name (base name with or without '.png' or '.svg' extension)
+     * @param size Target icon size
+     * @return the requested image or null if the request failed
+     * @see #get(String, String)
+     * @since 10428
+     */
+    public static ImageIcon get(String name, ImageSizes size) {
+        return new ImageProvider(name).setSize(size).get();
     }
 
@@ -776,11 +823,14 @@
                 return null;
 
+            String prefix = "";
+            if(isDisabled)
+              prefix = "dis:"+prefix;
             if (name.startsWith("data:")) {
                 String url = name;
-                ImageResource ir = cache.get(url);
+                ImageResource ir = cache.get(prefix+url);
                 if (ir != null) return ir;
                 ir = getIfAvailableDataUrl(url);
                 if (ir != null) {
-                    cache.put(url, ir);
+                    cache.put(prefix+url, ir);
                 }
                 return ir;
@@ -791,17 +841,17 @@
             if (name.startsWith(HTTP_PROTOCOL) || name.startsWith(HTTPS_PROTOCOL)) {
                 String url = name;
-                ImageResource ir = cache.get(url);
+                ImageResource ir = cache.get(prefix+url);
                 if (ir != null) return ir;
                 ir = getIfAvailableHttp(url, type);
                 if (ir != null) {
-                    cache.put(url, ir);
+                    cache.put(prefix+url, ir);
                 }
                 return ir;
             } else if (name.startsWith(WIKI_PROTOCOL)) {
-                ImageResource ir = cache.get(name);
+                ImageResource ir = cache.get(prefix+name);
                 if (ir != null) return ir;
                 ir = getIfAvailableWiki(name, type);
                 if (ir != null) {
-                    cache.put(name, ir);
+                    cache.put(prefix+name, ir);
                 }
                 return ir;
@@ -831,5 +881,5 @@
 
                     String fullName = subdir + name + ext;
-                    String cacheName = fullName;
+                    String cacheName = prefix + fullName;
                     /* cache separately */
                     if (dirs != null && !dirs.isEmpty()) {
Index: trunk/src/org/openstreetmap/josm/tools/ImageResource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 10424)
+++ trunk/src/org/openstreetmap/josm/tools/ImageResource.java	(revision 10428)
@@ -11,5 +11,8 @@
 import javax.swing.AbstractAction;
 import javax.swing.Action;
+import javax.swing.Icon;
 import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
 
 import org.openstreetmap.josm.gui.util.GuiSizesHelper;
@@ -43,4 +46,11 @@
      */
     protected List<ImageOverlay> overlayInfo;
+    /**
+     * <code>true</code> if icon must be grayed out
+     */
+    protected boolean isDisabled = false;
+    /**
+     * The base raster image for the final output
+     */
     private Image baseImage;
 
@@ -51,6 +61,5 @@
     public ImageResource(Image img) {
         CheckParameterUtil.ensureParameterNotNull(img);
-        baseImage = img;
-        imgCache.put(DEFAULT_DIMENSION, scaleBaseImageIfNeeded(img));
+        baseImage = scaleBaseImageIfNeeded(img);
     }
 
@@ -96,4 +105,16 @@
 
     /**
+     * Set, if image must be filtered to grayscale so it will look like disabled icon.
+     *
+     * @param disabled true, if image must be grayed out for disabled state
+     * @return the current object, for convenience
+     * @since 10428
+     */
+    public ImageResource setDisabled(boolean disabled) {
+        this.isDisabled = disabled;
+        return this;
+    }
+
+    /**
      * Set both icons of an Action
      * @param a The action for the icons
@@ -145,17 +166,11 @@
             return new ImageIcon(img);
         }
+        BufferedImage bimg;
         if (svg != null) {
             Dimension realDim = GuiSizesHelper.getDimensionDpiAdjusted(dim);
-            BufferedImage bimg = ImageProvider.createImageFromSvg(svg, realDim);
+            bimg = ImageProvider.createImageFromSvg(svg, realDim);
             if (bimg == null) {
                 return null;
             }
-            if (overlayInfo != null) {
-                for (ImageOverlay o : overlayInfo) {
-                    o.process(bimg);
-                }
-            }
-            imgCache.put(dim, bimg);
-            return new ImageIcon(bimg);
         } else {
             if (baseImage == null) throw new AssertionError();
@@ -173,14 +188,22 @@
             }
             Image i = icon.getImage().getScaledInstance(realWidth, realHeight, Image.SCALE_SMOOTH);
-            BufferedImage bimg = new BufferedImage(realWidth, realHeight, BufferedImage.TYPE_INT_ARGB);
+            bimg = new BufferedImage(realWidth, realHeight, BufferedImage.TYPE_INT_ARGB);
             bimg.getGraphics().drawImage(i, 0, 0, null);
-            if (overlayInfo != null) {
-                for (ImageOverlay o : overlayInfo) {
-                    o.process(bimg);
-                }
-            }
-            imgCache.put(dim, bimg);
-            return new ImageIcon(bimg);
-        }
+        }
+        if (overlayInfo != null) {
+            for (ImageOverlay o : overlayInfo) {
+                o.process(bimg);
+            }
+        }
+        if (isDisabled) {
+            //Use default Swing functionality to make icon look disabled by applying grayscaling filter.
+            Icon disabledIcon = UIManager.getLookAndFeel().getDisabledIcon(null, new ImageIcon(bimg));
+
+            //Convert Icon to ImageIcon with BufferedImage inside
+            bimg = new BufferedImage(bimg.getWidth(), bimg.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
+            disabledIcon.paintIcon(new JPanel(), bimg.getGraphics(), 0, 0);
+        }
+        imgCache.put(dim, bimg);
+        return new ImageIcon(bimg);
     }
 
