Use EitherT for error handling