adding a bunch of functionality