slightly cleaner error throwing and more ;