if listener is not specified it's impossible to complete setup procedure. throw IllegalArgumentException?