Index: /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 19409)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 19410)
@@ -24,4 +24,8 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -42,5 +46,7 @@
  * @since 2250
  */
-public class UploadSelectionAction extends AbstractUploadAction {
+public class UploadSelectionAction extends AbstractUploadAction implements DataSetListenerAdapter.Listener {
+    private final transient DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
+
     /**
      * Constructs a new {@code UploadSelectionAction}.
@@ -56,4 +62,5 @@
                 true);
         setHelpId(ht("/Action/UploadSelection"));
+        DatasetEventManager.getInstance().addDatasetListener(dataChangedAdapter, FireMode.IMMEDIATELY);
     }
 
@@ -322,3 +329,15 @@
         }
     }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+        DatasetEventManager.getInstance().removeDatasetListener(dataChangedAdapter);
+
+    }
+
+    @Override
+    public void processDatasetEvent(AbstractDatasetChangedEvent event) {
+        updateEnabledStateOnCurrentSelection();
+    }
 }
