filling out a lot of functionality