Added a observer pattern.
Used interface to remove dependency.
Added a memento pattern.