Index: trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 9923)
+++ trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 9925)
@@ -180,9 +180,14 @@
                 nodeList.add((Node) p);
             } else if (p instanceof Way) {
-                wayDataList.add(new WayData((Way) p));
-            } else
+                wayDataList.add(new WayData(((Way) p).getNodes()));
+            } else {
                 throw new InvalidUserInputException(tr("Selection must consist only of ways and nodes."));
-        }
-        if (wayDataList.isEmpty()) {
+            }
+        }
+        if (wayDataList.isEmpty() && !nodeList.isEmpty()) {
+            final WayData data = new WayData(nodeList);
+            final Collection<Command> commands = orthogonalize(Collections.singletonList(data), Collections.<Node>emptyList());
+            return new SequenceCommand(tr("Orthogonalize"), commands);
+        } else if (wayDataList.isEmpty()) {
             throw new InvalidUserInputException("usage");
         } else  {
@@ -235,5 +240,5 @@
             WayData candidate = remaining.get(i);
             if (candidate == null) continue;
-            if (!Collections.disjoint(candidate.way.getNodes(), newGroupMember.way.getNodes())) {
+            if (!Collections.disjoint(candidate.wayNodes, newGroupMember.wayNodes)) {
                 remaining.set(i, null);
                 extendGroupRec(group, candidate, remaining);
@@ -300,5 +305,5 @@
         final Set<Node> allNodes = new HashSet<>();
         for (WayData w : wayDataList) {
-            for (Node n : w.way.getNodes()) {
+            for (Node n : w.wayNodes) {
                 allNodes.add(n);
             }
@@ -345,6 +350,6 @@
                     for (WayData w : wayDataList) {
                         for (int i = 0; i < w.nSeg; ++i) {
-                            Node n1 = w.way.getNodes().get(i);
-                            Node n2 = w.way.getNodes().get(i+1);
+                            Node n1 = w.wayNodes.get(i);
+                            Node n2 = w.wayNodes.get(i+1);
                             if (Arrays.asList(orientation).contains(w.segDirections[i])) {
                                 if (cs.contains(n1) && !cs.contains(n2)) {
@@ -417,5 +422,5 @@
      */
     private static class WayData {
-        public final Way way;             // The assigned way
+        public final List<Node> wayNodes;             // The assigned way
         public final int nSeg;            // Number of Segments of the Way
         public final int nNode;           // Number of Nodes of the Way
@@ -426,8 +431,8 @@
         public double heading;            // heading of segSum == approximate heading of the way
 
-        WayData(Way pWay) {
-            way = pWay;
-            nNode = way.getNodes().size();
-            nSeg = nNode - 1;
+        WayData(List<Node> wayNodes) {
+            this.wayNodes = wayNodes;
+            this.nNode = wayNodes.size();
+            this.nSeg = nNode - 1;
         }
 
@@ -441,7 +446,7 @@
          */
         public void calcDirections(Direction pInitialDirection) throws InvalidUserInputException {
-            final EastNorth[] en = new EastNorth[nNode]; // alias: way.getNodes().get(i).getEastNorth() ---> en[i]
+            final EastNorth[] en = new EastNorth[nNode]; // alias: wayNodes.get(i).getEastNorth() ---> en[i]
             for (int i = 0; i < nNode; i++) {
-                en[i] = new EastNorth(way.getNodes().get(i).getEastNorth().east(), way.getNodes().get(i).getEastNorth().north());
+                en[i] = wayNodes.get(i).getEastNorth();
             }
             segDirections = new Direction[nSeg];
