[wip] refactor with components