Removed Liskov violations, refactored classes to rely on interfaces