Improved error handling @todo change data classes to throw the presentation exceptions directly, presentations can catch and alter them if they want to