Hi,
I've attached a revised patch.
Band plans (chirp/bandplan_*.py) contain some information to help with maintenance (source URL, version) and after that they are basically flat lists of Band instances. Band instances can suggest modes, tuning steps, tones, duplex offsets, etc. You can reuse one band plan in another using the + operator (eg. bandplan_na imports bandplan_iaru_r2)
chirp/bandplan.py defines the Band class and the BandTree class. These are distinct because the same Band may be in multiple BandTrees. A BandTree is just an optimised way of applying properties of wider bands to sub bands within them, as implemented in the search() function.
chirpui/bandplans.py handles all of the band plans on behalf of the user interface. When you add a band plan you just create bandplan_whatever.py and then add it to this file.
chirpui/mainapp.py has been modified to make channel defaults selection a pop up with a single select drop down (populated from chirpui/bandplans.py). To simplify conflict resolution I've flipped from multiple selection to single selection. I figure that if you go from adding amateur channels to adding marine channels you can select a different band plan when you start on the marine channels.
Users won't notice any immediate change except that the default (North America) now has some HF band defaults (eg. AM mode for 14.29MHz)