oo refactor