custom exceptions should implement StandardError