some refactor v2