Index: trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 7326)
@@ -104,5 +104,4 @@
         @Override
         public void cancel() {
-            Thread.dumpStack();
             canceled = true;
         }
@@ -179,5 +178,5 @@
             }
         }
-        
+
         private void handleException(String dialogTitle, Exception e) {
             Main.error(e);
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 7326)
@@ -73,4 +73,11 @@
     public AudioMarker syncAudioMarker = null;
 
+    /**
+     * Constructs a new {@code MarkerLayer}.
+     * @param indata The GPX data for this layer
+     * @param name The marker layer name
+     * @param associatedFile The associated GPX file
+     * @param fromLayer The associated GPX layer
+     */
     public MarkerLayer(GpxData indata, String name, File associatedFile, GpxLayer fromLayer) {
         super(name);
Index: trunk/src/org/openstreetmap/josm/io/NMEAImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 7326)
@@ -20,7 +20,15 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.GpxImporter.GpxImporterData;
 
+/**
+ * File importer allowing to import NMEA-0183 files (*.nmea/nme/nma/log/txt files).
+ * @since 1637
+ */
 public class NMEAImporter extends FileImporter {
 
+    /**
+     * The NMEA file filter (*.nmea *.nme *.nma *.log *.txt files).
+     */
     public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
             "nmea,nme,nma,log,txt", "nmea", tr("NMEA-0183 Files") + " (*.nmea *.nme *.nma *.log *.txt)");
@@ -42,5 +50,5 @@
                 final GpxLayer gpxLayer = new GpxLayer(r.data, fn, true);
                 final File fileFinal = file;
-    
+
                 GuiHelper.runInEDT(new Runnable() {
                     @Override
@@ -88,3 +96,11 @@
         }
     }
+
+    public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
+            final String gpxLayerName, String markerLayerName) throws IOException {
+        final NmeaReader r = new NmeaReader(is);
+        final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
+        r.data.storageFile = associatedFile;
+        return GpxImporter.loadLayers(r.data, parsedProperly, gpxLayerName, markerLayerName);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 7326)
@@ -13,10 +13,10 @@
 import javax.xml.xpath.XPathFactory;
 
-import org.w3c.dom.Element;
-
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.GpxImporter;
 import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.NMEAImporter;
+import org.w3c.dom.Element;
 
 public class GpxTracksSessionImporter implements SessionLayerImporter {
@@ -38,6 +38,12 @@
 
             try (InputStream in = support.getInputStream(fileStr)) {
-                GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
-    
+                GpxImporter.GpxImporterData importData = null;
+
+                if (NMEAImporter.FILE_FILTER.acceptName(fileStr)) {
+                    importData = NMEAImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null);
+                } else {
+                    importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
+                }
+
                 support.addPostLayersTask(importData.getPostLayerTask());
                 return importData.getGpxLayer();
@@ -45,5 +51,5 @@
 
         } catch (XPathExpressionException e) {
-            throw new RuntimeException(e);
+            throw new IllegalDataException(e);
         }
     }
Index: trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java	(revision 7326)
@@ -14,6 +14,4 @@
 import javax.xml.xpath.XPathFactory;
 
-import org.w3c.dom.Element;
-
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -23,4 +21,5 @@
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
+import org.w3c.dom.Element;
 
 public class MarkerSessionImporter implements SessionLayerImporter {
@@ -30,5 +29,5 @@
         String version = elem.getAttribute("version");
         if (!"0.1".equals(version)) {
-            throw new IllegalDataException(tr("Version ''{0}'' of meta data for imagery layer is not supported. Expected: 0.1", version));
+            throw new IllegalDataException(tr("Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1", version));
         }
         try {
@@ -43,7 +42,7 @@
             try (InputStream in = support.getInputStream(fileStr)) {
                 GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
-    
+
                 support.addPostLayersTask(importData.getPostLayerTask());
-    
+
                 GpxLayer gpxLayer = null;
                 List<SessionReader.LayerDependency> deps = support.getLayerDependencies();
@@ -54,12 +53,14 @@
                     }
                 }
-    
+
                 MarkerLayer markerLayer = importData.getMarkerLayer();
-                markerLayer.fromLayer = gpxLayer;
-    
+                if (markerLayer != null) {
+                    markerLayer.fromLayer = gpxLayer;
+                }
+
                 return markerLayer;
             }
         } catch (XPathExpressionException e) {
-            throw new RuntimeException(e);
+            throw new IllegalDataException(e);
         }
     }
Index: trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 7326)
@@ -13,6 +13,4 @@
 import javax.xml.xpath.XPathFactory;
 
-import org.w3c.dom.Element;
-
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -20,4 +18,5 @@
 import org.openstreetmap.josm.io.OsmImporter;
 import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
+import org.w3c.dom.Element;
 
 public class OsmDataSessionImporter implements SessionLayerImporter {
@@ -41,10 +40,10 @@
             try (InputStream in = support.getInputStream(fileStr)) {
                 OsmImporter.OsmImporterData importData = importer.loadLayer(in, support.getFile(fileStr), support.getLayerName(), progressMonitor);
-    
+
                 support.addPostLayersTask(importData.getPostLayerTask());
                 return importData.getLayer();
             }
         } catch (XPathExpressionException e) {
-            throw new RuntimeException(e);
+            throw new IllegalDataException(e);
         }
     }
Index: trunk/src/org/openstreetmap/josm/io/session/SessionReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 7324)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 7326)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.GraphicsEnvironment;
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -413,5 +414,5 @@
             String type = e.getAttribute("type");
             SessionLayerImporter imp = getSessionLayerImporter(type);
-            if (imp == null) {
+            if (imp == null && !GraphicsEnvironment.isHeadless()) {
                 CancelOrContinueDialog dialog = new CancelOrContinueDialog();
                 dialog.show(
@@ -427,5 +428,5 @@
                     continue;
                 }
-            } else {
+            } else if (imp != null) {
                 importers.put(idx, imp);
                 List<LayerDependency> depsImp = new ArrayList<>();
@@ -459,16 +460,18 @@
                 if (exception != null) {
                     Main.error(exception);
-                    CancelOrContinueDialog dialog = new CancelOrContinueDialog();
-                    dialog.show(
-                            tr("Error loading layer"),
-                            tr("<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>", idx, name, exception.getMessage()),
-                            JOptionPane.ERROR_MESSAGE,
-                            progressMonitor
-                            );
-                    if (dialog.isCancel()) {
-                        progressMonitor.cancel();
-                        return;
-                    } else {
-                        continue;
+                    if (!GraphicsEnvironment.isHeadless()) {
+                        CancelOrContinueDialog dialog = new CancelOrContinueDialog();
+                        dialog.show(
+                                tr("Error loading layer"),
+                                tr("<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>", idx, name, exception.getMessage()),
+                                JOptionPane.ERROR_MESSAGE,
+                                progressMonitor
+                                );
+                        if (dialog.isCancel()) {
+                            progressMonitor.cancel();
+                            return;
+                        } else {
+                            continue;
+                        }
                     }
                 }
