Add lots of new and improved functionality