added textui, implemented observer pattern + expanded controller