some refactor v3