         invalidateProperties();
     }
     
+    //--------------------------------------------------------------------------
+    //
+    //  Public Properties
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  iconContentLoader
+    //----------------------------------
+    
+    /**
+     *  @private 
+     */ 
+    private var _iconContentLoader:IContentLoader = _imageCache;
+    
+    
+    /**
+     *  Optional custom image loader (e.g. image cache or queue) to
+     *  associate with content loader client.
+     * 
+     *  <p>The default is a static content cache defined on MobileIconItemRenderer
+     *  that allows up to 100 entries.</p>
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5   
+     */
+    public function get iconContentLoader():IContentLoader
+    {
+        return _iconContentLoader;
+    }
+    
+    /**
+     *  @private
+     */ 
+    public function set iconContentLoader(value:IContentLoader):void
+    {
+        if (value == _iconContentLoader)
+            return;
+        
+        _iconContentLoader = value;
+        
+        if (iconDisplay)
+            iconDisplay.contentLoader = _iconContentLoader;
+    }
+    
     //----------------------------------
     //  decoratorClass
     //----------------------------------

    
    /**
     *  @private
     *  Icon image cache
     */
    static private var _imageCache:ContentCache;
    

            //    messageDisplay.text = messageText;
            //messageDisplay.truncateToFit();
        }
        
        // revisit y positions now that we know all heights so we can respect verticalAlign style
        if (getStyle("verticalAlign") == "top")
        {
            // don't do anything...already aligned to top in code above
        }
        else if (getStyle("verticalAlign") == "bottom")
        {
            if (iconDisplay)
                iconDisplayHolder.setLayoutBoundsPosition(paddingLeft, unscaledHeight - iconHeight - paddingBottom);
            if (messageDisplay)
                messageDisplay.y = unscaledHeight - paddingBottom - messageHeight;
            if (labelDisplay)
                labelDisplay.y = unscaledHeight - paddingBottom - messageHeight - verticalGap - headerHeight;
        }
        else //if (getStyle("verticalAlign") == "middle")
        {
            if (iconDisplay)
                iconDisplayHolder.setLayoutBoundsPosition(paddingLeft, Math.round((unscaledHeight - iconHeight)/2));
            var textTotalHeight:Number = headerHeight + messageHeight + verticalGap;
            if (labelDisplay)
                labelDisplay.y = Math.round((unscaledHeight - textTotalHeight)/2);
            if (messageDisplay)
                messageDisplay.y = Math.round((unscaledHeight - textTotalHeight)/2 + verticalGap + headerHeight);
        }
        // made "middle" last even though it's most likely so it is the default and if someone 
        // types "center", then it will still vertically center itself.
    }
    
    //--------------------------------------------------------------------------
