adding a ton of new functionality