add components and control promises