Index: /src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 63)
+++ /src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 64)
@@ -13,20 +13,20 @@
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.MapFrame;
 
 /**
- * Add a new track from all selected line segments.
+ * Add a new way from all selected line segments.
  *
  * If there is a selection when the mode is entered, all line segments in this
- * selection form a new track, except the user holds down Shift.
+ * selection form a new way, except the user holds down Shift.
  *
- * The user can click on a line segment. If he holds down Shift, no track is 
- * created yet. If he holds down Alt, the whole track is considered instead of 
- * the clicked line segment. If the user holds down Ctrl, no track is created 
+ * The user can click on a line segment. If he holds down Shift, no way is 
+ * created yet. If he holds down Alt, the whole way is considered instead of 
+ * the clicked line segment. If the user holds down Ctrl, no way is created 
  * and the clicked line segment get removed from the list.
  *
  * Also, the user may select a rectangle as in selection mode. No node, area or
- * track can be selected this way.
+ * way can be selected this way.
  *
  * @author imi
@@ -49,5 +49,5 @@
 	@Override
 	public void actionPerformed(ActionEvent e) {
-		makeTrack();
+		makeWay();
 		super.actionPerformed(e);
 		mapFrame.selectMapMode(followMode);
@@ -55,16 +55,16 @@
 
 	/**
-	 * Just make a track of all selected items.
+	 * Just make a way of all selected items.
 	 */
-	private void makeTrack() {
+	private void makeWay() {
 		Collection<OsmPrimitive> selection = Main.main.ds.getSelected();
 		if (selection.isEmpty())
 			return;
 
-		// form a new track
+		// form a new way
 		LinkedList<LineSegment> lineSegments = new LinkedList<LineSegment>();
 		int numberOfSelectedWays = 0;
 		for (OsmPrimitive osm : selection) {
-			if (osm instanceof Track)
+			if (osm instanceof Way)
 				numberOfSelectedWays++;
 			else if (osm instanceof LineSegment)
@@ -80,6 +80,6 @@
 			if (answer == JOptionPane.YES_OPTION) {
 				for (OsmPrimitive osm : selection)
-					if (osm instanceof Track)
-						lineSegments.addAll(((Track)osm).segments);
+					if (osm instanceof Way)
+						lineSegments.addAll(((Way)osm).segments);
 			}
 		}
@@ -114,5 +114,5 @@
 		}
 		
-		Track t = new Track();
+		Way t = new Way();
 		for (LineSegment ls : sortedLineSegments)
 			t.segments.add(ls);
Index: /src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 63)
+++ /src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 64)
@@ -26,5 +26,5 @@
  * @see #deleteWithReferences(OsmPrimitive)
  *
- * Pressing Alt will select the track instead of a line segment, as usual.
+ * Pressing Alt will select the way instead of a line segment, as usual.
  * 
  * If the user did not press Ctrl and the object has any references, the user
@@ -94,11 +94,11 @@
 	 * Delete the primitives and everything they references.
 	 * 
-	 * If a node is deleted, the node and all line segments, tracks and areas
+	 * If a node is deleted, the node and all line segments, waies and areas
 	 * the node is part of are deleted as well.
 	 * 
-	 * If a line segment is deleted, all tracks the line segment is part of 
+	 * If a line segment is deleted, all waies the line segment is part of 
 	 * are deleted as well. No nodes are deleted.
 	 * 
-	 * If a track is deleted, only the track and no line segments or nodes are 
+	 * If a way is deleted, only the way and no line segments or nodes are 
 	 * deleted.
 	 * 
Index: /src/org/openstreetmap/josm/actions/mapmode/SelectionAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/mapmode/SelectionAction.java	(revision 63)
+++ /src/org/openstreetmap/josm/actions/mapmode/SelectionAction.java	(revision 64)
@@ -27,5 +27,5 @@
  * If Alt key was hold, select all objects that are touched by the 
  * selection rectangle. If the Alt key was not hold, select only those objects 
- * completly within (e.g. for tracks mean: only if all nodes of the track are 
+ * completly within (e.g. for waies mean: only if all nodes of the way are 
  * within).  
  *
Index: /src/org/openstreetmap/josm/command/ChangeKeyValueCommand.java
===================================================================
--- /src/org/openstreetmap/josm/command/ChangeKeyValueCommand.java	(revision 63)
+++ /src/org/openstreetmap/josm/command/ChangeKeyValueCommand.java	(revision 64)
@@ -8,5 +8,4 @@
 import java.util.Map;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 
@@ -26,5 +25,5 @@
 	 * The key that is subject to change.
 	 */
-	private final Key key;
+	private final String key;
 	/**
 	 * The key value. If it is <code>null</code>, delete all key references with the given
@@ -37,5 +36,5 @@
 	 * These are the old values of the objects to do a proper undo.
 	 */
-	private List<Map<Key, String>> oldProperties;
+	private List<Map<String, String>> oldProperties;
 	
 	/**
@@ -44,5 +43,5 @@
 	private List<Boolean> oldModified = new LinkedList<Boolean>();
 
-	public ChangeKeyValueCommand(Collection<OsmPrimitive> objects, Key key, String value) {
+	public ChangeKeyValueCommand(Collection<OsmPrimitive> objects, String key, String value) {
 		this.objects = new LinkedList<OsmPrimitive>(objects);
 		this.key = key;
@@ -52,7 +51,7 @@
 	public void executeCommand() {
 		// save old
-		oldProperties = new LinkedList<Map<Key, String>>();
+		oldProperties = new LinkedList<Map<String, String>>();
 		for (OsmPrimitive osm : objects) {
-			oldProperties.add(osm.keys == null ? null : new HashMap<Key, String>(osm.keys));
+			oldProperties.add(osm.keys == null ? null : new HashMap<String, String>(osm.keys));
 			oldModified.add(osm.modifiedProperties);
 			osm.modifiedProperties = true;
@@ -70,5 +69,5 @@
 			for (OsmPrimitive osm : objects) {
 				if (osm.keys == null)
-					osm.keys = new HashMap<Key, String>();
+					osm.keys = new HashMap<String, String>();
 				osm.keys.put(key, value);
 			}
@@ -77,5 +76,5 @@
 
 	public void undoCommand() {
-		Iterator<Map<Key, String>> it = oldProperties.iterator();
+		Iterator<Map<String, String>> it = oldProperties.iterator();
 		Iterator<Boolean> itMod = oldModified.iterator();
 		for (OsmPrimitive osm : objects) {
Index: /src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /src/org/openstreetmap/josm/data/Preferences.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/Preferences.java	(revision 64)
@@ -42,5 +42,5 @@
 
 	/**
-	 * Whether lines should be drawn between track points of raw gps data.
+	 * Whether lines should be drawn between way points of raw gps data.
 	 */
 	private boolean drawRawGpsLines = false;
Index: /src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 64)
@@ -21,5 +21,5 @@
 
 	/**
-	 * All nodes goes here, even when included in other data (tracks etc).
+	 * All nodes goes here, even when included in other data (waies etc).
 	 * This enables the instant conversion of the whole DataSet by iterating over
 	 * this data structure.
@@ -28,16 +28,16 @@
 
 	/**
-	 * All line segments goes here, even when they are in a track.
+	 * All line segments goes here, even when they are in a way.
 	 */
 	public Collection<LineSegment> lineSegments = new LinkedList<LineSegment>();
 
 	/**
-	 * All tracks (Streets etc.) in the DataSet. 
+	 * All waies (Streets etc.) in the DataSet. 
 	 * 
-	 * The nodes of the track segments of this track must be objects from 
-	 * the nodes list, however the track segments are stored only in the 
-	 * track list.
+	 * The nodes of the way segments of this way must be objects from 
+	 * the nodes list, however the way segments are stored only in the 
+	 * way list.
 	 */
-	public Collection<Track> tracks = new LinkedList<Track>();
+	public Collection<Way> waies = new LinkedList<Way>();
 
 	/**
@@ -49,5 +49,5 @@
 		o.addAll(nodes);
 		o.addAll(lineSegments);
-		o.addAll(tracks);
+		o.addAll(waies);
 		return o;
 	}
@@ -133,5 +133,5 @@
 		clearSelection(nodes);
 		clearSelection(lineSegments);
-		clearSelection(tracks);
+		clearSelection(waies);
 	}
 
@@ -144,5 +144,5 @@
 		Collection<OsmPrimitive> sel = getSelected(nodes);
 		sel.addAll(getSelected(lineSegments));
-		sel.addAll(getSelected(tracks));
+		sel.addAll(getSelected(waies));
 		return sel;
 	}
@@ -155,9 +155,6 @@
 		if (list == null)
 			return;
-		for (OsmPrimitive osm : list) {
+		for (OsmPrimitive osm : list)
 			osm.setSelected(false);
-			if (osm.keys != null)
-				clearSelection(osm.keys.keySet());
-		}
 	}
 
@@ -170,10 +167,7 @@
 		if (list == null)
 			return sel;
-		for (OsmPrimitive osm : list) {
+		for (OsmPrimitive osm : list)
 			if (osm.isSelected() && !osm.isDeleted())
 				sel.add(osm);
-			if (osm.keys != null)
-				sel.addAll(getSelected(osm.keys.keySet()));
-		}
 		return sel;
 	}
Index: c/org/openstreetmap/josm/data/osm/Key.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/Key.java	(revision 63)
+++ 	(revision )
@@ -1,58 +1,0 @@
-package org.openstreetmap.josm.data.osm;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
-
-
-/**
- * A key can be associated together with a value to any osm primitive.
- *
- * @author imi
- */
-public class Key extends OsmPrimitive {
-
-	/**
-	 * The key's name
-	 */
-	public final String name;
-
-	/**
-	 * All keys are stored here.
-	 */
-	public static final Map<String, Key> allKeys = new HashMap<String, Key>();
-	
-	/**
-	 * Generate a key with the given name. You cannot call this directly but
-	 * have to use the static constructor. This makes sure, you get every key
-	 * only once.
-	 */
-	private Key(String name) {
-		this.name = name;
-	}
-
-	/**
-	 * Get an instance of the key with the given name.
-	 * @param name	The name of the key to get.
-	 * @return An shared instance of the key with the given name. 
-	 */
-	public static Key get(String name) {
-		Key key = allKeys.get(name);
-		if (key == null) {
-			key = new Key(name);
-			allKeys.put(name, key);
-		}
-		return key;
-	}
-	
-	@Override
-	public void visit(Visitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public String toString() {
-		return name;
-	}
-}
Index: /src/org/openstreetmap/josm/data/osm/LineSegment.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/LineSegment.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/LineSegment.java	(revision 64)
@@ -6,5 +6,5 @@
 
 /**
- * One track line segment consisting of a pair of nodes (start/end) 
+ * One way line segment consisting of a pair of nodes (start/end) 
  *
  * @author imi
Index: /src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 64)
@@ -24,5 +24,5 @@
 	 * The key/value list for this primitive.
 	 */
-	public Map<Key, String> keys;
+	public Map<String, String> keys;
 
 	/**
@@ -78,8 +78,8 @@
 
 		if (keys != null) {
-			for (Key k : keys.keySet())
+			for (String k : keys.keySet())
 				if (other.keys.containsKey(k) && !keys.get(k).equals(other.keys.get(k)))
 					return false;
-			for (Key k : other.keys.keySet())
+			for (String k : other.keys.keySet())
 				if (keys.containsKey(k) && !other.keys.get(k).equals(keys.get(k)))
 					return false;
@@ -140,11 +140,11 @@
 	 * @param value The value for the key.
 	 */
-	public void put(Key key, String value) {
+	public void put(String key, String value) {
 		if (keys == null)
-			keys = new HashMap<Key, String>();
+			keys = new HashMap<String, String>();
 		keys.put(key, value);
 	}
 	
-	public String get(Key key) {
+	public String get(String key) {
 		return (keys == null) ? null : keys.get(key);
 	}
Index: c/org/openstreetmap/josm/data/osm/Track.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/Track.java	(revision 63)
+++ 	(revision )
@@ -1,75 +1,0 @@
-package org.openstreetmap.josm.data.osm;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.openstreetmap.josm.data.osm.visitor.Visitor;
-
-/**
- * One full track, consisting of several track segments chained together.
- *
- * @author imi
- */
-public class Track extends OsmPrimitive {
-
-	/**
-	 * All track segments in this track
-	 */
-	public final List<LineSegment> segments = new ArrayList<LineSegment>();
-
-	
-	/**
-	 * Return the last node in the track. This is the node, which no line segment
-	 * has as start, but at least one has it as end. If there are not exact one
-	 * such nodes found, <code>null</code> is returned.
-	 *
-	 * TODO Currently does return just the end node in the list.
-	 *
-	 * @return The ending node, if there is one.
-	 */
-	public Node getEndingNode() {
-		if (segments.isEmpty())
-			return null;
-		return segments.get(segments.size()-1).end;
-	}
-	
-	/**
-	 * Return the last segment.
-	 * @see #getEndingNode()
-	 */
-	public LineSegment getEndingSegment() {
-		if (segments.isEmpty())
-			return null;
-		return segments.get(segments.size()-1);
-	}
-
-	/**
-	 * Return the first node in the track. This is the node, which no line segment
-	 * has as end, but at least one as starting node. If there are not exact one
-	 * such nodes found, <code>null</code> is returned.
-	 * 
-	 * TODO Currently does return just the first node in the list.
-	 * 
-	 * @return The starting node, if there is one.
-	 */
-	public Node getStartingNode() {
-		if (segments.isEmpty())
-			return null;
-		return segments.get(0).start;
-	}
-	
-	/**
-	 * Return the first segment.
-	 * @see #getStartingNode()
-	 */
-	public LineSegment getStartingSegment() {
-		if (segments.isEmpty())
-			return null;
-		return segments.get(0);
-	}
-
-	@Override
-	public void visit(Visitor visitor) {
-		visitor.visit(this);
-	}
-}
Index: /src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/Way.java	(revision 64)
+++ /src/org/openstreetmap/josm/data/osm/Way.java	(revision 64)
@@ -0,0 +1,75 @@
+package org.openstreetmap.josm.data.osm;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openstreetmap.josm.data.osm.visitor.Visitor;
+
+/**
+ * One full way, consisting of several way segments chained together.
+ *
+ * @author imi
+ */
+public class Way extends OsmPrimitive {
+
+	/**
+	 * All way segments in this way
+	 */
+	public final List<LineSegment> segments = new ArrayList<LineSegment>();
+
+	
+	/**
+	 * Return the last node in the way. This is the node, which no line segment
+	 * has as start, but at least one has it as end. If there are not exact one
+	 * such nodes found, <code>null</code> is returned.
+	 *
+	 * TODO Currently does return just the end node in the list.
+	 *
+	 * @return The ending node, if there is one.
+	 */
+	public Node getEndingNode() {
+		if (segments.isEmpty())
+			return null;
+		return segments.get(segments.size()-1).end;
+	}
+	
+	/**
+	 * Return the last segment.
+	 * @see #getEndingNode()
+	 */
+	public LineSegment getEndingSegment() {
+		if (segments.isEmpty())
+			return null;
+		return segments.get(segments.size()-1);
+	}
+
+	/**
+	 * Return the first node in the way. This is the node, which no line segment
+	 * has as end, but at least one as starting node. If there are not exact one
+	 * such nodes found, <code>null</code> is returned.
+	 * 
+	 * TODO Currently does return just the first node in the list.
+	 * 
+	 * @return The starting node, if there is one.
+	 */
+	public Node getStartingNode() {
+		if (segments.isEmpty())
+			return null;
+		return segments.get(0).start;
+	}
+	
+	/**
+	 * Return the first segment.
+	 * @see #getStartingNode()
+	 */
+	public LineSegment getStartingSegment() {
+		if (segments.isEmpty())
+			return null;
+		return segments.get(0);
+	}
+
+	@Override
+	public void visit(Visitor visitor) {
+		visitor.visit(this);
+	}
+}
Index: /src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java	(revision 64)
@@ -4,8 +4,7 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -30,7 +29,6 @@
 		ds.lineSegments.add(ls);
 	}
-	public void visit(Track t) {
-		ds.tracks.add(t);
+	public void visit(Way t) {
+		ds.waies.add(t);
 	}
-	public void visit(Key k) {}
 }
Index: /src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java	(revision 64)
@@ -4,9 +4,8 @@
 import java.util.HashSet;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -38,17 +37,11 @@
 
 	/**
-	 * Tracks have all nodes from their line segments.
+	 * Ways have all nodes from their line segments.
 	 */
-	public void visit(Track t) {
+	public void visit(Way t) {
 		for (LineSegment ls : t.segments) {
 			nodes.add(ls.start);
 			nodes.add(ls.end);
 		}
-	}
-
-	/**
-	 * Keys have no nodes.
-	 */
-	public void visit(Key k) {
 	}
 
Index: /src/org/openstreetmap/josm/data/osm/visitor/BoundingVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/BoundingVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/BoundingVisitor.java	(revision 64)
@@ -2,8 +2,7 @@
 
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -53,12 +52,8 @@
 	}
 
-	public void visit(Track t) {
+	public void visit(Way t) {
 		for (LineSegment ls : t.segments)
 			visit(ls);
 	}
-
-	public void visit(Key k) {
-		// do nothing
-	}
 }
 
Index: /src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 64)
@@ -5,12 +5,11 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
- * Helper that collect all line segments a node is part of, all tracks
+ * Helper that collect all line segments a node is part of, all waies
  * a node or line segment is part of and all areas a node is part of. 
  * 
@@ -38,5 +37,5 @@
 	
 	public void visit(Node n) {
-		for (Track t : ds.tracks) {
+		for (Way t : ds.waies) {
 			if (t.isDeleted())
 				continue;
@@ -56,5 +55,5 @@
 	}
 	public void visit(LineSegment ls) {
-		for (Track t : ds.tracks) {
+		for (Way t : ds.waies) {
 			if (t.isDeleted())
 				continue;
@@ -63,5 +62,4 @@
 		}
 	}
-	public void visit(Track t) {}
-	public void visit(Key k) {}
+	public void visit(Way t) {}
 }
Index: /src/org/openstreetmap/josm/data/osm/visitor/CsvVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/CsvVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/CsvVisitor.java	(revision 64)
@@ -5,9 +5,8 @@
 import java.util.Map.Entry;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -38,5 +37,5 @@
 	}
 
-	public void visit(Track t) {
+	public void visit(Way t) {
 		out.print("t,"+common(t)+","+t.segments.size());
 		for (LineSegment ls : t.segments) {
@@ -44,8 +43,4 @@
 			visit(ls);
 		}
-	}
-
-	public void visit(Key k) {
-		//TODO
 	}
 
@@ -60,6 +55,6 @@
 		if (osm.keys != null) {
 			b.append(","+osm.keys.size());
-			for (Entry<Key, String> e : osm.keys.entrySet())
-				b.append(e.getKey().name+","+encode(e.getValue()));
+			for (Entry<String, String> e : osm.keys.entrySet())
+				b.append(e.getKey()+","+encode(e.getValue()));
 		} else
 			b.append(",0");
Index: /src/org/openstreetmap/josm/data/osm/visitor/DeleteVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/DeleteVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/DeleteVisitor.java	(revision 64)
@@ -4,8 +4,7 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -30,7 +29,6 @@
 		ds.lineSegments.remove(ls);
 	}
-	public void visit(Track t) {
-		ds.tracks.remove(t);
+	public void visit(Way t) {
+		ds.waies.remove(t);
 	}
-	public void visit(Key k) {}
 }
Index: /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 64)
@@ -7,9 +7,8 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -97,39 +96,35 @@
 
 	/**
-	 * Merge the track if id matches or if all line segments matches and the
-	 * id is zero of either track.
-	 */
-	public void visit(Track otherTrack) {
-		Track myTrack = null;
-		for (Track t : ds.tracks) {
-			if (match(otherTrack, t)) {
-				myTrack = t;
+	 * Merge the way if id matches or if all line segments matches and the
+	 * id is zero of either way.
+	 */
+	public void visit(Way otherWay) {
+		Way myWay = null;
+		for (Way t : ds.waies) {
+			if (match(otherWay, t)) {
+				myWay = t;
 				break;
 			}
 		}
-		if (myTrack == null)
-			ds.tracks.add(otherTrack);
+		if (myWay == null)
+			ds.waies.add(otherWay);
 		else {
-			mergeCommon(myTrack, otherTrack);
-			if (myTrack.modified && !otherTrack.modified)
+			mergeCommon(myWay, otherWay);
+			if (myWay.modified && !otherWay.modified)
 				return;
 			boolean same = true;
-			Iterator<LineSegment> it = otherTrack.segments.iterator();
-			for (LineSegment ls : myTrack.segments) {
+			Iterator<LineSegment> it = otherWay.segments.iterator();
+			for (LineSegment ls : myWay.segments) {
 				if (!match(ls, it.next()))
 					same = false;
 			}
 			if (!same) {
-				myTrack.segments.clear();
-				myTrack.segments.addAll(otherTrack.segments);
-				myTrack.modified = otherTrack.modified;
-			}
-		}
-	}
-
-	public void visit(Key k) {
-		//TODO: Key doesn't really fit the OsmPrimitive concept!
-	}
-	
+				myWay.segments.clear();
+				myWay.segments.addAll(otherWay.segments);
+				myWay.modified = otherWay.modified;
+			}
+		}
+	}
+
 	/**
 	 * Postprocess the dataset and fix all merged references to point to the actual
@@ -143,5 +138,5 @@
 				ls.end = mergedNodes.get(ls.end);
 		}
-		for (Track t : ds.tracks) {
+		for (Way t : ds.waies) {
 			boolean replacedSomething = false;
 			LinkedList<LineSegment> newSegments = new LinkedList<LineSegment>();
@@ -184,7 +179,7 @@
 
 	/**
-	 * @return Whether the tracks matches (in sense of "be mergable").
-	 */
-	private boolean match(Track t1, Track t2) {
+	 * @return Whether the waies matches (in sense of "be mergable").
+	 */
+	private boolean match(Way t1, Way t2) {
 		if (t1.id == 0 || t2.id == 0) {
 			if (t1.segments.size() != t2.segments.size())
Index: /src/org/openstreetmap/josm/data/osm/visitor/SelectionComponentVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/SelectionComponentVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/SelectionComponentVisitor.java	(revision 64)
@@ -8,8 +8,7 @@
 import javax.swing.Icon;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ImageProvider;
 
@@ -31,12 +30,4 @@
 	
 	
-	/**
-	 * A key icon and the name of the key.
-	 */
-	public void visit(Key k) {
-		name = k.name;
-		icon = ImageProvider.get("data", "key");
-	}
-
 	/**
 	 * If the line segment has a key named "name", its value is displayed. 
@@ -67,8 +58,8 @@
 
 	/**
-	 * If the track has a name-key or id-key, this is displayed. If not, (x nodes)
-	 * is displayed with x beeing the number of nodes in the track.
+	 * If the way has a name-key or id-key, this is displayed. If not, (x nodes)
+	 * is displayed with x beeing the number of nodes in the way.
 	 */
-	public void visit(Track t) {
+	public void visit(Way t) {
 		String name = getName(t.keys);
 		if (name == null) {
@@ -82,5 +73,5 @@
 		
 		this.name = name;
-		icon = ImageProvider.get("data", "track");
+		icon = ImageProvider.get("data", "way");
 	}
 
@@ -91,10 +82,10 @@
 	 * @return If a name could be found, return it here.
 	 */
-	public String getName(Map<Key, String> keys) {
+	public String getName(Map<String, String> keys) {
 		String name = null;
 		if (keys != null) {
-			name = keys.get(Key.get("name"));
+			name = keys.get("name");
 			if (name == null)
-				name = keys.get(Key.get("id"));
+				name = keys.get("id");
 		}
 		return name;
Index: /src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 64)
@@ -5,8 +5,7 @@
 import java.awt.Point;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 
@@ -61,7 +60,7 @@
 	/**
 	 * Draw a darkblue line for all line segments.
-	 * @param t The track to draw.
+	 * @param t The way to draw.
 	 */
-	public void visit(Track t) {
+	public void visit(Way t) {
 		// only to overwrite with blue
 		for (LineSegment ls : t.segments)
@@ -70,10 +69,4 @@
 	}
 
-	/**
-	 * Do not draw a key.
-	 */
-	public void visit(Key k) {
-	}
-	
 	/**
 	 * Draw the node as small rectangle with the given color.
Index: /src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/Visitor.java	(revision 63)
+++ /src/org/openstreetmap/josm/data/osm/visitor/Visitor.java	(revision 64)
@@ -1,8 +1,7 @@
 package org.openstreetmap.josm.data.osm.visitor;
 
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -15,5 +14,4 @@
 	void visit(Node n);
 	void visit(LineSegment ls);
-	void visit(Track t);
-	void visit(Key k);
+	void visit(Way t);
 }
Index: /src/org/openstreetmap/josm/gui/ImageProvider.java
===================================================================
--- /src/org/openstreetmap/josm/gui/ImageProvider.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/ImageProvider.java	(revision 64)
@@ -43,4 +43,6 @@
 			subdir += "/";
 		URL path = Main.class.getResource("/images/"+subdir+name+".png");
+		if (path == null)
+			throw new NullPointerException("/images/"+subdir+name+".png not found");
 		ImageIcon icon = cache.get(path);
 		if (icon == null) {
Index: /src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MapStatus.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/MapStatus.java	(revision 64)
@@ -28,5 +28,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.GeoPoint;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.SelectionComponentVisitor;
@@ -141,6 +140,6 @@
 								text.append("<br>id="+osm.id);
 							if (osm.keys != null)
-								for (Entry<Key, String> e : osm.keys.entrySet())
-									text.append("<br>"+e.getKey().name+"="+e.getValue());
+								for (Entry<String, String> e : osm.keys.entrySet())
+									text.append("<br>"+e.getKey()+"="+e.getValue());
 							final JLabel l = new JLabel("<html>"+text.toString()+"</html>", visitor.icon, JLabel.HORIZONTAL);
 							l.setFont(l.getFont().deriveFont(Font.PLAIN));
Index: /src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 64)
@@ -12,5 +12,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.projection.Projection;
 
@@ -118,6 +118,6 @@
 	 * If no such line segment is found, and a non-pending line segment is 
 	 * within 10 pixel to p, this segment is returned, except when 
-	 * <code>wholeTrack</code> is <code>true</code>, in which case the 
-	 * corresponding Track is returned.
+	 * <code>wholeWay</code> is <code>true</code>, in which case the 
+	 * corresponding Way is returned.
 	 * 
 	 * If no line segment is found and the point is within an area, return that
@@ -127,9 +127,9 @@
 	 * 
 	 * @param p				 The point on screen.
-	 * @param lsInsteadTrack Whether the line segment (true) or only the whole
-	 * 					 	 track should be returned.
+	 * @param lsInsteadWay Whether the line segment (true) or only the whole
+	 * 					 	 way should be returned.
 	 * @return	The primitive, that is nearest to the point p.
 	 */
-	public OsmPrimitive getNearest(Point p, boolean lsInsteadTrack) {
+	public OsmPrimitive getNearest(Point p, boolean lsInsteadWay) {
 		double minDistanceSq = Double.MAX_VALUE;
 		OsmPrimitive minPrimitive = null;
@@ -149,8 +149,8 @@
 			return minPrimitive;
 		
-		// for whole tracks, try the tracks first
+		// for whole waies, try the waies first
 		minDistanceSq = Double.MAX_VALUE;
-		if (!lsInsteadTrack) {
-			for (Track t : Main.main.ds.tracks) {
+		if (!lsInsteadWay) {
+			for (Way t : Main.main.ds.waies) {
 				if (t.isDeleted())
 					continue;
@@ -201,10 +201,10 @@
 	 * If its a node, return all line segments and
 	 * streets the node is part of, as well as all nodes
-	 * (with their line segments and tracks) with the same
+	 * (with their line segments and waies) with the same
 	 * location.
 	 * 
-	 * If its a line segment, return all tracks this segment 
+	 * If its a line segment, return all waies this segment 
 	 * belongs to as well as all line segments that are between
-	 * the same nodes (in both direction) with all their tracks.
+	 * the same nodes (in both direction) with all their waies.
 	 * 
 	 * @return A collection of all items or <code>null</code>
@@ -235,5 +235,5 @@
 		}
 		if (osm instanceof Node || osm instanceof LineSegment) {
-			for (Track t : Main.main.ds.tracks) {
+			for (Way t : Main.main.ds.waies) {
 				if (t.isDeleted())
 					continue;
Index: /src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- /src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 64)
@@ -177,5 +177,5 @@
 				"An example: \"ignore ignore lat lon\" will use ' ' as delimiter, skip the first two values and read then lat/lon.<br>" +
 				"Other example: \"lat,lon\" will just read lat/lon values comma seperated.</html>");
-		drawRawGpsLines.setToolTipText("If your gps device draw to few lines, select this to draw lines along your track.");
+		drawRawGpsLines.setToolTipText("If your gps device draw to few lines, select this to draw lines along your way.");
 		drawRawGpsLines.setSelected(Main.pref.isDrawRawGpsLines());
 		forceRawGpsLines.setToolTipText("Force drawing of lines if the imported data contain no line information.");
Index: /src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- /src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 64)
@@ -19,5 +19,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -257,5 +257,5 @@
 	 * @param alt Whether the alt key was pressed, which means select all objects
 	 * 		that are touched, instead those which are completly covered. Also 
-	 * 		select whole tracks instead of line segments.
+	 * 		select whole waies instead of line segments.
 	 */
 	public Collection<OsmPrimitive> getObjectsInRectangle(Rectangle r, boolean alt) {
@@ -282,13 +282,13 @@
 					selection.add(ls);
 
-			// tracks
-			for (Track t : Main.main.ds.tracks) {
-				boolean wholeTrackSelected = !t.segments.isEmpty();
+			// waies
+			for (Way t : Main.main.ds.waies) {
+				boolean wholeWaySelected = !t.segments.isEmpty();
 				for (LineSegment ls : t.segments)
 					if (rectangleContainLineSegment(r, alt, ls))
 						selection.add(ls);
 					else
-						wholeTrackSelected = false;
-				if (wholeTrackSelected)
+						wholeWaySelected = false;
+				if (wholeWaySelected)
 					selection.add(t);
 			}
Index: /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 64)
@@ -14,5 +14,4 @@
 import java.awt.event.WindowFocusListener;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.TreeMap;
@@ -37,5 +36,4 @@
 import org.openstreetmap.josm.command.ChangeKeyValueCommand;
 import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.ImageProvider;
@@ -125,5 +123,5 @@
 		if (value.equals(""))
 			value = null; // delete the key
-		mv.editLayer().add(new ChangeKeyValueCommand(sel, Key.get(key), value));
+		mv.editLayer().add(new ChangeKeyValueCommand(sel, key, value));
 
 		if (value == null)
@@ -143,5 +141,8 @@
 		p.add(new JLabel("<html>This will change "+sel.size()+" object"+(sel.size()==1?"":"s")+".<br><br>"+
 		"Please select a key"), BorderLayout.NORTH);
-		Vector<String> allKeys = new Vector<String>(Key.allKeys.keySet());
+		Vector<String> allKeys = new Vector<String>();
+		for (OsmPrimitive osm : Main.main.ds.allNonDeletedPrimitives())
+			if (osm.keys != null)
+				allKeys.addAll(osm.keys.keySet());
 		for (Iterator<String> it = allKeys.iterator(); it.hasNext();) {
 			String s = it.next();
@@ -170,5 +171,5 @@
 		if (value.equals(""))
 			return;
-		mv.editLayer().add(new ChangeKeyValueCommand(sel, Key.get(key), value));
+		mv.editLayer().add(new ChangeKeyValueCommand(sel, key, value));
 		selectionChanged(sel); // update table
 	}
@@ -181,5 +182,5 @@
 		String key = data.getValueAt(row, 0).toString();
 		Collection<OsmPrimitive> sel = Main.main.ds.getSelected();
-		mv.editLayer().add(new ChangeKeyValueCommand(sel, Key.get(key), null));
+		mv.editLayer().add(new ChangeKeyValueCommand(sel, key, null));
 		selectionChanged(sel); // update table
 	}
@@ -293,28 +294,20 @@
 		data.setRowCount(0);
 		TreeMap<String, Collection<String>> props = new TreeMap<String, Collection<String>>();
-		HashMap<String, Integer> valueCounts = new HashMap<String, Integer>();
 		for (OsmPrimitive osm : newSelection) {
 			if (osm.keys != null) {
-				for (Entry<Key, String> e : osm.keys.entrySet()) {
-					Collection<String> value = props.get(e.getKey().name);
+				for (Entry<String, String> e : osm.keys.entrySet()) {
+					Collection<String> value = props.get(e.getKey());
 					if (value == null) {
 						value = new TreeSet<String>();
-						props.put(e.getKey().name, value);
+						props.put(e.getKey(), value);
 					}
 					value.add(e.getValue());
-					
-					Integer count = valueCounts.get(e.getValue());
-					if (count == null)
-						count = 0;
-					valueCounts.put(e.getValue(), count+1);
 				}
 			}
 		}
-		int selCount = newSelection.size();
 		for (Entry<String, Collection<String>> e : props.entrySet()) {
 			JComboBox value = new JComboBox(e.getValue().toArray());
 			value.setEditable(true);
-			if (e.getValue().size() > 1 || valueCounts.get(e.getValue().iterator().next()) != selCount)
-				value.getEditor().setItem("<different>");
+			value.getEditor().setItem(e.getValue().size() > 1 ? "<different>" : e.getValue().iterator().next());
 			data.addRow(new Object[]{e.getKey(), value});
 		}
Index: /src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 64)
@@ -23,5 +23,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SelectionChangedListener;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.ImageProvider;
@@ -95,5 +94,5 @@
 				for (OsmPrimitive osm : Main.main.ds.allNonDeletedPrimitives()) {
 					if (osm.keys != null) {
-						for (Entry<Key, String> ent : osm.keys.entrySet()) {
+						for (Entry<String, String> ent : osm.keys.entrySet()) {
 							if (match(lastSearch, ent.getKey(), ent.getValue())) {
 								osm.setSelected(true);
@@ -106,9 +105,9 @@
 				Main.main.getMapFrame().repaint();
 			}
-			private boolean match(String search, Key key, String value) {
+			private boolean match(String search, String key, String value) {
 				int colon = search.indexOf(':');
 				if (colon == -1)
-					return key.name.indexOf(search) != -1 || value.indexOf(search) != -1;
-				return key.name.equals(search.substring(0, colon)) && value.indexOf(search.substring(colon+1)) != -1;
+					return key.indexOf(search) != -1 || value.indexOf(search) != -1;
+				return key.equals(search.substring(0, colon)) && value.indexOf(search.substring(colon+1)) != -1;
 			}
 		});
Index: /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 64)
@@ -20,5 +20,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.BoundingVisitor;
 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
@@ -113,5 +113,5 @@
 			if (!osm.isDeleted())
 				osm.visit(visitor);
-		for (OsmPrimitive osm : data.tracks)
+		for (OsmPrimitive osm : data.waies)
 			if (!osm.isDeleted())
 				osm.visit(visitor);
@@ -128,5 +128,5 @@
 		return undeletedSize(data.nodes)+" nodes, "+
 			undeletedSize(data.lineSegments)+" segments, "+
-			undeletedSize(data.tracks)+" streets.";
+			undeletedSize(data.waies)+" streets.";
 	}
 
@@ -238,5 +238,5 @@
 			for (Iterator<LineSegment> it = data.lineSegments.iterator(); it.hasNext();)
 				cleanIterator(it, processedSet);
-			for (Iterator<Track> it = data.tracks.iterator(); it.hasNext();)
+			for (Iterator<Way> it = data.waies.iterator(); it.hasNext();)
 				cleanIterator(it, processedSet);
 		}
Index: /src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java
===================================================================
--- /src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java	(revision 63)
+++ /src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java	(revision 64)
@@ -28,5 +28,5 @@
 
 	/**
-	 * A list of tracks which containing a list of points.
+	 * A list of waies which containing a list of points.
 	 */
 	private final Collection<Collection<GeoPoint>> data;
@@ -78,5 +78,5 @@
 	@Override
 	public String getToolTipText() {
-		return data.size()+" tracks.";
+		return data.size()+" waies.";
 	}
 
Index: /src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/GpxReader.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/GpxReader.java	(revision 64)
@@ -14,9 +14,8 @@
 import org.openstreetmap.josm.data.GeoPoint;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -99,5 +98,5 @@
 	private DataSet parseDataSet(Element e) {
 		DataSet data = new DataSet();
-		// read waypoints not contained in tracks or areas
+		// read waypoints not contained in waies or areas
 		for (Object o : e.getChildren("wpt", GPX)) {
 			Node node = parseWaypoint((Element)o);
@@ -105,7 +104,7 @@
 		}
 	
-		// read tracks (and line segments)
-		for (Object trackElement : e.getChildren("trk", GPX))
-			parseTrack((Element)trackElement, data);
+		// read waies (and line segments)
+		for (Object wayElement : e.getChildren("trk", GPX))
+			parseWay((Element)wayElement, data);
 
 		// reset new created ids to zero
@@ -118,13 +117,13 @@
 
 	/**
-	 * Parse and read a track from the element. Store it in the dataSet, as well
+	 * Parse and read a way from the element. Store it in the dataSet, as well
 	 * as all nodes in it.
 	 *
-	 * @param e		The element that contain the track.
+	 * @param e		The element that contain the way.
 	 * @param ds	The DataSet to store the data in.
 	 */
-	private void parseTrack(Element e, DataSet ds) {
-		Track track = new Track();
-		boolean realLineSegment = false; // is this track just a fake?
+	private void parseWay(Element e, DataSet ds) {
+		Way way = new Way();
+		boolean realLineSegment = false; // is this way just a fake?
 
 		for (Object o : e.getChildren()) {
@@ -141,21 +140,21 @@
 						parseKeyValueExtensions(lineSegment, child.getChild("extensions", GPX));
 						lineSegment = (LineSegment)getNewIfSeenBefore(lineSegment);
-						track.segments.add(lineSegment);
+						way.segments.add(lineSegment);
 						start = node;
 					}
 				}
 			} else if (child.getName().equals("extensions")) {
-				parseKeyValueExtensions(track, child);
+				parseKeyValueExtensions(way, child);
 				if (child.getChild("segment", JOSM) != null)
 					realLineSegment = true;
 			} else if (child.getName().equals("link"))
-				parseKeyValueLink(track, child);
+				parseKeyValueLink(way, child);
 			else
-				parseKeyValueTag(track, child);
-		}
-		track = (Track)getNewIfSeenBefore(track);
-		ds.lineSegments.addAll(track.segments);
+				parseKeyValueTag(way, child);
+		}
+		way = (Way)getNewIfSeenBefore(way);
+		ds.lineSegments.addAll(way.segments);
 		if (!realLineSegment)
-			ds.tracks.add(track);
+			ds.waies.add(way);
 	}
 
@@ -202,13 +201,12 @@
 			for (Object o : e.getChildren("property", OSM)) {
 				if (osm.keys == null)
-					osm.keys = new HashMap<Key, String>();
+					osm.keys = new HashMap<String, String>();
 				Element child = (Element)o;
 				String keyname = child.getAttributeValue("key");
 				if (keyname != null) {
-					Key key = Key.get(keyname);
 					String value = child.getAttributeValue("value");
 					if (value == null)
 						value = "";
-					osm.keys.put(key, value);
+					osm.keys.put(keyname, value);
 				}
 			}
@@ -235,9 +233,6 @@
 	 */
 	private void parseKeyValueTag(OsmPrimitive osm, Element e) {
-		if (e != null) {
-			if (osm.keys == null)
-				osm.keys = new HashMap<Key, String>();
-			osm.keys.put(Key.get(e.getName()), e.getValue());
-		}
+		if (e != null)
+			osm.put(e.getName(), e.getValue());
 	}
 
@@ -257,7 +252,7 @@
 		if (e != null) {
 			if (osm.keys == null)
-				osm.keys = new HashMap<Key, String>();
+				osm.keys = new HashMap<String, String>();
 			String link = e.getChildText("type") + ";" + e.getChildText("text");
-			osm.keys.put(Key.get("link"), link);
+			osm.keys.put("link", link);
 		}
 	}
Index: /src/org/openstreetmap/josm/io/GpxWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/GpxWriter.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/GpxWriter.java	(revision 64)
@@ -16,9 +16,8 @@
 import org.jdom.output.XMLOutputter;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 /**
@@ -27,5 +26,5 @@
  * <code>&lt;extensions&gt;</code> instead.
  * 
- * GPX-Track segments are stored as 2-node-pairs, so no &lt;trkseg&gt; with more
+ * GPX-Way segments are stored as 2-node-pairs, so no &lt;trkseg&gt; with more
  * or less than 2 &lt;trkpt&gt; are exported.
  * 
@@ -107,12 +106,12 @@
 		LinkedList<LineSegment> unrefLs = new LinkedList<LineSegment>(ds.lineSegments);
 
-		// tracks
-		for (Track t : ds.tracks) {
+		// waies
+		for (Way t : ds.waies) {
 			if (t.isDeleted() && t.id == 0)
 				continue;
 			Element tElem = new Element("trk", GPX);
-			HashMap<Key, String> keys = null;
+			HashMap<String, String> keys = null;
 			if (t.keys != null) {
-				keys = new HashMap<Key, String>(t.keys);
+				keys = new HashMap<String, String>(t.keys);
 				addAndRemovePropertyTag("name", tElem, keys);
 				addAndRemovePropertyTag("cmt", tElem, keys);
@@ -136,5 +135,5 @@
 		}
 		
-		// encode pending line segments as tracks
+		// encode pending line segments as waies
 		for (LineSegment ls : unrefLs) {
 			if (ls.isDeleted() && ls.id == 0)
@@ -198,7 +197,7 @@
 		e.setAttribute("lat", Double.toString(n.coor.lat));
 		e.setAttribute("lon", Double.toString(n.coor.lon));
-		HashMap<Key, String> keys = null;
+		HashMap<String, String> keys = null;
 		if (n.keys != null) {
-			keys = new HashMap<Key, String>(n.keys);
+			keys = new HashMap<String, String>(n.keys);
 			addAndRemovePropertyTag("ele", e, keys);
 			addAndRemovePropertyTag("time", e, keys);
@@ -234,7 +233,6 @@
 	 */
 	@SuppressWarnings("unchecked")
-	private void addAndRemovePropertyLinkTag(Element e, Map<Key, String> keys) {
-		Key key = Key.get("link");
-		String value = keys.get(key);
+	private void addAndRemovePropertyLinkTag(Element e, Map<String, String> keys) {
+		String value = keys.get("link");
 		if (value != null) {
 			StringTokenizer st = new StringTokenizer(value, ";");
@@ -245,5 +243,5 @@
 			link.getChildren().add(0,new Element("text", GPX).setText(st.nextToken()));
 			e.getChildren().add(link);
-			keys.remove(key);
+			keys.remove("link");
 		}
 	}
@@ -263,10 +261,9 @@
 	 */
 	@SuppressWarnings("unchecked")
-	private void addAndRemovePropertyTag(String name, Element e, Map<Key, String> keys) {
-		Key key = Key.get(name);
-		String value = keys.get(key);
+	private void addAndRemovePropertyTag(String name, Element e, Map<String, String> keys) {
+		String value = keys.get(name);
 		if (value != null) {
 			e.getChildren().add(new Element(name, GPX).setText(value));
-			keys.remove(key);
+			keys.remove(name);
 		}
 	}
@@ -278,10 +275,10 @@
 	 */
 	@SuppressWarnings("unchecked")
-	private void addPropertyExtensions(Element e, Map<Key, String> keys, OsmPrimitive osm) {
+	private void addPropertyExtensions(Element e, Map<String, String> keys, OsmPrimitive osm) {
 		LinkedList<Element> extensions = new LinkedList<Element>();
 		if (keys != null && !keys.isEmpty()) {
-			for (Entry<Key, String> prop : keys.entrySet()) {
+			for (Entry<String, String> prop : keys.entrySet()) {
 				Element propElement = new Element("property", OSM);
-				propElement.setAttribute("key", prop.getKey().name);
+				propElement.setAttribute("key", prop.getKey());
 				propElement.setAttribute("value", prop.getValue());
 				extensions.add(propElement);
Index: /src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmReader.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/OsmReader.java	(revision 64)
@@ -8,9 +8,8 @@
 import org.openstreetmap.josm.data.GeoPoint;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.AddVisitor;
 import org.xml.sax.Attributes;
@@ -91,15 +90,15 @@
 				lineSegments.put(current.id, (LineSegment)current);
 			} else if (qName.equals("way")) {
-				current = new Track();
+				current = new Way();
 				readCommon(atts);
 			} else if (qName.equals("seg")) {
-				if (current instanceof Track) {
+				if (current instanceof Way) {
 					LineSegment ls = lineSegments.get(getLong(atts, "id"));
 					if (ls == null)
 						fatalError(new SAXParseException("Line segment "+getLong(atts, "id")+"has not been transfered before.", null));
-					((Track)current).segments.add(ls);
+					((Way)current).segments.add(ls);
 				}
 			} else if (qName.equals("tag")) {
-				current.put(Key.get(atts.getValue("k")), atts.getValue("v"));
+				current.put(atts.getValue("k"), atts.getValue("v"));
 			}
 		} catch (NumberFormatException x) {
Index: /src/org/openstreetmap/josm/io/OsmReaderOld.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmReaderOld.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/OsmReaderOld.java	(revision 64)
@@ -12,9 +12,8 @@
 import org.openstreetmap.josm.data.GeoPoint;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.AddVisitor;
 
@@ -84,6 +83,6 @@
 		else if (e.getName().equals("segment"))
 			return parseLineSegment(e, data);
-		else if (e.getName().equals("track"))
-			return parseTrack(e, data);
+		else if (e.getName().equals("way"))
+			return parseWay(e, data);
 		else if (e.getName().equals("property")) {
 			parseProperty(e, data);
@@ -144,21 +143,21 @@
 
 	/**
-	 * Parse and read a track from the element.
+	 * Parse and read a way from the element.
 	 *
-	 * @param e		The element that contain the track.
+	 * @param e		The element that contain the way.
 	 * @param data	The DataSet to get segment information from.
-	 * @return 		The parsed track.
+	 * @return 		The parsed way.
 	 * @throws JDOMException In case of a parsing error.
 	 */
-	private Track parseTrack(Element e, DataSet data) throws JDOMException {
-		Track track = new Track();
-		parseCommon(track, e);
+	private Way parseWay(Element e, DataSet data) throws JDOMException {
+		Way way = new Way();
+		parseCommon(way, e);
 		for (Object o : e.getChildren("segment")) {
 			Element child = (Element)o;
 			long id = Long.parseLong(child.getAttributeValue("uid"));
 			LineSegment ls = findLineSegment(data.lineSegments, id);
-			track.segments.add(ls);
-		}
-		return track;
+			way.segments.add(ls);
+		}
+		return way;
 	}
 	
@@ -176,5 +175,5 @@
 		String propStr = e.getAttributeValue("tags");
 		if (propStr != null && !propStr.equals("")) {
-			data.keys = new HashMap<Key, String>();
+			data.keys = new HashMap<String, String>();
 			StringTokenizer st = new StringTokenizer(propStr, ";");
 			while (st.hasMoreTokens()) {
@@ -184,8 +183,8 @@
 				int equalPos = next.indexOf('=');
 				if (equalPos == -1)
-					data.keys.put(Key.get(next), "");
+					data.keys.put(next, "");
 				else {
 					String keyStr = next.substring(0, equalPos);
-					data.keys.put(Key.get(keyStr), next.substring(equalPos+1));
+					data.keys.put(keyStr, next.substring(equalPos+1));
 				}
 			}
@@ -209,9 +208,9 @@
 		long id = Long.parseLong(e.getAttributeValue("uid"));
 		OsmPrimitive osm = findObject(data, id);
-		Key key = Key.get(e.getAttributeValue("key"));
+		String key = e.getAttributeValue("key");
 		String value = e.getAttributeValue("value");
 		if (value != null) {
 			if (osm.keys == null)
-				osm.keys = new HashMap<Key, String>();
+				osm.keys = new HashMap<String, String>();
 			osm.keys.put(key, value);
 		}
@@ -228,5 +227,5 @@
 			if (osm.id == id)
 				return osm;
-		for (OsmPrimitive osm : data.tracks)
+		for (OsmPrimitive osm : data.waies)
 			if (osm.id == id)
 				return osm;
Index: /src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 64)
@@ -42,11 +42,11 @@
 
 	/**
-	 * Retrieve raw gps trackpoints from the server API.
+	 * Retrieve raw gps waypoints from the server API.
 	 * @return A list of all primitives retrieved. Currently, the list of lists
 	 * 		contain only one list, since the server cannot distinguish between
-	 * 		tracks.
+	 * 		waies.
 	 */
 	public Collection<Collection<GeoPoint>> parseRawGps() throws IOException, JDOMException {
-		String url = Main.pref.osmDataServer+"/0.3/trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
+		String url = Main.pref.osmDataServer+"/0.3/waypoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
 		Collection<Collection<GeoPoint>> data = new LinkedList<Collection<GeoPoint>>();
 		Collection<GeoPoint> list = new LinkedList<GeoPoint>();
@@ -57,7 +57,7 @@
 				break;
 			RawGpsReader gpsReader = new RawGpsReader(r);
-			Collection<Collection<GeoPoint>> allTracks = gpsReader.parse();
+			Collection<Collection<GeoPoint>> allWays = gpsReader.parse();
 			boolean foundSomething = false;
-			for (Collection<GeoPoint> t : allTracks) {
+			for (Collection<GeoPoint> t : allWays) {
 				if (!t.isEmpty()) {
 					foundSomething = true;
Index: /src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 64)
@@ -17,9 +17,8 @@
 import org.jdom.JDOMException;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
 
@@ -96,5 +95,5 @@
 	 * Upload a whole way with the complete line segment id list.
 	 */
-	public void visit(Track w) {
+	public void visit(Way w) {
 		if (w.id == 0 && !w.isDeleted()) {
 			setCredits(w);
@@ -115,12 +114,8 @@
 	private void setCredits(OsmPrimitive osm) {
 		if (osm.keys == null)
-			osm.keys = new HashMap<Key, String>();
-		osm.keys.put(Key.get("created_by"), "JOSM");
+			osm.keys = new HashMap<String, String>();
+		osm.keys.put("created_by", "JOSM");
 	}
 
-
-	public void visit(Key k) {
-		// not implemented in server
-	}
 
 	/**
Index: /src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmWriter.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/OsmWriter.java	(revision 64)
@@ -7,9 +7,8 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.xml.sax.SAXException;
@@ -73,5 +72,5 @@
 		for (LineSegment ls : ds.lineSegments)
 			writer.visit(ls);
-		for (Track w : ds.tracks)
+		for (Way w : ds.waies)
 			writer.visit(w);
 		writer.out.println("</osm>");
@@ -110,5 +109,5 @@
 	}
 
-	public void visit(Track w) {
+	public void visit(Way w) {
 		addCommon(w, "way");
 		out.println(">");
@@ -116,7 +115,4 @@
 			out.println("    <seg id='"+getUsedId(ls)+"' />");
 		addTags(w, "way", false);
-	}
-
-	public void visit(Key k) {
 	}
 
@@ -138,6 +134,6 @@
 			if (tagOpen)
 				out.println(">");
-			for (Entry<Key, String> e : osm.keys.entrySet())
-				out.println("    <tag k='"+ encode(e.getKey().name) +
+			for (Entry<String, String> e : osm.keys.entrySet())
+				out.println("    <tag k='"+ encode(e.getKey()) +
 						"' v='"+encode(e.getValue())+ "' />");
 			out.println("  </" + tagname + ">");
Index: /src/org/openstreetmap/josm/io/RawGpsReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 63)
+++ /src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 64)
@@ -14,5 +14,5 @@
 
 /**
- * Read raw gps data from a gpx file. Only track points with their tracks segments
+ * Read raw gps data from a gpx file. Only way points with their waies segments
  * and waypoints are imported.
  * @author imi
@@ -96,5 +96,5 @@
 
 	/**
-	 * Parse the list of trackpoint - elements and return a collection with the
+	 * Parse the list of waypoint - elements and return a collection with the
 	 * points read.
 	 */
Index: /test/org/openstreetmap/josm/test/GpxWriterTest.java
===================================================================
--- /test/org/openstreetmap/josm/test/GpxWriterTest.java	(revision 63)
+++ /test/org/openstreetmap/josm/test/GpxWriterTest.java	(revision 64)
@@ -31,7 +31,7 @@
 	@Bug(47)
 	public void testDeleteNewDoesReallyRemove() throws JDOMException, IOException {
-		ds.tracks.iterator().next().setDeleted(true);
+		ds.waies.iterator().next().setDeleted(true);
 		root = reparse();
-		assertEquals("track has vanished and 3 trk (segments) left", 3, root.getChildren("trk", GPX).size());
+		assertEquals("way has vanished and 3 trk (segments) left", 3, root.getChildren("trk", GPX).size());
 	}
 
@@ -44,5 +44,5 @@
 	public void testNewCreateAddIdWhenMoreThanOnce() {
 		// the trk with the two trkseg's only occoure once -> no extension id
-		Element realTrack = null;
+		Element realWay = null;
 		for (Object o : root.getChildren("trk", GPX)) {
 			Element e = (Element)o;
@@ -51,15 +51,15 @@
 			Element ext = e.getChild("extensions", GPX);
 			if (ext != null)
-				assertEquals("no id for track (used only once)", 0, ext.getChildren("uid", JOSM).size());
-			realTrack = e;
+				assertEquals("no id for way (used only once)", 0, ext.getChildren("uid", JOSM).size());
+			realWay = e;
 		}
-		assertNotNull("track not found in GPX file", realTrack);
+		assertNotNull("way not found in GPX file", realWay);
 		
-		// the second point of the first segment of the tracks has an id
-		Element trkseg = (Element)realTrack.getChildren("trkseg", GPX).get(0);
+		// the second point of the first segment of the waies has an id
+		Element trkseg = (Element)realWay.getChildren("trkseg", GPX).get(0);
 		Element trkpt = (Element)trkseg.getChildren("trkpt", GPX).get(1);
-		assertEquals("trackpoint used twice but has no extensions at all", 1, trkpt.getChildren("extensions", GPX).size());
+		assertEquals("waypoint used twice but has no extensions at all", 1, trkpt.getChildren("extensions", GPX).size());
 		Element ext = trkpt.getChild("extensions", GPX);
-		assertEquals("trackpoint used twice but has no id", 1, ext.getChildren("uid", JOSM).size());
+		assertEquals("waypoint used twice but has no id", 1, ext.getChildren("uid", JOSM).size());
 	}
 
Index: /test/org/openstreetmap/josm/test/OsmWriterTest.java
===================================================================
--- /test/org/openstreetmap/josm/test/OsmWriterTest.java	(revision 63)
+++ /test/org/openstreetmap/josm/test/OsmWriterTest.java	(revision 64)
@@ -15,9 +15,8 @@
 import org.jdom.input.SAXBuilder;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Key;
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.io.OsmWriter;
 import org.openstreetmap.josm.test.framework.Bug;
@@ -38,5 +37,5 @@
 	private LineSegment ls2;
 	private LineSegment ls3;
-	private Track w;
+	private Way w;
 	
 	private DataSet ds;
@@ -64,5 +63,5 @@
 			sb.append((char)i);
 		String s = sb.toString();
-		n1.put(Key.get(s), s);
+		n1.put(s, s);
 		reparse();
 		assertEquals(1, nodes.get(0).getChildren().size());
@@ -76,5 +75,5 @@
 		ds = new DataSet();
 		LineSegment ls = DataSetTestCaseHelper.createLineSegment(ds, DataSetTestCaseHelper.createNode(ds), DataSetTestCaseHelper.createNode(ds));
-		ls.put(Key.get("foo"), "bar");
+		ls.put("foo", "bar");
 		reparse();
 		assertEquals(1, lineSegments.size());
@@ -126,5 +125,5 @@
 	@Bug(47)
 	public void testDeleteNewDoesReallyRemove() throws Exception {
-		ds.tracks.iterator().next().setDeleted(true);
+		ds.waies.iterator().next().setDeleted(true);
 		reparse();
 		//assertEquals(0, deleted.size());
Index: /test/org/openstreetmap/josm/test/framework/DataSetTestCaseHelper.java
===================================================================
--- /test/org/openstreetmap/josm/test/framework/DataSetTestCaseHelper.java	(revision 63)
+++ /test/org/openstreetmap/josm/test/framework/DataSetTestCaseHelper.java	(revision 64)
@@ -7,5 +7,5 @@
 import org.openstreetmap.josm.data.osm.LineSegment;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Track;
+import org.openstreetmap.josm.data.osm.Way;
 
 
@@ -23,5 +23,5 @@
 	 * - ls between node 1 and 2
 	 * - ls between node 3 and 4
-	 * - a track with ls 0 and 1
+	 * - a way with ls 0 and 1
 	 */
 	public static DataSet createCommon() {
@@ -39,8 +39,8 @@
 	}
 
-	public static Track createWay(DataSet ds, LineSegment... lineSegments) {
-		Track t = new Track();
+	public static Way createWay(DataSet ds, LineSegment... lineSegments) {
+		Way t = new Way();
 		t.segments.addAll(Arrays.asList(lineSegments));
-		ds.tracks.add(t);
+		ds.waies.add(t);
 		return t;
 	}
