Index: /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 736)
+++ /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 737)
@@ -21,8 +21,10 @@
 	public static final int OSM = 0;
 	public static final int GPX = 1;
+	public static final int NMEA = 2;
 	
 	public static ExtensionFileFilter[] filters = {
 		new ExtensionFileFilter("osm,xml", "osm", tr("OSM Server Files (.osm .xml)")),
 		new ExtensionFileFilter("gpx,gpx.gz", "gpx", tr("GPX Files (.gpx .gpx.gz)")),
+		new ExtensionFileFilter("nmea", "nmea", tr("NMEA-0183 Files (.nmea)")),
 	};
 
Index: /trunk/src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/OpenAction.java	(revision 736)
+++ /trunk/src/org/openstreetmap/josm/actions/OpenAction.java	(revision 737)
@@ -18,9 +18,10 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.io.GpxReader;
+import org.openstreetmap.josm.io.NmeaReader;
 import org.openstreetmap.josm.io.OsmReader;
-import org.openstreetmap.josm.io.GpxReader;
 import org.xml.sax.SAXException;
 
@@ -56,4 +57,6 @@
 			if (asGpxData(file.getName()))
 				openFileAsGpx(file);
+			else if (asNmeaData(file.getName()))
+				openFileAsNmea(file);
 			else
 				openAsData(file);
@@ -103,4 +106,22 @@
     }
 
+	private void openFileAsNmea(File file) throws IOException, FileNotFoundException {
+		String fn = file.getName();
+		if (ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn)) {
+			NmeaReader r = new NmeaReader(new FileInputStream(file), file.getAbsoluteFile().getParentFile());
+			r.data.storageFile = file;
+			GpxLayer gpxLayer = new GpxLayer(r.data, fn);
+			Main.main.addLayer(gpxLayer);
+			if (Main.pref.getBoolean("marker.makeautomarkers", true)) {
+				MarkerLayer ml = new MarkerLayer(r.data, tr("Markers from {0}", fn), file, gpxLayer);
+				if (ml.data.size() > 0) {
+					Main.main.addLayer(ml);
+				}
+			}
+
+		} else {
+			throw new IllegalStateException();
+		}
+    }
 
 	private boolean asGpxData(String fn) {
@@ -108,4 +129,8 @@
 	}
 
+	private boolean asNmeaData(String fn) {
+		return ExtensionFileFilter.filters[ExtensionFileFilter.NMEA].acceptName(fn);
+	}
+
 
 }
