anchor.diff:  end;
   
   
  -method EcmaScriptObjectWrapper.GetOwnProperty(aName: String): PropertyValue;
  -begin
  -  var lItems := fType.GetMembers(BindingFlags.Public  or  BindingFlags.FlattenHierarchy  or
  -                   if  (self.Static)  then  BindingFlags.Static  else  BindingFlags.Instance).Where(a->a.Name = aName).ToList();
  +method EcmaScriptObjectWrapper.GetOwnProperty(name: String;  getPropertyValue: Boolean): PropertyValue;
  +begin
  +  var lItems := fType.GetMembers(BindingFlags.Public  or  BindingFlags.FlattenHierarchy  or  iif(self.Static, BindingFlags.Static, BindingFlags.Instance)).Where(a->a.Name = name).ToList();
   
     if  (length(lItems) = 0)  then
       exit inherited;
   
   
     if  (lItems.Count  = 1)  then  begin
  -    if  (lItems[0].MemberType = MemberTypes.Field)  then     
  -      exit  (new PropertyValue(if FieldInfo(lItems[0]).IsInitOnly then PropertyAttributes.None else PropertyAttributes.writable,
  -                   EcmaScriptScope.DoTryWrap(Root,FieldInfo(lItems[0]).GetValue(fValue))));
  +    if  (lItems[0].MemberType = MemberTypes.Field)  then
  +      exit new PropertyValue(iif(FieldInfo(lItems[0]).IsInitOnly, PropertyAttributes.None, PropertyAttributes.Writable),
  +                   iif(getPropertyValue, EcmaScriptScope.DoTryWrap(self.Root,FieldInfo(lItems[0]).GetValue(fValue)), nil));
   
       if  (lItems[0].MemberType = MemberTypes.Property)  then
  -      exit  (new PropertyValue(if PropertyInfo(lItems[0]).CanWrite then PropertyAttributes.writable else PropertyAttributes.None,
  -                   if  PropertyInfo(lItems[0]).CanRead  then  EcmaScriptScope.DoTryWrap(Root,PropertyInfo(lItems[0]).GetValue(fValue, []))));
  +      exit new PropertyValue(iif(PropertyInfo(lItems[0]).CanWrite, PropertyAttributes.Writable, PropertyAttributes.None),
  +                   iif(getPropertyValue and PropertyInfo(lItems[0]).CanRead, EcmaScriptScope.DoTryWrap(self.Root,PropertyInfo(lItems[0]).GetValue(fValue, [])), nil));
     end;
   
     if  ((lItems.Count > 0) and (lItems.All(a->a.MemberType = MemberTypes.Method)))  then
  -    exit  (new PropertyValue(PropertyAttributes.None,
  -                   new EcmaScriptObjectWrapper(new Overloads(fValue, lItems.Cast<MethodBase>().ToList), typeOf(Overloads), Root)));
  -
  -  exit  (nil);
  +    exit new PropertyValue(PropertyAttributes.None,
  +                   new EcmaScriptObjectWrapper(new Overloads(fValue, lItems.Cast<MethodBase>().ToList), typeOf(Overloads), Root));
  +
  +  exit nil;
   end;
   
   
  
positive.code:   var lMethods := methods;
  
    for  i: Int32  :=  0  to  length(parameters)-1  do  begin
      with matching objectWrapper := EcmaScriptObjectWrapper(parameters[i]) do begin
        parameters[i] := objectWrapper.Value; // if these were wrapped before, we should unwrap
        continue;
  
negative.code:     class method FindAndCallBestOverload(methods: List<MethodBase>;  root: GlobalObject;  methodName: String;  &self: Object;  parameters: array of Object): Object;
  
      method DefineOwnProperty(aName: String; aValue: PropertyValue; aThrow: Boolean): Boolean; override;
      method GetOwnProperty(name: String;  getPropertyValue: Boolean): PropertyValue; override;
      method Get(aExecutionContext: ExecutionContext; aFlags: Integer; aName: String): Object; override;
      method Put(aExecutionContext: ExecutionContext; aName: String; aValue: Object; aFlags: Integer): Object; override;
      method Construct(context: ExecutionContext; params args: array of Object): Object; override;
  