refactor some attributes and exposed them as properties