anchor.diff:              // We do not care for errors here.
               if JunkBytes<MaxJunkBytes then begin
                   // Be sure the tag is only written if we did not reach MaxJunkBytes.
  -                if not Frame.Write(Output) then begin
  +                if (not SimulateActions) and (not Frame.Write(Output)) then begin
                       WriteLn('Error writing frame to cleaned output file.');
  +                end else begin
  +                    if JunkBytes>0 then begin
  +                        WriteLn('Skipped junk data of ',JunkBytes,' bytes in between audio frames.');
  +                        JunkBytes:=0;
  +                    end;
                   end;
               end;
           until JunkBytes=MaxJunkBytes;
   
  -        // If there is more data, and this data is an ID3v1 tag, copy it, too.
  -        Input.Seek(-ID3v1TagSize,soFromEnd);
  -        Tag1:=TID3v1Tag.Create;
  -        Tag1.Read(Input);
  -        Tag1.Write(Output);
  -        Tag1.Free;
  +        if Input.Position<Input.Size then begin
  +           WriteLn('There is too much junk in between audio frames, aborting.');
  +        end;
       end;
   
       Frame.Free;
   
  +    // If there is more data, and this data is an ID3v1 tag, copy it, too.
  +    Input.Seek(-ID3v1TagSize,soFromEnd);
  +    Tag1:=TID3v1Tag.Create;
  +    if Tag1.Read(Input) then begin
  +        Result.HasID3v1Tag:=True;
  +        Write('Found ID3v1 tag at end of file, ');
  +        if CleanFiles then begin
  +            Write('copying.');
  +            if SimulateActions then begin
  +                Write(' [SIMULATION]');
  +            end else begin
  +                Tag1.Write(Output);
  +            end;
  +            WriteLn;
  +        end else begin
  +            WriteLn('skipping.');
  +        end;
  +    end;
  +    Tag1.Free;
  +
       Input.Free;
  -    if CleanFiles then begin
  +    if CleanFiles and (not SimulateActions) then begin
           Output.Free;
           DeleteFile(PChar(FileName));
           RenameFile(FileName+'.cleaned',FileName);
  
positive.code:     WriteLn('mp3TYRE (MP3 TYpe REnamer) version ',GetVersionString);
      WriteLn('(C)opyright 2002-2007 by S. Schuberth <sschuberth_AT_gmail_DOT_com>',#13,#10);
  
      WriteLn('This program currently only supports ID3v1 and ID3v2 tags. Any other tags will');
      WriteLn('be regarded as junk data and removed if cleaning is enabled.',#13,#10);
  
      // In order to detect mp3PRO files, Coding Technologies' Winamp plug-in
      // for mp3PRO playback is required. You may download it at:
  
negative.code: 
      Write('Analyzed files       : ',AnalyzeCount[mftNone]+AnalyzeCount[mftCBR]+AnalyzeCount[mftVBR]+AnalyzeCount[mftProCBR]+AnalyzeCount[mftProVBR]:6);
      WriteLn(' (',AnalyzeCount[mftCBR]:6,', ',AnalyzeCount[mftVBR]:6,', ',AnalyzeCount[mftProCBR]:6,', ',AnalyzeCount[mftProVBR]:6,', ',AnalyzeCount[mftNone]:7,')');
      WriteStatistics(#195+' ID3v2 tag          : ',ID3v2Count);
      WriteStatistics(#195+' Invalid padding    : ',InvalidPadCount);
      WriteStatistics(#195+' Illegal padding    : ',IllegalPadCount);
      WriteStatistics(#195+' WAVE header        : ',WAVECount);
      WriteStatistics(#195+' Junk data          : ',JunkCount);
      WriteStatistics(#192+' ID3v1 tag          : ',ID3v1Count);
  
      WriteStatistics('Processed files      : ',ProcessCount);
      WriteStatistics('Renamed successfully : ',RenameCount);
  