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 31284)
+++ /applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java	(revision 31285)
@@ -70,4 +70,9 @@
 
     /**
+     * The measurement label for radius if the currently selected loop is a circle.
+     */
+    protected JLabel selectRadiusLabel;
+
+    /**
      * The measurement label for the segment angle, actually updated, if 2 nodes are selected
      */
@@ -119,4 +124,9 @@
         valuePanel.add(selectAreaLabel);
 
+        valuePanel.add(new JLabel(tr("Selection Radius")));
+
+        selectRadiusLabel = new JLabel(getRadiusText(0));
+        valuePanel.add(selectRadiusLabel);
+
         JLabel angle = new JLabel(tr("Angle"));
         angle.setToolTipText(tr("Angle between two selected Nodes"));
@@ -142,4 +152,8 @@
     protected String getAreaText(double v) {
         return NavigatableComponent.getSystemOfMeasurement().getAreaText(v, new DecimalFormat("#0.000"), 1e-3);
+    }
+
+    protected String getRadiusText(double v) {
+        return NavigatableComponent.getSystemOfMeasurement().getDistText(v, new DecimalFormat("#0.000"), 1e-3);
     }
 
@@ -160,4 +174,5 @@
         double segAngle = 0.0;
         double area = 0.0;
+        double radius = 0.0;
         Node lastNode = null;
         // Don't mix up way and nodes computation (fix #6872). Priority given to ways
@@ -181,7 +196,16 @@
                 Node lastN = null;
                 double wayArea = 0.0;
+                Double firstSegLength = null;
+                boolean isCircle = true;
                 for (Node n: w.getNodes()) {
                     if (lastN != null && lastN.getCoor() != null && n.getCoor() != null) {
-                        length += lastN.getCoor().greatCircleDistance(n.getCoor());
+                        final double segLength = lastN.getCoor().greatCircleDistance(n.getCoor());
+                        if (firstSegLength == null) {
+                            firstSegLength = segLength;
+                        }
+                        if (isCircle && Math.abs(firstSegLength - segLength) > 0.000001) {
+                            isCircle = false;
+                        }
+                        length += segLength;
                         //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
                         wayArea += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
@@ -197,4 +221,7 @@
                 area += wayArea;
             }
+            if (ways.size() == 1 && area > 0.0) {
+                radius = length / (2 * Math.PI);
+            }
         }
 
@@ -202,4 +229,5 @@
         final String angleLabel = getAngleText(segAngle);
         final String areaLabel = getAreaText(area);
+        final String radiusLabel = getRadiusText(radius);
 
         GuiHelper.runInEDT(new Runnable() {
@@ -209,4 +237,5 @@
                 segAngleLabel.setText(angleLabel);
                 selectAreaLabel.setText(areaLabel);
+                selectRadiusLabel.setText(radiusLabel);
             }
         });
