     {
         super.enabled = value;
         _enabled = value;
+        invalidateEffectiveEnabledFlag = true;
         invalidateProperties();
+    }
+    
+    private function get effectiveEnabled():Boolean
+    {
+        if (invalidateEffectiveEnabledFlag)
+        {
+            _effectiveEnabled = _enabled;
+            
+            if (_effectiveEnabled)
+            {
+                var ancestor:DisplayObject = parent;
+                
+                while (ancestor != null)
+                {
+                    if (ancestor is IUIComponent && !IUIComponent(ancestor).enabled)
+                    {
+                        _effectiveEnabled = false;
+                        break;
+                    }
+                    
+                    ancestor = ancestor.parent;
+                }
+            }
+            
+            invalidateEffectiveEnabledFlag = false;            
+        }
+        
+        return _effectiveEnabled;
     }
     
     //----------------------------------

     */
    public function insertText(text:String):void
    {
        if (stageText == null)
            return;
        
        var origText:String = stageText.text;

     */
    public function appendText(text:String):void
    {
        if (stageText != null && text.length > 0)
        {
            if (stageText.text != null)
                stageText.text += text;
            else
                stageText.text = text;
            
            _text = stageText.text;
            dispatchEvent(new TextOperationEvent(TextOperationEvent.CHANGE));
        }
    }
    
