A listener does the trick IMO. The user can really decide what to do based on metadata