             }
         }
         
-        // otherwise, we need to rely on the timer
-        if (!iconSetterDelayTimer)
-        {
-            iconSetterDelayTimer = new Timer(iconDelay, 1);
-            iconSetterDelayTimer.addEventListener(TimerEvent.TIMER_COMPLETE, iconSetterDelayTimer_timerCompleteHandler);
-        }
-        
-        // this is so we don't display the old data while we're loading
-        // FIXME (rfrishbe): perhaps we should add an iconLoadingAsset (must be embedded) property?
-        iconDisplay.source = null;
-        loadingIconSource = source;
-        
-        iconSetterDelayTimer.start();
+		// otherwise, we need to load an external asset and use a Timer
+		loadExternalImage(source, iconDelay);
     }
     
     /**

        removeChild(labelDisplay);
        labelDisplay = null;
    }
    
    /**
     *  @private

        invalidateSize();
        invalidateDisplayList();
    }
	
	//----------------------------------
	//  loadingIconClass
	//----------------------------------
	
	/**
	 *  @private 
	 */ 
	private var _loadingIconClass:Class;
	
	/**
	 *  The icon asset to use while an externally loaded asset is
	 *  being downloaded.
	 *
	 *  @default null
	 * 
	 *  @langversion 3.0
	 *  @playerversion Flash 10
	 *  @playerversion AIR 2.5
	 *  @productversion Flex 4.5
	 */
	public function get loadingIconClass():Class
	{
		return _loadingIconClass;
	}
	
	/**
	 *  @private
	 */ 
	public function set loadingIconClass(value:Class):void
	{
		if (value == _loadingIconClass)
			return;
		
		_loadingIconClass = value;
		
		iconChanged = true;
		invalidateProperties();
		
		// clear clearOnLoad if necessary
		if (iconDisplay)
			iconDisplay.clearOnLoad = (loadingIconClass == null);
	}
    
    //----------------------------------
    //  messageField
