abstract component refactoring