Refactoring core component abstraction stuff