better exception, and examples