First attempt at refactoring, stackoverflows for certain ADTs
minimized? =(