major refactor using decorator pattern.  bug fix for functional properties that use functional context (this)