Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3942)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3943)
@@ -305,5 +305,5 @@
        get/set functions calling this implicitely is preferred, so we can have
        transparent cache handling in the future. */
-    public void clearCached()
+    public void clearCachedStyle()
     {
         mappaintStyle = null;
@@ -1167,5 +1167,5 @@
 
     private void keysChangedImpl(Map<String, String> originalKeys) {
-        clearCached();
+        clearCachedStyle();
         updateDirectionFlags();
         updateTagged();
@@ -1367,5 +1367,5 @@
             setChangesetId(other.changesetId);
         }
-        clearCached();
+        clearCachedStyle();
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 3942)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 3943)
@@ -41,6 +41,7 @@
         boolean locked = writeLock();
         try {
-            for (RelationMember rm:this.members) {
+            for (RelationMember rm : this.members) {
                 rm.getMember().removeReferrer(this);
+                rm.getMember().clearCachedStyle();
             }
 
@@ -50,6 +51,7 @@
                 this.members = new RelationMember[0];
             }
-            for (RelationMember rm:this.members) {
+            for (RelationMember rm : this.members) {
                 rm.getMember().addReferrer(this);
+                rm.getMember().clearCachedStyle();
             }
 
@@ -79,4 +81,5 @@
             members = newMembers;
             member.getMember().addReferrer(this);
+            member.getMember().clearCachedStyle();
             fireMembersChanged();
         } finally {
@@ -94,4 +97,5 @@
             members = newMembers;
             member.getMember().addReferrer(this);
+            member.getMember().clearCachedStyle();
             fireMembersChanged();
         } finally {
@@ -113,5 +117,7 @@
             if (originalMember.getMember() != member.getMember()) {
                 member.getMember().addReferrer(this);
+                member.getMember().clearCachedStyle();
                 originalMember.getMember().removeReferrer(this);
+                originalMember.getMember().clearCachedStyle();
                 fireMembersChanged();
             }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3942)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3943)
@@ -62,5 +62,5 @@
             }
 
-            clearCached();
+            clearCachedStyle();
             fireNodesChanged();
         } finally {
@@ -323,5 +323,5 @@
             if (isIncomplete())
                 throw new IllegalStateException(tr("Cannot add node {0} to incomplete way {1}.", n.getId(), getId()));
-            clearCached();
+            clearCachedStyle();
             n.addReferrer(this);
             Node[] newNodes = new Node[nodes.length + 1];
@@ -352,5 +352,5 @@
                 throw new IllegalStateException(tr("Cannot add node {0} to incomplete way {1}.", n.getId(), getId()));
 
-            clearCached();
+            clearCachedStyle();
             n.addReferrer(this);
             Node[] newNodes = new Node[nodes.length + 1];
