Index: trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java	(revision 2682)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateModifiedAction.java	(revision 2682)
@@ -0,0 +1,43 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.KeyEvent;
+import java.util.Collection;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * This action synchronizes a set of primitives with their state on the server.
+ *
+ */
+public class UpdateModifiedAction extends UpdateSelectionAction {
+
+    /**
+     * constructor
+     */
+    public UpdateModifiedAction() {
+        super(tr("Update modified"),
+                "updatemodified",
+                tr("Updates the currently modified objects from the server (re-downloads data)"),
+                Shortcut.registerShortcut("file:updatemodified",
+                        tr("Update modified"),
+                        KeyEvent.VK_M,
+                        Shortcut.GROUP_HOTKEY + Shortcut.GROUPS_ALT2),
+                        true);
+        putValue("help", ht("UpdateModified"));
+    }
+
+    @Override
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
+        super.updateEnabledState(getData());
+    }
+
+    @Override
+    protected Collection<OsmPrimitive> getData() {
+        return getCurrentDataSet().allModifiedPrimitives();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2679)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2682)
@@ -87,9 +87,13 @@
                 tr("Updates the currently selected objects from the server (re-downloads data)"),
                 Shortcut.registerShortcut("file:updateselection",
-                        tr("Update Selection"),
+                        tr("Update selection"),
                         KeyEvent.VK_U,
                         Shortcut.GROUP_HOTKEY + Shortcut.GROUPS_ALT2),
                         true);
         putValue("help", ht("UpdateSelection"));
+    }
+    public UpdateSelectionAction(String name, String iconName, String tooltip,
+    Shortcut shortcut, boolean register) {
+        super(name, iconName, tooltip, shortcut, register);
     }
 
@@ -99,5 +103,5 @@
             setEnabled(false);
         } else {
-            updateEnabledState(getCurrentDataSet().getSelected());
+            updateEnabledState(getData());
         }
     }
@@ -114,5 +118,5 @@
         if (! isEnabled())
             return;
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        Collection<OsmPrimitive> selection = getData();
         if (selection.size() == 0) {
             JOptionPane.showMessageDialog(
@@ -126,3 +130,7 @@
         updatePrimitives(selection);
     }
+
+    protected Collection<OsmPrimitive> getData() {
+        return getCurrentDataSet().getSelected();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2679)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2682)
@@ -182,4 +182,17 @@
                 o.add(osm);
             }
+        return o;
+    }
+
+    /**
+     * @return A collection containing all modified primitives
+     */
+    public Collection<OsmPrimitive> allModifiedPrimitives() {
+        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
+        for (OsmPrimitive osm : allPrimitives()) {
+            if (osm.isVisible() && osm.isModified()) {
+                o.add(osm);
+            }
+        }
         return o;
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 2679)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 2682)
@@ -63,4 +63,5 @@
 import org.openstreetmap.josm.actions.UnselectAllAction;
 import org.openstreetmap.josm.actions.UpdateDataAction;
+import org.openstreetmap.josm.actions.UpdateModifiedAction;
 import org.openstreetmap.josm.actions.UpdateSelectionAction;
 import org.openstreetmap.josm.actions.UploadAction;
@@ -102,4 +103,5 @@
     public final JosmAction update = new UpdateDataAction();
     public final JosmAction updateSelection = new UpdateSelectionAction();
+    public final JosmAction updateModified = new UpdateModifiedAction();
     public final JosmAction upload = new UploadAction();
     public final JosmAction uploadSelection = new UploadSelectionAction();
@@ -210,4 +212,5 @@
         add(fileMenu, update);
         add(fileMenu, updateSelection);
+        add(fileMenu, updateModified);
         fileMenu.addSeparator();
         add(fileMenu, upload);
