adds 90% of functionality