We use Groups for our bundles. Users regularly want to upgrade from one or multiple of the contained items to the bundle. This means the system would need to see which items the user has, which Group contains some or all of these, and provide an upsell method to a suitable bundle. Once the transaction clears, a deposit of the bundle with a surrender requirement for the items upgraded from should be deposited. Similarly, a paid full version update from a plugin or bundle to its newer version would work the same way – the upgrade is offered only to users who have an eligible license, upon payment, the newer version is deposited with a surrender requirement for the old version.
