lots of functionality additions