components refactoring