Index: trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 7575)
@@ -14,5 +14,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTaskList;
-import org.openstreetmap.josm.data.osm.DataSource;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.io.OnlineResource;
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 7575)
@@ -106,5 +106,6 @@
         }
 
-        @Override public void realRun() throws IOException, SAXException, OsmTransferException {
+        @Override
+        public void realRun() throws IOException, SAXException, OsmTransferException {
             try {
                 if (isCanceled())
@@ -123,5 +124,6 @@
         }
 
-        @Override protected void finish() {
+        @Override
+        protected void finish() {
             if (isCanceled() || isFailed())
                 return;
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 7575)
@@ -14,7 +14,7 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
Index: trunk/src/org/openstreetmap/josm/data/Data.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Data.java	(revision 7575)
+++ trunk/src/org/openstreetmap/josm/data/Data.java	(revision 7575)
@@ -0,0 +1,39 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data;
+
+import java.awt.geom.Area;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Generic data, holding data downloaded from various data sources.
+ * @since 7575
+ */
+public interface Data {
+
+    /**
+     * Returns the collection of data sources.
+     * @return the collection of data sources.
+     */
+    public Collection<DataSource> getDataSources();
+
+    /**
+     * Returns the total area of downloaded data (the "yellow rectangles").
+     * @return Area object encompassing downloaded data.
+     */
+    public Area getDataSourceArea();
+
+    /**
+     * <p>Replies the list of data source bounds.</p>
+     *
+     * <p>Dataset maintains a list of data sources which have been merged into the
+     * data set. Each of these sources can optionally declare a bounding box of the
+     * data it supplied to the dataset.</p>
+     *
+     * <p>This method replies the list of defined (non {@code null}) bounding boxes.</p>
+     *
+     * @return the list of data source bounds. An empty list, if no non-null data source
+     * bounds are defined.
+     */
+    public List<Bounds> getDataSourceBounds();
+}
Index: trunk/src/org/openstreetmap/josm/data/DataSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/DataSource.java	(revision 7575)
+++ trunk/src/org/openstreetmap/josm/data/DataSource.java	(revision 7575)
@@ -0,0 +1,120 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data;
+
+import java.awt.geom.Area;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * A data source, defined by bounds and textual description for the origin.
+ * @since 247 (creation)
+ * @since 7575 (moved package)
+ */
+public class DataSource {
+
+    /**
+     * The bounds of this data source
+     */
+    public final Bounds bounds;
+
+    /**
+     * The textual description of the origin (example: "OpenStreetMap Server")
+     */
+    public final String origin;
+
+    /**
+     * Constructs a new {@code DataSource}.
+     * @param bounds The bounds of this data source
+     * @param origin The textual description of the origin (example: "OpenStreetMap Server")
+     * @throws IllegalArgumentException if bounds is {@code null}
+     */
+    public DataSource(Bounds bounds, String origin) {
+        CheckParameterUtil.ensureParameterNotNull(bounds, "bounds");
+        this.bounds = bounds;
+        this.origin = origin;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((bounds == null) ? 0 : bounds.hashCode());
+        result = prime * result + ((origin == null) ? 0 : origin.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        DataSource other = (DataSource) obj;
+        if (bounds == null) {
+            if (other.bounds != null)
+                return false;
+        } else if (!bounds.equals(other.bounds))
+            return false;
+        if (origin == null) {
+            if (other.origin != null)
+                return false;
+        } else if (!origin.equals(other.origin))
+            return false;
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "DataSource [bounds=" + bounds + ", origin=" + origin + "]";
+    }
+
+    /**
+     * Returns the total area of downloaded data (the "yellow rectangles").
+     * @param dataSources list of data sources
+     * @return Area object encompassing downloaded data.
+     * @see Data#getDataSourceArea()
+     */
+    public static Area getDataSourceArea(Collection<DataSource> dataSources) {
+        if (dataSources == null || dataSources.isEmpty()) {
+            return null;
+        }
+        Area a = new Area();
+        for (DataSource source : dataSources) {
+            // create area from data bounds
+            a.add(new Area(source.bounds.asRect()));
+        }
+        return a;
+    }
+
+    /**
+     * <p>Replies the list of data source bounds.</p>
+     *
+     * <p>Dataset maintains a list of data sources which have been merged into the
+     * data set. Each of these sources can optionally declare a bounding box of the
+     * data it supplied to the dataset.</p>
+     *
+     * <p>This method replies the list of defined (non {@code null}) bounding boxes.</p>
+     * @param dataSources list of data sources
+     *
+     * @return the list of data source bounds. An empty list, if no non-null data source
+     * bounds are defined.
+     * @see Data#getDataSourceBounds()
+     */
+    public static List<Bounds> getDataSourceBounds(Collection<DataSource> dataSources) {
+        if (dataSources == null) {
+            return null;
+        }
+        List<Bounds> ret = new ArrayList<>(dataSources.size());
+        for (DataSource ds : dataSources) {
+            if (ds.bounds != null) {
+                ret.add(ds.bounds);
+            }
+        }
+        return ret;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 7575)
@@ -39,4 +39,5 @@
     public static final String META_NAME = META_PREFIX + "name";
     public static final String META_TIME = META_PREFIX + "time";
+    public static final String META_BOUNDS = META_PREFIX + "bounds";
     public static final String META_EXTENSIONS = META_PREFIX + "extensions";
 
Index: trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 7575)
@@ -2,13 +2,19 @@
 package org.openstreetmap.josm.data.gpx;
 
+import java.awt.geom.Area;
 import java.io.File;
 import java.util.Collection;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.Data;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.EastNorth;
 
@@ -20,5 +26,5 @@
  * @author Raphael Mack &lt;ramack@raphael-mack.de&gt;
  */
-public class GpxData extends WithAttributes {
+public class GpxData extends WithAttributes implements Data {
 
     public File storageFile;
@@ -30,4 +36,12 @@
     public final Collection<GpxRoute> routes = new LinkedList<>();
     public final Collection<WayPoint> waypoints = new LinkedList<>();
+
+    /**
+     * All data sources (bounds of downloaded bounds) of this GpxData.<br>
+     * Not part of GPX standard but rather a JOSM extension, needed by the fact that
+     * OSM API does not provide {@code <bounds>} element in its GPX reply.
+     * @since 7575
+     */
+    public final Set<DataSource> dataSources = new HashSet<>();
 
     public void mergeFrom(GpxData other) {
@@ -52,6 +66,11 @@
         routes.addAll(other.routes);
         waypoints.addAll(other.waypoints);
-    }
-
+        dataSources.addAll(other.dataSources);
+    }
+
+    /**
+     * Determines if this GPX data has one or more track points
+     * @return {@code true} if this GPX data has track points, {@code false} otherwise
+     */
     public boolean hasTrackPoints() {
         for (GpxTrack trk : tracks) {
@@ -64,4 +83,8 @@
     }
 
+    /**
+     * Determines if this GPX data has one or more route points
+     * @return {@code true} if this GPX data has route points, {@code false} otherwise
+     */
     public boolean hasRoutePoints() {
         for (GpxRoute rte : routes) {
@@ -72,4 +95,8 @@
     }
 
+    /**
+     * Determines if this GPX data is empty (i.e. does not contain any point)
+     * @return {@code true} if this GPX data is empty, {@code false} otherwise
+     */
     public boolean isEmpty() {
         return !hasRoutePoints() && !hasTrackPoints() && waypoints.isEmpty();
@@ -77,10 +104,32 @@
 
     /**
-     * calculates the bounding box of available data and returns it.
+     * Returns the bounds defining the extend of this data, as read in metadata, if any.
+     * If no bounds is defined in metadata, {@code null} is returned. There is no guarantee
+     * that data entirely fit in this bounds, as it is not recalculated. To get recalculated bounds,
+     * see {@link #recalculateBounds()}. To get downloaded areas, see {@link #dataSources}.
+     * @return the bounds defining the extend of this data, or {@code null}.
+     * @see #recalculateBounds()
+     * @see #dataSources
+     * @since 7575
+     */
+    public Bounds getMetaBounds() {
+        Object value = get(META_BOUNDS);
+        if (value instanceof Bounds) {
+            return (Bounds) value;
+        }
+        return null;
+    }
+
+    /**
+     * Calculates the bounding box of available data and returns it.
      * The bounds are not stored internally, but recalculated every time
-     * this function is called.
+     * this function is called.<br>
+     * To get bounds as read from metadata, see {@link #getMetaBounds()}.<br>
+     * To get downloaded areas, see {@link #dataSources}.<br>
      *
      * FIXME might perhaps use visitor pattern?
      * @return the bounds
+     * @see #getMetaBounds()
+     * @see #dataSources
      */
     public Bounds recalculateBounds() {
@@ -119,5 +168,5 @@
      * @return the length in meters
      */
-    public double length(){
+    public double length() {
         double result = 0.0; // in meters
 
@@ -402,3 +451,17 @@
     }
 
+    @Override
+    public Collection<DataSource> getDataSources() {
+        return dataSources;
+    }
+
+    @Override
+    public Area getDataSourceArea() {
+        return DataSource.getDataSourceArea(dataSources);
+    }
+
+    @Override
+    public List<Bounds> getDataSourceBounds() {
+        return DataSource.getDataSourceBounds(dataSources);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 7575)
@@ -24,4 +24,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.Data;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -90,5 +92,5 @@
  * @author imi
  */
-public final class DataSet implements Cloneable, ProjectionChangeListener {
+public final class DataSet implements Data, Cloneable, ProjectionChangeListener {
 
     /**
@@ -916,16 +918,12 @@
     }
 
-    /**
-     * Returns the total area of downloaded data (the "yellow rectangles").
-     * @return Area object encompassing downloaded data.
-     */
+    @Override
+    public Collection<DataSource> getDataSources() {
+        return dataSources;
+    }
+
+    @Override
     public Area getDataSourceArea() {
-        if (dataSources.isEmpty()) return null;
-        Area a = new Area();
-        for (DataSource source : dataSources) {
-            // create area from data bounds
-            a.add(new Area(source.bounds.asRect()));
-        }
-        return a;
+        return DataSource.getDataSourceArea(dataSources);
     }
 
@@ -1317,24 +1315,7 @@
     }
 
-    /**
-     * <p>Replies the list of data source bounds.</p>
-     *
-     * <p>Dataset maintains a list of data sources which have been merged into the
-     * data set. Each of these sources can optionally declare a bounding box of the
-     * data it supplied to the dataset.</p>
-     *
-     * <p>This method replies the list of defined (non {@code null}) bounding boxes.</p>
-     *
-     * @return the list of data source bounds. An empty list, if no non-null data source
-     * bounds are defined.
-     */
+    @Override
     public List<Bounds> getDataSourceBounds() {
-        List<Bounds> ret = new ArrayList<>(dataSources.size());
-        for (DataSource ds : dataSources) {
-            if (ds.bounds != null) {
-                ret.add(ds.bounds);
-            }
-        }
-        return ret;
+        return DataSource.getDataSourceBounds(dataSources);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSource.java	(revision 7574)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.osm;
-
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
-
-/**
- * A data source, defined by bounds and textual description for the origin.
- * @since 247
- */
-public class DataSource {
-    /**
-     * The bounds of this data source
-     */
-    public final Bounds bounds;
-    /**
-     * The textual description of the origin (example: "OpenStreetMap Server")
-     */
-    public final String origin;
-
-    /**
-     * Constructs a new {@code DataSource}.
-     * @param bounds The bounds of this data source
-     * @param origin The textual description of the origin (example: "OpenStreetMap Server")
-     * @throws IllegalArgumentException if bounds is {@code null}
-     */
-    public DataSource(Bounds bounds, String origin) {
-        CheckParameterUtil.ensureParameterNotNull(bounds, "bounds");
-        this.bounds = bounds;
-        this.origin = origin;
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 7575)
@@ -42,4 +42,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.ViewportData;
@@ -48,5 +49,4 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 7575)
@@ -12,7 +12,7 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSetMerger;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 7575)
@@ -47,4 +47,5 @@
 import org.openstreetmap.josm.data.APIDataSet;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.conflict.Conflict;
@@ -59,5 +60,4 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSetMerger;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.DatasetConsistencyTest;
 import org.openstreetmap.josm.data.osm.IPrimitive;
Index: trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 7575)
@@ -10,4 +10,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.notes.Note;
@@ -45,7 +46,8 @@
     }
 
-    private GpxData downloadRawGps(String url, ProgressMonitor progressMonitor) throws IOException, OsmTransferException, SAXException {
+    private GpxData downloadRawGps(Bounds b, ProgressMonitor progressMonitor) throws IOException, OsmTransferException, SAXException {
         boolean done = false;
         GpxData result = null;
+        String url = "trackpoints?bbox="+b.getMinLon()+","+b.getMinLat()+","+b.getMaxLon()+","+b.getMaxLat()+"&page=";
         for (int i = 0;!done;++i) {
             progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * 5000, ((i + 1) * 5000)));
@@ -70,4 +72,5 @@
         if (result != null) {
             result.fromServer = true;
+            result.dataSources.add(new DataSource(b, "OpenStreetMap server"));
         }
         return result;
@@ -81,10 +84,10 @@
             if (crosses180th) {
                 // API 0.6 does not support requests crossing the 180th meridian, so make two requests
-                GpxData result = downloadRawGps("trackpoints?bbox="+lon1+","+lat1+",180.0,"+lat2+"&page=", progressMonitor);
-                result.mergeFrom(downloadRawGps("trackpoints?bbox=-180.0,"+lat1+","+lon2+","+lat2+"&page=", progressMonitor));
+                GpxData result = downloadRawGps(new Bounds(lat1, lon1, lat2, 180.0), progressMonitor);
+                result.mergeFrom(downloadRawGps(new Bounds(lat1, -180.0, lat2, lon2), progressMonitor));
                 return result;
             } else {
                 // Simple request
-                return downloadRawGps("trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=", progressMonitor);
+                return downloadRawGps(new Bounds(lat1, lon1, lat2, lon2), progressMonitor);
             }
         } catch (IllegalArgumentException e) {
Index: trunk/src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 7575)
@@ -21,4 +21,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.Extensions;
@@ -38,5 +39,5 @@
  * Read a gpx file.
  *
- * Bounds are not read, as we caluclate them. @see GpxData.recalculateBounds()
+ * Bounds are read, even if we calculate them, see {@link GpxData#recalculateBounds}.<br>
  * Both GPX version 1.0 and 1.1 are supported.
  *
@@ -73,5 +74,6 @@
         private boolean nokiaSportsTrackerBug = false;
 
-        @Override public void startDocument() {
+        @Override
+        public void startDocument() {
             accumulator = new StringBuffer();
             states = new Stack<>();
@@ -162,4 +164,11 @@
                     currentState = State.link;
                     currentLink = new GpxLink(atts.getValue("href"));
+                    break;
+                case "bounds":
+                    data.put(META_BOUNDS, new Bounds(
+                                parseCoord(atts.getValue("minlat")),
+                                parseCoord(atts.getValue("minlon")),
+                                parseCoord(atts.getValue("maxlat")),
+                                parseCoord(atts.getValue("maxlon"))));
                 }
                 break;
@@ -312,6 +321,9 @@
                         break;
                     }
+                case "bounds":
+                    // do nothing, has been parsed on startElement
+                    break;
                 default:
-                    //TODO: parse bounds, extensions
+                    //TODO: parse extensions
                 }
                 break;
Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 7575)
@@ -21,8 +21,8 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.NodeData;
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 7574)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 7575)
@@ -12,9 +12,9 @@
 import java.util.Map.Entry;
 
+import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.INode;
 import org.openstreetmap.josm.data.osm.IPrimitive;
