 	override protected function getValueFromTarget(target:Object,
 												   property:String):*
 	{
-	    var hasParent:Boolean;
-        try {
-            target.parent;
-            hasParent = true;
-        } catch (e:Error) {
-            hasParent = false;
-        }
-        var container:* = (hasParent ? target.parent : target.elementHost);
+        var container:* = target.parent;
         if (property == "index")
             return container ? 
-                (hasParent ? container.getChildIndex(target) : container.getItemIndex(target)) : 0;
+                (!(container is Group) ? container.getChildIndex(target) : container.getItemIndex(target)) : 0;
 		
 		return super.getValueFromTarget(target, property);
 	}

	/**
	 *  @private
	 */
    private static var AFFECTED_PROPERTIES:Array = [ "parent", "elementHost", "index" ];

	//--------------------------------------------------------------------------
	//

												   value:*,
												   props:Object):void
	{
        if (property == "parent" && value)
        {
            if (target.parent == null)
            {
                // TODO : workaround for current situation of mis-match between
                // Group having 'item's and Flex3 components having 'parent's
                if (value is Group)
                    value.addItemAt(target, Math.min(props.index, 
                        value.numItems));
                else
                    value.addChildAt(target, Math.min(props.index, 
                        value.numChildren));
            }
        }
		
		// Ignore index - it's applied along with parent
	}
