simplified by 1) removing component caching (not so usefull after all) and 2) executing any function reference in property when getting property not when setting