add lightweight kvo