reimpl cachedproperty