Index: /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 2434)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.actions;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.event.ActionEvent;
@@ -216,4 +216,5 @@
                         public void run() {
                             targetLayer.fireDataChange();
+                            targetLayer.onPostDownloadFromServer();
                             Main.map.mapView.repaint();
                         }
@@ -253,7 +254,7 @@
                     String msg = "";
                     switch(entry.getValue()) {
-                        case NODE: msg = tr("({0}/{1}) Loading parents of node {2}", i+1,children.size(), entry.getKey()); break;
-                        case WAY: msg = tr("({0}/{1}) Loading parents of way {2}", i+1,children.size(), entry.getKey()); break;
-                        case RELATION: msg = tr("({0}/{1}) Loading parents of relation {2}", i+1,children.size(), entry.getKey()); break;
+                    case NODE: msg = tr("({0}/{1}) Loading parents of node {2}", i+1,children.size(), entry.getKey()); break;
+                    case WAY: msg = tr("({0}/{1}) Loading parents of way {2}", i+1,children.size(), entry.getKey()); break;
+                    case RELATION: msg = tr("({0}/{1}) Loading parents of relation {2}", i+1,children.size(), entry.getKey()); break;
                     }
                     progressMonitor.subTask(msg);
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 2434)
@@ -157,4 +157,5 @@
                 }
                 target.mergeFrom(dataSet);
+                target.onPostDownloadFromServer();
             }
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 2434)
@@ -305,5 +305,5 @@
                 }
                 OsmDataLayer odl = (OsmDataLayer)l;
-                if (odl.requiresSaveToFile() || odl.requiresUploadToServer()) {
+                if ((odl.requiresSaveToFile() || odl.requiresUploadToServer()) && odl.data.isModified()) {
                     layersWithUnmodifiedChanges.add(odl);
                 }
@@ -314,7 +314,7 @@
                 dialog.setVisible(true);
                 switch(dialog.getUserAction()) {
-                    case CANCEL: return false;
-                    case PROCEED: return true;
-                    default: return false;
+                case CANCEL: return false;
+                case PROCEED: return true;
+                default: return false;
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2434)
@@ -56,6 +56,6 @@
 import org.openstreetmap.josm.data.conflict.Conflict;
 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.DataSetMerger;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -1468,4 +1468,5 @@
                         public void run() {
                             curLayer.fireDataChange();
+                            curLayer.onPostDownloadFromServer();
                         }
                     });
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2434)
@@ -13,6 +13,6 @@
 import org.openstreetmap.josm.Main;
 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.DataSetMerger;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -179,4 +179,5 @@
                             public void run() {
                                 getLayer().fireDataChange();
+                                getLayer().onPostDownloadFromServer();
                             }
                         }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2433)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2434)
@@ -49,6 +49,6 @@
 import org.openstreetmap.josm.data.osm.BackreferencedDataSet;
 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.DataSetMerger;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -484,10 +484,10 @@
 
     /**
-     * @return The number of not-deleted primitives in the list.
+     * @return The number of not-deleted and visible primitives in the list.
      */
     private int undeletedSize(final Collection<? extends OsmPrimitive> list) {
         int size = 0;
         for (final OsmPrimitive osm : list)
-            if (!osm.isDeleted()) {
+            if (!osm.isDeleted() && osm.isVisible()) {
                 size++;
             }
@@ -692,4 +692,9 @@
     }
 
+    public void onPostDownloadFromServer() {
+        setRequiresSaveToFile(true);
+        setRequiresUploadToServer(data.isModified());
+    }
+
     /**
      * Initializes the layer after a successful save of OSM data to a file
