Index: /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 8212)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 8213)
@@ -2,7 +2,8 @@
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Dimension;
+import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Point;
@@ -10,12 +11,13 @@
 import java.awt.event.MouseListener;
 import java.io.File;
-import java.text.SimpleDateFormat;
+import java.text.DateFormat;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.swing.Action;
+import javax.swing.BorderFactory;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
-import javax.swing.JToolTip;
+import javax.swing.JTextArea;
 
 import org.openstreetmap.josm.Main;
@@ -27,4 +29,5 @@
 import org.openstreetmap.josm.data.osm.NoteData;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
@@ -32,6 +35,6 @@
 import org.openstreetmap.josm.gui.dialogs.NotesDialog;
 import org.openstreetmap.josm.io.NoteExporter;
-import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.ColorHelper;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
@@ -41,4 +44,10 @@
 
     private final NoteData noteData;
+
+    /**
+     * Property for note comment background
+     */
+    public static final ColorProperty PROP_BACKGROUND_COLOR = new ColorProperty(
+            marktr("Note comment background"), Color.decode("#b8cfe5"));
 
     /**
@@ -110,30 +119,29 @@
         }
         if (noteData.getSelectedNote() != null) {
-            StringBuilder sb = new StringBuilder("<html>");
+            StringBuilder sb = new StringBuilder();
             sb.append(tr("Note"));
-            sb.append(" " + noteData.getSelectedNote().getId());
-            List<NoteComment> comments = noteData.getSelectedNote().getComments();
-            SimpleDateFormat dayFormat = new SimpleDateFormat("MMM d, yyyy");
-            for (NoteComment comment : comments) {
+            sb.append(" ").append(noteData.getSelectedNote().getId());
+            for (NoteComment comment : noteData.getSelectedNote().getComments()) {
                 String commentText = comment.getText();
                 //closing a note creates an empty comment that we don't want to show
                 if (commentText != null && commentText.trim().length() > 0) {
-                    sb.append("<hr/>");
-                    String userName = XmlWriter.encode(comment.getUser().getName());
-                    if (userName == null || userName.trim().length() == 0) {
-                        userName = "&lt;Anonymous&gt;";
-                    }
-                    sb.append(userName);
+                    sb.append("\n\n");
+                    String userName = comment.getUser().getName().trim();
+                    sb.append(userName.isEmpty() ? "<Anonymous>" : userName);
                     sb.append(" on ");
-                    sb.append(dayFormat.format(comment.getCommentTimestamp()));
-                    sb.append(":<br/>");
-                    String htmlText = XmlWriter.encode(comment.getText(), true);
-                    htmlText = htmlText.replace("&#xA;", "<br/>"); //encode method leaves us with entity instead of \n
-                    sb.append(htmlText);
+                    sb.append(DateUtils.getDateFormat(DateFormat.MEDIUM).format(comment.getCommentTimestamp()));
+                    sb.append(":\n");
+                    sb.append(comment.getText().trim());
                 }
             }
-            sb.append("</html>");
-            JToolTip toolTip = new JToolTip();
-            toolTip.setTipText(sb.toString());
+            JTextArea toolTip = new JTextArea();
+            toolTip.setText(sb.toString());
+            toolTip.setLineWrap(true);
+            toolTip.setWrapStyleWord(true);
+            toolTip.setBackground(PROP_BACKGROUND_COLOR.get());
+            toolTip.setSize(Math.min(480, mv.getWidth() / 2), 1);
+            toolTip.setSize(toolTip.getPreferredSize().width + 6, toolTip.getPreferredSize().height + 6); // +6 for border
+            toolTip.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
+
             Point p = mv.getPoint(noteData.getSelectedNote().getLatLon());
 
@@ -144,21 +152,5 @@
             int ty = p.y - NotesDialog.ICON_SMALL_SIZE - 1;
             g.translate(tx, ty);
-
-            //Carried over from the OSB plugin. Not entirely sure why it is needed
-            //but without it, the tooltip doesn't get sized correctly
-            for (int x = 0; x < 2; x++) {
-                Dimension d = toolTip.getUI().getPreferredSize(toolTip);
-                d.width = Math.min(d.width, (mv.getWidth() * 1 / 2));
-                if (d.width > 0 && d.height > 0) {
-                    toolTip.setSize(d);
-                    try {
-                        toolTip.paint(g);
-                    } catch (IllegalArgumentException e) {
-                        // See #11123 - https://bugs.openjdk.java.net/browse/JDK-6719550
-                        // Ignore the exception, as Netbeans does: http://hg.netbeans.org/main-silver/rev/c96f4d5fbd20
-                        Main.error(e, false);
-                    }
-                }
-            }
+            toolTip.paint(g);
             g.translate(-tx, -ty);
         }
