throw IllegalArgumentException on wrong usage
better error message