logic is complete - fixed some bugs - still need to implement the
observerpattern