      */
     public function set sharedDisplayObject(value:DisplayObject):void
     {
-        _sharedDisplayObject = value;
+    	if (value !== _sharedDisplayObject)
+    	{
+    		if (_sharedDisplayObject is InvalidatingSprite)
+    			InvalidatingSprite(_sharedDisplayObject).invalid = true;
+        	_sharedDisplayObject = value;
+        	// Invalidate the old _sharedDisplayObject before reassigning it to value
+        	// This should handle the case where value == null (ie. we are no longer sharing)
+        	// Also, instead of setting invalid flag, simply call invalidateDisplayList
+        	invalidateDisplayList();
+     	}
     }
     
     /**

     *  @private The Sprite to draw into. 
     *  If null, then we just use displayObject or sharedDisplayObject
     */
	private var _drawnDisplayObject:Sprite;

    /**
     *  @private
     *  Whether this element needs to have its
     *  commitProperties() method called.
     */

        {
            invalidateParentSizeAndDisplayList();
            invalidateProperties();
            invalidateDisplayList();
        }
        if(layoutFeatures != null)
	        layoutFeatures.updatePending = true;
