EitherT for error handling