using decoration to add new behaviors