built out a bunch of functionality