Abandoned the individual listeners in favour of one listener, but multiple commands.  Factoring out the variable that changes means factoring out the command... that was the only part of the code that was different listener to listener.  This is much cleaner.