Nicer error handling, somewhat complete user apis