added exception classes for error handling