Mostly implemented; working on tests still