decorate single responsibility