Proper error handling, tests, and some user-friendliness