heavy refactoring, splitting CPU into sub units