switch key listeners to use onFirst