lesson 8 - listeners and events: using interfaces to cleanly separate components