Refactored validation stuff into a separate module
Removed name parameter from cached_property
Removed already done TODO