Abstract component refactored