|  | @@ -121,7 +121,7 @@ namespace Emby.Server.Implementations.Collections
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private IEnumerable<BoxSet> GetCollections(User user)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            var folder = GetCollectionsFolder(false).Result;
 | 
	
		
			
				|  |  | +            var folder = GetCollectionsFolder(false).GetAwaiter().GetResult();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return folder == null
 | 
	
		
			
				|  |  |                  ? Enumerable.Empty<BoxSet>()
 | 
	
	
		
			
				|  | @@ -316,11 +316,11 @@ namespace Emby.Server.Implementations.Collections
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var results = new Dictionary<Guid, BaseItem>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            var allBoxsets = GetCollections(user).ToList();
 | 
	
		
			
				|  |  | +            var allBoxSets = GetCollections(user).ToList();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              foreach (var item in items)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                if (!(item is ISupportsBoxSetGrouping))
 | 
	
		
			
				|  |  | +                if (item is not ISupportsBoxSetGrouping)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      results[item.Id] = item;
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -328,34 +328,45 @@ namespace Emby.Server.Implementations.Collections
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      var itemId = item.Id;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    var currentBoxSets = allBoxsets
 | 
	
		
			
				|  |  | -                        .Where(i => i.ContainsLinkedChildByItemId(itemId))
 | 
	
		
			
				|  |  | -                        .ToList();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (currentBoxSets.Count > 0)
 | 
	
		
			
				|  |  | +                    var itemIsInBoxSet = false;
 | 
	
		
			
				|  |  | +                    foreach (var boxSet in allBoxSets)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        foreach (var boxset in currentBoxSets)
 | 
	
		
			
				|  |  | +                        if (!boxSet.ContainsLinkedChildByItemId(itemId))
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            results[boxset.Id] = boxset;
 | 
	
		
			
				|  |  | +                            continue;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        itemIsInBoxSet = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        results.TryAdd(boxSet.Id, boxSet);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // skip any item that is in a box set
 | 
	
		
			
				|  |  | +                    if (itemIsInBoxSet)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        continue;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    else
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    var alreadyInResults = false;
 | 
	
		
			
				|  |  | +                    // this is kind of a performance hack because only Video has alternate versions that should be in a box set?
 | 
	
		
			
				|  |  | +                    if (item is Video video)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        var alreadyInResults = false;
 | 
	
		
			
				|  |  | -                        foreach (var child in item.GetMediaSources(true))
 | 
	
		
			
				|  |  | +                        foreach (var childId in video.GetLocalAlternateVersionIds())
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            if (Guid.TryParse(child.Id, out var id) && results.ContainsKey(id))
 | 
	
		
			
				|  |  | +                            if (!results.ContainsKey(childId))
 | 
	
		
			
				|  |  |                              {
 | 
	
		
			
				|  |  | -                                alreadyInResults = true;
 | 
	
		
			
				|  |  | -                                break;
 | 
	
		
			
				|  |  | +                                continue;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                        if (!alreadyInResults)
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            results[item.Id] = item;
 | 
	
		
			
				|  |  | +                            alreadyInResults = true;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    if (!alreadyInResults)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        results[itemId] = item;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 |