some refactoring and property update method