add @cached_property