basic functions all laid out, implement missing TODOs