Index: applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java
===================================================================
--- applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 29624)
+++ applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 29625)
@@ -15,4 +15,5 @@
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -20,4 +21,13 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataSetListener;
+import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
+import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
+import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
+import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
+import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
+import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.SideButton;
@@ -34,5 +44,5 @@
  * @author ramack
  */
-public class MeasurementDialog extends ToggleDialog implements SelectionChangedListener {
+public class MeasurementDialog extends ToggleDialog implements SelectionChangedListener, DataSetListener {
     private static final long serialVersionUID = 4708541586297950021L;
 
@@ -61,4 +71,9 @@
      */
     protected JLabel segAngleLabel;
+    
+    private DataSet ds;
+
+    private Collection<Way> ways;
+    private Collection<Node> nodes;
     
     /**
@@ -119,5 +134,5 @@
 
     /**
-     * Cleans the active Meausurement Layer
+     * Cleans the active Measurement Layer
      */
     public void resetValues(){
@@ -132,7 +147,8 @@
         Node lastNode = null;
         // Don't mix up way and nodes computation (fix #6872). Priority given to ways
-        SubclassFilteredCollection<OsmPrimitive, Way> ways = new SubclassFilteredCollection<OsmPrimitive, Way>(newSelection, OsmPrimitive.wayPredicate);
+        ways = new SubclassFilteredCollection<OsmPrimitive, Way>(newSelection, OsmPrimitive.wayPredicate);
         if (ways.isEmpty()) {
-            for (Node n : new SubclassFilteredCollection<OsmPrimitive, Node>(newSelection, OsmPrimitive.nodePredicate)) {
+            nodes = new SubclassFilteredCollection<OsmPrimitive, Node>(newSelection, OsmPrimitive.nodePredicate);
+            for (Node n : nodes) {
                 if (n.getCoor() != null) {
                     if (lastNode == null) {
@@ -146,4 +162,5 @@
             }
         } else {
+            nodes = null;
             for (Way w : ways) {
                 Node lastN = null;
@@ -179,4 +196,16 @@
             }
         });
+        
+        DataSet currentDs = Main.main.getCurrentDataSet();
+    
+        if (ds != currentDs) {
+            if (ds != null) {
+                ds.removeDataSetListener(this);
+            }
+            if (currentDs != null) {
+                currentDs.addDataSetListener(this);
+            }
+            ds = currentDs;
+        }
 	}
 
@@ -188,4 +217,35 @@
 		super.destroy();
 		DataSet.removeSelectionListener(this);
+		if (ds != null) {
+		    ds.removeDataSetListener(this);
+		    ds = null;
+		}
 	}
+
+	private boolean waysContain(Node n) {
+	    if (ways != null) {
+	        for (Way w : ways) {
+	            if (w.containsNode(n)) {
+	                return true;
+	            }
+	        }
+	    }
+	    return false;
+	}
+	
+    @Override public void nodeMoved(NodeMovedEvent event) {
+        Node n = event.getNode();
+        // Refresh selection if a node belonging to a selected member has moved (example: scale action)
+        if ((nodes != null && nodes.contains(n)) || waysContain(n)) {
+            selectionChanged(Main.main.getCurrentDataSet().getSelected());
+        }
+    }
+
+    @Override public void primitivesAdded(PrimitivesAddedEvent event) {}
+    @Override public void primitivesRemoved(PrimitivesRemovedEvent event) {}
+    @Override public void tagsChanged(TagsChangedEvent event) {}
+    @Override public void wayNodesChanged(WayNodesChangedEvent event) { }
+    @Override public void relationMembersChanged(RelationMembersChangedEvent event) {}
+    @Override public void otherDatasetChange(AbstractDatasetChangedEvent event) {}
+    @Override public void dataChanged(DataChangedEvent event) {}
 }
