some refactory