refactored once again to core component