             
         var oldValue:String = _blendMode;
         _blendMode = value;
-        dispatchPropertyChangeEvent("blendMode", oldValue, value);
             
         blendModeExplicitlySet = true;
         
         blendModeChanged = true;
-        needsDisplayObjectAssignment = true;
+        
+        // Only need to re-do display object assignment if blendmode was normal
+        // and is changing to someting else, or the blend mode was something else 
+        // and is going back to normal.  This is because display object sharing
+        // only happens when blendMode is normal.
+        if ((oldValue == BlendMode.NORMAL || value == BlendMode.NORMAL) && 
+            !(oldValue == BlendMode.NORMAL && value == BlendMode.NORMAL))
+        {
+            needsDisplayObjectAssignment = true;
+        }
+        
         invalidateProperties();
     }
     

import mx.core.mx_internal;
import mx.events.ItemExistenceChangedEvent;
import mx.graphics.IGraphicElement;
import mx.graphics.graphicsClasses.GraphicElement;
import mx.graphics.graphicsClasses.TextGraphicElement;
import mx.layout.ILayoutElement;
import mx.layout.LayoutElementFactory;

        var keepLayeringEnabled:Boolean = false;
        
        mergeData.currentAssignableDO  = canShareDisplayObject ? this : null;
        mergeData.insertIndex = 0;

        // Iterate through all of the items
