fill in a bunch of functionality