implement basic user interface