Index: /trunk/src/org/openstreetmap/josm/gui/Notification.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 16312)
+++ /trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 16313)
@@ -4,4 +4,5 @@
 import java.awt.Color;
 import java.awt.Component;
+import java.util.Objects;
 
 import javax.swing.Icon;
@@ -9,4 +10,5 @@
 import javax.swing.JOptionPane;
 import javax.swing.UIManager;
+import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
@@ -211,3 +213,32 @@
         NotificationManager.getInstance().showNotification(this);
     }
+
+    private Object getContentTextOrComponent() {
+        return content instanceof JTextComponent ? ((JTextComponent) content).getText() : content;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Notification that = (Notification) o;
+        System.out.println(getContentTextOrComponent().getClass());
+        return duration == that.duration
+                && Objects.equals(getContentTextOrComponent(), that.getContentTextOrComponent())
+                && Objects.equals(helpTopic, that.helpTopic);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getContentTextOrComponent(), duration, helpTopic);
+    }
+
+    @Override
+    public String toString() {
+        return "Notification{" +
+                "content=" + getContentTextOrComponent() +
+                ", duration=" + duration +
+                ", helpTopic='" + helpTopic + '\'' +
+                '}';
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/NotificationManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NotificationManager.java	(revision 16312)
+++ /trunk/src/org/openstreetmap/josm/gui/NotificationManager.java	(revision 16313)
@@ -21,6 +21,7 @@
 import java.awt.event.MouseListener;
 import java.awt.geom.RoundRectangle2D;
+import java.util.Deque;
 import java.util.LinkedList;
-import java.util.Queue;
+import java.util.Objects;
 
 import javax.swing.AbstractAction;
@@ -41,4 +42,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -63,5 +65,5 @@
     private Notification currentNotification;
     private NotificationPanel currentNotificationPanel;
-    private final Queue<Notification> queue;
+    private final Deque<Notification> queue;
 
     private static IntegerProperty pauseTime = new IntegerProperty("notification-default-pause-time-ms", 300); // milliseconds
@@ -86,5 +88,5 @@
 
     /**
-     * Show the given notification
+     * Show the given notification (unless a duplicate notification is being shown at the moment or at the end of the queue)
      * @param note The note to show.
      * @see Notification#show()
@@ -92,4 +94,8 @@
     public void showNotification(Notification note) {
         synchronized (queue) {
+            if (Objects.equals(note, currentNotification) || Objects.equals(note, queue.peekLast())) {
+                Logging.debug("Dropping duplicate notification {0}", note);
+                return;
+            }
             queue.add(note);
             processQueue();
