some refactor, always dont work