refactored with getters for readonly properties of constructed objects