add composite patern