anchor.diff:    i: integer;
   begin
     Result := False;
  -  FileSizeValue := FileSize(Filename);
  -  Log('Queueing track ' + ExtractFilename(Filename) + '...');
  -  SendString('q|' + ExtractFilename(Filename) + '|' +
  -    IntToStr(FileSizeValue));
  -
  -  Reply := ReceiveString();
  -  Log('q reply: ' + Reply);
  -
  -  Result := ProcessReply(Reply, Msg);
  -
  -  if Result then
  -  begin
  -    Log('q successful, sending data...');
  -
  -    SetLength(DataArray, BLOCK_SIZE);
  -    AssignFile(Fin, Filename);
  -
  -    try
  -      FileMode := fmOpenRead;
  -      Reset(Fin, 1);
  -
  -      for i := 0 to (FileSizeValue div BLOCK_SIZE) do
  -      begin
  -        if (FileSizeValue - i * BLOCK_SIZE) > BLOCK_SIZE then
  -          SizeToSend :=  BLOCK_SIZE
  -        else
  -          SizeToSend := FileSizeValue - i * BLOCK_SIZE;
  -
  -        BlockRead(Fin, DataArray[0], SizeToSend);
  -        Socket.SendBuffer(@DataArray[0], SizeToSend);
  -
  -        if Assigned(ProgressCallBack) then
  -          ProgressCallBack(Round((i * BLOCK_SIZE / FileSizeValue) * 100));
  -
  +
  +  //only do this if at least authenticated...
  +  if FState >= hsAuthenticated then
  +  begin
  +    FileSizeValue := FileSize(Filename);
  +    Log('Queueing track ' + ExtractFilename(Filename) + '...');
  +    SendString('q|' + ExtractFilename(Filename) + '|' +
  +      IntToStr(FileSizeValue));
  +
  +    Reply := ReceiveString();
  +    Log('q reply: ' + Reply);
  +
  +    Result := ProcessReply(Reply, Msg);
  +
  +    if Result then
  +    begin
  +      Log('q successful, sending data...');
  +
  +      SetLength(DataArray, BLOCK_SIZE);
  +      AssignFile(Fin, Filename);
  +
  +      try
  +        FileMode := fmOpenRead;
  +        Reset(Fin, 1);
  +
  +        for i := 0 to (FileSizeValue div BLOCK_SIZE) do
  +        begin
  +          if (FileSizeValue - i * BLOCK_SIZE) > BLOCK_SIZE then
  +            SizeToSend :=  BLOCK_SIZE
  +          else
  +            SizeToSend := FileSizeValue - i * BLOCK_SIZE;
  +
  +          BlockRead(Fin, DataArray[0], SizeToSend);
  +          Socket.SendBuffer(@DataArray[0], SizeToSend);
  +
  +          if Assigned(ProgressCallBack) then
  +            ProgressCallBack(Round((i * BLOCK_SIZE / FileSizeValue) * 100));
  +
  +        end;
  +
  +      finally
  +        CloseFile(fin);
         end;
   
  -    finally
  -      CloseFile(fin);
  -    end;
  -
  -    SetLength(DataArray, 0);
  -
  -    Reply := ReceiveString();
  -    Log('q data send reply: ' + Reply);
  -
  -    Result := ProcessReply(Reply, Msg);
  -    if Result then
  -      FStatusMessage := 'Queued.';
  -  end
  -  else
  -  begin
  -    Log('q Failed');
  -    FStatusMessage := 'Error queueing track. ' + GetHGDCErrorMessage(Msg);
  +      SetLength(DataArray, 0);
  +
  +      Reply := ReceiveString();
  +      Log('q data send reply: ' + Reply);
  +
  +      Result := ProcessReply(Reply, Msg);
  +      if Result then
  +        FStatusMessage := 'Queued.';
  +    end
  +    else
  +    begin
  +      Log('q Failed');
  +      FStatusMessage := 'Error queueing track. ' + GetHGDCErrorMessage(Msg);
  +    end;
     end;
   end;
   
  
positive.code:   Reply, Msg: string;
  begin
    Result := False;
    Log('Crapping on song id ' + IntToStr(id) + '...');
    SendString('vo|' + intToStr(id));
    Reply := ReceiveString();
  
negative.code:   Reply, Msg: string;
  begin
    Result := False;
  
    //only do this if at least authenticated and user is admin...
    if (FState >= hsAuthenticated) and FUserIsAdmin then
    begin
      Log('Pausing...');
      SendString('pause');
  