Refactored all classes to avoid as much coupling as I could