a lot of functionality added