add decorator pattern