Index: src/org/openstreetmap/josm/gui/NotificationManager.java
===================================================================
--- src/org/openstreetmap/josm/gui/NotificationManager.java	(revision 18750)
+++ src/org/openstreetmap/josm/gui/NotificationManager.java	(working copy)
@@ -4,6 +4,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.BasicStroke;
+import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Container;
@@ -40,17 +41,18 @@
 import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 
 /**
  * Manages {@link Notification}s, i.e.&nbsp;displays them on screen.
- *
+ * <p>
  * Don't use this class directly, but use {@link Notification#show()}.
- *
+ * <p>
  * If multiple messages are sent in a short period of time, they are put in
  * a queue and displayed one after the other.
- *
+ * <p>
  * The user can stop the timer (freeze the message) by moving the mouse cursor
  * above the panel. As a visual cue, the background color changes from
  * semi-transparent to opaque while the timer is frozen.
@@ -57,7 +59,7 @@
  */
 class NotificationManager {
 
-    private final Timer hideTimer; // started when message is shown, responsible for hiding the message
+    private final Timer hideTimer; // started when a message is shown, responsible for hiding the message
     private final Timer pauseTimer; // makes sure, there is a small pause between two consecutive messages
     private final Timer unfreezeDelayTimer; // tiny delay before resuming the timer when mouse cursor is moved off the panel
     private boolean running;
@@ -129,9 +131,9 @@
             currentNotificationPanel = new NotificationPanel(currentNotification, new FreezeMouseListener(), e -> this.stopHideTimer());
             currentNotificationPanel.validate();
 
-            int margin = 5;
+            int margin = 10;
             JFrame parentWindow = MainApplication.getMainFrame();
-            Dimension size = currentNotificationPanel.getPreferredSize();
+            Dimension notificatonDimension = currentNotificationPanel.getPreferredSize();
             if (parentWindow != null) {
                 int x;
                 int y;
@@ -138,18 +140,24 @@
                 MapFrame map = MainApplication.getMap();
                 if (MainApplication.isDisplayingMapView() && map.mapView.getHeight() > 0) {
                     MapView mv = map.mapView;
-                    Point mapViewPos = SwingUtilities.convertPoint(mv.getParent(), mv.getX(), mv.getY(), MainApplication.getMainFrame());
+                    Point mapViewPos = SwingUtilities.convertPoint(mv.getParent(), mv.getX(), mv.getY(), parentWindow);
                     x = mapViewPos.x + margin;
-                    y = mapViewPos.y + mv.getHeight() - map.statusLine.getHeight() - size.height - margin;
+                    if (Config.getPref().getBoolean("draw.fullscreen")) {
+                        y = parentWindow.getHeight() - map.statusLine.getHeight() - notificatonDimension.height - margin;
+                    } else {
+                        // the extra 2px here is to add the missing border sizes
+                        y = parentWindow.getHeight() - MainApplication.getToolbar().control.getSize().height + 2 -
+                            map.statusLine.getHeight() - notificatonDimension.height - margin;
+                    }
                 } else {
                     x = margin;
-                    y = parentWindow.getHeight() - MainApplication.getToolbar().control.getSize().height - size.height - margin;
+                    y = parentWindow.getHeight() - MainApplication.getToolbar().control.getSize().height - notificatonDimension.height - margin;
                 }
                 parentWindow.getLayeredPane().add(currentNotificationPanel, JLayeredPane.POPUP_LAYER, 0);
 
                 currentNotificationPanel.setLocation(x, y);
             }
-            currentNotificationPanel.setSize(size);
+            currentNotificationPanel.setSize(notificatonDimension);
             currentNotificationPanel.setVisible(true);
         });
 
@@ -235,6 +243,8 @@
         }
 
         private void build(final Notification note, MouseListener freeze, ActionListener hideListener) {
+            // use BorderLayout to remove default margins
+            setLayout(new BorderLayout());
             JButton btnClose = new JButton();
             btnClose.addActionListener(hideListener);
             btnClose.setIcon(ImageProvider.get("misc", "grey_x"));
@@ -270,7 +280,9 @@
             layout.setAutoCreateGaps(true);
             layout.setAutoCreateContainerGaps(true);
 
-            innerPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+            // fix border appearance
+            innerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 1, 1));
+
             add(innerPanel);
 
             JLabel icon = null;
