[IMP] Code refactoring: split to components