anchor.diff:    mVirtualFieldDefs, mVirtualDataSetInterfaces;
   
   type
  +
  +  { TBooleanDatumKey }
  +
  +  TBooleanDatumKey = class(IVDDatumKey)
  +  strict private
  +    FValue : boolean;
  +  public
  +    constructor Create (aValue : boolean);
  +
  +    procedure Assign(aSource : TObject);
  +    function AsString : string;
  +
  +    property Value : boolean read FValue write FValue;
  +  end;
  +
     { TBooleanDatum }
   
     TBooleanDatum = class ({$IFNDEF FPC}TJavaInterfacedObject, {$ENDIF}IVDDatum)
     strict private
       const FLD_VALUE = 'VALUE';
     strict private
  -    FValue : boolean;
  +    FKey : TBooleanDatumKey;
     public
       constructor Create(aValue : boolean);
  +    destructor Destroy; override;
  +
       function GetDatumKey : IVDDatumKey;
   
       class procedure FillVirtualFieldDefs (aFieldDefs : TVirtualFieldDefs; aPrefix : String);
       class function GetKeyField : String;
       function GetPropertyByFieldName(aFieldName : String) : Variant;
  +
  +    property Key : TBooleanDatumKey read FKey;
     end;
   
     { TBooleanDataProvider }
  
positive.code: 
  function TBooleanDatum.GetPropertyByFieldName(aFieldName: String): Variant;
  begin
    Result := BoolToStr(FValue, true);
  end;
  
  end.
  
negative.code:     function Count : integer;
      function GetDatum(aIndex : integer) : IVDDatum;
      function FindDatumByKey (aKey : IVDDatumKey) : IVDDatum;
      function FindDatumByStringKey (aStringKey : string): IVDDatum;
    end;
  
  implementation
  
  uses
    SysUtils;
  
  { TBooleanDatumKey }
  
  constructor TBooleanDatumKey.Create(aValue: boolean);
  begin
    FValue := aValue;
  end;
  
  procedure TBooleanDatumKey.Assign(aSource: TObject);
  begin
    FValue:= (aSource as TBooleanDatumKey).FValue;
  end;
  
  function TBooleanDatumKey.AsString: string;
  begin
    Result := BoolToStr(FValue, true);
  end;
  
  { TBooleanDataProvider }
  
  