Index: trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 15069)
+++ trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 15070)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -37,4 +38,5 @@
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
 /**
@@ -138,8 +140,5 @@
                     if (canceled)
                         return;
-                    // NoteImporter directly loads notes into current note layer
-                    if (!MainApplication.getLayerManager().containsLayer(l)) {
-                        MainApplication.getLayerManager().addLayer(l);
-                    }
+                    addLayer(l);
                 }
                 if (active != null) {
@@ -150,4 +149,27 @@
                 }
             }
+        }
+
+        /**
+         * Tries to add a new layer.
+         * @param l layer to add
+         * @return {@code true} if layer has been added, {@code false} if it wasn't needed or if an error occurred
+         */
+        static boolean addLayer(Layer l) {
+            // NoteImporter directly loads notes into current note layer
+            if (!MainApplication.getLayerManager().containsLayer(l)) {
+                try {
+                    MainApplication.getLayerManager().addLayer(l);
+                } catch (ReportedException e) {
+                    Logging.error(e);
+                    new Notification(tr("Unable to add layer ''{0}'': {1}", l.getName(), e.getMessage()))
+                        .setIcon(JOptionPane.ERROR_MESSAGE).setDuration(Notification.TIME_LONG).show();
+                    if (MainApplication.getLayerManager().containsLayer(l)) {
+                        MainApplication.getLayerManager().removeLayer(l);
+                    }
+                    return false;
+                }
+            }
+            return true;
         }
 
Index: trunk/src/org/openstreetmap/josm/io/session/SessionReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 15069)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 15070)
@@ -565,5 +565,5 @@
                         throw new IllegalStateException("Importer " + imp + " returned null for " + support);
                     }
-                } catch (IllegalDataException | IllegalStateException | IOException ex) {
+                } catch (IllegalDataException | IllegalArgumentException | IllegalStateException | IOException ex) {
                     exception = ex;
                 }
@@ -704,5 +704,5 @@
     public void loadSession(File sessionFile, boolean zip, ProgressMonitor progressMonitor) throws IllegalDataException, IOException {
         try (InputStream josIS = createInputStream(sessionFile, zip)) {
-            loadSession(josIS, sessionFile.toURI(), zip, progressMonitor != null ? progressMonitor : NullProgressMonitor.INSTANCE);
+            loadSession(josIS, sessionFile.toURI(), zip, progressMonitor);
         }
     }
@@ -737,5 +737,15 @@
     }
 
-    private void loadSession(InputStream josIS, URI sessionFileURI, boolean zip, ProgressMonitor progressMonitor)
+    /**
+     * Loads session from the given input stream.
+     * @param josIS session stream to load
+     * @param zip {@code true} if it's a zipped session (.joz)
+     * @param sessionFileURI URI of the underlying session file
+     * @param progressMonitor progress monitor
+     * @throws IllegalDataException if invalid data is detected
+     * @throws IOException if any I/O error occurs
+     * @since xxx
+     */
+    public void loadSession(InputStream josIS, URI sessionFileURI, boolean zip, ProgressMonitor progressMonitor)
             throws IOException, IllegalDataException {
 
@@ -744,5 +754,5 @@
 
         try {
-            parseJos(XmlUtils.parseSafeDOM(josIS), progressMonitor);
+            parseJos(XmlUtils.parseSafeDOM(josIS), progressMonitor != null ? progressMonitor : NullProgressMonitor.INSTANCE);
         } catch (SAXException e) {
             throw new IllegalDataException(e);
