added Composite Pattern