much rework such refactor