re-engineer GUI