added Decorator pattern