Index: /applications/editors/josm/plugins/editgpx/.classpath
===================================================================
--- /applications/editors/josm/plugins/editgpx/.classpath	(revision 19682)
+++ /applications/editors/josm/plugins/editgpx/.classpath	(revision 19683)
@@ -2,5 +2,5 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="src-common"/>
+	<classpathentry excluding="src/" including="images/" kind="src" path=""/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK 5"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
Index: /applications/editors/josm/plugins/editgpx/build.xml
===================================================================
--- /applications/editors/josm/plugins/editgpx/build.xml	(revision 19682)
+++ /applications/editors/josm/plugins/editgpx/build.xml	(revision 19683)
@@ -29,5 +29,5 @@
 
 	<property name="commit.message" value="Changed constructor signature of plugin main class" />
-	<property name="plugin.main.version" value="2830" />
+	<property name="plugin.main.version" value="2907" />
 
 
Index: /applications/editors/josm/plugins/editgpx/josm-editgpx.launch
===================================================================
--- /applications/editors/josm/plugins/editgpx/josm-editgpx.launch	(revision 19683)
+++ /applications/editors/josm/plugins/editgpx/josm-editgpx.launch	(revision 19683)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/JOSM/src/org/openstreetmap/josm/gui/MainApplication.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK 6"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openstreetmap.josm.gui.MainApplication"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="editgpx"/>
+</launchConfiguration>
Index: /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxLayer.java
===================================================================
--- /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxLayer.java	(revision 19682)
+++ /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxLayer.java	(revision 19683)
@@ -13,6 +13,11 @@
 import java.awt.event.ActionEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 import javax.swing.AbstractAction;
@@ -25,5 +30,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.gpx.GpxData;
-import org.openstreetmap.josm.data.gpx.GpxTrack;
+import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -42,182 +47,194 @@
 public class EditGpxLayer extends Layer {
 
-    private static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(EditGpxPlugin.class.getResource("/images/editgpx_layer.png")));
-    private DataSet dataSet;
-    private GPXLayerImportAction layerImport;
-
-    public EditGpxLayer(String str, DataSet ds) {
-        super(str);
-        dataSet = ds;
-        layerImport = new GPXLayerImportAction(dataSet);
-    }
-
-    /**
-     * check if dataSet is empty
-     * if so show import dialog to user
-     */
-    public void initializeImport() {
-        try {
-            if(dataSet.getNodes().isEmpty() ) {
-                layerImport.activateImport();
-            }
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public Icon getIcon() {
-        return icon;
-    }
-
-    @Override
-    public Object getInfoComponent() {
-        return getToolTipText();
-    }
-
-    @Override
-    public Component[] getMenuEntries() {
-        return new Component[] {
-            new JMenuItem(LayerListDialog.getInstance().createShowHideLayerAction(this)),
-            new JMenuItem(LayerListDialog.getInstance().createDeleteLayerAction(this)),
-            new JSeparator(),
-            new JMenuItem(layerImport),
-            new JMenuItem(new ConvertToGpxLayerAction()),
-            new JMenuItem(new ConvertToAnonTimeGpxLayerAction()),
-            new JSeparator(),
-            new JMenuItem(new LayerListPopup.InfoAction(this))};
-    }
-
-    @Override
-    public String getToolTipText() {
-        return tr("Layer for editing GPX tracks");
-    }
-
-    @Override
-    public boolean isMergable(Layer other) {
-        // TODO
-        return false;
-    }
-
-    @Override
-    public void mergeFrom(Layer from) {
-        // TODO
-    }
-
-    @Override
-    public void paint(Graphics2D g, MapView mv, Bounds bounds) {
-        g.setColor(Color.yellow);
-
-        //don't iterate through dataSet whiling making changes
-        synchronized(layerImport.importing) {
-            for(Node n: dataSet.getNodes()) {
-                if (!n.isDeleted()) {
-                    Point pnt = Main.map.mapView.getPoint(n.getEastNorth());
-                    g.drawOval(pnt.x - 2, pnt.y - 2, 4, 4);
-                }
-            }
-        }
-    }
-
-
-    public void reset(){
-        //TODO implement a reset
-    }
-
-
-    @Override
-    public void visitBoundingBox(BoundingXYVisitor v) {
-        // TODO Auto-generated method stub
-    }
-
-
-    /**
-     * convert a DataSet to GPX
-     *
-     * @param boolean anonTime If true set all time and date in GPX to 01/01/1970 00:00 ?
-     * @return GPXData
-     */
-    private GpxData toGpxData(boolean anonTime) {
-        GpxData gpxData = new GpxData();
-        HashSet<Node> doneNodes = new HashSet<Node>();
-        //add all ways
-        for (Way w : dataSet.getWays()) {
-            if (w.isIncomplete() || w.isDeleted()) continue;
-            GpxTrack trk = new GpxTrack();
-            gpxData.tracks.add(trk);
-
-            if (w.get("name") != null)
-                trk.attr.put("name", w.get("name"));
-
-            ArrayList<WayPoint> trkseg = null;
-            for (Node n : w.getNodes()) {
-                if (n.isIncomplete() || n.isDeleted()) {
-                    trkseg = null;
-                    continue;
-                }
-
-                Date tstamp = n.getTimestamp();
-
-                if (trkseg == null) {
-                    trkseg = new ArrayList<WayPoint>();
-                    trk.trackSegs.add(trkseg);
-                }
-                doneNodes.add(n);
-
-                WayPoint wpt = new WayPoint(n.getCoor());
-                if (anonTime) {
-                    wpt.attr.put("time", "1970-01-01T00:00:00Z");
-                } else {
-                    wpt.attr.put("time", DateUtils.fromDate(tstamp));
-                }
-                wpt.setTime();
-
-                trkseg.add(wpt);
-            }
-        }
-
-        // add nodes as waypoints
-        for (Node n : dataSet.getNodes()) {
-            if (n.isIncomplete() || n.isDeleted() || doneNodes.contains(n)) continue;
-
-            Date tstamp = n.getTimestamp();
-
-            WayPoint wpt = new WayPoint(n.getCoor());
-            if (anonTime) {
-                wpt.attr.put("time", "1970-01-01T00:00:00Z");
-            } else {
-                wpt.attr.put("time", DateUtils.fromDate(tstamp));
-            }
-            wpt.setTime();
-
-            if (n.getKeys() != null && n.keySet().contains("name")) {
-                wpt.attr.put("name", n.get("name"));
-            }
-            gpxData.waypoints.add(wpt);
-        }
-        return gpxData;
-    }
-
-    //context item "Convert to GPX layer"
-    public class ConvertToGpxLayerAction extends AbstractAction {
-        public ConvertToGpxLayerAction() {
-            super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
-        }
-        public void actionPerformed(ActionEvent e) {
-            Main.main.addLayer(new GpxLayer(toGpxData(false), tr("Converted from: {0}", getName())));
-            Main.main.removeLayer(EditGpxLayer.this);
-        }
-    }
-
-    //context item "Convert to GPX layer with anonymised time"
-    public class ConvertToAnonTimeGpxLayerAction extends AbstractAction {
-        public ConvertToAnonTimeGpxLayerAction() {
-            super(tr("Convert to GPX layer with anonymised time"), ImageProvider.get("converttogpx"));
-        }
-        public void actionPerformed(ActionEvent e) {
-            Main.main.addLayer(new GpxLayer(toGpxData(true), tr("Converted from: {0}", getName())));
-            Main.main.removeLayer(EditGpxLayer.this);
-        }
-    }
+	private static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(EditGpxPlugin.class.getResource("/images/editgpx_layer.png")));
+	private DataSet dataSet;
+	private GPXLayerImportAction layerImport;
+
+	public EditGpxLayer(String str, DataSet ds) {
+		super(str);
+		dataSet = ds;
+		layerImport = new GPXLayerImportAction(dataSet);
+	}
+
+	/**
+	 * check if dataSet is empty
+	 * if so show import dialog to user
+	 */
+	public void initializeImport() {
+		try {
+			if(dataSet.getNodes().isEmpty() ) {
+				layerImport.activateImport();
+			}
+		} catch (Exception e) {
+			System.out.println(e.getMessage());
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public Icon getIcon() {
+		return icon;
+	}
+
+	@Override
+	public Object getInfoComponent() {
+		return getToolTipText();
+	}
+
+	@Override
+	public Component[] getMenuEntries() {
+		return new Component[] {
+				new JMenuItem(LayerListDialog.getInstance().createShowHideLayerAction(this)),
+				new JMenuItem(LayerListDialog.getInstance().createDeleteLayerAction(this)),
+				new JSeparator(),
+				new JMenuItem(layerImport),
+				new JMenuItem(new ConvertToGpxLayerAction()),
+				new JMenuItem(new ConvertToAnonTimeGpxLayerAction()),
+				new JSeparator(),
+				new JMenuItem(new LayerListPopup.InfoAction(this))};
+	}
+
+	@Override
+	public String getToolTipText() {
+		return tr("Layer for editing GPX tracks");
+	}
+
+	@Override
+	public boolean isMergable(Layer other) {
+		// TODO
+		return false;
+	}
+
+	@Override
+	public void mergeFrom(Layer from) {
+		// TODO
+	}
+
+	@Override
+	public void paint(Graphics2D g, MapView mv, Bounds bounds) {
+		g.setColor(Color.yellow);
+
+		//don't iterate through dataSet whiling making changes
+		synchronized(layerImport.importing) {
+			for(Node n: dataSet.getNodes()) {
+				if (!n.isDeleted()) {
+					Point pnt = Main.map.mapView.getPoint(n.getEastNorth());
+					g.drawOval(pnt.x - 2, pnt.y - 2, 4, 4);
+				}
+			}
+		}
+	}
+
+
+	public void reset(){
+		//TODO implement a reset
+	}
+
+
+	@Override
+	public void visitBoundingBox(BoundingXYVisitor v) {
+		// TODO Auto-generated method stub
+	}
+
+
+	/**
+	 * convert a DataSet to GPX
+	 *
+	 * @param boolean anonTime If true set all time and date in GPX to 01/01/1970 00:00 ?
+	 * @return GPXData
+	 */
+	private GpxData toGpxData(boolean anonTime) {
+		GpxData gpxData = new GpxData();
+		HashSet<Node> doneNodes = new HashSet<Node>();
+		//add all ways
+		for (Way w : dataSet.getWays()) {
+			if (w.isIncomplete() || w.isDeleted()) continue;
+			List<Collection<WayPoint>> segments = new ArrayList<Collection<WayPoint>>();
+
+			List<WayPoint> trkseg = null;
+			for (Node n : w.getNodes()) {
+				if (n.isIncomplete() || n.isDeleted()) {
+					trkseg = null;
+					continue;
+				}
+
+				Date tstamp = n.getTimestamp();
+
+				if (trkseg == null) {
+					trkseg = new ArrayList<WayPoint>();
+					segments.add(trkseg);
+				}
+				doneNodes.add(n);
+
+				WayPoint wpt = new WayPoint(n.getCoor());
+				if (anonTime) {
+					wpt.attr.put("time", "1970-01-01T00:00:00Z");
+				} else {
+					wpt.attr.put("time", DateUtils.fromDate(tstamp));
+				}
+				wpt.setTime();
+
+				trkseg.add(wpt);
+			}
+
+			// Do not create empty segments
+			for (Iterator<Collection<WayPoint>>  segIt = segments.iterator(); segIt.hasNext(); ) {
+				if (segIt.next().isEmpty()) {
+					segIt.remove();
+				}
+			}
+
+			Map<String, Object> trkAttributes = new HashMap<String, Object>();
+			if (w.get("name") != null) {
+				trkAttributes.put("name", w.get("name"));
+			}
+			if (!segments.isEmpty()) {
+				gpxData.tracks.add(new ImmutableGpxTrack(segments, trkAttributes));
+			}
+
+		}
+
+		// add nodes as waypoints
+		for (Node n : dataSet.getNodes()) {
+			if (n.isIncomplete() || n.isDeleted() || doneNodes.contains(n)) continue;
+
+			Date tstamp = n.getTimestamp();
+
+			WayPoint wpt = new WayPoint(n.getCoor());
+			if (anonTime) {
+				wpt.attr.put("time", "1970-01-01T00:00:00Z");
+			} else {
+				wpt.attr.put("time", DateUtils.fromDate(tstamp));
+			}
+			wpt.setTime();
+
+			if (n.getKeys() != null && n.keySet().contains("name")) {
+				wpt.attr.put("name", n.get("name"));
+			}
+			gpxData.waypoints.add(wpt);
+		}
+		return gpxData;
+	}
+
+	//context item "Convert to GPX layer"
+	public class ConvertToGpxLayerAction extends AbstractAction {
+		public ConvertToGpxLayerAction() {
+			super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
+		}
+		public void actionPerformed(ActionEvent e) {
+			Main.main.addLayer(new GpxLayer(toGpxData(false), tr("Converted from: {0}", getName())));
+			Main.main.removeLayer(EditGpxLayer.this);
+		}
+	}
+
+	//context item "Convert to GPX layer with anonymised time"
+	public class ConvertToAnonTimeGpxLayerAction extends AbstractAction {
+		public ConvertToAnonTimeGpxLayerAction() {
+			super(tr("Convert to GPX layer with anonymised time"), ImageProvider.get("converttogpx"));
+		}
+		public void actionPerformed(ActionEvent e) {
+			Main.main.addLayer(new GpxLayer(toGpxData(true), tr("Converted from: {0}", getName())));
+			Main.main.removeLayer(EditGpxLayer.this);
+		}
+	}
 }
Index: /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxMode.java
===================================================================
--- /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxMode.java	(revision 19682)
+++ /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/EditGpxMode.java	(revision 19683)
@@ -9,4 +9,5 @@
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.event.InputEvent;
 import java.awt.event.MouseEvent;
 
@@ -51,5 +52,5 @@
 
     @Override public void mouseDragged(MouseEvent e) {
-        if ( (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) ==  MouseEvent.BUTTON1_DOWN_MASK) {
+        if ( (e.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK) ==  InputEvent.BUTTON1_DOWN_MASK) {
             //if button1 is hold, draw the rectangle.
             paintRect(pointPressed, e.getPoint());
Index: /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/GPXLayerImportAction.java
===================================================================
--- /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/GPXLayerImportAction.java	(revision 19682)
+++ /applications/editors/josm/plugins/editgpx/src/org/openstreetmap/josm/plugins/editgpx/GPXLayerImportAction.java	(revision 19683)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.gpx.GpxTrack;
+import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -112,7 +113,7 @@
             synchronized(importing) {
                 for (GpxTrack trk : gpx.data.tracks) {
-                    for (Collection<WayPoint> segment : trk.trackSegs) {
+                    for (GpxTrackSegment segment : trk.getSegments()) {
                         Way w = new Way();
-                        for (WayPoint p : segment) {
+                        for (WayPoint p : segment.getWayPoints()) {
                             Node n = new Node(p.getCoor());
                             String timestr = p.getString("time");
