add preventChange option to listen()