change icomponent to abstract component