Revert "Revert "refactor 2""

This reverts commit e969cb095b0036a265ad2512d0162fd448957260.