Index: trunk/src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 447)
+++ trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 449)
@@ -102,9 +102,11 @@
 					currentState = state.trkseg;
 					currentTrackSeg = new ArrayList<WayPoint>();
-				}
-				if (qName.equals("link")) {
-					states.push(currentState);
-					currentState = state.link;
-					currentLink = new GpxLink(atts.getValue("href"));
+				} else if (qName.equals("link")) {
+					states.push(currentState);
+					currentState = state.link;
+					currentLink = new GpxLink(atts.getValue("href"));
+				} else if (qName.equals("extensions")) {
+					states.push(currentState);
+					currentState = state.ext;
 				}
 				break;
@@ -113,4 +115,7 @@
 					states.push(currentState);
 					currentState = state.author;
+				} else if (qName.equals("extensions")) {
+					states.push(currentState);
+					currentState = state.ext;
 				}
 				break;
@@ -128,4 +133,7 @@
 					currentState = state.link;
 					currentLink = new GpxLink(atts.getValue("href"));
+				} else if (qName.equals("extensions")) {
+					states.push(currentState);
+					currentState = state.ext;
 				}
 				break;
@@ -135,10 +143,12 @@
 					currentState = state.link;
 					currentLink = new GpxLink(atts.getValue("href"));
-				}
-				if (qName.equals("rtept")) {
+				} else if (qName.equals("rtept")) {
 					LatLon ll = new LatLon(Double.parseDouble(atts.getValue("lat")), Double.parseDouble(atts.getValue("lon")));
 					states.push(currentState);
 					currentState = state.wpt;
 					currentWayPoint = new WayPoint(ll);
+				} else if (qName.equals("extensions")) {
+					states.push(currentState);
+					currentState = state.ext;
 				}
 				break;
@@ -232,4 +242,10 @@
 					currentTrack.attr.put(qName, accumulator.toString());
 				}
+				break;
+			case ext:
+				if (qName.equals("extensions")) {
+					currentState = states.pop();
+				}
+				break;
 			default:
 				if (qName.equals("wpt")) {
@@ -238,6 +254,4 @@
 					currentState = states.pop();
 					currentData.routes.add(currentRoute);
-				} else if (qName.equals("extensions")) {
-					currentState = states.pop();
 				}
 			}
