      */
     protected function get drawX():Number
     {
-    	// If we have a display object and we might be shared, the display object 
-    	// gets moved to 0,0. Otherwise, use the x position plus the offset. 
-    	// (Note that in the first case, the offset is already calculated when the
-    	// layout matrix is applied to the display object). 
-    	if (displayObject != null && nextSiblingNeedsDisplayObject)
-    		return 0;
-        if(layoutFeatures != null && layoutFeatures.offsets != null)
+        // If we don't share the display object, we will draw at 0,0
+        // since the display object will be positioned at x,y
+        if (shareIndex == -1)
+            return 0;
+            
+        // Otherwise we draw at x,y since the display object will be
+        // positioned at 0,0
+        if (layoutFeatures != null && layoutFeatures.offsets != null)
             return x + layoutFeatures.offsets.x;
-		return x;
-    }
-    
+            
+        return x;
+    } 
+        
     //----------------------------------
     //  drawY
     //----------------------------------

        _transform = value;
    }
    
	/**
	 * A utility method to update the rotation and scale of the transform while keeping a particular point, specified in the component's own coordinate space, 
	 * fixed in the parent's coordinate space.  This function will assign the rotation and scale values provided, then update the x/y/z properties
	 * as necessary to keep tx/ty/tz fixed.

    }

    /**
     *  Documentation is not currently available.
     */
    protected function get needsDisplayObject():Boolean
    {
        var result:Boolean = (alwaysCreateDisplayObject ||
        (_filters && _filters.length > 0) || 
            _blendMode != BlendMode.NORMAL || _mask ||
            (layoutFeatures != null && (layoutFeatures.layoutScaleX != 1 || layoutFeatures.layoutScaleY != 1 || layoutFeatures.layoutScaleZ != 1 ||
            layoutFeatures.layoutRotationX != 0 || layoutFeatures.layoutRotationY != 0 || layoutFeatures.layoutRotationZ != 0 ||
            layoutFeatures.layoutZ  != 0)) ||  
            _colorTransform != null ||
            _alpha != 1);
    
        if(layoutFeatures != null && layoutFeatures.offsets != null)
        {
            var o:TransformOffsets = layoutFeatures.offsets;
            result = result || (o.scaleX != 1 || o.scaleY != 1 || o.scaleZ != 1 ||
            o.rotationX != 0 || o.rotationY != 0 || o.rotationZ != 0 || o.z  != 0);       
        }
        
        return result;
    }
    
    /**
     *  @inheritDoc
     */
    public function canDrawToShared(sharedDisplayObject:DisplayObject):Boolean
    {
        return !needsDisplayObject && sharedDisplayObject is ISharedGraphicsDisplayObject;
    }
    
    /**
     *  @inheritDoc
     */
    public function closeSequence():Boolean
    {
        return false;
    }

    private var _shareIndex:int;

    /**
     *  @inheritDoc
     */
    public function set shareIndex(value:int):void
    {
        _shareIndex = value;
    }

    /**
     *  @private
     */
    public function get shareIndex():int
    {
        return _shareIndex;    
    }

    protected function get drawnDisplayObject():DisplayObject
    {
    	// _drawnDisplayObject is non-null if we needed to create a mask
        return _drawnDisplayObject ? _drawnDisplayObject : displayObject; 
    }

    /**
