Added input, improved pretty much everything