adding component factory (WIP)