Refactored methods and inheritance to make more sense.