this is a fine abstraction (except for the comments below) - have you updated listen to use the same code?