private void SetMaxDownloads(int max)
        {
            if (max < 0)
            {
                throw new ArgumentOutOfRangeException(Catalog.GetString
                                                          ("Maximum number of concurrent downloads cannot be less than 0."));
            }

            int          delta       = 0;
            int          lastRunning = -1;
            DownloadInfo dif         = null;

            lock (download_queue.SyncRoot)
            {
                lock (tsm.SyncRoot)
                {
                    if (tsm.MaximumDownloads == max)
                    {
                        return;
                    }

                    tsm.MaximumDownloads = max;

                    if (tsm.CurrentDownloads > tsm.MaximumDownloads)
                    {
                        delta = tsm.CurrentDownloads - tsm.MaximumDownloads;
                    }

                    lastRunning = download_queue.IndexOfLastRunning();

                    for (int i = 0; i < delta && lastRunning >= 0; ++i, --lastRunning)
                    {
                        dif = download_queue [lastRunning];
                        lock (dif.SyncRoot)
                        {
                            if (dif.State == DownloadState.Running)
                            {
                                dif.State = DownloadState.Queued;
                            }
                        }
                    }
                }
            }
        }