update generic_magic to use more pre-existing widgets, more DRY and consistent overall