Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationModel.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationModel.java	(revision 29957)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationModel.java	(revision 29958)
@@ -40,5 +40,5 @@
 	private GpxData gpxData;
 	private String name;
-	private WayPointMap children = new WayPointMap(); 
+	private WayPointMap profiles = new WayPointMap(); 
 	private List<IElevationModelListener> listeners = new ArrayList<IElevationModelListener>();
 	private List<WayPoint> buffer = new ArrayList<WayPoint>();
@@ -78,5 +78,5 @@
 	 */
 	protected WayPointMap getTracks() {
-		return children;
+		return profiles;
 	}
 
@@ -86,5 +86,5 @@
 	protected void fireModelChanged() {	    	
 		for (IElevationModelListener listener : listeners) {
-		    if (children != null && children.size() > 0)
+		    if (profiles != null && profiles.size() > 0)
 			listener.elevationProfileChanged(getCurrentProfile());
 		}
@@ -149,21 +149,27 @@
 
 	public void start() {
-		curProfile = new ElevationProfileBase(name);		
-	}
-
-	public void end() {
-		String trackName = name; //gpxData.getString(GpxData.META_NAME);// "Track#" + trackCounter;
-		
-		if (trackCounter > 0) {
-		    trackName += "." + trackCounter;
+		curProfile = new ElevationProfileBase(name);
+		trackCounter++;
+	}
+
+	public void end() {		
+		commitTrack();
+	}
+	
+
+	@Override
+	public void start(GpxTrack track) {
+	    // check GPX data 
+	    String trackName = (String) track.get("name");
+	    
+	    // no name given, build artificial one
+	    if (trackName == null) {
+		trackName = (String) track.get(GpxData.META_NAME);
+		if (trackName == null) {
+		    trackName = name + "." + trackCounter;
 		}
-		addTrackOrRoute(trackName);	
-		trackCounter++;
-	}
-	
-
-	@Override
-	public void start(GpxTrack track) {
-	    curProfile = new ElevationProfileBase(name);	    
+	    }
+	    
+	    curProfile = new ElevationProfileBase(trackName);
 	}
 
@@ -173,5 +179,5 @@
 	    
 	    curProfile.setDistance(track.length());
-	    addTrackOrRoute(name);	    
+	    commitTrack();
 	}
 	
@@ -192,9 +198,11 @@
 	 * @param trackName the track name
 	 */
-	private void addTrackOrRoute(String trackName) {
-	    	if (buffer.size() > 0) {        	    	
+	private void commitTrack() {
+	    	if (buffer.size() > 0) {    
+	    	    	// assign way points to profile...
         		curProfile.setWayPoints(buffer);
-        		curProfile.setName(trackName);
-        		children.add(curProfile);
+        		// ... and add to profile list
+        		profiles.add(curProfile);
+        		buffer.clear();
 	    	}
 	}
@@ -214,5 +222,5 @@
 	@Override
 	public List<IElevationProfile> getProfiles() {
-		return children;
+		return profiles;
 	}
 
@@ -221,5 +229,5 @@
 	    if (currentProfileIndex < 0 || currentProfileIndex >= profileCount()) return null;
 	    
-	    return children.get(currentProfileIndex);
+	    return profiles.get(currentProfileIndex);
 	}
 
@@ -228,9 +236,9 @@
 	    CheckParameterUtil.ensureParameterNotNull(newProfile);
 	    
-	    if (!children.contains(newProfile)) {
-		children.add(newProfile);
+	    if (!profiles.contains(newProfile)) {
+		profiles.add(newProfile);
 	    }
 	    
-	    setCurrentProfile(children.indexOf(newProfile)); 
+	    setCurrentProfile(profiles.indexOf(newProfile)); 
 	}
 
@@ -245,5 +253,5 @@
 	@Override
 	public int profileCount() {
-	    return children != null ? children.size() : 0;
+	    return profiles != null ? profiles.size() : 0;
 	}
 }
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationProfileBase.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationProfileBase.java	(revision 29957)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gpx/ElevationProfileBase.java	(revision 29958)
@@ -493,7 +493,7 @@
 	
 	public String toString() {
-		return "ElevationProfileBase [start=" + getStart() + ", end=" + getEnd()
+		return name; /*"ElevationProfileBase [start=" + getStart() + ", end=" + getEnd()
 				+ ", minHeight=" + getMinHeight() + ", maxHeight="
-				+ getMaxHeight() + "]";
+				+ getMaxHeight() + "]";*/
 	}
 }
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java	(revision 29957)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java	(revision 29958)
@@ -18,4 +18,5 @@
 
 import java.awt.BorderLayout;
+import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
@@ -23,11 +24,14 @@
 import java.awt.event.ComponentListener;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 
+import javax.swing.ComboBoxModel;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
 
 import org.openstreetmap.josm.Main;
@@ -44,5 +48,4 @@
 import org.openstreetmap.josm.plugins.elevation.IElevationProfile;
 import org.openstreetmap.josm.plugins.elevation.gpx.ElevationModel;
-import org.openstreetmap.josm.plugins.elevation.gpx.GeoidCorrectionKind;
 import org.openstreetmap.josm.tools.Shortcut;
 /**
@@ -72,4 +75,6 @@
 	private JLabel totalTimeLabel;
 	private JLabel distLabel;
+	private JComboBox<IElevationProfile> trackCombo;
+	
 	/* Listener to the elevation model */
 	private List<IElevationModelListener> listeners = new ArrayList<IElevationModelListener>();
@@ -78,5 +83,6 @@
 	 * Corresponding layer instance within map view.
 	 */
-	private ElevationProfileLayer profileLayer;	
+	private ElevationProfileLayer profileLayer;
+	
 
 	/**
@@ -116,46 +122,59 @@
 			Shortcut shortcut, int preferredHeight, boolean defShow) {
 		super(name, iconName, tooltip, shortcut, preferredHeight, defShow);
+		
+		// create model
+		model = new ElevationModel();
 				
-		JPanel dataPanel = new JPanel();
-		GridLayout gridLayout = new GridLayout(2, 6);
-		dataPanel.setLayout(gridLayout);
+		// top panel
+		JPanel rootPanel = new JPanel();
+		GridLayout gridLayout1 = new GridLayout(2, 1);
+		rootPanel.setLayout(gridLayout1);
+		
+		// statistics panel 
+		JPanel statPanel = new JPanel();
+		GridLayout gridLayoutStat = new GridLayout(2, 6);
+		statPanel.setLayout(gridLayoutStat);
 
 		// first row: Headlines with bold font
-		JLabel lbl = new JLabel(tr("Min"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-		lbl = new JLabel(tr("Avrg"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-		lbl = new JLabel(tr("Max"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-		lbl = new JLabel(tr("Dist"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-		lbl = new JLabel(tr("Gain"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-		lbl = new JLabel(tr("Time"));
-		lbl.setFont(getFont().deriveFont(Font.BOLD));
-		dataPanel.add(lbl);
-
+		String[] labels = new String[]{tr("Min"), tr("Avrg"), tr("Max"), tr("Dist"), tr("Gain"), tr("Time")};
+		for (int i = 0; i < labels.length; i++) {
+		    	JLabel lbl = new JLabel(labels[i]);
+		    	lbl.setFont(getFont().deriveFont(Font.BOLD));
+		    	statPanel.add(lbl);
+		}
+		
 		// second row
 		minHeightLabel = new JLabel("0 m");
-		dataPanel.add(minHeightLabel);
+		statPanel.add(minHeightLabel);
 		avrgHeightLabel = new JLabel("0 m");
-		dataPanel.add(avrgHeightLabel);
+		statPanel.add(avrgHeightLabel);
 		maxHeightLabel = new JLabel("0 m");
-		dataPanel.add(maxHeightLabel);
+		statPanel.add(maxHeightLabel);
 		distLabel = new JLabel("0 km");
-		dataPanel.add(distLabel);
+		statPanel.add(distLabel);
 		elevationGainLabel = new JLabel("0 m");
-		dataPanel.add(elevationGainLabel);
+		statPanel.add(elevationGainLabel);
 		totalTimeLabel = new JLabel("0");
-		dataPanel.add(totalTimeLabel);
-
-		add(dataPanel, BorderLayout.PAGE_END);
-		model = new ElevationModel();
-
+		statPanel.add(totalTimeLabel);
+		
+		// track selection panel
+		JPanel trackPanel = new JPanel();
+		FlowLayout fl = new FlowLayout(FlowLayout.LEFT);
+		trackPanel.setLayout(fl);
+				
+		JLabel lbTrack = new JLabel(tr("Tracks"));		
+		lbTrack.setFont(getFont().deriveFont(Font.BOLD));
+		trackPanel.add(lbTrack);
+		
+		trackCombo = new JComboBox<IElevationProfile>(new TrackModel());
+		trackPanel.add(trackCombo);
+
+		// assemble root panel
+		rootPanel.add(statPanel);
+		rootPanel.add(trackPanel);
+		
+		add(rootPanel, BorderLayout.PAGE_END);
+		
+		// add chart component
 		profPanel = new ElevationProfilePanel(null);
 		add(profPanel, BorderLayout.CENTER);
@@ -258,4 +277,5 @@
 		    totalTimeLabel.setText(String.format("%d:%d h", hours, minutes));
 		    distLabel.setText(NavigatableComponent.getSystemOfMeasurement().getDistText(dist));
+		    trackCombo.setEnabled(model.profileCount() > 1);		    
 		} else { // no elevation data, -> switch back to empty view
 		    setTitle(String.format("%s: (No data)", tr("Elevation Profile")));
@@ -267,6 +287,7 @@
 		    totalTimeLabel.setText(EMPTY_DATA_STRING);
 		    distLabel.setText(EMPTY_DATA_STRING);
-		}
-
+		    trackCombo.setEnabled(false);
+		}
+		
 		fireModelChanged();
 		repaint();	    
@@ -398,3 +419,56 @@
 	public void componentShown(ComponentEvent e) {
 	}
+	
+	
+	class TrackModel implements ComboBoxModel<IElevationProfile> {
+	    private Collection<ListDataListener> listeners;
+
+	    @Override
+	    public void addListDataListener(ListDataListener arg0) {
+		if (listeners == null) {
+		    listeners = new ArrayList<ListDataListener>();
+		}
+		listeners.add(arg0);
+	    }
+
+	    @Override
+	    public IElevationProfile getElementAt(int index) {
+		if (model == null) return null;
+		
+		IElevationProfile ep = model.getProfiles().get(index);
+		return ep;
+	    }
+
+	    @Override
+	    public int getSize() {
+		if (model == null) return 0;
+		
+		return model.profileCount();
+	    }
+
+	    @Override
+	    public void removeListDataListener(ListDataListener listener) {
+		if (listeners == null) return;	
+		
+		listeners.remove(listener);
+	    }
+
+	    @Override
+	    public Object getSelectedItem() {
+		if (model == null) return null;
+		
+		return model.getCurrentProfile();
+	    }
+
+	    @Override
+	    public void setSelectedItem(Object selectedObject) {
+		if (model != null && selectedObject instanceof IElevationProfile) {
+		    model.setCurrentProfile((IElevationProfile) selectedObject);
+		    profileLayer.setProfile(model.getCurrentProfile());
+		    
+		    repaint();		    
+		}
+	    }
+	    
+	}
 }
Index: applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java
===================================================================
--- applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java	(revision 29957)
+++ applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java	(revision 29958)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.plugins.elevation.ElevationHelper;
+import org.openstreetmap.josm.plugins.elevation.IElevationModelListener;
 import org.openstreetmap.josm.plugins.elevation.IElevationProfile;
 import org.openstreetmap.josm.plugins.elevation.gpx.ElevationWayPointKind;
@@ -42,6 +43,6 @@
  * 
  */
-public class ElevationProfileLayer extends
-org.openstreetmap.josm.gui.layer.Layer implements IElevationProfileSelectionListener {
+public class ElevationProfileLayer extends Layer implements IElevationProfileSelectionListener {
+    
     private static final double Level_Factor = 100.0;
     private IElevationProfile profile;
