anchor.diff:  
   { TmCSVBuilder }
   
  -procedure TmCSVBuilder.CheckFileStream;
  +function TmCSVBuilder.CheckFileStream : TStream;
   begin
  -  if not Assigned(FFilestream) then
  +  if Assigned(FExtStream) then
  +    Result := FExtStream
  +  else if Assigned(FOwnedFileStream) then
  +    Result := FOwnedFileStream
  +  else
       raise Exception.Create('Missing file stream. Call StartWrite before.');
   end;
   
  
positive.code:     property LineEnding: String read FLineEnding write FLineEnding;
      property FileName: String read FFilename write FFilename;
      property UTF8: Boolean read FUTF8 write FUTF8;
    end;
  
  implementation
  
negative.code: procedure TmCSVBuilder.AppendRow;
  var
    s: RawByteString;
    fs : TStream;
  begin
    fs := CheckFileStream;
    FCurrentRow:= FCurrentRow + sLineBreak;
    if FUTF8 then
    begin
      s := UTF8Encode(FCurrentRow);
      fs.Write(s[1], Length(s));
    end
    else
      fs.Write(FCurrentRow[1], Length(FCurrentRow));
    FCurrentRow:= '';
  end;
  
  