a lot of work on gui