Index: trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 6130)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.actions;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.event.ActionEvent;
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -138,10 +139,9 @@
 
         if (nodes.size() < 4) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Please select at least four nodes."),
-                    tr("Information"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
+            new Notification(
+                    tr("Please select at least four nodes."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 6130)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -65,11 +66,8 @@
 
     private void showWarning() {
-        JOptionPane.showMessageDialog(
-                Main.parent,
-                tr("Please select at least three nodes."),
-                tr("Information"),
-                JOptionPane.INFORMATION_MESSAGE
-        );
-        return;
+        new Notification(
+                tr("Please select at least three nodes."))
+                .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                .show();
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 6130)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -65,12 +66,9 @@
 
     protected static void warnCombiningImpossible() {
-        String msg = tr("Could not combine ways "
+        String msg = tr("Could not combine ways<br>"
                 + "(They could not be merged into a single string of nodes)");
-        JOptionPane.showMessageDialog(
-                Main.parent,
-                msg,
-                tr("Information"),
-                JOptionPane.INFORMATION_MESSAGE
-        );
+        new Notification(msg)
+                .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                .show();
         return;
     }
@@ -198,10 +196,9 @@
         Set<Way> selectedWays = OsmPrimitive.getFilteredSet(selection, Way.class);
         if (selectedWays.size() < 2) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Please select at least two ways to combine."),
-                    tr("Information"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
+            new Notification(
+                    tr("Please select at least two ways to combine."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 6130)
@@ -203,10 +203,8 @@
 
             if (sUnder == 0) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("Those nodes are not in a circle. Aborting."),
-                        tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE
-                );
+                new Notification(
+                        tr("Those nodes are not in a circle. Aborting."))
+                        .setIcon(JOptionPane.WARNING_MESSAGE)
+                        .show();
                 return;
             }
@@ -264,8 +262,9 @@
 
         } else {
-            Notification note = new Notification();
-            note.setContent(tr("Please select exactly two or three nodes or one way with exactly two or three nodes."));
-            note.setIcon(JOptionPane.INFORMATION_MESSAGE);
-            note.show();
+            new Notification(
+                    tr("Please select exactly two or three nodes or one way with exactly two or three nodes."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_LONG)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 6130)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -63,5 +64,9 @@
     public void actionPerformed(ActionEvent e) {
         if (Main.main.getEditLayer() == null) {
-            JOptionPane.showMessageDialog(Main.parent, tr("No data loaded."));
+            new Notification(
+                    tr("No data loaded."))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
@@ -72,5 +77,9 @@
             // Sometimes it make sense creating multipoly of only one way (so it will form outer way)
             // and then splitting the way later (so there are multiple ways forming outer way)
-            JOptionPane.showMessageDialog(Main.parent, tr("You must select at least one way."));
+            new Notification(
+                    tr("You must select at least one way."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
@@ -152,5 +161,7 @@
 
         if (error != null) {
-            JOptionPane.showMessageDialog(Main.parent, error);
+            new Notification(error)
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .show();
             return null;
         } else {
Index: trunk/src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 6130)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -76,10 +77,9 @@
 
         if (nodes.size() < 3) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Please select at least three nodes."),
-                    tr("Information"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
+            new Notification(
+                    tr("Please select at least three nodes."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 6130)
@@ -42,4 +42,5 @@
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
 import org.openstreetmap.josm.tools.Geometry;
@@ -320,5 +321,8 @@
 
         if (ways.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Please select at least one closed way that should be joined."));
+            new Notification(
+                    tr("Please select at least one closed way that should be joined."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .show();
             return;
         }
@@ -327,5 +331,8 @@
         for (Way way : ways) {
             if (!way.isClosed()) {
-                JOptionPane.showMessageDialog(Main.parent, tr("One of the selected ways is not closed and therefore cannot be joined."));
+                new Notification(
+                        tr("One of the selected ways is not closed and therefore cannot be joined."))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
                 return;
             }
@@ -355,5 +362,8 @@
 
         if (!testJoin(areas)) {
-            JOptionPane.showMessageDialog(Main.parent, tr("No intersection found. Nothing was changed."));
+            new Notification(
+                    tr("No intersection found. Nothing was changed."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .show();
             return;
         }
@@ -377,5 +387,8 @@
                 Main.map.mapView.repaint();
             } else {
-                JOptionPane.showMessageDialog(Main.parent, tr("No intersection found. Nothing was changed."));
+                new Notification(
+                        tr("No intersection found. Nothing was changed."))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
             }
         }
@@ -518,5 +531,9 @@
 
         if (warnAboutRelations) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Some of the ways were part of relations that have been modified. Please verify no errors have been introduced."));
+            new Notification(
+                    tr("Some of the ways were part of relations that have been modified.<br>Please verify no errors have been introduced."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_LONG)
+                    .show();
         }
 
@@ -1212,5 +1229,8 @@
 
             if (outerWays.size() > 1) {
-                JOptionPane.showMessageDialog(Main.parent, tr("Sorry. Cannot handle multipolygon relations with multiple outer ways."));
+                new Notification(
+                        tr("Sorry. Cannot handle multipolygon relations with multiple outer ways."))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
                 return null;
             }
@@ -1222,10 +1242,16 @@
 
             if (processedOuterWays.contains(outerWay)) {
-                JOptionPane.showMessageDialog(Main.parent, tr("Sorry. Cannot handle way that is outer in multiple multipolygon relations."));
+                new Notification(
+                        tr("Sorry. Cannot handle way that is outer in multiple multipolygon relations."))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
                 return null;
             }
 
             if (processedInnerWays.contains(outerWay)) {
-                JOptionPane.showMessageDialog(Main.parent, tr("Sorry. Cannot handle way that is both inner and outer in multipolygon relations."));
+                new Notification(
+                        tr("Sorry. Cannot handle way that is both inner and outer in multipolygon relations."))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
                 return null;
             }
@@ -1234,10 +1260,16 @@
             {
                 if (processedOuterWays.contains(way)) {
-                    JOptionPane.showMessageDialog(Main.parent, tr("Sorry. Cannot handle way that is both inner and outer in multipolygon relations."));
+                    new Notification(
+                            tr("Sorry. Cannot handle way that is both inner and outer in multipolygon relations."))
+                            .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                            .show();
                     return null;
                 }
 
                 if (processedInnerWays.contains(way)) {
-                    JOptionPane.showMessageDialog(Main.parent, tr("Sorry. Cannot handle way that is inner in multiple multipolygon relations."));
+                    new Notification(
+                            tr("Sorry. Cannot handle way that is inner in multiple multipolygon relations."))
+                            .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                            .show();
                     return null;
                 }
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 6130)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -68,11 +69,8 @@
             List<Node> nearestNodes = Main.map.mapView.getNearestNodes(Main.map.mapView.getPoint(selectedNodes.get(0)), selectedNodes, OsmPrimitive.isUsablePredicate);
             if (nearestNodes.isEmpty()) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("Please select at least two nodes to merge or a node that is close to another node."),
-                        tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE
-                );
-
+                new Notification(
+                        tr("Please select at least two nodes to merge or one node that is close to another node."))
+                        .setIcon(JOptionPane.WARNING_MESSAGE)
+                        .show();
                 return;
             }
Index: trunk/src/org/openstreetmap/josm/actions/MirrorAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 6130)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.actions;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.event.ActionEvent;
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -52,10 +53,9 @@
 
         if (nodes.isEmpty()) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Please select at least one node or way."),
-                    tr("Information"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
+            new Notification(
+                    tr("Please select at least one node or way."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 6130)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -114,10 +115,9 @@
             }
             catch (InvalidUserInputException ex) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("Orthogonalize Shape / Undo\n"+
-                        "Please select nodes that were moved by the previous Orthogonalize Shape action!"),
-                        tr("Undo Orthogonalize Shape"),
-                        JOptionPane.INFORMATION_MESSAGE);
+                new Notification(
+                        tr("Orthogonalize Shape / Undo<br>"+
+                        "Please select nodes that were moved by the previous Orthogonalize Shape action!"))
+                        .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                        .show();
             }
         }
@@ -184,18 +184,14 @@
             }
         } catch (InvalidUserInputException ex) {
+            String msg;
             if (ex.getMessage().equals("usage")) {
-                ConditionalOptionPaneUtil.showMessageDialog("orthogonalize_usage",
-                        Main.parent,
-                        "<html><h2>" + tr("Usage") + "</h2>" + USAGE + "</html>",
-                        tr("Orthogonalize Shape"),
-                        JOptionPane.INFORMATION_MESSAGE);
-            }
-            else {
-                ConditionalOptionPaneUtil.showMessageDialog("orthogonalize_error",
-                        Main.parent,
-                        "<html>" + ex.getMessage() + "<br><hr><h2>" + tr("Usage") + "</h2>" + USAGE + "</html>",
-                        tr("Selected Elements cannot be orthogonalized"),
-                        JOptionPane.INFORMATION_MESSAGE);
-            }
+                msg = "<h2>" + tr("Usage") + "</h2>" + USAGE;
+            } else {
+                msg = ex.getMessage() + "<br><hr><h2>" + tr("Usage") + "</h2>" + USAGE;
+            }
+            new Notification(msg)
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_VERY_LONG)
+                    .show();
         }
     }
Index: trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 6130)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -80,10 +81,9 @@
         final Collection<Way> sel = getCurrentDataSet().getSelectedWays();
         if (sel.isEmpty()) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("Please select at least one way."),
-                    tr("Information"),
-                    JOptionPane.INFORMATION_MESSAGE
-            );
+            new Notification(
+                    tr("Please select at least one way."))
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .setDuration(Notification.TIME_SHORT)
+                    .show();
             return;
         }
Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 6130)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -128,15 +129,14 @@
 
         if (applicableWays == null) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("The current selection cannot be used for splitting - no node is selected."),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            new Notification(
+                    tr("The current selection cannot be used for splitting - no node is selected."))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
             return;
         } else if (applicableWays.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent,
-                    tr("The selected nodes do not share the same way."),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            new Notification(
+                    tr("The selected nodes do not share the same way."))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
             return;
         }
@@ -157,18 +157,18 @@
 
         if (applicableWays.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent,
+            new Notification(
                     trn("The selected node is not in the middle of any way.",
-                            "The selected nodes are not in the middle of any way.",
-                            selectedNodes.size()),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE);
+                        "The selected nodes are not in the middle of any way.",
+                        selectedNodes.size()))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
             return;
         } else if (applicableWays.size() > 1) {
-            JOptionPane.showMessageDialog(Main.parent,
+            new Notification(
                     trn("There is more than one way using the node you selected. Please select the way also.",
-                            "There is more than one way using the nodes you selected. Please select the way also.",
-                            selectedNodes.size()),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE);
+                        "There is more than one way using the nodes you selected. Please select the way also.",
+                        selectedNodes.size()))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
             return;
         }
@@ -290,9 +290,8 @@
                 && !nodeSet.contains(wayChunks.get(0).get(0))) {
             if (wayChunks.size() == 2) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("You must select two or more nodes to split a circular way."),
-                        tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE);
+                new Notification(
+                        tr("You must select two or more nodes to split a circular way."))
+                        .setIcon(JOptionPane.WARNING_MESSAGE)
+                        .show();
                 return null;
             }
@@ -305,15 +304,13 @@
         if (wayChunks.size() < 2) {
             if (wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size() - 1)) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("You must select two or more nodes to split a circular way."),
-                        tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE);
+                new Notification(
+                        tr("You must select two or more nodes to split a circular way."))
+                        .setIcon(JOptionPane.WARNING_MESSAGE)
+                        .show();
             } else {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"),
-                        tr("Warning"),
-                        JOptionPane.WARNING_MESSAGE);
+                new Notification(
+                        tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"))
+                        .setIcon(JOptionPane.WARNING_MESSAGE)
+                        .show();
             }
             return null;
@@ -495,15 +492,13 @@
         }
         if (warnmerole) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("<html>A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            new Notification(
+                    tr("A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
         } else if (warnme) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    tr("<html>A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
-                    tr("Warning"),
-                    JOptionPane.WARNING_MESSAGE);
+            new Notification(
+                    tr("A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary."))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 6130)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -41,5 +42,4 @@
  * If a single node is selected, it will copy that node and remove all tags from the old one
  */
-
 public class UnGlueAction extends JosmAction {
 
@@ -68,4 +68,5 @@
 
         String errMsg = null;
+        int errorTime = Notification.TIME_DEFAULT;
         if (checkSelection(selection)) {
             if (!checkAndConfirmOutlyingUnglue()) {
@@ -85,4 +86,5 @@
                     unglueNode(e);
                 } else {
+                    errorTime = Notification.TIME_SHORT;
                     errMsg = tr("This node is not glued to anything else.");
                 }
@@ -120,4 +122,5 @@
             }
         } else {
+            errorTime = Notification.TIME_VERY_LONG;
             errMsg =
                 tr("The current selection cannot be used for unglueing.")+"\n"+
@@ -136,9 +139,9 @@
 
         if(errMsg != null) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
-                    errMsg,
-                    tr("Error"),
-                    JOptionPane.ERROR_MESSAGE);
+            new Notification(
+                    errMsg)
+                    .setIcon(JOptionPane.ERROR_MESSAGE)
+                    .setDuration(errorTime)
+                    .show();
         }
 
@@ -149,6 +152,6 @@
 
     /**
-     * Assumes there is one tagged Node stored in selectedNode that it will try to unglue
-     * (= copy node and remove all tags from the old one. Relations will not be removed)
+     * Assumes there is one tagged Node stored in selectedNode that it will try to unglue.
+     * (i.e. copy node and remove all tags from the old one. Relations will not be removed)
      */
     private void unglueNode(ActionEvent e) {
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 6130)
@@ -175,4 +175,5 @@
     public final JosmAction combineWay = new CombineWayAction();
     public final JosmAction reverseWay = new ReverseWayAction();
+    public final JosmAction simplifyWay = new SimplifyWayAction();
     public final JosmAction alignInCircle = new AlignInCircleAction();
     public final JosmAction alignInLine = new AlignInLineAction();
@@ -181,4 +182,5 @@
     public final JosmAction orthoUndo = new Undo();  // action is not shown in the menu. Only triggered by shortcut
     public final JosmAction mirror = new MirrorAction();
+    public final JosmAction followLine = new FollowLineAction();
     public final AddNodeAction addnode = new AddNodeAction();
     public final MoveNodeAction movenode = new MoveNodeAction();
@@ -187,8 +189,6 @@
     public final JosmAction joinNodeWay = new JoinNodeWayAction();
     public final JosmAction unglueNodes = new UnGlueAction();
-    public final JosmAction simplifyWay = new SimplifyWayAction();
     public final JosmAction joinAreas = new JoinAreasAction();
     public final JosmAction createMultipolygon = new CreateMultipolygonAction();
-    public final JosmAction followLine = new FollowLineAction();
 
     /* Audio menu */
Index: trunk/src/org/openstreetmap/josm/gui/Notification.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 6129)
+++ trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 6130)
@@ -7,4 +7,6 @@
 import javax.swing.JOptionPane;
 import javax.swing.UIManager;
+
+import org.openstreetmap.josm.Main;
 
 /**
@@ -28,4 +30,25 @@
 
     public final static int DEFAULT_CONTENT_WIDTH = 350;
+
+    // some standard duration values (in milliseconds)
+
+    /**
+     * Very short and very easy to grasp message (3 s).
+     * E.g. "Please select at least one node".
+     */
+    public final static int TIME_SHORT = Main.pref.getInteger("notification-time-short-ms", 3000);
+    /**
+     * Short message of one or two lines (5 s).
+     */
+    public final static int TIME_DEFAULT = Main.pref.getInteger("notification-time-default-ms", 5000);
+    /**
+     * Somewhat longer message (10 s).
+     */
+    public final static int TIME_LONG = Main.pref.getInteger("notification-time-long-ms", 10000);
+    /**
+     * Long text.
+     * (Make sure is still sensible to show as a notification)
+     */
+    public final static int TIME_VERY_LONG = Main.pref.getInteger("notification-time-very_long-ms", 20000);
 
     private Icon icon;
