Some improvements. But now I realized I havent implemented the observer design pattern. Must do.