Need to figure out how to implement all the different types...