adding a lot of functionality