Index: /src/org/openstreetmap/josm/Main.java
===================================================================
--- /src/org/openstreetmap/josm/Main.java	(revision 43)
+++ /src/org/openstreetmap/josm/Main.java	(revision 44)
@@ -56,8 +56,4 @@
 	 */
 	private Container panel;
-	/**
-	 * The name of the current loaded mapFrame
-	 */
-	private String name;
 	/**
 	 * The mapFrame currently loaded.
@@ -182,7 +178,6 @@
 	 * aborts, nothing happens. 
 	 */
-	public void setMapFrame(String name, MapFrame mapFrame) {
+	public void setMapFrame(MapFrame mapFrame) {
 		//TODO: Check for changes and ask user
-		this.name = name;
 		if (this.mapFrame != null)
 			this.mapFrame.setVisible(false);
@@ -197,10 +192,4 @@
 	}
 	/**
-	 * @return Returns the name.
-	 */
-	public String getNameOfLoadedMapFrame() {
-		return name;
-	}
-	/**
 	 * @return Returns the mapFrame.
 	 */
Index: /src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 43)
+++ /src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 44)
@@ -175,19 +175,21 @@
 					Layer layer = null;
 					if (rawGps.isSelected()) {
-						layer = new RawGpsDataLayer(osmReader.parseRawGps(),
-								name);
+						layer = new RawGpsDataLayer(osmReader.parseRawGps(), name);
 					} else {
 						DataSet dataSet = osmReader.parseOsm();
 						if (dataSet == null)
 							return; // user cancelled download
-						if (dataSet.nodes.isEmpty())
+						if (dataSet.nodes.isEmpty()) {
+							pleaseWaitDlg.setVisible(false);
+							pleaseWaitDlg.dispose();
 							JOptionPane.showMessageDialog(Main.main,
 									"No data imported.");
-
-						layer = new OsmDataLayer(dataSet, name);
+						}
+
+						layer = new OsmDataLayer(dataSet, "Data Layer");
 					}
 
 					if (Main.main.getMapFrame() == null)
-						Main.main.setMapFrame(name, new MapFrame(layer));
+						Main.main.setMapFrame(new MapFrame(layer));
 					else
 						Main.main.getMapFrame().mapView.addLayer(layer);
@@ -195,8 +197,10 @@
 				} catch (JDOMException x) {
 					pleaseWaitDlg.setVisible(false);
+					pleaseWaitDlg.dispose();
 					x.printStackTrace();
 					JOptionPane.showMessageDialog(Main.main, x.getMessage());
 				} catch (FileNotFoundException x) {
 					pleaseWaitDlg.setVisible(false);
+					pleaseWaitDlg.dispose();
 					x.printStackTrace();
 					JOptionPane.showMessageDialog(Main.main,
@@ -204,8 +208,12 @@
 				} catch (IOException x) {
 					pleaseWaitDlg.setVisible(false);
+					pleaseWaitDlg.dispose();
 					x.printStackTrace();
 					JOptionPane.showMessageDialog(Main.main, x.getMessage());
 				} finally {
-					pleaseWaitDlg.setVisible(false);
+					if (pleaseWaitDlg.isVisible()) {
+						pleaseWaitDlg.setVisible(false);
+						pleaseWaitDlg.dispose();
+					}
 				}
 			}
Index: /src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/JosmAction.java	(revision 43)
+++ /src/org/openstreetmap/josm/actions/JosmAction.java	(revision 44)
@@ -47,8 +47,7 @@
 		pleaseWaitDlg.getContentPane().add(l);
 		pleaseWaitDlg.pack();
-		pleaseWaitDlg.setLocation(Main.main.getWidth()/2-pleaseWaitDlg.getWidth()/2,
-				Main.main.getHeight()/2-pleaseWaitDlg.getHeight()/2);
+		pleaseWaitDlg.setLocation(Main.main.getX()+Main.main.getWidth()/2-pleaseWaitDlg.getWidth()/2,
+				Main.main.getY()+Main.main.getHeight()/2-pleaseWaitDlg.getHeight()/2);
 		pleaseWaitDlg.setResizable(false);
-		pleaseWaitDlg.setAlwaysOnTop(true);
 		return pleaseWaitDlg;
 	}
Index: /src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/OpenAction.java	(revision 43)
+++ /src/org/openstreetmap/josm/actions/OpenAction.java	(revision 44)
@@ -82,9 +82,9 @@
 					return;
 				}
-				layer = new OsmDataLayer(dataSet, filename.getName());
+				layer = new OsmDataLayer(dataSet, "Data Layer");
 			}
 			
 			if (Main.main.getMapFrame() == null)
-				Main.main.setMapFrame(filename.getName(), new MapFrame(layer));
+				Main.main.setMapFrame(new MapFrame(layer));
 			else
 				Main.main.getMapFrame().mapView.addLayer(layer);
Index: /src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/UploadAction.java	(revision 43)
+++ /src/org/openstreetmap/josm/actions/UploadAction.java	(revision 44)
@@ -83,8 +83,12 @@
 				} catch (JDOMException x) {
 					dlg.setVisible(false);
+					dlg.dispose();
 					x.printStackTrace();
 					JOptionPane.showMessageDialog(Main.main, x.getMessage());
 				} finally {
-					dlg.setVisible(false);
+					if (dlg.isVisible()) {
+						dlg.setVisible(false);
+						dlg.dispose();
+					}
 				}
 			}
Index: /src/org/openstreetmap/josm/gui/BugReportExceptionHandler.java
===================================================================
--- /src/org/openstreetmap/josm/gui/BugReportExceptionHandler.java	(revision 43)
+++ /src/org/openstreetmap/josm/gui/BugReportExceptionHandler.java	(revision 44)
@@ -27,4 +27,5 @@
 public final class BugReportExceptionHandler implements Thread.UncaughtExceptionHandler {
 	public void uncaughtException(Thread t, Throwable e) {
+		e.printStackTrace();
 		if (Main.main == null)
 			e.printStackTrace();
Index: /src/org/openstreetmap/josm/gui/dialogs/LayerList.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/LayerList.java	(revision 43)
+++ /src/org/openstreetmap/josm/gui/dialogs/LayerList.java	(revision 44)
@@ -153,5 +153,5 @@
 			public void actionPerformed(ActionEvent e) {
 				if (model.size() == 1) {
-					Main.main.setMapFrame(null, null);
+					Main.main.setMapFrame(null);
 					Main.main.ds = new DataSet();
 				} else {
Index: /src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/GpxReader.java	(revision 43)
+++ /src/org/openstreetmap/josm/io/GpxReader.java	(revision 44)
@@ -66,6 +66,6 @@
 		Node data = new Node();
 		data.coor = new GeoPoint(
-			Float.parseFloat(e.getAttributeValue("lat")),
-			Float.parseFloat(e.getAttributeValue("lon")));
+			Double.parseDouble(e.getAttributeValue("lat")),
+			Double.parseDouble(e.getAttributeValue("lon")));
 		
 		for (Object o : e.getChildren()) {
@@ -190,4 +190,5 @@
 				osm.id = Long.parseLong(idElement.getText());
 			osm.modified = e.getChild("modified", JOSM) != null;
+			osm.setDeleted(e.getChild("deleted", JOSM) != null);
 			osm.modifiedProperties = e.getChild("modifiedProperties", JOSM) != null;
 		}
Index: /src/org/openstreetmap/josm/io/GpxWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/GpxWriter.java	(revision 43)
+++ /src/org/openstreetmap/josm/io/GpxWriter.java	(revision 44)
@@ -242,5 +242,5 @@
 	@SuppressWarnings("unchecked")
 	private void addPropertyExtensions(Element e, Map<Key, String> keys, OsmPrimitive osm) {
-		if ((keys == null || keys.isEmpty()) && osm.id == 0 && !osm.modified && !osm.modifiedProperties)
+		if ((keys == null || keys.isEmpty()) && osm.id == 0 && !osm.modified && !osm.isDeleted() && !osm.modifiedProperties)
 			return;
 		Element extensions = e.getChild("extensions", GPX);
@@ -264,4 +264,8 @@
 			extensions.getChildren().add(modElement);
 		}
+		if (osm.isDeleted()) {
+			Element modElement = new Element("deleted", JOSM);
+			extensions.getChildren().add(modElement);
+		}
 		if (osm.modifiedProperties) {
 			Element modElement = new Element("modifiedProperties", JOSM);
Index: /src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmReader.java	(revision 43)
+++ /src/org/openstreetmap/josm/io/OsmReader.java	(revision 44)
@@ -66,6 +66,6 @@
 		Node data = new Node();
 		data.coor = new GeoPoint(
-			Float.parseFloat(e.getAttributeValue("lat")),
-			Float.parseFloat(e.getAttributeValue("lon")));
+			Double.parseDouble(e.getAttributeValue("lat")),
+			Double.parseDouble(e.getAttributeValue("lon")));
 		if (Double.isNaN(data.coor.lat) || 
 				data.coor.lat < -90 || data.coor.lat > 90 ||
Index: /src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- /src/org/openstreetmap/josm/io/OsmWriter.java	(revision 43)
+++ /src/org/openstreetmap/josm/io/OsmWriter.java	(revision 44)
@@ -102,7 +102,8 @@
 	 */
 	private void addProperties(Element e, OsmPrimitive osm) {
-		if (osm.id == 0)
-			osm.id = newIdCounter--;
-		e.setAttribute("uid", ""+osm.id);
+		long id = osm.id;
+		if (id == 0)
+			id = newIdCounter--;
+		e.setAttribute("uid", ""+id);
 		if (osm.keys != null)
 			for (Entry<Key, String> entry : osm.keys.entrySet())
@@ -135,8 +136,8 @@
 	@SuppressWarnings("unchecked")
 	public void visit(Track t) {
-		Element e = new Element("track");
-		addProperties(e, t);
+		element = new Element("track");
+		addProperties(element, t);
 		for (LineSegment ls : t.segments)
-			e.getChildren().add(new Element("segment").setAttribute("uid", ""+ls.id));
+			element.getChildren().add(new Element("segment").setAttribute("uid", ""+ls.id));
 	}
 
Index: /src/org/openstreetmap/josm/io/RawGpsReader.java
===================================================================
--- /src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 43)
+++ /src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 44)
@@ -63,5 +63,5 @@
 		for (Object o : root.getChildren("wpt", GPX)) {
 			Collection<GeoPoint> line = new LinkedList<GeoPoint>();
-			line.add(new GeoPoint(parseFloat((Element)o, LatLon.lat), parseFloat((Element)o, LatLon.lon)));
+			line.add(new GeoPoint(parseDouble((Element)o, LatLon.lat), parseDouble((Element)o, LatLon.lon)));
 			data.add(line);
 		}
@@ -88,9 +88,9 @@
 	 * @throws JDOMException If the absolute of the value is out of bound.
 	 */
-	private float parseFloat(Element e, LatLon attr) throws JDOMException {
-		float f = Float.parseFloat(e.getAttributeValue(attr.toString()));
-		if (Math.abs(f) > (attr == LatLon.lat ? 90 : 180))
-			throw new JDOMException("Data error: "+attr+" value '"+f+"' is out of bound.");
-		return f;
+	private double parseDouble(Element e, LatLon attr) throws JDOMException {
+		double d = Double.parseDouble(e.getAttributeValue(attr.toString()));
+		if (Math.abs(d) > (attr == LatLon.lat ? 90 : 180))
+			throw new JDOMException("Data error: "+attr+" value '"+d+"' is out of bound.");
+		return d;
 	}
 
@@ -102,5 +102,5 @@
 		Collection<GeoPoint> data = new LinkedList<GeoPoint>();
 		for (Element e : wpt)
-			data.add(new GeoPoint(parseFloat(e, LatLon.lat), parseFloat(e, LatLon.lon)));
+			data.add(new GeoPoint(parseDouble(e, LatLon.lat), parseDouble(e, LatLon.lon)));
 		return data;
 	}
