             return new XObjTypeInfo();
         }
         
+        if (!propName)
+            return new XObjTypeInfo();
+        
         var propertyCacheKey:String = className + "." + propName;
         var arrayElementType:String;
         
         typeInfo = typePropertyCache[propertyCacheKey];
         
-        if (typeInfo == null || (propName in object))
-        {
+        if (typeInfo == null)
+        {
+            callCounter++;
+            trace("callCounter "+callCounter);
             typeInfo = new XObjTypeInfo();
             
             // go look it up (expensive)

            if (typeDescInfo.@isDynamic == 'true')
            {
                isDynamic = true;
                shouldCache = false;
            }
            
            var accessorList:XMLList = typeDescInfo..accessor.(@name == propName);

        return result;
    }
    
    public static var callCounter:int;
    
    public static function typeInfoForProperty(object:*, className:String, propName:String):XObjTypeInfo
    {
        var isArray:Boolean = false;
