this is done and should be merged, then branched into oop