begin to refactor ui into a subclassable superclass