refactoring to have better exception (limit either), so to have a simplest API