composite algo