Added a generic selection method.
Major rewrite to embrace DRY
Migrated functionality out of other projects

Migrated the button controls out of the six packages that duplicated
the functionality they possessed.