fully implement readonly for properties