Index: src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenAction.java	(revision 244)
+++ src/org/openstreetmap/josm/actions/OpenAction.java	(revision 247)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.RawGpsLayer;
@@ -86,4 +87,7 @@
 				if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
 					dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
+					DataSource src = new DataSource();
+					src.sourceSpec = "File " + fn;
+					dataSet.dataSources.add(src);
 				} else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
 					JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("CSV Data import for non-GPS data is not implemented yet."));
Index: src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 244)
+++ src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 247)
@@ -43,4 +43,9 @@
 	public Collection<Way> ways = new LinkedList<Way>();
 
+	/**
+	 * All data sources of this DataSet.
+	 */
+	public Collection<DataSource> dataSources = new LinkedList<DataSource>();
+	
 	/**
 	 * A list of listeners to selection changed events.
Index: src/org/openstreetmap/josm/data/osm/DataSource.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/DataSource.java	(revision 247)
+++ src/org/openstreetmap/josm/data/osm/DataSource.java	(revision 247)
@@ -0,0 +1,10 @@
+package org.openstreetmap.josm.data.osm;
+
+import org.openstreetmap.josm.data.Bounds;
+
+public class DataSource {
+
+	public Bounds sourceBounds;
+	public String sourceSpec;
+	
+}
Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 244)
+++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 247)
@@ -4,7 +4,9 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Graphics;
 import java.awt.GridBagLayout;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.io.File;
@@ -29,5 +31,7 @@
 import org.openstreetmap.josm.actions.SaveAsAction;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.coor.EastNorth;
 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.OsmPrimitive;
@@ -140,4 +144,18 @@
 	 */
 	@Override public void paint(final Graphics g, final MapView mv) {
+		if (Main.pref.getBoolean("draw.data.downloaded_area", false)) {
+			// FIXME this is inefficient; instead a proper polygon has to be built, and instead
+			// of drawing the outline, the outlying areas should perhaps be shaded.
+			for (DataSource src : data.dataSources) {
+				if (src.sourceBounds != null) {
+					EastNorth en1 = Main.proj.latlon2eastNorth(src.sourceBounds.min);
+					EastNorth en2 = Main.proj.latlon2eastNorth(src.sourceBounds.max);
+					Point p1 = mv.getPoint(en1);
+					Point p2 = mv.getPoint(en2);
+					g.setColor(SimplePaintVisitor.getPreferencesColor("downloaded Area", Color.YELLOW));
+					g.drawRect(Math.min(p1.x,p2.x), Math.min(p1.y, p2.y), Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y));
+				}
+			}
+		}
 		mapPainter.setGraphics(g);
 		mapPainter.setNavigatableComponent(mv);
@@ -161,4 +179,9 @@
 			osm.visit(visitor);
 		visitor.fixReferences();
+		
+		// copy the merged layer's data source info
+		for (DataSource src : ((OsmDataLayer)from).data.dataSources) 
+			data.dataSources.add(src);
+		
 		if (visitor.conflicts.isEmpty())
 			return;
Index: src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 244)
+++ src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 247)
@@ -18,4 +18,5 @@
 	private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
 	private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers"));
+	private JCheckBox sourceBounds = new JCheckBox(tr("Draw boundaries of downloaded data"));
 
 	public void addGui(PreferenceDialog gui) {
@@ -52,4 +53,9 @@
 		segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number"));
 		gui.display.add(segmentOrderNumber, GBC.eop().insets(20,0,0,0));
+		
+		// downloaded area
+		sourceBounds.setToolTipText(tr("Draw the boundaries of data loaded from the server."));
+		sourceBounds.setSelected(Main.pref.getBoolean("draw.data.downloaded_area"));
+		gui.display.add(sourceBounds, GBC.eop().insets(20,0,0,0));
 	}
 
@@ -60,4 +66,5 @@
 		Main.pref.put("draw.segment.direction", directionHint.isSelected());
 		Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
+		Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected());
     }
 }
Index: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 244)
+++ src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 247)
@@ -9,7 +9,11 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+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.gui.layer.RawGpsLayer.GpsPoint;
 import org.xml.sax.SAXException;
+
 
 public class BoundingBoxDownloader extends OsmServerReader {
@@ -98,4 +102,8 @@
     		Main.pleaseWaitDlg.currentAction.setText(tr("Downloading OSM data..."));
     		final DataSet data = OsmReader.parseDataSet(in, null, Main.pleaseWaitDlg);
+    		DataSource src = new DataSource();
+    		src.sourceSpec = "Server";
+    		src.sourceBounds = new Bounds(new LatLon(lat1, lon1), new LatLon(lat2, lon2));
+    		data.dataSources.add(src);
     		in.close();
     		activeConnection = null;
