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 29578)
+++ applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 29579)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -130,16 +131,20 @@
         double area = 0.0;
         Node lastNode = null;
-        for (OsmPrimitive p : newSelection) {
-            if (p instanceof Node && ((Node) p).getCoor() != null) {
-                Node n =(Node)p;
-                if (lastNode == null) {
-                    lastNode = n;
-                } else {
-                    length += lastNode.getCoor().greatCircleDistance(n.getCoor());
-                    segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
-                    lastNode = n;
+        // 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);
+        if (ways.isEmpty()) {
+            for (Node n : new SubclassFilteredCollection<OsmPrimitive, Node>(newSelection, OsmPrimitive.nodePredicate)) {
+                if (n.getCoor() != null) {
+                    if (lastNode == null) {
+                        lastNode = n;
+                    } else {
+                        length += lastNode.getCoor().greatCircleDistance(n.getCoor());
+                        segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
+                        lastNode = n;
+                    }
                 }
-            } else if (p instanceof Way) {
-                Way w = (Way)p;
+            }
+        } else {
+            for (Way w : ways) {
                 Node lastN = null;
                 double wayArea = 0.0;
@@ -149,5 +154,5 @@
                         //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
                         wayArea += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
-                        - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
+                                 - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
                         segAngle = MeasurementLayer.angleBetween(lastN.getCoor(), n.getCoor());
                     }
