refactor component interface