huge overhaul. code was getting bad quickly, so I'm switching to an OO paradigm