                     hostComponent_contentChangeHandler, 
                     false, 0, true);
             }
-            
-            var iconClass:Class = getStyle("iconClass");
-            
-            if (iconClass)
-            {
-                // Should be a bitmap
-                iconDisplay = new iconClass();
-                addChild(iconDisplay);
-            }
-        }
-        
-        /**
-         *  @private 
-         */ 
-        override public function styleChanged(styleProp:String):void {
-            // TODO: Refactor to check whether styleProp is one of three following value types and update 
-            // the styles accordingly:
-            // 1) Individual style name (e.g. "fontSize"). 2) "styleName". 3) null. 
-            // If 1) reset only individual style. If 2) or 3), reset all styles
-            
-            // Only deal with text if a hostComponent exists and text fields are not empty
-            /*if(hostComponent != null && textField != null && textFieldShadow != null) {
-            var tf:TextFormat = textField.defaultTextFormat;
-            
-            tf = setTextFormat(tf);
-            
-            //textField.setTextFormat(tf);
-            tf.color = 0x000000;
-            textFieldShadow.setTextFormat(tf);
-            textFieldShadow.alpha = .20;
-            }*/
-            
-            // TODO Reapply the color to the textFieldShadow
-            // TODO (jszeto) Add check for change to iconClass
+        }
+        
+        /**
+         *  @private 
+         */ 
+        override public function styleChanged(styleProp:String):void 
+        {    
+            if (!styleProp || 
+                styleProp == "styleName" || styleProp == "iconClass")
+            {
+                iconClassChanged = true;
+                invalidateProperties();
+            }
             
             super.styleChanged(styleProp);
+        }
+        
+        override protected function commitProperties():void
+        {
+            super.commitProperties();
+            
+            if (iconClassChanged)
+            {
+                if (iconDisplay)
+                    removeChild(iconDisplay);
+                
+                var iconClass:Class = getStyle("iconClass");
+                
+                if (iconClass)
+                {
+                    // Should be a bitmap
+                    iconDisplay = new iconClass();
+                    addChild(iconDisplay);
+                }
+                
+                iconClassChanged = false;
+            }
         }
         
         /**

        //
        //--------------------------------------------------------------------------
        
        private var textField:IUITextField;
        private var textFieldShadow:IUITextField;      
        
        // Holds the icon
        private var iconDisplay:DisplayObject;
        
        // TODO (jszeto) Either static consts or styles
        private static const gap:int = 7;
        private static const paddingLeft:int = 15;
        private static const paddingRight:int = 15;
        private static const paddingTop:int = 7;
        private static const paddingBottom:int = 7;
        
        private static var TEXT_WIDTH_PADDING:Number = UITextField.TEXT_WIDTH_PADDING + 1;
        

        /** 
         * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        public var hostComponent:ButtonBase; // SkinnableComponent will popuplate
        
        //--------------------------------------------------------------------------
        //
