Index: /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 13437)
@@ -138,5 +138,8 @@
                     if (canceled)
                         return;
-                    MainApplication.getLayerManager().addLayer(l);
+                    // NoteImporter directly loads notes into current note layer
+                    if (!MainApplication.getLayerManager().containsLayer(l)) {
+                        MainApplication.getLayerManager().addLayer(l);
+                    }
                 }
                 if (active != null) {
Index: /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadNotesAction.java	(revision 13437)
@@ -5,5 +5,4 @@
 
 import java.awt.event.ActionEvent;
-import java.util.List;
 
 import org.openstreetmap.josm.actions.upload.UploadNotesTask;
@@ -18,5 +17,5 @@
  * On click, it finds the note layer and fires off an upload task
  * with the note data contained in the layer.
- *
+ * @since 7699
  */
 public class UploadNotesAction extends JosmAction {
@@ -31,9 +30,6 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        List<NoteLayer> noteLayers = getLayerManager().getLayersOfType(NoteLayer.class);
-        NoteLayer layer;
-        if (!noteLayers.isEmpty()) {
-            layer = noteLayers.get(0);
-        } else {
+        NoteLayer layer = getLayerManager().getNoteLayer();
+        if (layer == null) {
             Logging.error("No note layer found");
             return;
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java	(revision 13437)
@@ -134,7 +134,7 @@
 
             noteLayer = new NoteLayer(notesData, tr("Notes"));
-            List<NoteLayer> noteLayers = MainApplication.getLayerManager().getLayersOfType(NoteLayer.class);
-            if (!noteLayers.isEmpty()) {
-                noteLayers.get(0).getNoteData().addNotes(notesData);
+            NoteLayer l = MainApplication.getLayerManager().getNoteLayer();
+            if (l != null) {
+                l.mergeFrom(noteLayer);
                 MapFrame map = MainApplication.getMap();
                 if (map != null && zoomAfterDownload) {
Index: /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 13437)
@@ -119,4 +119,15 @@
         }
         return false;
+    }
+
+    /**
+     * Merge notes from an existing note data.
+     * @param from existing note data
+     * @since 13437
+     */
+    public synchronized void mergeFrom(NoteData from) {
+        if (this != from) {
+            addNotes(from.noteList);
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/gui/io/importexport/NoteImporter.java	(revision 13437)
@@ -68,11 +68,6 @@
             throws SAXException, IOException {
         final List<Note> fileNotes = new NoteReader(in).parse();
-        List<NoteLayer> noteLayers = null;
-        if (MainApplication.getMap() != null) {
-            noteLayers = MainApplication.getLayerManager().getLayersOfType(NoteLayer.class);
-        }
-        final NoteLayer layer;
-        if (noteLayers != null && !noteLayers.isEmpty()) {
-            layer = noteLayers.get(0);
+        NoteLayer layer = MainApplication.getLayerManager().getNoteLayer();
+        if (layer != null) {
             layer.getNoteData().addNotes(fileNotes);
         } else {
Index: /trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 13437)
@@ -421,4 +421,14 @@
             return null;
         }
+    }
+
+    /**
+     * Returns the unique note layer, if present.
+     * @return the unique note layer, or null
+     * @since 13437
+     */
+    public NoteLayer getNoteLayer() {
+        List<NoteLayer> col = getLayersOfType(NoteLayer.class);
+        return col.isEmpty() ? null : col.get(0);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 13436)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/NoteLayer.java	(revision 13437)
@@ -349,10 +349,13 @@
     @Override
     public String getToolTipText() {
-        return trn("{0} note", "{0} notes", noteData.getNotes().size(), noteData.getNotes().size());
+        int size = noteData.getNotes().size();
+        return trn("{0} note", "{0} notes", size, size);
     }
 
     @Override
     public void mergeFrom(Layer from) {
-        throw new UnsupportedOperationException("Notes layer does not support merging yet");
+        if (from instanceof NoteLayer && this != from) {
+            noteData.mergeFrom(((NoteLayer) from).noteData);
+        }
     }
 
