add composite design pattern