public async Task <IList <IPackageInfo> > CheckForUpdates(IList <IPackageInfo> packages, IUpdateCheckingConfig config)
        {
            var result = new List <IPackageInfo>();

            foreach (var package in packages)
            {
                var packageId      = package.PackageId;
                var currentVersion = new Version(package.Version);

                var availableVersions = await _nuGetClient.GetPackageVersions(packageId);

                if (availableVersions == null || !availableVersions.Any())
                {
                    availableVersions = await _proGetClient.GetPackageVersions(packageId);
                }

                var versions = availableVersions.Select(v => new Version(v.Version)).ToList();

                if (config.IncludePrereleaseVersions)
                {
                    versions = versions
                               .Where(v => !string.IsNullOrWhiteSpace(v.Prerelease))
                               .ToList();
                }

                if (!config.IncludePrereleaseVersions)
                {
                    versions = versions
                               .Where(v => string.IsNullOrWhiteSpace(v.Prerelease))
                               .ToList();
                }

                if (!config.UpdateMajorVersions)
                {
                    versions = versions
                               .Where(v => v.Major <= currentVersion.Major)
                               .ToList();
                }

                if (!versions.Any())
                {
                    return(new List <IPackageInfo>());
                }

                var versionComparer = new VersionComparer();

                var sortedByVersion = versions
                                      .OrderByDescending(c => c, versionComparer)
                                      .ToList();

                var latestNeededVersion = sortedByVersion.FirstOrDefault();

                var versionComparison = versionComparer.Compare(latestNeededVersion, currentVersion);

                if (versionComparison == 1)
                {
                    result.Add(new PackageInfo {
                        PackageId = packageId, Version = latestNeededVersion.OriginalVersion
                    });
                }
            }

            return(result);
        }