decorator pattern added