listener can be controller itself