public static Dictionary <PeripheralTreeEntry, IEnumerable <IRegistrationPoint> > GetPeripheralsWithAllRegistrationPoints(this Machine machine) { var result = new Dictionary <PeripheralTreeEntry, IEnumerable <IRegistrationPoint> >(); var peripheralEntries = machine.GetRegisteredPeripherals().ToArray(); foreach (var entryList in peripheralEntries.OrderBy(x => x.Name).GroupBy(x => x.Peripheral)) { var uniqueEntryList = entryList.DistinctBy(x => x.RegistrationPoint).ToArray(); var entry = uniqueEntryList.FirstOrDefault(); if (entry != null) { result.Add(entry, uniqueEntryList.Select(x => x.RegistrationPoint).ToList()); } } return(result); }