implemented when_on.  Split it out into a superclass.