don't require listener