refactor: added param to eliminate and place
refactoring: I should have thought this through first
refactoring: added superclass and ADT