optimised error handling