Index: trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java	(revision 4089)
+++ trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java	(revision 4090)
@@ -13,4 +13,5 @@
 import javax.swing.SwingUtilities;
 
+import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSetMerger;
@@ -84,4 +85,5 @@
             public void run() {
                 layer.mergeFrom(ds);
+                AutoScaleAction.zoomTo(ds.allPrimitives());
                 layer.onPostDownloadFromServer();
             }
@@ -140,4 +142,22 @@
             DataSetMerger merger = new DataSetMerger(ds, theirDataSet);
             merger.merge();
+            
+            // if incomplete relation members exist, download them too
+            for (Relation r : ds.getRelations()) {
+                if (canceled) return;
+                if (r.hasIncompleteMembers()) {
+                    synchronized(this) {
+                        if (canceled) return;
+                        objectReader = new OsmServerObjectReader(r.getId(), OsmPrimitiveType.RELATION, true /* full */);
+                    }
+                    theirDataSet = objectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
+                    synchronized (this) {
+                        objectReader = null;
+                    }
+                    merger = new DataSetMerger(ds, theirDataSet);
+                    merger.merge();
+                }
+            }
+
             // a way loaded with MultiFetch may have incomplete nodes because at least one of its
             // nodes isn't present in the local data set. We therefore fully load all
