some refactor
some improve