add composite pattern