refactoring to updated OOP knowledge nearly complete