anchor.diff:      FStream.LoadFromStream(Stream);
   end;
   
  -constructor TDataStream.Create(const S: string);
  -var
  -  F: TStringStream;
  -begin
  -  F := TStringStream.Create(S);
  +class function TDataStream.New(Stream: TStream): IDataStream;
  +begin
  +  Result := Create(Stream);
  +end;
  +
  +class function TDataStream.New(const S: string): IDataStream;
  +var
  +  M: TStringStream;
  +begin
  +  M := TStringStream.Create(S);
     try
  -    Create(F);
  +    Result := New(M);
     finally
  -    F.Free;
  -  end;
  -end;
  -
  -class function TDataStream.New(Stream: TStream): IDataStream;
  -begin
  -  Result := Create(Stream);
  -end;
  -
  -class function TDataStream.New(const S: string): IDataStream;
  -begin
  -  Result := Create(S);
  +    M.Free;
  +  end;
  +end;
  +
  +class function TDataStream.New(const S: IAdapter<string>): IDataStream;
  +begin
  +  Result := New(S.Value);
   end;
   
   class function TDataStream.New(Strings: TStrings): IDataStream;
   var
  -  Buf: TMemoryStream;
  -begin
  -  Buf := TMemoryStream.Create;
  +  M: TMemoryStream;
  +begin
  +  M := TMemoryStream.Create;
     try
  -    Strings.SaveToStream(Buf);
  -    Result := New(Buf);
  +    Strings.SaveToStream(M);
  +    Result := New(M);
     finally
  -    Buf.Free;
  +    M.Free;
     end;
   end;
   
  
positive.code:     FStream: TMemoryStream;
    public
      constructor Create(Stream: TStream); overload;
      constructor Create(const S: string); overload;
      class function New(Stream: TStream): IDataStream; overload;
      class function New(const S: string): IDataStream; overload;
      class function New(Strings: TStrings): IDataStream; overload;
      class function New: IDataStream; overload;
      destructor Destroy; override;
  
negative.code: 
  uses
    Classes, SysUtils, DB, Variants,
    James.Core.Base,
    James.Data.Base;
  
  type
  