improved example, no need for all that custom delegate property stuff