implement add-component feature