The library currently assumes that any SoftwareParameter object can only be associated with a SoftwareGroup, i.e. SoftwareGroup contains a list of Software objects and another independent list of SoftwareParameter. However, the dictionary is actually designed to associate any number of SoftwareParameter objects with a particular piece of software when used in the group. Modify SoftwareGroup to instead store pairs of (Software, list(SoftwareParameter)).