Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 3788)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 3789)
@@ -952,5 +952,5 @@
         }
 
-        int firstGroupIdx=0;
+        firstGroupIdx=0;
 
         lastForwardWay = UNCONNECTED;
@@ -984,5 +984,5 @@
                     wct.isOnewayHead = true;
                     lastForwardWay = i-1;
-                    lastBackwardWay = i;
+                    lastBackwardWay = i-1;
                     onewayBeginning = true;
                 }
@@ -1017,9 +1017,9 @@
 
             if(!wct.linkPrev) {
-                if(i > 0) makeLoopIfNeeded(con, i-1, firstGroupIdx);
+                if(i > 0) makeLoopIfNeeded(con, i-1);
                 firstGroupIdx = i;
             }
         }
-        makeLoopIfNeeded(con, members.size()-1, firstGroupIdx);
+        makeLoopIfNeeded(con, members.size()-1);
         connectionType = con;
         //        for (int i=0; i<con.size(); ++i) {
@@ -1056,5 +1056,6 @@
     }
 
-    private void makeLoopIfNeeded(final List<WayConnectionType> con, final int i, final int firstGroupIdx) {
+    int firstGroupIdx;
+    private void makeLoopIfNeeded(final List<WayConnectionType> con, final int i) {
         boolean loop;
         if (i == firstGroupIdx) { //is primitive loop
@@ -1092,6 +1093,9 @@
         Direction dirBW = NONE;
         if(onewayBeginning) {
-            if(lastBackwardWay != i)
-                dirBW = determineDirection(lastBackwardWay, reverse(con.get(lastBackwardWay).direction), i, true);
+            if(lastBackwardWay < 0)
+                dirBW = determineDirection(firstGroupIdx, reverse(con.get(firstGroupIdx).direction), i, true);
+            else
+                dirBW = determineDirection(lastBackwardWay, con.get(lastBackwardWay).direction, i, true);
+
             if(dirBW != NONE)
                 onewayBeginning = false;
@@ -1117,5 +1121,5 @@
                     wct.isOnewayHead = true;
                     lastForwardWay = i-1;
-                    lastBackwardWay = i;
+                    lastBackwardWay = i-1;
                 } else {
                     lastForwardWay = UNCONNECTED;
