     }
 
     /**
+     * Utility function to return the pseudonym of the property
+     * name if it exists on the object
+     */
+    private function getPseudonym(obj:*, name:String):String
+    {
+        var propName:String;
+        if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_0)
+            return (PSEUDONYMS[name] in obj) ?
+                PSEUDONYMS[name] :
+                name;
+        propName = PSEUDONYMS[name];
+        if (!(PSEUDONYMS[name] in obj))
+        {
+            // 'in' does not work for mx_internal properties 
+            // like currentStateDeferred
+            try
+            {
+                // Check if we can access the property; if it doesn't
+                // exist, it'll throw a ReferenceError
+                var tmp:* = obj[PSEUDONYMS[name]];
+            }
+            catch (e:ReferenceError)
+            {
+                propName = name;
+            }
+        }
+        else
+        {
+            propName = name;
+        }
+        return propName;
+    }
+    
+    /**
      *  @inheritDoc
      *  
      *  @langversion 3.0

package mx.states
{

import mx.core.UIComponent;
import mx.core.mx_internal;


        var obj:* = getOverrideContext(appliedTarget, parent);
        if (obj != null && applied)
        {
            var propName:String = PSEUDONYMS[name] ? getPseudonym(obj, name) : name;
	        
            var relatedProps:Array = RELATED_PROPERTIES[propName] ?
	                                 RELATED_PROPERTIES[propName] :
	                                 null;
	
