use cached_property instead of internal property
reworked package structure