Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1613)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1614)
@@ -112,8 +112,11 @@
 
         for (Relation relation : Main.ds.relations) {
+            int position = 0;
             for (RelationMember member : relation.members) {
                 if (!member.member.realEqual(oldway, true)
-                        || member.role.length() == 0)
+                        || member.role.length() == 0) {
+                    position++;
                     continue;
+                }
 
                 boolean found = false;
@@ -129,5 +132,7 @@
                 if (found)
                     roleCorrectionMap.get(way).add(
-                            new RoleCorrection(relation, member, newRole));
+                            new RoleCorrection(relation, position, member, newRole));
+
+                position++;
             }
         }
Index: trunk/src/org/openstreetmap/josm/corrector/RoleCorrection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/RoleCorrection.java	(revision 1613)
+++ trunk/src/org/openstreetmap/josm/corrector/RoleCorrection.java	(revision 1614)
@@ -8,10 +8,12 @@
 
     public final Relation relation;
+    public final int position;
     public final RelationMember member;
     public final String newRole;
 
-    public RoleCorrection(Relation relation, RelationMember member,
-            String newRole) {
+    public RoleCorrection(Relation relation, int position,
+                          RelationMember member, String newRole) {
         this.relation = relation;
+        this.position = position;
         this.member = member;
         this.newRole = newRole;
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 1613)
+++ trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 1614)
@@ -168,17 +168,23 @@
                     List<RoleCorrection> roleCorrections = roleCorrectionMap
                             .get(primitive);
-                    for (int i = 0; i < roleCorrections.size(); i++) {
-                        if (roleTableMap.get(primitive)
-                                .getCorrectionTableModel().getApply(i)) {
-                            RoleCorrection roleCorrection = roleCorrections
-                                    .get(i);
-                            Relation newRelation = new Relation(
-                                    roleCorrection.relation);
-                            for (RelationMember member : newRelation.members)
-                                if (member.equals(roleCorrection.member))
+                    for (Relation relation : Main.ds.relations) {
+                        Relation newRelation = new Relation(relation);
+                        Boolean changed = false;
+
+                        for (int i = 0; i < roleCorrections.size(); i++) {
+                            RoleCorrection roleCorrection = roleCorrections.get(i);
+                            if (roleCorrection.relation == relation &&
+                                    roleTableMap.get(primitive).getCorrectionTableModel().getApply(i)) {
+
+                                RelationMember member = newRelation.members.get(roleCorrection.position);
+
+                                if (member.equals(roleCorrection.member)) {
                                     member.role = roleCorrection.newRole;
-                            commands.add(new ChangeCommand(
-                                    roleCorrection.relation, newRelation));
+                                    changed = true;
+                                }
+                            }
                         }
+                        if (changed)
+                            commands.add(new ChangeCommand(relation, newRelation));
                     }
                 }
