base functionality with gui